Spring 을 다루다 보면 자주 등장하는 단어가 있다.

→ 트랜잭션은 프록시 기반으로 동작하기 때문에 자기 참조에 주의해야 한다.

프록시를 안거치면 @Async 가 바로실행이 안된다.

프록시가 캐시를 감싸지 않아서 @Cacheable 이 호출마다 동작하고있네

이와 같이 다양한 어노테이션의 핵심 동작 원리에는 모두 “프록시” 가 등장한다.

프록시(Proxy) 란 무엇이며, 이것이 Spring 에서 어떻게 구성되고 동작하는지 알아보자

📌 프록시(Proxy)란?

프록시란 대리 객체를 뜻한다. 즉, 실제 객체(Target) 를 직접 호출하지 않고, 그 앞단에 서서 호출을 가로채거나, 부가 기능을 수행한 후 위임하는 객체다.

간단히 말하면 ..

💬 프록시는 실제 객체를 대신 호출하면서, 호출 전후로 부가 기능(트랜잭션, 로깅, 보안 등) 을 주입하는 중간 계층이다.

Spring은 Bean 을 생성 할 때, 특정 어노테이션(@Transactional, @Async, @Cacheble 등) 이 붙어있으면 실제 객체(Target) 앞에 프록시(Proxy) 를 하나 더 만든다.

Client → [Proxy] → Target

이 Proxy 가 호출을 대신 받고, 전/후 처리 로직(트랜잭션 시작, 캐시 조회, 비동기 실행 등)을 수행한 뒤 마지막에 실제 객체를 호출한다.


❓Spring은 어떻게 프록시를 만들까 ?

Spring 은 AOP 기반의 프록시 자동 생성기를 가지고 있다. 컨테이너가 Bean 을 초기화 할 때 다음 과정을 수행한다.