본문 바로가기
카테고리 없음

[HearHere]DTO를 쓰는 이유

by 순원이 2023. 7. 13.

문제인식 과정

  • 좋아요 누른 포스트 조회 API 테스트 도중
  • postman과 디버깅을 통해 스프링 컨텍스트에서 유저를 찾아오고, 유저의 heartList까지 값이 들어있는 것을 확인하였으나 heartList로 postlist를 만드는 과정에서 null 값임을 확인

문제해결 및 공부 과정 요약

https://velog.io/@neity16/4-스프링-부트와-JPA-활용-7-API-개발-고급-1-지연로딩-조회-성능-최적화

  • 하이버네이트에서는 Lazy Loading으로 설정된 연관관계를 가진 객체에 대해서는,필드가 모두 Null로 설정된 프록시 객체를 반환
  • 프록시를 먼저 알아야겠다. 프록시가 무엇이지?
  • 프록시는. 값(Id값 제외)을 사용해야지 실제값을 반환해주구나.
  • 그리하여, DTO를 사용한다

프록시 객체란

  • 개념

대신하여 뭔가를 수행하는 권한 자체 또는 그 권한을 받은 주체라고 생각하면 된다

  • 작동방식

어떠한 클래스(빈)가 AOP 대상이면 원본 클래스 대신 프록시가 감싸진 클래스가 자동으로 만들어져 프록시 클래스가 빈에 등록이 된다. 이렇게 빈에 등록된 프록시 클래스는 원본 클래스가 호출되면 자동으로 바꿔서 사용한다. 이 방식을 통해 자연스럽게 OCP를 만족합니다.

  • 프록시 객체를 쓰는 이유
    • 접근을 제어하고 싶거나, 부가 기능을 추가하고 싶을 때 주로 사용한다.
    • 구체적으로 스프링은 프록시 객체로 어떤 부가 기능을 사용할까?
      • 프록시 객체가 실제 Entity의 연관된 Entity가 필요하지 않을 때, 굳이 연관된 Entity까지 생성하지 않고 Proxy 객체로 대체함으로써 최적화에 도움 = Lazy를 쓸 수 있는 이유