inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

회원 수정 API

update 로직 질문

131

gnstjrdlsla

작성한 질문수 20

0

멤버 업데이트 시

memberService.update(id, request.getName());

으로 작성해 주셨는데

memberService.update(id, request);

와 같이 객체를 통째로 넘기지 않는 이유가 있는 것인가요?

 

위와 같이 객체를 통째로 넘기는 경우 UpdateMemberRequest 클래스를 이너 클래스가 아닌 별도의 클래스로 분리해 줘야 하는 게 맞나요?

java spring spring-boot jpa

답변 1

0

y2gcoder

안녕하세요. gnstjrdlsla님, 공식 서포터즈 y2gcoder입니다.

 

저는 UpdateMemberRequest 는 2가지 이유로 MemberService.update()에 인자로 넘기지 않을 것 같습니다!

  1. request의 모든 파라미터가 필요한 게 아니기 때문입니다. 현재 update 로직에서는 name만 변경하고 있기 때문에 그보다 많은 파라미터를 가진 request를 통째로 넘길 필요가 없습니다. 부수적으로 필요한 파라미터만 넘기는 것이 테스트 코드를 짤 때도 테스트에 필요한 객체를 만들 때 더 쉬웠습니다 🙂

  2. 유지보수 관점에서 request를 바로 넘기지 않는 것이 더 좋을 것 같다고 생각하기 때문입니다. (해당 이유가 본론이라고 생각합니다!) request는 웹 계층에서 요청 파라미터를 받아 매핑한 객체입니다. 이를 서비스 단까지 넘기면 해당 객체는 경우에 따라 서비스 단의 로직까지 여기에 의존할 수도 있습니다(비즈니스의 유효성 검사 등). 비즈니스 단의 로직까지 해당 객체에 의존하게 되면 해당 객체를 수정하려고 할 때마다 두 계층 모두 테스트해야 합니다. 이는 단순히만 따져도 2배로 체크해야 하는 일입니다 🙃 결론을 말씀드리자면 기존에는 웹 -> 비즈니스 간의 단방향 의존성이었다면 웹 계층의 객체를 비즈니스 계층의 객체가 의존하는 순간 웹 <-> 비즈니스 간의 양방향 의존성이 생기게 됩니다. 이는 위에서 말씀드렸던 하나의 예시 이외에도 유지보수 과정에서 예상치 못한 문제를 발생시킬 수 있습니다!

위의 두가지 이유에서 저는 request를 그대로 서비스 로직에 넘기는 것을 권하지 않습니다 🙂

추가로 말씀해주신

위와 같이 객체를 통째로 넘기는 경우 UpdateMemberRequest 클래스를 이너 클래스가 아닌 별도의 클래스로 분리해 줘야 하는 게 맞나요?

는 말씀하신 방향대로 하시는 것을 권합니다! 🙂

 

 

 

감사합니다.

강의 관련 외 질문입니다.

0

81

2

SpringBoot4 + Hibernate7 모듈 등록 방법 공유

1

99

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

190

2

양방향 연관관계 알아보는 법?

0

110

1

16강 17강 간단 정리 이게 맞을까요 ?

0

168

2