| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 스프링
- kibana
- java
- spring aop
- 백엔드
- 엘라스틱서치
- 인덱스
- PM
- elasticsearch
- 개발자
- 프론트엔드
- 프로젝트관리
- 오라클
- db
- frontend
- 데이터베이스
- 검색
- 자바
- redmine
- spring
- Si
- AOP
- PreparedStatement
- 비전공개발자
- It
- Database
- 일감관리
- 이슈관리
- 레드마인
- 웹프론트
- Today
- Total
목록It (21)
리타의 저장소
Class 안에서 this.메서드() 호출하는 경우 AOP 작동할까?Q. 아래와 같은 코드에서, 과연 @Transactional이 제대로 동작할까?? @Component@RequiredArgsConstructorpublic class OrderApplication { private final OrderService orderService; private final OrderResultPublisher publisher; public void orderGenerateWithPublish(OrderVo orderVo) { OrderMessage message = this.generateOrder(orderVo); // 비동기 Queue 발..
CGLIB Proxy CGLIB Proxy는 JDK Dynamic Proxy와 다르게 바이트코드 조작(ASM 기반)으로 대상 클래스의 서브클래스를 만들어 프록시를 구현한다.JDK Proxy가 원본 객체가 구현한 Interface에 대한 Proxy를 만들어준다면, CGLIB Proxy는 직접 Class를 상속받아서 Override하는 방식으로 Proxy를 만들어주게 된다. 그래서 interface가 없는 클래스라도 Proxy를 생성할 수 있다.예를들어, ProxyService 라는 Interface를 구현한 ProxyServiceImpl이 있다면, CGLIB로 Proxy를 구현할 떄 ProxyService라는 interface가 아닌 구체 구현 클래스를 상속받는 식으로 구현된다. public class P..
JDK Dynamic ProxyJDK Dynamic Proxy는 Interface가 존재하는 경우에만 Proxy를 만들 수 있다. 객체 자체가 아닌 Interface와 Java Reflection API를 이용해서 Proxy 객체를 생성하는 것이다. Interface에 대한 검증 로직을 거친 후, ProxyFactory에 의해 실제 구현하려는 Interface와 InvocationHandler를 포함해 Proxy 객체를 생성한다.JDK Dynamic Proxy 의 경우,Proxy.newProxyInstance(...) API를 통해 프록시를 생성하고, 여기서 핵심은 InvocationHandler 그리고 Proxy이다. Java Platform SE 8 docs.oracle.com Java 공식문서에서..
주요 개념Spring AOP에서 자주 사용되는 개념들에 대해 정리해보고자 한다. Spring AOP 주요 개념 요약AOP는 "공통 기능(Aspect)을 핵심 로직과 분리해서, 실행 지점(Join Point)에 조건(Pointcut)에 따라 동작(Advice)을 위빙(Weaving)하는 기법"이다.용어의미설명Aspect관점공통 기능을 모듈화한 것 (ex: 로깅, 트랜잭션 등)Join Point실행 지점Advice가 실행될 수 있는 위치 (ex: 메서드 호출, 예외 발생 등)Advice실질 로직언제, 어떤 공통 로직을 실행할지 정의Pointcut실행 조건어떤 Join Point에 Advice를 적용할지 정의Weaving삽입 행위Advice를 실제 코드에 적용하는 과정Target Object실제 객체AOP 적..
JVM (Java Virtual Machine)이란?Java Virtual Machine.자바 버츄얼 머신. 이름에서도 느낄 수 있듯, JVM은 자바 바이트코드를 운영체제에 맞게 해석하고 실행하는 가상 머신이다.JAVA는 OS에 종속되지 않다는 큰 특징을 갖고 있다. OS에 종속되지 않고 실행되기 위해 OS상에서 JAVA를 실행시키는 머신이 바로 JVM 이라고 생각하면 된다. JAVA로 코드를 짤때를 생각해보자. .java파일들이 생긴다. 이렇게 짜여진 .java 파일들은 컴퓨터가 곧바로 인식하기 어렵다. 그래서 서 컴퓨터가 인식할 수 있도록 '컴파일' 하는 과정을 거쳐줘야한다. 근데 앞서 말한 것 처럼 JAVA의 경우 OS에 종속되지 않는다. JVM을 한번 거치고 컴퓨터에 도달하기 때문에, JAVA는 ..
같이 스터디를 하는 스터디원들과 PreparedStatement에 대해서 이야기를 하다가, 실제 담당하고 있는 서비스에서 PreparedStatement를 사용하냐고 물었을 때 다들 사용하지 않는다고 했다. 대체로 JPA 혹은 Mybatis를 사용중이라 업무를 하면서 마주할일이 거의 없다는 것이었다. 근데, 또 여기서 궁금한게 생겼다. 과연 진짜 그들은 PreparedStatement를 사용하지 않는 것일까? 핵심부터 말하자면JPA, MyBatis 모두 실제 SQL 실행할 때 JDBC API를 쓰고, 그 안에서 PreparedStatement를 사용한다.즉, 직접 pstmt.setInt(1, xxx) 라고 쓰지 않아도 프레임워크가 내부에서 알아서 PreparedStatement를 만들고 파라미터를 바인..
SQLP를 공부하다 보니, Database 성능 튜닝의 3대 요소 중 하나에 DB Call 최소화가 있었다. 데이터베이스 Call 최소화 Parse Call Excute Call Fetch Call 이와 관련해서 java단에서 Array Processing 기법으로 처리한다는 어떤 blog의 글을 읽고, 스터디원들에게 공유를 했었는데, DB call 관련해서 개발자의 입장에서 생각해봤을 때 어떤식으로 코드에서 사용될 수 있을 것 같냐는 추가 물음에 조금 더 생각을 해보기로 했다. DB Call 최소화 결과적으로 Java에서도 DB 퍼포먼스 최적화에 대하여 고민을 할 수 밖에 없다.Call을 줄인다는 관점에서..용어뜻성능에 미치는 영향최소화의 의미Parse callSQL 문장..
Spring에서 PreparedStatement 사용 방식1. 직접 사용 (기본 JDBC 스타일)DataSource에서 커넥션을 받아와서 직접 PreparedStatement를 만들어서 사용 @Autowiredprivate DataSource dataSource;public User findUserById(int id) throws SQLException { String sql = "SELECT * FROM users WHERE id = ?"; try (Connection conn = dataSource.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { // .setInt(int pa..
신기한 점 발견앞서 Java에서 DB 커넥션을 얻는 방법 #1에서 DriverManager & DataSource 방식에 대해서 알아보다보니, 실제 소스에 Oracle 커넥션 맺는 부분이 당연히 DataSource 방식일거라 생각했는데 아니었다. PostgreDbcp와 다르게 Oracle의 ConnectionDbcp는 .getConnection() 메서드를 까보니, DriverManager 방식으로 커넥션을 생성 중이더라. 분명 DriverManager방식은 실제 운영하는 서비스에서는 잘 안쓰인다고 했는데, 왜 이렇게 쓰인걸까,,,?찾아보니 이건 그냥 DriverManager.getConnection() 방식도 아니었다.소스에서 젤 중요한 부분은 "jdbc:apache:commons:dbcp:...” ..
DataSource vs DriverManager1. PostgreDbcp.getDataSource().getConnection();DataSource를 통해 커넥션을 얻는 방법(DataSource = 커넥션 풀링(Connection Pool) 기반)2. DriverManager.getConnection(url, user, password);DriverManager를 통해 직접 커넥션을 얻는 방법(매번 새로운 커넥션을 만들어서 사용) 차이점 요약구분DataSource 방식DriverManager 방식커넥션 생성 방식미리 만들어진 커넥션 풀에서 "빌려옴"매번 새로운 커넥션을 "직접 생성"성능빠름 (커넥션 재사용)느림 (생성 비용 큼)관리커넥션 풀 관리 기능 (최대/최소 수량, idle 관리 등)관리 기능 ..