Back to til
Jul 29, 2025
3 min read

[TIL] 2025-07-29 | Spring의 Request, Response 핸들링

SQL

알고리즘

오늘 학습한 내용

Spring 기초 5주차

1. Spring의 요청 데이터 처리: 클라이언트 → 서버

  • 데이터 전달 3가지 방법
    • GET + Query Parameter: URL에 ?key=value 형태로 데이터 포함. 검색/필터링에 주로 사용. QueryString이라고도 함

      http://localhost:8080/request-params?key1=value1&key2=value2
      
    • POST + HTML Form: Content-Type: application/x-www-form-urlencoded. 브라우저 <form>의 기본 동작. 데이터 형태는 쿼리 파라미터와 동일.

    • HTTP Request Body: Content-Type: application/json 등. Body에 직접 데이터를 담아 전달. 최신 API의 표준 방식. 보통 JSON, xml 등의 형식으로 전달

  • Spring 어노테이션별 특징
    • @RequestParam
      • 쿼리 파라미터나 Form 데이터를 특정 파라미터에 1:1로 바인딩함.
      • required=false로 설정 시, int 타입은 500 에러를 유발할 수 있으므로 Integer 같은 Wrapper 타입을 사용하는 게 안전함.
      • defaultValue 속성으로 기본값 지정 가능.
      • 생략 가능하지만 명시적으로 써주는 것이 좋음**.**
    • @ModelAttribute
      • 쿼리 파라미터나 Form 데이터를 객체(DTO)에 자동으로 바인딩함 (Setter를 이용).
      • Controller에서 편하지만, JPA Entity를 직접 바인딩하지 않기.
        • 클라이언트와 주고받는 데이터는 전용 DTO를 만들어 사용.
    • @RequestBody
      • HTTP Body의 JSON 데이터를 객체(DTO)로 자동 변환함.
      • HttpMessageConverter(주로 Jackson)가 동작.
      • 최신 FE/BE 분리 환경(React, Vue 등)에서는 Form 데이터도 ModelAttribute보다 결국 이 방식으로 처리하는 것이 표준.
      • @RequestParam, @ModelAttribute와 달리 생략 불가능.

2. Spring의 응답 데이터 처리: 서버 → 클라이언트

  • 응답 3가지 방법
    • 정적 리소스: /static 경로의 HTML, CSS, JS 등을 그대로 반환.
    • View Template (SSR): Thymeleaf 같은 템플릿 엔진으로 서버에서 데이터를 입힌 동적 HTML을 만들어 반환. @Controller에서 String을 반환하면 View를 찾음.
    • HTTP Message Body: API 통신 시 JSON 같은 데이터를 직접 Body에 담아 반환.
  • 응답 방식별 특징
    • @ResponseBody + @ResponseStatus
      • 객체를 반환하면 JSON으로 변환되고, @ResponseStatus고정된 HTTP 상태 코드를 지정함.
      • 코드는 간결하지만, 조건에 따라 상태 코드를 바꿀 수 없어 유연성이 떨어짐.
    • ResponseEntity<T>
      • 상태 코드, 헤더, Body를 모두 포함하는 완전한 HTTP 응답 객체를 직접 만들어 반환.
      • 조건에 따라 상태 코드나 헤더를 동적으로 제어할 수 있어 가장 유연함.
      • 일반적으로 가장 선호되는 방식.
  • 응답 처리 예시
    • 성공 시: Controller에서는 DTO 객체를 직접 반환. Spring이 자동으로 200 OK와 함께 JSON으로 만들어줌. 코드가 매우 깔끔해짐.
      • 단, 201 Created처럼 특정 상태 코드나 헤더가 필요할 때만 ResponseEntity를 사용.
    • 실패 시: Controller에서 if/else로 에러를 처리하지 말 것.
      • Service에서 특정 Exception(예: UserNotFoundException)을 던짐.
      • @RestControllerAdvice (글로벌 예외 핸들러)에서 이 예외를 잡아 ResponseEntity로 일관된 에러 응답(예: 404 Not Found)을 생성.

JPA 기초

  • DataSource 연결
    • application.yml
      • ddl-auto
      • show_sql
      • format_sql
  • Entity
  • Lombok
  • JPA 제공 메소드
  • @Transactional
  • 더티 체킹

더 알아볼 내용 / 다음에 할 내용

  • RestControllerAdvice를 이용한 전역 예외 처리
  • HTTPMessageConverter의 유형
  • ObjectMapper
    • Jasckson, Gson
  • Dirty Checking(변경 감지)과 Entity 업데이트 전략
  • @DynamicUpdate