Skip to content

[Suhhee] Week4 미션#22

Open
Kimsuhhee04 wants to merge 5 commits intoSeohuifrom
Suhhee-week4
Open

[Suhhee] Week4 미션#22
Kimsuhhee04 wants to merge 5 commits intoSeohuifrom
Suhhee-week4

Conversation

@Kimsuhhee04
Copy link
Copy Markdown

@Kimsuhhee04 Kimsuhhee04 commented Apr 6, 2026

🔗 연관 이슈

🛠 작업 내용

  • .gitignore 세팅
  • 도메인형 아키텍처 기반 스프링 세팅
  • 스웨거 세팅

🖼 스크린샷 (선택)

image

👀 리뷰 요구사항 (선택)

  • 예외처리의 경우 도메인 계층의 각 도메인 내부에서 각 도메인별로 예외처리를 하는 게 좋을지, 글로벌 패키지에서 예외 관리를 한 번에 하는 게 좋을지 고민됩니다
    일단은 중복 코드를 줄이고 일관성을 갖추기 위해 global 단에 통합 에러 처리를 두는 방식으로 세팅해 보았는데,.. 각 도메인별로 예외를 따로 관리하는 방식과 비교했을 때 어느 쪽이 더 나은 방향일지 의견이 궁금합니다!

🤖 AI 활용

  • AI 사용 안 함
  • 코드 작성 아이디어 참고
  • 테스트/리팩토링 보조
  • 문서/주석 작성 보조
  • 기타 (아래에 간단히 작성)

각 도메인별 세팅 후 검토용으로 사용

💬 나의 프롬프트

(tree 보여줌) + 도메인별 아키텍처 세팅을 이렇게 진행했는데 어떤지 검토해줘

🧠 AI 응답

💡 아키텍처 검토 내용

[도메인형 아키텍처 내 예외 처리(Exception) 패키지 구조 검토]
제시해주신 도메인별 예외 처리(Exception) 구조에 대한 아키텍처 검토 내용입니다.

작성해주신 것처럼 각 도메인 패키지 내부에 예외 처리 로직을 배치하는 것은 도메인 간의 결합도를 낮추고 독립성을 높인다는 점에서, 대규모 프로젝트나 마이크로서비스 아키텍처(MSA) 환경에서 주로 채택하는 유효한 설계 방식입니다.

하지만 프로젝트 초기 세팅 단계이거나 단일 애플리케이션(Monolithic) 기반의 구조에서는 다음과 같은 이유로 예외 처리를 global 패키지에서 중앙 집중형으로 관리하는 방식을 권장합니다.

1. 불필요한 중복 코드(Boilerplate) 발생 방지
도메인별로 예외를 분리하여 관리할 경우, 본질적으로 동일한 성격의 예외들을 도메인마다 생성해야 하는 문제가 발생합니다. 예를 들어 '데이터를 찾을 수 없음(HTTP 404)'이라는 동일한 상황에 대해 UserNotFoundException, StoreNotFoundException 등 유사한 클래스가 도메인별로 양산됩니다. 이는 초기 개발 단계에서 관리해야 할 파일 수를 급증시키고 개발 효율을 저하시킵니다.

2. API 응답 형식의 일관성 보장
클라이언트(프론트엔드)와 원활하게 통신하기 위해서는 애플리케이션 내 어떤 도메인에서 예외가 발생하든 항상 동일한 구조의 에러 응답(JSON 포맷)을 반환해야 합니다. global 패키지에 @RestControllerAdvice를 활용한 전역 예외 핸들러를 구성하면, 모든 예외 응답의 포맷을 한 곳에서 안전하고 일관되게 강제할 수 있습니다.

3. 단일 진실 공급원(SSOT)을 통한 유지보수성 향상
global 영역에 통합된 예외 관리 클래스(예: ErrorStatus Enum)를 배치하면, 시스템 전체에서 발생하는 모든 에러 코드와 메시지를 단일 파일에서 한눈에 파악할 수 있습니다. 관리 포인트가 일원화되어 유지보수성이 크게 향상됩니다.

💡 결론 및 권장 방향
초기 아키텍처 세팅 시에는 예외 처리(exception) 및 API 문서화(docs)와 같은 애플리케이션의 공통 관심사를 global 패키지에서 통합 관리하여 개발 속도와 코드의 일관성을 우선적으로 확보하는 것이 효율적입니다. 추후 비즈니스 로직이 방대해지고 확장이 필요해지는 시점에 예외 처리를 각 도메인으로 점진적으로 분리하는 것을 권장합니다.

✅ 내가 최종 선택한 방법 (이유)

global 단에서 exception 관리하기
AI의 응답처럼 초반 세팅이기도 하고 대규모 프로젝트가 아닌 스터디 공부용 프로젝트이기에 global 단에서 한 번에 관리하는게 좀 더 유지보수 측면에서 좋을것 같다고 판단했습니다.

💡 나만의 Tip (선택)

내가 우선 생각나는 방식으로 진행해보고 피드백을 받는 형식으로 진행하는것도 좋은것 같아요!

@Kimsuhhee04 Kimsuhhee04 self-assigned this Apr 6, 2026
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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 {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Repository를 인터페이스로 선언하세요

UserRepositoryclass로 선언되어 있어 Spring Data JPA가 프록시 구현체를 만들지 못하고, 서비스 계층에서 주입하더라도 기본 CRUD 추상화를 활용할 수 없습니다. 스프링 학습 관점에서는 저장소를 interface로 두고 JpaRepository<User, Long>를 상속해 계층 책임을 분리하는 것이 핵심이므로, 동일 패턴의 다른 *Repository도 함께 인터페이스 기반으로 정리해보세요. 다음으로는 Spring Data의 인터페이스 기반 DI/프록시 생성 원리를 공부하면 좋습니다.

Useful? React with 👍 / 👎.

package com.study.UMC10.global.exception;

// 커스텀 예외
public class GeneralException {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge GeneralException이 Throwable을 상속하게 수정하세요

GeneralException이 일반 클래스라서 throw/catch 대상으로 사용할 수 없고, 이후 @ControllerAdvice 기반 공통 예외 처리 설계를 바로 연결하기 어렵습니다. 커스텀 예외는 최소 RuntimeException(또는 요구에 따라 Exception)을 상속하고 에러 코드/메시지를 담는 생성자를 제공해야 서비스 계층에서 일관된 예외 흐름을 만들 수 있습니다. 이 수정 후에는 체크 예외 vs 언체크 예외, 그리고 스프링 트랜잭션 롤백 규칙을 함께 학습해보는 것을 권장합니다.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@Joonseok-Lee Joonseok-Lee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수정부탁드립니다.

@@ -0,0 +1,4 @@
package com.study.UMC10.domain.alarm.controller;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

패키지 네이밍은 소문자가 권장됩니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants