User와 loanhistory 관계
283
작성한 질문수 2
User가 UserLoanHistory를 가지게 됨으로써 대출하는 로직이 간단해지지만 UserLoanHistory관련 CRUD를 전부 User에서 비즈니스 로직을 처리해야하는 건가요? User가 처리하는 로직이 너무 많아지는 것 같아 이게 객체지향적인 게 맞나 고민이 되네요 현재 경우는 C U 밖에 없지만 만약 예를 들어서 작가와 책 엔티티가 있을 때 연관관계의 주인은 책에 있지만 작가가 보유한 책을 조회하는 로직을 더 간편하게 처리하기 위해 작가는 책을 리스트로 가지면서 생명주기를 관리하면, 책을 수정하거나 삭제할 때도 무조건 작가의 도메인에서 로직을 처리하게 되는 건가요? 단일책임원칙을 위배하는 것이 아닌가 고민이 되어 질문드립니다!
답변 1
2
안녕하세요! gang01님! 🙂 좋은 질문 감사드립니다.
하나씩 답변 드려볼게요! 👍
User가 UserLoanHistory를 가지게 됨으로써 대출하는 로직이 간단해지지만 UserLoanHistory관련 CRUD를 전부 User에서 비즈니스 로직을 처리해야하는 건가요?
제 생각에는 그렇지 않습니다! User 가 List<UserLoanHistory> 를 갖게 되면서 간단하게 구현할 수 있는 부분은 간단히 구현하는 것이고, 굳이 User 를 거쳐 UserLoanHistory 를 접근할 필요가 없다면 바로 UserLoanHistory 를 접근해도 된다고 생각합니다.
따라서 예시로 주신 경우에도, 각 기능에 더 맞는 좋은 방법을 선택하면 된다고 생각합니다! 꼭 1 : N 으로 연결이 되었다고 해서 N을 제어하려 할 때 1을 반드시 거칠 필요는 없어요!
예를 들어 작가 : 책 = 1 : N 으로 연결된 상황에서, "현재 우리 시스템에 등록된 책 권수"를 확인하는 기능을 만드려면 select count(1) from book 이라는 SQL을 바로 책 쪽에 적용함으로써 굳이 작가를 거치지 않고 기능을 구현할 수 있습니다. 😊
그렇다면 이런 궁금증이 생기실 수도 있습니다.
만약 1 : N 연관관계에서 N 쪽만 사용할 일이 많다면, 굳이 연관관계를 맺어야 할까? 🤔
저는 개인적으로 N 쪽만 사용할 일이 많다면, 특히 수정/삭제/생성이 1을 거치지 않고 N에서만 발생한다면, 연관관계를 맺지 않는 편입니다. 즉, 두 도메인의 Life Cycle이 상당 부분 일치해야 연관관계를 사용하는 것이죠!
이와 관해서는 아무래도 정답이 없다 보니, gang01님께서도 나름대로의 기준을 찾아보셔도 좋을 것 같습니다! 😊
추가로, 언급해주신 "단일 책임 원칙"에 대해서도 제 의견을 말씀드려보면, 어떤 객체가 "단일 책임 원칙"을 위배했는가? 위배 하지 않았는가? 는 객관적으로 판단하기 꽤 어렵다고 생각합니다. 결국 무엇까지를 "단일 책임"으로 볼 것인지 사람마다 의견이 다를 수 있기 때문이죠.
예를 들어, 우리가 만든 UserService 클래스도 단일 책임을
"유저와 관련된 비즈니스 로직을 처리하기 위한 트랜잭션, 도메인 제어와 관련된 책임" 이라고 생각하면 단일 책임 원칙을 지키고 있다고 생각할 수 있지만,
"유저를 생성도 하고, 수정도 하고, 삭제도 하고, 조회도 하네?" 라고 바라보면 무려 네 가지 책임을 갖고 있어 단일 책임 원칙을 지키지 못하고 있다고 생각할 수도 있습니다.
실제 이런 패턴을 사용한 방법도 있죠! 🙂 https://johngrib.github.io/wiki/article/hierarchical-controller-package-structure/
결론적으로, "이렇게 하면 된다"라는 100% 완벽한 정답이 없지만, 그렇기에 각자의 기준을 고민하고 서로 의견을 교환하는게 중요하지 않나 싶습니다! 😊
답변이 도움이 되었으면 좋겠습니다. 감사합니다. 🙇
리액트 관련 질문이 있습니다.
0
58
2
스프링부트 버전
0
64
2
7강 강의를 들으려고 했는데 오류가 나서 서버가 안 켜지는거 같아요.
0
52
2
33강. UserLoanHistory의 관계성에 대한 질문
1
50
2
Java JDK 버전 문의의 건
0
126
2
ec2 에서 Linux버전이 달라져서 설치가 안되는것 같은데 자료 최신화좀 해주세요.
0
81
3
h2 console 접속했을 테이블 질문
1
62
1
ec2 서버에서 스프링 실행도 되고 인바운드 설정까지 했는데 index.html 안됨
0
71
2
15강. updateUser() 질문
0
51
2
깃허브 질
0
77
2
여기까지 다 끝냈다고 하셨는데
0
75
2
왜안될까요
0
67
2
MySQL 창이안ㄴ뜹니다
0
53
2
포스트맨
0
46
1
spring 개념적인 질문
0
68
2
인텔리제이 샘플코드 실행 안됨 오류
0
138
2
aws 배포할때 .env 파일에 저장한 환경변수에 관하여 여쭤볼게 있습니다
0
81
1
마이그레이션 오류입니다.
0
165
3
Whitelabel Error Page 오류가 났습니다.
0
153
2
안녕하십니까! 오류가 났습니다.. 도와주세요 ㅜㅜ
1
85
3
궁금한게 있습니다.
0
53
2
DTO 관련
0
65
2
궁금한게 있습니다!
0
59
2
35강에서 returnBook 에서 userLoanHistory 값 중복에 관하여
0
51
2





