Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 74bc1e5b32
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| @@ -0,0 +1,4 @@ | |||
| package com.study.UMC10.domain.user.repository; | |||
|
|
|||
| public class UserRepository { | |||
There was a problem hiding this comment.
UserRepository가 class로 선언되어 있어 Spring Data JPA가 프록시 구현체를 만들지 못하고, 서비스 계층에서 주입하더라도 기본 CRUD 추상화를 활용할 수 없습니다. 스프링 학습 관점에서는 저장소를 interface로 두고 JpaRepository<User, Long>를 상속해 계층 책임을 분리하는 것이 핵심이므로, 동일 패턴의 다른 *Repository도 함께 인터페이스 기반으로 정리해보세요. 다음으로는 Spring Data의 인터페이스 기반 DI/프록시 생성 원리를 공부하면 좋습니다.
Useful? React with 👍 / 👎.
| package com.study.UMC10.global.exception; | ||
|
|
||
| // 커스텀 예외 | ||
| public class GeneralException { |
There was a problem hiding this comment.
GeneralException이 Throwable을 상속하게 수정하세요
GeneralException이 일반 클래스라서 throw/catch 대상으로 사용할 수 없고, 이후 @ControllerAdvice 기반 공통 예외 처리 설계를 바로 연결하기 어렵습니다. 커스텀 예외는 최소 RuntimeException(또는 요구에 따라 Exception)을 상속하고 에러 코드/메시지를 담는 생성자를 제공해야 서비스 계층에서 일관된 예외 흐름을 만들 수 있습니다. 이 수정 후에는 체크 예외 vs 언체크 예외, 그리고 스프링 트랜잭션 롤백 규칙을 함께 학습해보는 것을 권장합니다.
Useful? React with 👍 / 👎.
| @@ -0,0 +1,4 @@ | |||
| package com.study.UMC10.domain.alarm.controller; | |||
🔗 연관 이슈
🛠 작업 내용
🖼 스크린샷 (선택)
👀 리뷰 요구사항 (선택)
일단은 중복 코드를 줄이고 일관성을 갖추기 위해 global 단에 통합 에러 처리를 두는 방식으로 세팅해 보았는데,.. 각 도메인별로 예외를 따로 관리하는 방식과 비교했을 때 어느 쪽이 더 나은 방향일지 의견이 궁금합니다!
🤖 AI 활용
💬 나의 프롬프트
(tree 보여줌) + 도메인별 아키텍처 세팅을 이렇게 진행했는데 어떤지 검토해줘
🧠 AI 응답
💡 아키텍처 검토 내용
[도메인형 아키텍처 내 예외 처리(Exception) 패키지 구조 검토]
제시해주신 도메인별 예외 처리(Exception) 구조에 대한 아키텍처 검토 내용입니다.
작성해주신 것처럼 각 도메인 패키지 내부에 예외 처리 로직을 배치하는 것은 도메인 간의 결합도를 낮추고 독립성을 높인다는 점에서, 대규모 프로젝트나 마이크로서비스 아키텍처(MSA) 환경에서 주로 채택하는 유효한 설계 방식입니다.
하지만 프로젝트 초기 세팅 단계이거나 단일 애플리케이션(Monolithic) 기반의 구조에서는 다음과 같은 이유로 예외 처리를
global패키지에서 중앙 집중형으로 관리하는 방식을 권장합니다.1. 불필요한 중복 코드(Boilerplate) 발생 방지
도메인별로 예외를 분리하여 관리할 경우, 본질적으로 동일한 성격의 예외들을 도메인마다 생성해야 하는 문제가 발생합니다. 예를 들어 '데이터를 찾을 수 없음(HTTP 404)'이라는 동일한 상황에 대해
UserNotFoundException,StoreNotFoundException등 유사한 클래스가 도메인별로 양산됩니다. 이는 초기 개발 단계에서 관리해야 할 파일 수를 급증시키고 개발 효율을 저하시킵니다.2. API 응답 형식의 일관성 보장
클라이언트(프론트엔드)와 원활하게 통신하기 위해서는 애플리케이션 내 어떤 도메인에서 예외가 발생하든 항상 동일한 구조의 에러 응답(JSON 포맷)을 반환해야 합니다.
global패키지에@RestControllerAdvice를 활용한 전역 예외 핸들러를 구성하면, 모든 예외 응답의 포맷을 한 곳에서 안전하고 일관되게 강제할 수 있습니다.3. 단일 진실 공급원(SSOT)을 통한 유지보수성 향상
global영역에 통합된 예외 관리 클래스(예:ErrorStatusEnum)를 배치하면, 시스템 전체에서 발생하는 모든 에러 코드와 메시지를 단일 파일에서 한눈에 파악할 수 있습니다. 관리 포인트가 일원화되어 유지보수성이 크게 향상됩니다.💡 결론 및 권장 방향
초기 아키텍처 세팅 시에는 예외 처리(
exception) 및 API 문서화(docs)와 같은 애플리케이션의 공통 관심사를global패키지에서 통합 관리하여 개발 속도와 코드의 일관성을 우선적으로 확보하는 것이 효율적입니다. 추후 비즈니스 로직이 방대해지고 확장이 필요해지는 시점에 예외 처리를 각 도메인으로 점진적으로 분리하는 것을 권장합니다.✅ 내가 최종 선택한 방법 (이유)
global 단에서 exception 관리하기
AI의 응답처럼 초반 세팅이기도 하고 대규모 프로젝트가 아닌 스터디 공부용 프로젝트이기에 global 단에서 한 번에 관리하는게 좀 더 유지보수 측면에서 좋을것 같다고 판단했습니다.
💡 나만의 Tip (선택)
내가 우선 생각나는 방식으로 진행해보고 피드백을 받는 형식으로 진행하는것도 좋은것 같아요!