728x90
- 팀 과제를 진행하던 중에 지난번과 비슷하게 return 직전까지는 데이터가 잘 전달되다가 return 이후에 제대로 원하는 값을 반환받지 못하는 문제와 마주하게 되었다.
- 팀원들과 계속 고민하면서 문제 원인을 찾지 못했는데 문뜩 지난번에 마주햇던 오류가 생각이 났다.
https://jinjinjincode.tistory.com/230
ResponseDto에서 @Getter를 붙여주지 않아서 오류가 발생했었다.
그리고 이번에도 마찬가지로 @Getter를 붙여주니 원하는 값이 제대로 반환되었다!
지난번에는 오류를 해결했다는 것에 정신이 팔려서 막상 왜 ResponseDto, RequestDto에 Getter가 필요한지 그 이유를 알고 넘어가지 않았기 때문에 이번에 정리해보려고 한다.
Spring은 클라이언트로 객체를 전달하는/받는 과정에서 Json 직렬화/역직렬화를 실행하고 이를 도와주는 것은 JSON 라이브러리이며 Jackson이 객체의 필드값을 가져오기 위해서는 @Getter를 이용해야 한다.
JSON 직렬화? 역직렬화?
- JSON 직렬화: Object -> JSON 형식의 문자열
- 객체의 데이터 구조가 유지되면서 텍스트 형태로 변환되어 네트워크를 통해 전송하거나 저장할 수 있음
- ObjectMapper의 writeValueString 메서드
- 대부분의 필드는 private로 접근을 막기 때문에 주로 Getter를 사용
- JSON 역직렬화: JSON 형식의 문자열 -> Object
- ObjectMapper의 readValue 메서드
- 클라이언트가 서버에게 전송한 JSON 데이터를 서버에서 역직렬화하여 처리
- 대부분의 라이브러리들은 객체를 생성하고 초기화하기 위해 기본 생성자가 필요
- 그 외에 Getter나 Setter가 필요 (주로 Getter 사용)
- 클라이언트와 서버 간에 데이터를 교환할 때 주로 사용
정리하자면...
- RequestDto: 기본 생성자 + Getter 필요 !
- ResponseDto: Getter 필요 !
참고
'TIL' 카테고리의 다른 글
[231129] 프록시와 영속성, 스프링 데이터 JPA (0) | 2023.11.29 |
---|---|
[231128] Spring 숙련주차 팀과제, JPA 연관관계 (0) | 2023.11.28 |
[231120] Spring 숙련주차 개인과제 해설 (0) | 2023.11.20 |
[231117] HTTP 요청 ~ 응답의 과정 (Feat. todoapp) (0) | 2023.11.17 |
[231116] Spring 숙련주차 개인과제 (0) | 2023.11.16 |