-
Notifications
You must be signed in to change notification settings - Fork 0
특정 다이어리 댓글 전체 조회(커서 기반) API 구현 #24
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
TTaiJin
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
잘 작성해 주신 거 같습니다! 고생하셨습니다!
|
테스트 수행 위해 잠시 닫았다가 열겠습니다. |
TTaiJin
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
질문 남깁니다!
| diaryService.checkDiaryExists(diaryId); | ||
| } | ||
|
|
||
| private void validateCommentOwner(Long userId, Comment comment) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
다른 도메인간의 협력이 필요한 복잡한 유효성 검증 로직은 서비스 레이어에 두고 간단한 유효성 검증(ex 댓글 작성자 본인 확인, 다이어리 작성자 본인 확인 등)은 해당 엔티티에 두는 것에 대해 어떻게 생각하시는지 궁금합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"댓글의 소유자는 나다"라는 도메인의 책임과 행위를 객체에게 위임한다고 생각했을 때에 지금보다 더 객체지향적인 설계가 될 수 있을 것 같아요.
private void validateCommentOwner(Long userId, Comment comment) {
if (!comment.getUserId().equals(userId)) {
throw new UnauthorizedAccessException();
}
}만약 해당 함수 그대로 엔티티에 두면 도메인 내부에서 예외처리가 이루어지게 되는데, 이것 자체가 비즈니스 예외를 직접 던지는 것이 부담스러워 질 수도 있다는 의견도 있네요.
도메인은 순수한 모델이어야 한다는 관점
도메인은 애플리케이션 계층이나 인프라에 의존하지 않고, 오직 자신의 상태와 행위만 책임지는 순수한 객체여야 한다.
예외를 던지는 행위는
→ 어떤 흐름 제어에 참여하는 것
→ 이건 사실 애플리케이션 레이어(서비스) 의 책임이라는 의견
그래서 일부는 이렇게 말함:
- 도메인이 예외를 던지면 순수성을 해친다
- 도메인은 true/false만 반환하고, 예외는 서비스에서 판단해라
// 순수 도메인 방식
public boolean isOwner(Long userId) {
return this.userId.equals(userId);
}
// 서비스에서 판단
if (!comment.isOwner(userId)) {
throw new UnauthorizedAccessException();
}근데 또 실무에서는 도메인 내부에서 비즈니스 예외를 직접 던지는 멘위의 방식도 많이 사용한다고 하는 것 같더라구요
이유
- 이건 도메인 스스로가 자신의 유효성을 책임지는 방식이고,
- 복잡한 로직일수록 → 이쪽이 더 응집력 있고 깔끔하게 느껴짐
그래서 도메인 내부에서 예외처리 왜 부담스러울까?
- 테스트가 까다로워질 수 있음
- 도메인에서 예외를 던지면 → 도메인 단위 테스트도 예외를 assert 해야 함
- 개발자가 도메인 테스트 코드를 쓰는 걸 꺼릴 수도 있음
- 도메인 객체가 예외를 많이 던지기 시작하면 무겁고 복잡해짐 -> 핵심 로직과 흐름 제어가 섞이게 되니까
부담스러운 이유를 보니까 저는 도메인은 순수한 모델이어야 한다는 관점도 테스트 작성하는 입장에서 좋아보이는데, 어떻게 보시나요?
평소에 저도 고민했던 부분인데 질문주셔서 나름 공부하게 되었네요 감사합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
상세한 답변 감사합니다!
자세히 읽어보고 생각을 좀 해보니 말씀하신대로 도메인 객체가 너무 무거워 질 수도 있다는 생각이 드네요.
isOwner정도로 가볍게 참/거짓만 판별하고 예외를 던지는건 서비스 레이어에서 하는게 좋아 보입니다!
|
|
Claude의 전체 변경사항 및 관련 파일에 대한 리뷰: 개선된 사항:
주요 이슈:
관련 파일에 대한 영향 분석:
전반적인 의견: |



작업 사항
세부 작업 사항
구현 시 고민 사항
요구 사항
문제점
해결 방법
개선 논의 사항
CommentResponseDto, PageResponse 등 여러 응답 DTO가 생기면서 DTO 네이밍이 유사하게 겹치는 현상이 있음
향후 유지보수나 도메인 확장 시 혼동될 여지가 있기 때문에 DTO 네이밍 전략 개선 논의가 필요할 것 같습니다