TIL

[231122] ResponseDto, RequestDto에 Getter가 필요한 이유

진진리 2023. 11. 22. 20:35
728x90
  • 팀 과제를 진행하던 중에 지난번과 비슷하게 return 직전까지는 데이터가 잘 전달되다가 return 이후에 제대로 원하는 값을 반환받지 못하는 문제와 마주하게 되었다.
  • 팀원들과 계속 고민하면서 문제 원인을 찾지 못했는데 문뜩 지난번에 마주햇던 오류가 생각이 났다.

https://jinjinjincode.tistory.com/230

 

[231115] HttpMediaTypeNotAcceptableException 에러 해결

Spring 숙련주차 개인과제를 하던 중 로그인, 회원가입, 할일카드 기능을 만든 후에 댓글 관련 기능(댓글 생성 기능)을 개발하기 시작하면서 에러를 마주하게 되었다. 이전에 만들었던 할일카드

jinjinjincode.tistory.com

 

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 필요 !

참고

https://velog.io/@heeto/Spring-Response-Request-Dto%EC%97%90%EB%8A%94-Getter%EA%B0%80-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%A0%EA%B9%8C