Backend/SpringBoot 이론 부분

Proxy

Dean83 2025. 9. 30. 11:36

Proxy 는 대리자 라는 뜻을 가지고 있다. 스프링부트의 구조를 간단히 정리해 보면, Controller -> Service -> Repository 및 Entity -> DB 로 요약할 수 있다. Controller 에서는 Service를 인젝션 받고, Service는 Repository를 인젝션 받는 형태이다. 이 중 Service 에서 비즈니스 로직과 DB의 Transaction을 활용하게 되는데, 이때 연관되는것이 Proxy 이다. 

 

Service의 메소드 중 @Transactional 어노테이션이 붙었을 경우, 스프링 컨테이너가 해당 Serivce를 바로 Controller에 인젝션 하지 않는다. 대신, 해당 Service와 동일한 Proxy 객체를 자동으로 동적으로 생성하여, 이를 Controller 에 인젝션을 해준다. 

Controller 입장에선 해당 Service와 동일하게 구성된 Proxy를 주입받았으므로, 그대로 메소드 호출을 통해 작업을 하면 된다. 

 

그러면 왜 Proxy를 쓰는가를 보면, 이는 AOP와 연관되어 있다. Transaction 수행 앞, 뒤로 특정 작업을 할 경우를 고려해서 이렇게 동작을 한다. (AOP 는 https://dean83.tistory.com/315 여기에 정리했다)

 

이를 통해 Transaction 수행 전, 후로 로깅을 하거나 공통 코드를 넣어 둘 수 있다. 

 

정리하자면, @Transactional 이 있는 Service의 경우

Controller -> Proxy -> Service -> Repository 및 Entity -> DB 라고 볼 수 있다. 

 

좀 더 구체적으로 살펴보면, 

Controller -> Proxy -> Transaction Intercepter -> Jpa Transaction Manager 가 트랜잭션 생성을 위해 Entity Manager 생성 -> Entity Manager 가 트랜잭션 시작 -> Service 메소드 호출 -> Entity Manager가 트랜잭션 종료 -> Entity Manager 도 종료됨.

  • Transaction Intercepter 는 Jpa Transaction Manager 를 주입받아, 트랜잭션 작업을 이쪽으로 위임 한다.
  • Jpa Transaction Manager 는 PlatformTransactionManager 인터페이스를 구현한 구현체로, 트랜잭션 단위별로 Entity Manager 를 생성 하여 작업한다.

 

 

 

'Backend > SpringBoot 이론 부분' 카테고리의 다른 글

Filter 및 SecurityFilterChain  (0) 2025.12.15
Spring boot의 요청 처리 흐름  (0) 2025.12.15
SpringBoot 에서 트랜잭션  (0) 2025.10.01
Entity 심화  (0) 2025.09.30
Spring Data JPA  (0) 2025.09.29