순서
1. 프록시 패턴
3. 스프링 AOP
4. JPA
✅ 프록시 패턴
- 타겟에 대한 접근 방법을 제어하려는 목적으로 프록시를 사용하는 패턴
➤ 프록시(Proxy)
- 클라이언트가 사용하려고 하는 실제 타겟인 것처럼 위장해서 클라이언트의 요청을 받는 역할
- 클라이언트 입장에서는 겉모양이 똑같이 생겼기 때문에 구분할 필요 X
- 프록시 객체는 타겟 객체의 참조를 가지고 있음

➤ 프록시 패턴 사용 이유
1. 타겟으로부터 응답받은 데이터가 메모리에 있으면, 다음 요청은 타겟까지 보내지 않고 프록시가 응답할 수 있음(캐싱)
2. 객체가 반드시 필요할 때에만 객체를 생성할 수 있음
3. 기존 코드를 변경하지 않고, 새로운 기능을 추가할 수 있음(OCP)
4. 기존 코드가 해야 하는 일만 유지할 수 있음(SRP)
5. 유연한 코드를 만들 수 있음(초기화 지연, 기능 추가, 흐름 제어 등등)
✅ 스프링 AOP (with 프록시)
➤ AOP
- 관점 지향 프로그래밍
- 공통적으로 가지는 부가 기능을 따로 분리하여 관리하는 것

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

✅ JPA (with 프록시)
➤ JPA
- Java에서 클래스와 테이블을 매핑하는 기술 표준으로 사용하는 인터페이스의 모음
- JPA 자체는 그저 인터페이스이기 때문에 구현체가 있어야 함 ex) Hibernate, OpenJPA
- SQL문이 아닌 메소드를 통해 DB 조작 가능하게 해 줌

- JPA는 엔티티가 실제로 사용되기 전까지 DB 조회를 지연할 수 있는 지연로딩 기능을 제공하는데
이때 사용되는 것이 프록시
➤ 지연로딩
- 당장 필요한 데이터만 조회하고, 아직 불필요한 데이터는 프록시를 사용하여 나중에 조회하는 방법
- 만약 아래 테이블에서 id가 1인 직장인의 나이를 조회하고 싶은데
연관관계를 통해 회사이름까지 조회하게 된다면 불필요한 자원의 낭비가 발생한다

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

'개발 공부' 카테고리의 다른 글
[Jar, War] feat. 스프링 (2) | 2023.05.22 |
---|---|
[트랜잭션] feat. 스프링 AOP (0) | 2023.05.22 |
[RestController] feat. ResponseBody (0) | 2023.05.16 |
[메시지 큐] feat. RedHat AMQ, IBM MQ(WMQ) (0) | 2023.05.12 |
[스프링 동작 과정] feat. 컨테이너, MVC (2) | 2023.05.12 |