woowacourse / tecoble-comments

0 stars 0 forks source link

tecoble/post/2020-08-31-dto-vs-entity/ #24

Open utterances-bot opened 3 years ago

utterances-bot commented 3 years ago

요청과 응답으로 엔티티(Entity) 대신 DTO를 사용하자

https://woowacourse.github.io/tecoble/post/2020-08-31-dto-vs-entity/

develop-sell commented 3 years ago

안녕하세요~ 마침 딱 설명이 필요했던 부분인데 좋은 정보 감사합니다! 질문이 하나 있는데, 그럼 entity에서 dto로, 또 dto에서 entity로 변환하는 메소드는 보통 어떻게 구현하나요? 자료를 찾다보니 entity 파일 안에 entityToDTO 메소드를, dto 파일안에 dtoToEntity 메소드를 짜서 구현하는 경우도 있고, 하나는 convert라는 디렉토리를 만들어서 그 안에 Userconvert 파일을 만들어서 하는 경우도 있던데 어떤 경우가 컨벤션인지 궁금합니다!

egoomoy commented 2 years ago

좋은 글 작성해주셔서 감사합니다. 저도 윗분과 마찬가지로, toDto, toEntity 메소드는 어떻게 작성하시는 지 궁금합니다.

HamBP commented 1 year ago

작성자는 아니지만 윗 분들에 대한 답변입니다. 두 가지 방법이 있습니다.

  1. mapper 클래스를 두고 변환하는 방법이 있습니다.
  2. (클린 아키텍처 기준) DTO 파일 안에 toEntity, fromEntity를 만들면 됩니다. 2번에 대한 이유는 의존성을 한 방향으로 하기 위함입니다.(도메인 레이어이 더 고수준) 별개 파일에서 toEntity, toDto를 구현할 경우 Entity도 Dto를 의존하고 Dto도 Entity를 의존하는 순환 사이클이 생깁니다. 다만 클린 아키텍처가 정말 클린한가?에 대한 고민이 추가로 필요합니다.
egoomoy commented 1 year ago

의견 감사합니다. HamBP 님 말씀대로 6월 이후에 mapstut를 통해서 mapper를 자동 생성해서 사용하고 있습니다. 순환사이클의 문제는 entitiytoItem(botMessage, new CycleAvoidingMappingContext()); 이런식으로 해결하고 있는데요. 아직도 맞는 방향인지에 대한 의문은 있습니다.
클린아키텍처가 정말 클린한가라는 의견에 붙여서 혹시 표준으로 사용할 만한 가이드가 있으신지 궁금합니다.

다시한번 의견 감사합니다. 좋은하루되세요.

develop-sell commented 1 year ago

@egoomoy mapstut -> mapstruct 가 맞나요?

맞다면 아래 두 url 참고하시면 좋을 것 같네요 https://meetup.toast.com/posts/213 https://www.skyer9.pe.kr/wordpress/?p=1603

그리고 위 분이 말씀하신 순환 사이클은 DTO 변환을 직접 구현할 때를 말씀하신 것 같아요(mapper 사용 말고) entity 레이어가 더 고수준이기에 Entity가 DTO에 의존하는 것이 좋지 않다고 하신 것 같네요. 그래서 DTO 파일에 DTO-> Entity , Entity->DTO 변환 함수를 구현하는 것이 좋은 방법입니다. 아래 url도 한번 읽어보시면 좋을 것 같네요!

https://okky.kr/articles/1155763

hyukjin1210 commented 1 year ago

안녕하세요 현재 자바 스프링을 배우고있는 커리어전환 희망자 입니다. 스프링부트를 공부중 dto와 entity의 분리에 대해서 찾아보다가 글을 너무 잘 쓰셔서 작성하신 글을 인용하여 블로그에 포스팅을 하고싶은데 출처를 밝히고 포스팅을 해도 될까요?? 문제가 된다고 하신다면 사용하지 않겠습니다.

elyudwo commented 1 year ago

좋은 글 감사합니다!