작성
·
29
1
안녕하세요! 평범한 대학생 백엔드 개발자 입니다!
저희 대학생에게 맞는 강의 영상 찍어주셔서 감사합니다 :)
다름이 아니라 도메인 계층에서 Page를 사용해도 되는지 의문이 발생했습니다.
제가 인지한바로는 도메인 계층은 순수한 로직이 이루어져야한다고 알고 있습니다.
그래서 저는 도메인 계층에서 Page에 관한 DTO를 하나 생성하고 스토리지 모듈에서 해당 DTO로 반환하게 코드를 작성하였습니다.
그런데 강사님의 코드를 보니까 도메인 계층에서 Page를 사용하고 있더라고요...
단순한 트레이드 오프일까요? 클린 아키텍처와 회사 내 규칙을 따를 것이냐 아니면 개발 편의성을 위해 Page만 허락한다는 등... 그런 것들이 존재할까요? 그렇지만 도메인 계층에서 스프링 프레임워크에 대한 의존성을 갖는게 되지 않을까요... 잘 모르겠습니다!
이렇게 생각하는게 좋은 방향일까요? ㅠㅠ
(추가로 도메인 계층에서 Page를 사용할 시 테스트 코드는 어떻게 작성하나요?)
답변 1
0
아주 흥미로운 질문이네요 😄
궁금하신 것들을 답변드리기 전에 아래 내용에 대하여 생각해보신 후 생각을 답글로 주시면 제 의견을 전달드리겠습니다!
지금 우리 코드에서 도메인 계층이란 어디에 존재하는 것이고 무엇을 의미할까요?
순수한 로직이란 무엇을 의미하나요?
예제 코드에서 Page 클래스
는 순수한 상태가 아닌걸까요? 아니라면 순수한 상태는 무엇인가요?
유사하게 OffsetLimit 클래스
는 어떤 상태일까요?
도메인 계층이라고 생각하시는 곳에 Page 에 대한 코드가 아예 없어야면, API 요청을 받고 나서 어떻게 쿼리 실행 하는 코드까지 파라미터로 전달을 할 수있을까요?
"도메인 계층에서 Page에 관한 DTO를 하나 생성하고 스토리지 모듈에서 해당 DTO로 반환하게 코드를 작성하였습니다" << 라고 해주셨는데 이 것의 단점은 없을까요?
스프링 의존성을 얘기해주셨는데, 그럼 *Service 에서 JPA Repostiory 를 쓰는 것은 의존이 없는 상태일까요? 또 순수한 상태일까요?
충분히 생각해보시고 댓글 기대하겠습니다! (생각해봐도 잘 모르겠는건 모르겠다 해주세요! 😄)
답변 주셔서 감사합니다!
1. 도메인 계층은 강사님께서 말씀해주신 레이어에서 비즈니스 계층과 구현 계층에 있습니다. 또한 비즈니스 로직을 가지고 있는 계층을 의미합니다!
2. 순수한 로직이란.. 제가 생각하기에는 순수 자바코드로만 이루어진 코드라고 생각해요! 그래서 테스트하기에 편하다는 장점이 있는...? 코드인 것 같습니다! 그렇다면 순수하지 않은 로직은... 자바 코드 이외에 코드들이 섞여있는 로직입니다. 예를 들어, Slice 클래스에 Pageable 객체가 있는..? 그런 것 같습니다!
3. 제가 2번에서 말한대로 한다면 순수한 상태인 것 같아요... 잘 모르겠습니다. 하지만 찾아본 결과 인텔리제이에서 Page 클래스를 들어가 확인해봤을 때는 Slice를 상속받고 있던데 Slice 클래스를 보니까 Pageable을 사용하므로 순수하지 않은 상태입니다!
4. int 변수로 page, size 값을 받은 다음에 컨트롤러에서 서비스 호출 후 서비스에서 레포지토리 호출을 할 때, 레포지토리 안에서 Pageable 객체를 만든 다음 JPA에 담아주었습니다!
(예시 : Pageable pageable = PageRequest.of(page, size, Sort.by("id").descending()); )
5. 음... 단순히 Page로 반환만 하면 되는 것을 DTO를 만들어 반환할려니까 순수하게 귀찮습니다... 그리고 Page로 반환되는 값들을 다른 클래스로 일일히 매핑해야되니 일이 2배가 되는 단점이 있습니다!
6. 먼저 서비스에서 JPA 레포지토리를 쓰는 것은 의존이 있는 상태입니다! 근데 순수하다...? 는 아닌 것 같아요! 답변을 쓰다가 생각해보니 JPA 자체가 순수하지 않은 것 같습니다. 왜냐하면 ... 그냥 느낌적인 느낌이랄까요.. 잘 모르겠습니다
답변을 작성하면서 제 자신에게 계속 질문을 던지면서 추가하고 수정하였습니다. 답변이 이상해도 너그러운 이해 부탁드립니다..!