Spring - DTO, Entity

Y·2022년 8월 3일
0

Spring

목록 보기
2/3
  • DTO를 사용하는 범위에 대해서 공부를 좀 했다. 계층간의 데이터 전달을 맡는다고 해서 Repository<->Service간에도 DTO를 사용하는 줄 알았는데, 그게 아니었다. DTO의 사용 범위에 대해서는 각자 의견이 나뉘는 것 같은데 대개 Repository에서는 사용하지 않는 것을 권장하고, Service단에서 DTO를 Entity로 변경하는 방식을 많이 사용하는 것 같다.

  • 그렇다면 DTO에서 Entity로 어떻게 변환을 하는 거지..? 에 대해서 의문점이 생겨서 검색을 해봤는데, 다른 방법이 있는지는 아직 잘 모르겠지만 내가 찾아본 바로는 DTO에 toEntity 메소드를 작성하는 방법(DTO에는 getter, setter 메소드만 있어야한다고 알고 있었는데 그건 아닌 모양이다...)이 있었다. (지금 다시 찾아보니 ModelMapper을 쓰는 방법도 있는 것 같다. 다만 글들을 찾아보면 오류가 좀 많이 발생하는듯.) toEntity를 쓰려면 DTO에서 Entity를 생성해야되고, Entity 생성을 위해 Builder을 이용하는 코드가 많았다. 그냥 생성자를 쓰는 것과 무슨 차이가 있나 싶어 검색해보니 Builder을 사용하면 인자가 많은 경우에 가독성이 좋아진다고 한다. Builder을 그냥 구현해도 되고 lombok을 쓰는 방법도 있었는데, 다른 코드에서도 lombok 어노테이션을 이용하는 코드가 많아서 lombok을 이용해보기로 했다.

  • Entity에서 DTO로 변환하는 코드도 필요할텐데, 찾아보니 Entity에서 DTO로 변환하는 메소드를 바로 만들어주는 건 의존성이 높아져서 적합하지 않다고 한다. (그래서 그냥 아예 DTO에서 전부 변환해주는 사람들도 있는 것 같고, 변환용 코드를 아예 따로 짜는 사람들도 있는 것 같다. 이건 좀 더 고민해봐야 할 것 같음.)

  • DTO를 받을때는 ~(@RequestBody DTO)형식으로 받으면 되는 것 같다. Json 형식으로 데이터를 받아올때 @RequestBody가 자동으로 객체를 생성해준다고 한다! 그냥 URL로 전달받을때는 @RequestParam을 이용하면 변수 별로 값을 받아올 수 있다고 한다. 반대로 객체 형태 데이터를 HTTP 응답 본문 객체로 변환해서 클라이언트에 전달할때는 @ResponseBody를 사용하면 되는듯. 다만 @RestController을 사용하면 자동으로 @ResponseBody가 적용된다고 한다.

profile
개발자, 학생

0개의 댓글