[TIL] Git 협업 시 PR 대기 중 다음 기능 작업은 어떻게 해야할까?, @RequestB…

2025-05-06 TIL

📝 TIL (Today I Learned)
🔗 원본 이슈: #51
📅 작성일: 2025-05-06
🔄 최종 수정: 2025년 05월 22일


🍀 새롭게 배운 것

1️⃣ Git 협업 시 PR 대기 중 다음 기능 작업은 어떻게 해야할까?


2️⃣ @RequestBody가 String을 받을 때 역직렬화를 하지 않는다..?

  • @RequestBody는 일반적으로 JSON을 자바 객체로 역직렬화(deserialize) 하기 위해 사용된다.
  • 하지만 파라미터 타입이 String이면, 역직렬화 과정을 거치지 않고 그냥 원본 요청 바디 내용을 그대로 문자열로 전달한다.

    @PostMapping("/echo")
    public String echo(@RequestBody String body) {
        return body;  // 요청 JSON 전체를 String으로 받는다
    }
    
  • 그래서 요청 바디가 JSON이라도 String으로 받으면 파싱되지 않고 JSON 문자열 그대로 처리됨.
  • 실제 객체로 매핑하려면 DTO로 받아야 한다.

    public String echo(@RequestBody SomeDto dto) { ... }
    

3️⃣ Custom Exception

  • 참조: SpringBoot Custom Exception 처리 velog 글
  • 반복되는 예외 처리 코드를 줄이기 위해 커스텀 예외를 정의해 사용하는 방식.
  • 예외 클래스를 RuntimeException을 상속해 만들고, 상황에 따라 적절한 에러 메시지와 상태 코드를 담아준다.

    public class CustomException extends RuntimeException {
        private final ErrorCode errorCode;
    
        public CustomException(ErrorCode errorCode) {
            super(errorCode.getMessage());
            this.errorCode = errorCode;
        }
    
        public ErrorCode getErrorCode() {
            return errorCode;
        }
    }
    
  • 그리고 @RestControllerAdvice@ExceptionHandler를 활용해 예외 발생 시 일관된 응답 형태로 처리할 수 있다.

    @RestControllerAdvice
    public class GlobalExceptionHandler {
    
        @ExceptionHandler(CustomException.class)
        public ResponseEntity<ErrorResponse> handleCustomException(CustomException e) {
            return ResponseEntity
                    .status(e.getErrorCode().getStatus())
                    .body(new ErrorResponse(e.getErrorCode()));
        }
    }
    

예외 상황을 명확하게 정의하고, 중복 처리 로직을 줄일 수 있어서 실무에서 매우 유용하다는 느낌! 다음에는 ErrorCode enum을 활용한 설계 패턴도 같이 정리해보자.