| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- Database
- 레드마인
- PM
- AOP
- spring
- 웹프론트
- 스프링
- kibana
- 비전공개발자
- PreparedStatement
- 인덱스
- It
- java
- redmine
- 개발자
- Si
- 일감관리
- 자바
- 검색
- 백엔드
- 이슈관리
- backend
- 프로젝트관리
- 오라클
- db
- elasticsearch
- frontend
- 엘라스틱서치
- 데이터베이스
- spring aop
- Today
- Total
목록java (20)
리타의 저장소
JAVA 레이어에서 DB 레이어 까지 * 여기선 Spring JPA 기준으로 설명해본다.[Java Thread] ↓@Transactional ↓Persistence Context (1차 캐시, Dirty Checking) ↓flush → SQL 상태 반영 ↓JDBC SQL 전송 ↓Oracle Transaction / Undo / Row Lock / Commitsave()를 호출하면 DB에 반영되는 것인가?많은 사람들이 save() 했으니 DB에 반영되었다고 생각할 수 있으나, 실제로는 영속성 컨텍스트에만 반영된 상태일 수 있고, flush가 나가도 commit 전이면 다른 세션에까지 확정되지 않는다.JPA spec은 flush가 AUTO일 때 쿼리 실행 전이나 커밋 시점 등에 반영될 수..
트랜잭션의 특징원자성 - 분해 불가능한 업무 최소 단위일관성격리성영속성Dirty Read다른 트랜잭션에 의해 수정되었으나, 아직 커밋되지 않은 데이터를 읽는 것.변경 후 아직 커밋되지 않은 값을 읽었는데, 만약 변경을 가한 트랜잭션이 최종적으로 롤백된다면 그 값을 읽은 트랜잭션은 비일관된 상태에 놓이게 된다.Non-Repeatable Read한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이 다른 트랜잭션이 값을 수정/삭제 하는 바람에 두 쿼리 결과가 다르게 나타나는 현상을 말함Phantom Read한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유형(phantom) 레코드가 두 번째 쿼리에서 나타나는 현상.트랜잭션 수준 읽기 일관성 ?문장수준 읽기 일관성(Statem..
우리 회사의 GC는 무엇일까?정확하게는, 내가 담당하는 시스템의 GC는 어떤걸 사용하고 있는지 궁금해서, 찾아본 내용들을 정리해보았다. 먼저, 내가 담당하는 시스템은 쇼핑몰 시스템이다. 그 중에서도 특히 제휴연동시스템을 맡고 있고, 이 제휴연동 부분과 연관된 BackOffice, 상담원시스템, 셀러시스템 이렇게를 맡고 있다.오늘 알아볼 것은 특히, 내가 담당하고있는 부분중 젤 큰 파이를 차지하는 ‘제휴연동시스템’의 GC(가비지컬렉션)은 어떤것인가에 대한 내용이다. 제휴 운영이 뭘까?잠깐, 여기서 제휴연동시스템이란 무엇인지 아주 짤막하게 설명하고 넘어가겠다.가끔 인터넷 쇼핑을 하다보면, 쿠팡과 네이버에 동일한 상품명을 가진 상품이 각기 다른 가격으로 판매되는 것을 볼 수 있다.예를 들어, 네이버 스마트스토..
JDK Dynamic Proxy vs CGLIB Proxy1. MethodProxy#invokeSuper() vs Reflection, 성능상의 차이CGLIB Proxy의 경우 MethodProxy 객체를 통해 원본 메서드를 호출하고, 이 내부는 FastClass 매커니즘으로 구현되어있어, Reflection보다 빠르다.JDK Proxy CGLIB Proxy (FastClass)Method.invoke(target, args)methodProxy.invokeSuper(obj, args)리플렉션 기반 → 런타임에 메서드 이름/파라미터를 해석사전 생성된 index 기반 → 배열 lookup 방식느림 (JVM 최적화 전에는 특히)빠름 (정적 인덱스 테이블로 바로 호출) 2. 타입 변환 가능성 차이 예를 들어,..
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 공식문서에서..
JDK Dynamic Proxy & CGLIB Proxy Spring AOP는, 대상 객체가 ‘인터페이스’를 구현했는지 여부에 따라, JDK Dynamic Proxy / CGLIB Proxy 중 하나를 자동 선택하여 AOP를 적용하게 된다. 프록시 방식설명동작 조건사용 기술JDK Dynamic Proxy인터페이스 기반대상 클래스가 인터페이스를 구현하고 있을 때java.lang.reflect.ProxyCGLIB Proxy클래스 기반인터페이스가 없을 때 또는 강제로 사용 시net.sf.cglib (Spring 내부에 내장) 자동 선택한다는 것에 대한 내용을 조금 더 보완하자면, Spring AOP 자체적으로 프록시 생성과 방식 선택의 로직을 내장하고 있다. 즉, 개발자가 모든 걸 일일히 설정하지 않아도, ..
주요 개념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 적..
서비스 호출 전에 로깅, 꼭 AOP에서 해야만 하나? 웹 서비스를 만들다 보면, 모든 요청마다 공통적으로 & 반복해서 처리해야 하는 작업이 생기곤한다.예를들어,로그인 인증 (보안)Request logging (로깅)트랜잭션 관리위와 같은 상황들이 필요한 순간, 매 컨트롤러 마다 반복적으로 코드를 삽입해서 처리하게 되면, 코드 중복 + 유지보수 어려움 이슈가 발생한다. 때문에, 공통 관심사(횡단 관심사)를 분리 해서 처리하는 기술이 필요한데, 이때 등장하는 것이 바로, Filter, Interceptor, AOP 의 개념이다. Interceptor 와 Filter는 Servlet 단위에서 실행된다. 반면에 AOP는 메서드 앞에 Proxy 패턴의 형태로 실행된다. Filter가 가장 밖, 그 안에 Inter..
JVM (Java Virtual Machine)이란?Java Virtual Machine.자바 버츄얼 머신. 이름에서도 느낄 수 있듯, JVM은 자바 바이트코드를 운영체제에 맞게 해석하고 실행하는 가상 머신이다.JAVA는 OS에 종속되지 않다는 큰 특징을 갖고 있다. OS에 종속되지 않고 실행되기 위해 OS상에서 JAVA를 실행시키는 머신이 바로 JVM 이라고 생각하면 된다. JAVA로 코드를 짤때를 생각해보자. .java파일들이 생긴다. 이렇게 짜여진 .java 파일들은 컴퓨터가 곧바로 인식하기 어렵다. 그래서 서 컴퓨터가 인식할 수 있도록 '컴파일' 하는 과정을 거쳐줘야한다. 근데 앞서 말한 것 처럼 JAVA의 경우 OS에 종속되지 않는다. JVM을 한번 거치고 컴퓨터에 도달하기 때문에, JAVA는 ..