카테고리 없음

4주차 스터디 내용

anyway03 2026. 1. 23. 12:56

 

예외처리 파고들기

 

ControllerAdvice와 RestControllerAdvice의 차이 : 

@RestControllerAdvice는 @ResponseBody가 붙어 있어 응답을 Json으로 내려준다

 

 

 그렇다면 orElseThrow 와 ResponseEntity... 중 어떤게 더 효율적일까?

 

구분  return ResponseEntity.status(...).body(...)  orElseThrow(() -> new BusinessException(...))
처리 위치 Controller (응답을 직접 제어) Service (로직에만 집중)
코드 스타일 if-else 문이 많아져 코드가 길어짐 한 줄로 처리되어 가독성이 좋음
유지보수 에러 응답 형식이 바뀌면 모든 컨트롤러를 수정해야 함 Advice 클래스 한 곳만 수정하면 전체 적용됨
주요 용도 간단한 프로젝트, 혹은 컨트롤러에서 즉시 끝낼 때 실무/대규모 프로젝트에서 공통 에러 처리 시

 

orElseThrow 방식의 장점 : 

1. 서비스 레이어에서 예외만 알리면 됨. 간편.

2. 트랜잭션 - RuntimeException을 던지면 진행중이던 DB작업이 롤백된다. return을 보내면 반영될 위험이 있음.

3. 가독성: if-else 간소화

 

 

전체적인 흐름 : 

1. 서비스 레이어에서 문제 발생

2. 예외(Throw) BusinessException 실행

흐름 중단: 예외가 발생하는 즉시 이후의 코드는 실행되지 않고, 호출 스택을 따라 예외가 위로 던져짐

3. @RestControllerAdvice가 장착된 GlobalExceptionHandler가 이 예외를 감지하고 낚아챈다

 

 

 

-------

제네릭(Generic)

- 다양한 데이터 타입을 보관해야 할 때 

--Object 타입으로 만들면 반환된 값을 매번 타입캐스팅해야 하므로 안정성 문제가 존재한다.

---제네릭 클래스를 사용하여 인스턴스 생성시 타입을 지정