return new CreateMemberResponse(id); 필요성
@RestController
@RequiredArgsConstructor
public class MemberApiController {
..
@PostMapping("/api/v1/members")
public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member) {
Long id = memberService.join(member);
return new CreateMemberResponse(id);
}
@Data
static class CreateMemberResponse {
private Long id;
public CreateMemberResponse(Long id) {
this.id = id;
}
}
일 때,
memberService.join(member); 의 반환 값이
엔티티가 아니고 단순히 Long id인 값인데도
return id; 로 안하고
CreateMemberResponse 클래스를 만들어
return new CreateMemberResponse(id);
로 하는 이유는 뭔가요 ?
처음에는
Long id = memberService.join(member);
return id; 로 했다가
누군가가 inline으로 합쳐버려서
return memberService.join(member);
으로 만들어 버리면
memberService.join의 반환 값이 수정될 때 컴파일이 안뜨고, api에서 스펙이 바뀌어 오류가 생길 가능성이 있어서
컴파일 단계에서 막아버릴려고
CreateMemberResponse 클래스를 만들어
return new CreateMemberResponse(id);
를 해주는 것일까 생각도 들었는데,
inline으로 합쳐버리고 memberService.join의 반환값이 바뀌어도 어차피
@PostMapping("/api/v1/members")
public Long saveMemberV1(@RequestBody @Valid Member member) {
Long id = memberService.join(member);
return id;
}
인 상태에서 inline하는 거니까
public Long saveMemberV1(..) {..} 에서
return값이 Long타입이 아니게 바뀌면 컴파일 뜰 것 같아서 그것도 아닌가 싶기도 하고 ..
유지보수할 때, 추적하기 쉬우려고 그러는 건가 싶기도 하고 ..
갑자기 든 생각인데,
일반적으로는 단순히 id만 반환할 일이 없으니 일반적인 케이스를 생각해 만드신 건가 싶기도 하고..
이 케이스만 예외적으로 Long으로 써도 가능한 건지
궁금합니다 :]
답변 1
4
안녕하세요. relate16님
단순히 long으로 반환하게 되면 클라이언트는 JSON을 받는 것이 아니라 HTTP Body에 단순히 숫자 하나를 받게 됩니다.
CreateMemberResponse로 반환: {"id":10}
Long으로 반환: 10
클라이언트와 서버간에 약속을 하는 것이기 때문에 단순히 Long으로 반환해도 상관은 없지만, HTTP API에서는 데이터 응답을 JSON으로 받는다고 서로 약속을 하기 때문에 JSON으로 내려주는 것이 좋습니다.
감사합니다.
강의 관련 외 질문입니다.
0
66
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
0
89
1
BeanCreationException
0
87
3
Update 후 UpdateMemberResponse 매핑할 때
0
47
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
99
2
페이징 + 검색조건 관련해서 질문드립니다.
0
70
1
Query Dsl Q파일 질문입니다.
0
82
1
루트 쿼리라는것은
0
58
1
메서드를 분리하는 기준
0
63
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
110
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
84
2
fetch join과 영속화와 OSIV의 관계
0
85
2
Distinct 사용 전 결과에 대한 의문
0
113
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
56
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
78
2
dto 필드 속 엔티티 여부
0
60
1
뷰템플릿 사용 시
0
76
2
Result 클래스 관련 질문
0
56
1
@PostConstruct 프록시 관련 질문드립니다
0
86
1
DTO 대신 Form 사용은 안되나요?
0
135
1
OSIV ON 상태일 때
0
96
1
fetch join VS fetch join 페이징 궁금증
0
180
2
양방향 연관관계 알아보는 법?
0
105
1
16강 17강 간단 정리 이게 맞을까요 ?
0
165
2





