인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

배성환님의 프로필 이미지

작성한 질문수

실전! 스프링 데이터 JPA

네이티브 쿼리

Projection 개념과 데이터 전달과정에 대해 질문 있습니다.

작성

·

28

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

궁금한게 있어서 질문합니다.

Projection관련인데요.

제가 이해하기로는 new 오퍼레이션을 이용해서 dto에 생성자로 데이터를 담는 방식에서 진화한 방식이라고 생각되는데, 그렇게 이해는게 맞는지 궁금합니다.

 

interface로 proejction을 사용하면 get()함수를 통해 데이터를 꺼내오는 방식이고

class를 사용하면 new 오페레이션을 사용하는 방법과 똑같이 생성자를 이용하는거 같은데, 대신 필드의 이름과 엔터티의 이름이 같던가, 같지 않다면 @Query를 이용해 alias로 맞춰주던가 하면 되는걸까요??

 

또한, 이렇게 Projection을 사용해서 데이터를 가져왔을대, interface던 class던 컨트롤러에서 데이터를 프론트로 넘길때 해당 객체를 사용해도 되는건가요? 아니면 따로 또 dto를 만들어서 담은 후에 내보내야 되는건가요??

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 배성환님.

Projection 개념에 대해 궁금하신 점에 대해 설명해 드리겠습니다.

스프링 데이터 JPA의 Projection은 DTO를 반환하기 위한 방법 중 하나로, 여러 필드 중 원하는 필드만 선택적으로 가져올 수 있습니다.

  1. Projection 사용 방법:

    • Interface 기반 Projection: 엔티티의 필드 이름과 Projection 인터페이스의 메서드가 일치하면 자동으로 매핑됩니다. 원하는 필드만 추출할 수 있는 장점이 있습니다.
    • Class 기반 Projection: DTO와 마찬가지로 생성자를 이용해 값을 넣습니다. 생성자에서 엔티티의 필드값을 받기 때문에 필드명이 일치하거나, 일부 필드명을 alias를 통해 맞춰야 합니다.
  2. 데이터 전달과정:

    • Projection으로 얻은 객체를 직접 컨트롤러에서 반환하여 프론트엔드로 전송할 수 있습니다. 이 경우, Projection을 생성할 때 지정한 필드만 지원되기 때문에 데이터 손실 없이 필요한 정보만 전달할 수 있습니다. 별도의 DTO를 만들 필요는 없습니다.

프로젝션은 필드 수준에서 세밀한 권한 또는 데이터 노출을 제어할 수 있어 효율적입니다.

관련 내용에 대해 강화된 이해를 위해 다음 질문과 답변 링크를 참고하실 수 있습니다:
- DTO조회와 PROJECTION의 차이가 궁금합니다 ! - 프로젝션과 DTO의 차이점과 사용 방법에 대해 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.