service에 dto 전달
안녕하세요!! 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 내부에서 엔티티로 변환하는 방법에는 각각의 장단점이 있습니다.
Controller에서 엔티티로 변환 후 Service로 전달:
- 장점: Service에서 처리해야 할 로직이 감소하고, Service는 비즈니스 로직에 집중할 수 있습니다.
- 단점: Controller가 엔티티를 생성/변환하는 로직을 가지게 되므로, Controller가 상대적으로 무거워질 수 있습니다.
- 장점: Service에서 처리해야 할 로직이 감소하고, Service는 비즈니스 로직에 집중할 수 있습니다.
DTO를 Service로 전달하여 Service에서 변환:
- 장점: Controller는 데이터 전송의 역할만 하며, Service는 엔티티 변환 및 비즈니스 로직을 담당하게 되어 역할이 명확해집니다.
- 단점: Service 레이어의 코드가 복잡해지고, 여러 DTO를 받아들여 변환해야 할 경우 코드의 복잡도가 증가할 수 있습니다.
- 장점: Controller는 데이터 전송의 역할만 하며, Service는 엔티티 변환 및 비즈니스 로직을 담당하게 되어 역할이 명확해집니다.
실무에서는 상황과 팀의 코딩 컨벤션에 따라 방법을 선택하는 경향이 있습니다. 레이어 간의 역할을 명확히 구분하고, 의존성을 최소화하는 구조가 유지되면 효율적인 개발이 가능합니다.
같은 주제에 대해 이해를 돕는 이전 답변들이 있는데, 아래 링크를 참고해 보시면 좋을 것 같습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
강의 관련 외 질문입니다.
0
81
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
1
98
1
BeanCreationException
0
96
3
Update 후 UpdateMemberResponse 매핑할 때
0
57
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
102
2
페이징 + 검색조건 관련해서 질문드립니다.
0
74
1
Query Dsl Q파일 질문입니다.
0
86
1
루트 쿼리라는것은
0
62
1
메서드를 분리하는 기준
0
71
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
116
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
92
2
fetch join과 영속화와 OSIV의 관계
0
90
2
Distinct 사용 전 결과에 대한 의문
0
118
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
63
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
79
2
dto 필드 속 엔티티 여부
0
63
1
뷰템플릿 사용 시
0
82
2
Result 클래스 관련 질문
0
56
1
@PostConstruct 프록시 관련 질문드립니다
0
88
1
DTO 대신 Form 사용은 안되나요?
0
140
1
OSIV ON 상태일 때
0
99
1
fetch join VS fetch join 페이징 궁금증
0
189
2
양방향 연관관계 알아보는 법?
0
110
1
16강 17강 간단 정리 이게 맞을까요 ?
0
168
2





