Repository navigation
docs: 남은 도메인 경계 237건을 0 으로 만들지 않기로 한 근거를 남긴다 - #151
Merged
Merged
Conversation
여덟 단계로 489 → 241 까지 왔고, 남은 241건 중 237건이 "다른 도메인의 리포지토리를 직접 쓰지 않는다" 한 규칙이다. 이 숫자를 0 으로 만드는 일은 다른 단계들과 성격이 달라서, 무엇이 남았는지 쪼개 보고 멈추는 선을 정했다. 방향별로는 어드민 조회 87, notification→user 29, health→user 27, community→user 14, policy→user 13, 나머지 67 이다. 0 이 되지 않는 이유는 엔티티 쪽에 있다. 23개 엔티티가 @manytoone User 를 들고 있고 전부 DB 외래키다. JPA 로 외래키를 채우려면 User 엔티티가 필요하고, 엔티티를 얻으려면 UserRepository 가 필요하다. 즉 이 위반은 "정리하지 않은 코드" 가 아니라 도메인 간 외래키를 JPA 연관으로 표현한 결과다. 0 으로 만들려면 그 23개를 Long userId 로 바꿔야 하는데(4a 에서 FacilityWaitlist.child 을 그렇게 바꿨다 — 읽는 곳이 없어서 값이 있었다), 나머지는 읽는다. 알림 응답은 notification.getUser().getUserId() 를, 게시글 응답은 작성자 이름을 쓴다. 연관을 끊으면 그 자리마다 조회가 한 번씩 더 생기고 목록 화면에서는 N+1 이 된다. 지금은 join fetch 와 배치 로딩으로 막고 있는 것들이다. 그래서 멈추는 선 - 엔티티 연관 23개는 그대로 둔다. 읽지 않는 연관이 발견되면 그때 개별로 바꾼다 - 어드민 조회 87건도 그대로 둔다. 포트를 만들어 findAll 을 중계해도 막는 사고가 없고, 트랜잭션 경계는 6단계에서 서비스로 내려 이미 제자리다 - 쓰기는 계속 입구로 모은다. 같은 일을 두 방식으로 하는 것만 고친다 규칙은 남겨 둔다. 숫자를 0 으로 만들지 않아도 baseline 은 새 위반을 막는다 — 새 도메인이 남의 리포지토리를 주입하면 237 이 238 이 되고 빌드가 실패한다. 237 은 "고쳐야 할 목록" 이 아니라 "여기까지는 알고 있다" 는 선이다. 여덟 단계에서 실제로 나온 버그 목록도 함께 적었다. 규칙을 맞추려고 코드를 옮기기 전에 그 안을 먼저 읽은 것이 값을 했다. Refs #132
3 of 6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #132
여덟 단계로 489 → 241 까지 왔습니다. 남은 241건 중 237건이 한 규칙("다른 도메인의 리포지토리를 직접 쓰지 않는다")입니다. 이 숫자를 0 으로 만드는 일은 다른 단계들과 성격이 달라서, 무엇이 남았는지 쪼개 보고 멈추는 선을 문서에 적었습니다.
왜 0 이 되지 않는가
엔티티 쪽을 세어 보면 답이 나옵니다.
Notification.user,HealthRecord.user,Post.author,Review.user… 전부 DB 외래키입니다. JPA 로 그 외래키를 채우려면User엔티티가 필요하고, 엔티티를 얻으려면UserRepository가 필요합니다. 즉 이 위반은 "정리하지 않은 코드" 가 아니라 도메인 간 외래키를 JPA 연관으로 표현한 결과입니다.0 으로 만들려면 그 23개를
Long userId로 바꿔야 합니다. 4a 에서FacilityWaitlist.child를 그렇게 바꿨는데, 그건 읽는 곳이 없어서 값이 있었습니다. 나머지는 읽습니다 — 알림 응답은notification.getUser().getUserId()를, 게시글 응답은 작성자 이름을 씁니다. 연관을 끊으면 그 자리마다 조회가 한 번씩 더 생기고, 목록 화면에서는 N+1 이 됩니다. 지금은join fetch와 배치 로딩으로 막고 있는 것들입니다.멈추는 선
findAll을 중계해도 막는 사고가 없다. 트랜잭션 경계는 6단계에서 서비스로 내려 이미 제자리다규칙은 남겨 둡니다
숫자를 0 으로 만들지 않아도 baseline 은 값을 합니다 — 새 도메인이 남의 리포지토리를 주입하면 237 이 238 이 되고 빌드가 실패합니다. 지금 237 은 "고쳐야 할 목록" 이 아니라 "여기까지는 알고 있다" 는 선입니다.
여덟 단계에서 실제로 나온 것
숫자보다 이쪽이 중요합니다. 규칙을 맞추려고 코드를 옮기기 전에 그 안을 먼저 읽은 것이 값을 했습니다.