[FEAT] 7주차 미션 #9
Merged
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.
관련 이슈
closed #8
작업한 내용
관련 이슈
작업한 내용
1. 전역 예외 처리 시스템 구현
GlobalExceptionHandler (
@RestControllerAdvice): 모든 예외를 통일된 형식으로 처리GeneralException: 커스텀 비즈니스 예외 처리MethodArgumentNotValidException:@Valid검증 실패 처리ConstraintViolationException: 제약 조건 위반 처리Exception: 일반 예외 처리 (500 에러)GeneralException:
BaseErrorCode를 사용하는 커스텀 예외 클래스2. 도메인별 예외 처리 실습 구현
TEST_EXCEPTION)GeneralException을 상속한 도메인별 예외 클래스GET /temp/test: 정상 응답 테스트GET /temp/exception?flag=1: 예외 발생 테스트flag == 1일 때 예외 발생 로직3. API 응답 통일 처리
onSuccess(BaseCode code, T result)메서드 추가 (워크북 패턴)"COMMON2000"→"COMMON200""성공입니다."→"성공적으로 요청을 처리했습니다."ReviewController,TestController에서SuccessStatus code = SuccessStatus._OK사용4. 보안 및 설정 파일 정리
/temp/**경로 허용 추가application.properties:prod설정 파일 제거 (dev 프로파일 기본 사용)application-test.properties,application-prod.properties:spring.profiles.active주석 처리PR Point 및 참고사항, 스크린샷
핵심 구현 사항
예외 처리 흐름:
응답 통일 패턴:
ApiResponse.onSuccess(code, result)GlobalExceptionHandler가 자동으로ApiResponse.onFailure()형식으로 변환주요 파일
GlobalExceptionHandler.java: 전역 예외 처리 핵심 로직GeneralException.java: 커스텀 예외 기본 클래스TestException.java,TestErrorCode.java: 도메인별 예외 처리 예시ApiResponse.java: 응답 통일 래퍼 클래스SecurityConfig.java:/temp/**경로 접근 허용PR Point 및 참고사항, 스크린샷
@RestControllerAdvice의 장점과 필요성
# @RestControllerAdvice의 장점과 필요성@RestControllerAdvice란?
@RestControllerAdvice는 Spring에서 전역적으로 예외를 처리하고 응답을 통일하기 위한 어노테이션@ControllerAdvice+@ResponseBody의 결합@RestController에서 발생하는 예외를 한 곳에서 처리@RestControllerAdvice의 장점
1. 전역 예외 처리
모든 Controller에서 발생하는 예외를 한 곳에서 처리할 수 있음
장점:
2. 코드 중복 제거
RestControllerAdvice 없을 때
RestControllerAdvice 있을 때
3. 일관된 응답 형식 보장
모든 에러 응답이 동일한 형식으로 통일
응답 예시:
{ "isSuccess": false, "code": "TEST400_1", "message": "이거는 테스트", "result": null }장점:
4. 관심사의 분리 (Separation of Concerns)
5. 다양한 예외 타입 통합 처리
여러 종류의 예외를 체계적으로 처리할 수 있음
6. 로깅 및 모니터링 통합
예외 처리 시 일관된 로깅을 적용할 수 있음
@RestControllerAdvice 없을 경우의 불편함
1. 코드 중복
문제점:
2. 일관성 없는 에러 응답
각 개발자마다 다른 형식으로 에러를 반환할 수 있음
결과:
문제점:
3. 비즈니스 로직과 예외 처리 혼재
Controller가 복잡해지고 가독성이 떨어짐
문제점:
4. 예외 처리 누락 위험
결과:
문제점:
5. 변경 비용 증가
에러 응답 형식을 변경하려면?
실전 비교 예시
시나리오: 사용자 조회 API
Without @RestControllerAdvice
With @RestControllerAdvice
결론
@RestControllerAdvice는 단순한 편의 기능이 아니라, 프로덕션 수준의 API 개발에 필수적인 아키텍처 패턴핵심 가치: