dev, staging, production 상황 별로 등록해야 되는 Spring Bean이 다를수가 있습니다.개발 환경에서만 작동해야 되고 실제 운영 환경에서는 작동하면 않될 기능이 있습니다.실습해볼 예제는 Memory를 가져오는 class를 Bean으로 등록하여 호
한가지의 서비스에 트랜잭션이 둘 이상 있을때 어떻게 동작할 것이고 어떻게 처리할것인가 에 대한 개념입니다.해당 사진에서 로직1은 외부 트랜잭션이고 로직2는 내부에서 다시 트랜잭션이 걸린 로직이라고 가정하겠습니다.물리 트랜잭션은 실제 커넥션을 통해 커밋, 롤백하는 일반적
MyTransactional annotaion을 선언해줍니다.RetentionPolicy.CLASS : 컴파일러가 컴파일에서는 어노테이션의 메모리를 가져가지만 실질적으로 런타임시에는 사라지게 됩니다. 런타임시에 사라진다는 것은 리플렉션으로 선언된 어노테이션 데이터를 가
트랜잭션 매니저의 역할은트랜잭션 추상화 (인터페이스) \- 다른 데이터베이스 접근기술(JDBC, JPA)을 사용하더라도 종속적이지 않게 작성하게 해줍니다.리소스 동기화 \- 트랜잭션을 유지할 수 있게 커넥션을 유지해줍니다.스프링은 트랜잭션 동기화 매니저를 제공해줍니
컨테이너가 관리하는 Bean의 라이프사이클은 객체생성 - 의존설정 - 초기화 - 소멸 스프링 컨테이너가 초기화 할 때, 빈 객체를 설정 정보에 따라 생성하고, 의존 관계를 설정합니다. 의존 설정이 완료되면, 빈 객체가 지정한 메소드를 호출해 초기화합니다. 컨테이너가 종
execution(접근제어자? 반환타입 선언타입?메서드이름(파라미터) 예외?)메소드 실행 joinpoint를 매칭합니다.?는 생략할 수 있습니다."\*" 패턴을 지정할 수 있습니다. 위의 해당하는 메소드 정확한 execution 표현식으로는 아래처럼 표현할 수 있습니
@Around : 메소드 호출 전후에 수행, 가장 강력한 Advice이고 Joinpoint 실행 여부 선택, 반환 값 변환, 예외 변환등 모든 기능 사용가능합니다.@Before : Joinpoint 실행 이전에 실행합니다.@AfterReturning: Joinpoint
Joinpoint어드바이스가 적용될 수 있는 위치, 메소드 실행, 생성자 호출, 필드 값 접근, static 메서드 접근 같은 프로그램 실행 중 적용 지점입니다.조인 포인트는 추상적인 개념이고 AOP를 적용할 수 있는 모든 지점이라 생각하면 됩니다.스프링 AOP는 프록
앞서 이야기한 스프링 부트 자동 설정으로 AnnotationAwareAspectJAutoProxyCreator 라는 빈 후처리기가 스프링 빈에 자동으로 등록됩니다.이 빈 후처리기는 스프링 빈으로 등록된 Advisor 들을 자동으로 찾아서 프록시가 필요한 곳에 자동으로
@Bean 이나 컴포넌트 스캔으로 스프링 빈을 등록하면, 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록한다. 이후에는 스프링 컨테이너를 통해 등록한 스프링 빈을 조회해서 사용하면 됩니다.생성: 스프링 빈 대상이 되는 객체를 생성합니다. (@Be
- Pointcut : 어드바이스를 적용할지, 어드바이스를 어디에 적용할지 판단하는 필터링 로직입니다. 주로 클래스와 메소드 이름으로 필터링 합니다. Advice : 프록시가 호출하는 부가 기능입니다. 단순히 프록시 로직이라고 생각하면 됩니다. Advisor : 하
Proxy Pactory란 스프링에서 동적 프록시를 통합해서 편리하게 만들어주는 기능입니다.이전에는 상황에 따라 JDK 동적 프록시를 사용하거나 CGLIB를 사용해야 했지만 Proxy Pactory 하나로 편리하게 동적 프록시를 생성할 수 있게 되었습니다.Proxy P
CGLIB란 바이트 코드를 조작해서 동적으로 클래스를 생성하는 라이브러리입니다.CGLIB를 사용하면 인터페이스가 없어도 구체 클래스만 가지고 동적 프록시를 만들어낼 수 있습니다.ProxyFactory라는 것이 이 기술을 편리하게 사용하게 도와주기 때문에, 너무 깊이있게
JDK 동적 프록시 기술은 개발자가 직접 프록시 클래스를 만들지 않고 런타임에 동적으로 생성되어 사용할 수 있습니다.JDK 동적 프록시는 인터페이스를 기반으로 프록시를 동적으로 만들어준다. 따라서 인터페이스가 필수입니다.클라이언트는 JDK 동적 프록시의 call() 을
JDK 동적 프록시를 이해하기 위해서 자바의 리플렉션에 대해서 알아보겠습니다.리플렉션이란 클래스와 메소드의 메타정보를 동적으로 획득하고 코드를 동적으로 호출할 수 있습니다.callA 메소드와 callB 메소드를 리플렉션을 사용해서 Method의 메타정보로 추상화 하였습
프록시를 사용하면 기존코드를 수정하지 않고 부가기능을 추가할 수 있습니다.프록시를 사용하기 위해서는 Config를 만들어서 Bean을 등록해 의존관계를 설정해주어야 합니다.기존에는 스프링 Bean이 orderControllerV1Impl과 같은 실제 객체를 반환했지만
대리자를 영어로 Proxy라고 하고클라이언트가 서버에게 직접 요청을 하는것이 아니고 프록시를 통해서간접적으로 서버에 요청할 수 있습니다.대표적으로 접근제어, 캐싱, 부가기능 추가, 프록시 체인(프록시가 프록시를 호출할 수 있음) 등이 가능합니다.서버와 프록시는 같은 인
변하지 않는 부분을 템플릿 역할로 두고변하는 부분은 파라미터로 넘겨 실행 가능하게 하는 코드를 콜백이라고 합니다.콜백은 필요에 따라 즉시 실행할 수도 있고 나중에 실행할 수도 있습니다.스프링에서 이름에 \~~Template가 있다면 템플릿 콜백 패턴으로 만들어져 있다고
Thread Local은 동시성 문제를 해결할 수 있다.쓰레드 로컬은 해당 쓰레드만 접근할 수 있는 특별한 저장소를 말한다.동시성 문제는 지역 변수에서는 발생하지 않는다. 지역 변수는 쓰레드마다 각각 다른 메모리 영역이 할당된다.동시성 문제가 발생하는 곳은 같은 인스턴
AES128은 "Advanced Encryption Standard (고급 암호 표준)"의 약자로, 컴퓨터와 통신 시스템에서 데이터를 암호화하고 해독하는 데 사용되는 대표적인 암호화 알고리즘 중 하나입니다. AES는 대칭 키 암호화 알고리즘 중 하나로, 동일한 키를 암
Spring Test, 통합테스트 @SpringBootTest는 애플리케이션 전체를 테스트하는 데 사용되며, @DataJpaTest는 JPA 관련 빈들을 중점으로 테스트하고, @WebMvcTest는 웹 계층을 중점으로 테스트합니다. 이러한 애노테이션을 사용하여 필요한
ThreadPoolExecutor는 ExecutorService 인터페이스를 구현한 클래스이고, 스레드 풀을 관리하고 작업(Task)을 효율적으로 실행할 수 있도록 도와주는 도구입니다.스레드 풀이란, 일정 수의 스레드를 미리 생성해 두고, 필요할 때 작업을 할당하는 구