본문 바로가기
개발 공부

[프록시 패턴] feat. 스프링 AOP, JPA

by 도됐좋 2023. 5. 18.

 

순서
1. 프록시 패턴
3. 스프링 AOP
4. JPA

✅ 프록시 패턴

- 타겟에 대한 접근 방법을 제어하려는 목적으로 프록시를 사용하는 패턴

 

 프록시(Proxy)

- 클라이언트가 사용하려고 하는 실제 타겟인 것처럼 위장해서 클라이언트의 요청을 받는 역할

- 클라이언트 입장에서는 겉모양이 똑같이 생겼기 때문에 구분할 필요 X

- 프록시 객체는 타겟 객체의 참조를 가지고 있음 

프록시 패턴 사용 이유

  1. 타겟으로부터 응답받은 데이터가 메모리에 있으면, 다음 요청은 타겟까지 보내지 않고 프록시가 응답할 수 있음(캐싱) 

  2. 객체가 반드시 필요할 때에만 객체를 생성할 수 있음

  3. 기존 코드를 변경하지 않고, 새로운 기능을 추가할 수 있음(OCP)

  4. 기존 코드가 해야 하는 일만 유지할 수 있음(SRP)

  5. 유연한 코드를 만들 수 있음(초기화 지연, 기능 추가, 흐름 제어 등등)


✅ 스프링 AOP (with 프록시)

AOP

- 관점 지향 프로그래밍

- 공통적으로 가지는 부가 기능을 따로 분리하여 관리하는 것

AOP 설명

- 스프링은 프록시를 기반으로 AOP를 구현

AOP 프록시


✅ JPA (with 프록시)

JPA

- Java에서 클래스와 테이블을 매핑하는 기술 표준으로 사용하는 인터페이스의 모음

- JPA 자체는 그저 인터페이스이기 때문에 구현체가 있어야 함 ex) Hibernate, OpenJPA

- SQL문이 아닌 메소드를 통해 DB 조작 가능하게 해 줌

JPA 활용 예시

- JPA는 엔티티가 실제로 사용되기 전까지 DB 조회를 지연할 수 있는 지연로딩 기능을 제공하는데

  이때 사용되는 것이 프록시

 

지연로딩

- 당장 필요한 데이터만 조회하고, 아직 불필요한 데이터는 프록시를 사용하여 나중에 조회하는 방법 

- 만약 아래 테이블에서 id가 1인 직장인의 나이를 조회하고 싶은데

  연관관계를 통해 회사이름까지 조회하게 된다면 불필요한 자원의 낭비가 발생한다

- 프록시를 활용하는 지연로딩을 통해 이를 해결