에러 처리
Exception 처리 단원에서는 간단하게 예외처리에 대해서 설명해주시는데, 웹앱 에러 처리의 어려움에 대한 내용이 나왔습니다.
에러를 반환하는 방법 (내려준다 내려준다 하니까 나도 내려줘야 할 거 같자나!!)
- 기본 에러 페이지 (스프링의 "화이트라벨" 페이지)
- 에러 코드를 떨구기
- (제 입장에서) 바람직하지 않은 케이스: 클라이언트에서 200밖에 처리 못 하는 경우에는 메시지에 담아서 (*용문 욕설*)
에러 처리의 방법에 대해서는 요새 고민중인 내용이고, 이 글에 누구를 위해 어떻게 에러를 내줄건지 조금 더 자세히 나와있습니다.
https://www.lpalmieri.com/posts/error-handling-rust/ (Zero to Production in Rust 라는 책의 일부를 블로그로 올리시는 모양입니다. 에러와 로깅이 사용자와 운영/개발자 양 측의 입장에서 어떤 수준으로 필요한지에 대한 설명과 표가 있습니다.)
에러 처리 핸들러를 기술하는 방법은 두 가지입니다.
- 별도 클래스에 핸들러 기술하기: @RestControllerAdvice (혹은 @ViewResolverAdvice) 가 붙은 클래스에 @ExceptionHandler 를 단 핸들러 메서드를 기술합니다.
- 어드바이스라고 부르나봅니다. AspectJ 에서도 비슷한 명칭이었던 거 같은데...? 이전 기록을 열어보니 같은 명칭입니다. 왜그랬을꼬...
- 컨트롤러와 같은 클래스에 기술하기: @RestController 의 메서드로 @ExceptionHandler 를 단 메서드를 기술합니다.
@ExceptionHandler 어노테이션의 주석 문서에 굉장히 자세히 서술되어있던데요, 핸들러 함수의 형식은 좀 자유롭습니다. 강의에서 한 것처럼 대상 예외 클래스를 굳이 지정해주지 않더라도 패러미터에서 알아서 추정하기도 하는 거 같더라구요.
@RestController
@RequestMapping("/api/error-handle")
class WhiteLabelController {
@GetMapping
fun get() {
val nullval: Int? = null
println(1 + nullval!!)
}
@ExceptionHandler
fun onError(ex: Exception): ResponseEntity<String> {
return ResponseEntity.badRequest().body(ex.stackTraceToString())
}
@ExceptionHandler
fun onNurupoError(ex: NullPointerException): ResponseEntity<String> {
return ResponseEntity.badRequest().body("kat " + ex.stackTraceToString())
}
}
@RestControllerAdvice // 패키지 등의 범위 제한 가능
class WhiteLabelErrorAdvice {
// @ExceptionHandler(value = [Exception::class]) // kotlin 에서 클래스 언급 시
@ExceptionHandler
fun onError(ex: Exception): ResponseEntity<String> {
return ResponseEntity.badRequest().body(ex.toString())
}
}
모범?사례
그 뒤로 강의를 두 개를 더 이어서 봤는데, 뭘 말하려는지 모르겠더라구요. 강의 도중에 디버깅을 하고있는 모습을 반복해서 보자니 한 교수님이 떠오르네요. 패스트캠퍼스가 좀 더 검수를 잘 해줬으면 좋겠습니다. 이걸로 강사마다 강의 퀄리티가 들쑥날쑥할거라는 확신을 얻어버렸거든요... PluralSight 가 전체 오버뷰는 한 번에 안 되어도 강의 품질은 훨씬 낫다...
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스: https://bit.ly/37BpXiC
#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #한번에끝내는JavaSpring웹개발마스터초격차패키지Online
오늘의 소진은 정신적 여유입니다. 다음 내용은 (살짝 넘겨보니 아예 전혀 모르는 내용은 아닌 거 같지만) 새로운 내용인데, 여기에 이어서 볼 엄두가 안 나네요. 그냥 봐도 될 거 같긴 한데 상황이 여의칠 않아서 말이죠. 아마 미들웨어의 처리구조에 대한 설명과 그걸 직접 다루는 방법이 나오지 않을까요? 다른 언어의 다른 프레임워크들은 미들웨어를 바닥부터 만들었지만, 스프링은 그 역사 때문에 이것저것 지저분한 상태인 거 같아보이더라구요. (WAS가 왜 필요하지? :mollu:) 전체적인 오버뷰가 필요해보입니다. 이게 제가 딱 필요한 거구요. 4배속 진짜 필요하다니까...
내일 보죠!
'FastCampus - 한번에 끝내는 Java|Spring 웹 개발 > 03 스프링 입문' 카테고리의 다른 글
스프링 Ch 7 Spring as client - 패스트캠퍼스 챌린지 12일차 (0) | 2022.02.04 |
---|---|
스프링 Ch 6-5 Filter / Interceptor - 패스트캠퍼스 챌린지 11일차 (0) | 2022.02.03 |
스프링 Ch 6-2 custom validation - 패스트캠퍼스 챌린지 9일차 (0) | 2022.02.01 |
스프링 Ch 6-1 validation - 패스트캠퍼스 챌린지 8일차 (0) | 2022.01.31 |
스프링 Ch 5 OM/Annotation 정리 - 패스트캠퍼스 챌린지 7일차 (0) | 2022.01.30 |