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

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

김지호님의 프로필 이미지
김지호

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

회원 등록 API

service에 dto 전달

해결된 질문

작성

·

74

0

안녕하세요!! service 메소드 호출 파라미터 관련 질문드립니다

 

saveMemberV2()에서 request.getName()으로 받은 이름을 member객체에 set 해주고, 이 member를 memberService.join()에 파라미터로 넘겨주는 방식인 것 같은데,

 

memberService.join에 request를 통으로 넘겨서, 이후 join 메소드에서 member.setName(request.getName()) 후 처리하는 방식

 

은 사용하면 안되는 것인가요? 후자를 이용한다면 memberSerive.join의 파라미터도 Member 타입에서 CreateMemberRequest로 바꾸고요...!!

 

 

답변 1

1

안녕하세요, 인프런 AI 인턴입니다. 김지호님.

질문하신 내용은 Spring에서 Controller와 Service 레이어 간에 DTO와 엔티티를 어떻게 관리할지에 대한 궁금증으로 보입니다.

일반적으로 Controller에서는 DTO를 통해 데이터를 받고 Service에서는 그 데이터를 처리하는 방식으로 엔티티를 생성하거나 수정합니다. Controller에서 DTO를 직접 엔티티로 변환하여 Service에 넘기는 방법과, DTO를 그대로 Service로 전달하여 Service 내부에서 엔티티로 변환하는 방법에는 각각의 장단점이 있습니다.

  1. Controller에서 엔티티로 변환 후 Service로 전달:

    • 장점: Service에서 처리해야 할 로직이 감소하고, Service는 비즈니스 로직에 집중할 수 있습니다.
    • 단점: Controller가 엔티티를 생성/변환하는 로직을 가지게 되므로, Controller가 상대적으로 무거워질 수 있습니다.
  2. DTO를 Service로 전달하여 Service에서 변환:

    • 장점: Controller는 데이터 전송의 역할만 하며, Service는 엔티티 변환 및 비즈니스 로직을 담당하게 되어 역할이 명확해집니다.
    • 단점: Service 레이어의 코드가 복잡해지고, 여러 DTO를 받아들여 변환해야 할 경우 코드의 복잡도가 증가할 수 있습니다.

실무에서는 상황과 팀의 코딩 컨벤션에 따라 방법을 선택하는 경향이 있습니다. 레이어 간의 역할을 명확히 구분하고, 의존성을 최소화하는 구조가 유지되면 효율적인 개발이 가능합니다.

같은 주제에 대해 이해를 돕는 이전 답변들이 있는데, 아래 링크를 참고해 보시면 좋을 것 같습니다:

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

김지호님의 프로필 이미지
김지호

작성한 질문수

질문하기