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으로 내려주는 것이 좋습니다.
감사합니다.
SpringBoot4 버전 Hibernate5JakartaModule 라이브러리 오류
0
46
1
@JsonIgnore 이후 Internal Server Error가 발생하지 않습니다.
0
78
3
강의 관련 외 질문입니다.
0
110
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
2
130
1
BeanCreationException
0
110
3
Update 후 UpdateMemberResponse 매핑할 때
0
75
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
128
2
페이징 + 검색조건 관련해서 질문드립니다.
0
93
1
Query Dsl Q파일 질문입니다.
0
109
1
루트 쿼리라는것은
0
83
1
메서드를 분리하는 기준
0
92
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
143
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
120
2
fetch join과 영속화와 OSIV의 관계
0
124
2
Distinct 사용 전 결과에 대한 의문
0
140
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
76
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
101
2
dto 필드 속 엔티티 여부
0
83
1
뷰템플릿 사용 시
0
107
2
Result 클래스 관련 질문
0
72
1
@PostConstruct 프록시 관련 질문드립니다
0
105
1
DTO 대신 Form 사용은 안되나요?
0
152
1
OSIV ON 상태일 때
1
111
1
fetch join VS fetch join 페이징 궁금증
0
215
2





