WEEK 5-4: HTTP 요청 데이터

ensalada.de.pollo·2025년 5월 11일

be

목록 보기
18/44

GET + 쿼리 파라미터(Query Parameter)

URL 끝에 ?key1=value1&key2=value2 형태로 데이터를 전송합니다.
데이터 길이에 제한이 있고(보통 2048자 이하), 캐싱이 가능합니다. 그리고 URL에 데이터가 노출되기 때문에 보안 측면에서 취약합니다.

Spring에서 처리하는 방법

HttpServletRequest 사용

@GetMapping("/request-params")
public void params(HttpServletRequest request) {
	String value1 = request.getParameter("key1");
    String value2 = request.getParameter("key2");
}

@RequestParam 사용

@GetMapping("/request-params")
public String params(
	@RequestParam("key1") String value1,
    @RequestParam(value = "key2",
    	required = false, // 필수 여부, 기본값은 true
        defaultValue = "default") String value2) {
    // logic 처리
}

POST + HTML Form (x-www-form-urlencoded)

HTTP Body에 key1=value1&key2=value2 형태로 전송합니다. 파일 업로드가 불가능합니다. 페이지 이동시 주로 사용하는 형태입니다.

Spring에서 처리하는 방법

HttpServletRequest 사용

@GetMapping("/form-data")
public void formData(HttpServletRequest request) {
	String value1 = request.getParameter("key1");
    String value2 = request.getParameter("key2");
}

@ModelAttribute 사용

@PostMapping("/form-data")
public String formData(@ModelAttribute UserForm form) {
	// form.getKey1(), form.getKey2() 사용
}

필드명과 파라미터명이 일치해야 하며, 검증을 위한 @Valid와 함께 사용이 가능합니다.

HTTP 요청 바디(JSON, XML, TEXT)

HTTP Body에 구조화된 데이터를 전송합니다. 대용량 데이터 처리가 가능하고, REST API에서 주로 사용합니다.

Spring에서 처리하는 방법

HttpServletRequest + 수동 파싱

@PostMapping("/request-body")
public void requestBody(HttpServletRequest request) throws IOException {
	ServletInputStream inputStream = request.getInputStream();
    String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
    
    // JSON 수동 파싱
    User user = objectMapper.readValue(messageBody, User.class);
}

@RequestBody 사용

@PostMapping("/request-body")
public ResponseEntity<User> requestBody(@RequestBody User user) {
	// user 객체 직접 사용
    return ResponseEntity.ok(user);
}

Spring의 HttpMessageConverter가 JSON을 객체로 변환합니다. GET요청에는 사용이 불가능합니다.

주요 어노테이션 비교

어노테이션사용 시나리오데이터 위치특징
@RequestParam쿼리 파라미터, 폼 데이터URL 또는 Body단일 값 처리, 기본값 설정 가능
@ModelAttributeHTML 폼 데이터Body (key = value)객체 바인딩, 검증 가능
@RequestBodyJSON/XML 등 구조화된 데이터Body (raw data)객체 자동 변환, setter가 불필요, Jackson 라이브러리 사용

Spring MVC 데이터 바인딩 흐름

  1. 클라이언트 요청
    • GET: 쿼리 파라미터
    • POST: 폼 데이터 또는 JSON
  2. DispatcherServlet
    • 요청을 해당 컨트롤러로 라우팅
  3. Handler Method 실행
    • @RequestParam: 단일 값 추출
    • @ModelAttribute: 객체 바인딩(setter/생성자 사용)
    • @RequestBody: 메시지 컨버터(Jackson)을 통해 JSON을 객체로 변환
  4. 비즈니스 로직 처리
  5. 응답 생성
    • View 반환(HTML) 또는 @ResponseBody로 데이터 직접 반환(JSON)

자료 및 코드 출처: 스파르타 코딩클럽

0개의 댓글