HTTP 요청 데이터

하마·2025년 3월 20일

Spring

목록 보기
15/22

클라이언트에서 서버로 데이터를 전달하는 방법


크게 3가지가 있다.
Query Parameter , HTTP Form Data , HTTP Request Body

1. GET + Query Parameter


  • 데이터를 URL에 포함해서 전달
    • ?key=value&key2=value2

사용 예시

@GetMapping("/search")
public String search(@RequestParam String keyword) {
    return "검색어: " + keyword;
}

HttpServletRequest 사용

@Slf4j
@Controller
public class RequestParamController {

    @GetMapping("/request-params")
    public void params(
						HttpServletRequest request,
						HttpServletResponse response
					  ) throws IOException {
															 
        String key1Value = request.getParameter("key1");
		String key2Value = request.getParameter("key2");
				
		log.info("key1Value={}, key2Value={}", key1Value, key2Value);
        response.getWriter().write("success");
    }
    
}
  • response.getWriter().write()
    • HttpServletResponse를 사용해서 응답값을 직접 다룰 수 있다.
    • @Controller 지만 @ResponseBody를 함께 사용한 것과 같다.

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


  • 데이터를 폼 형식으로 HTTP Request body에 포함해서 전달
POST /form-data
content-type: application/x-www-form-urlencoded
 
key1=value1&key2=value2
  • @RequestParam or @ModelAttribute 로 데이터 받음

사용 예시

@PostMapping("/login")
public String login(
			@RequestParam String username,
            @RequestParam String password) {
            
    return "로그인 시도: " + username;
    
}

HttpServletRequest 사용

@Slf4j
@Controller
public class RequestBodyController {

    @PostMapping("/form-data")
    public void requestBody(
							HttpServletRequest request,
							HttpServletResponse response
						   ) throws IOException {
											 
        String key1Value = request.getParameter("key1");
		String key2Value = request.getParameter("key2");
				
		log.info("key1Value={}, key2Value={}", key1Value, key2Value);
        response.getWriter().write("success");
    }
}

3. HTTP Request Body


  • 데이터(JSON, TEXT, XML 등)를 직접 HTTP Message Body에 담아서 전달한다.
  • 주로 @RestController 에서 사용되며, 대부분 JSON 형식으로 데이터를 전달한다.
    • POST, PUT, PATCH Method에서 사용한다.
    • GET, DELETE Method는 Body에 데이터를 담는것을 권장하지 않는다.
@Getter
@Setter
public class Board {

	private String title;
	private String content;

}

사용 예시

@PostMapping("/users")
public String createUser(@RequestBody User user) {
    return "사용자 생성: " + user.getName();
}

HttpServletRequest 사용

@Slf4j
@Controller
public class RequestBodyController {

    // JSON을 Java 객체로 변환해주는 Jackson 라이브러리
    private ObjectMapper objectMapper = new ObjectMapper();

    @PostMapping("/request-body")
    public void requestBody(
            HttpServletRequest request,
            HttpServletResponse response
    ) throws IOException {

        ServletInputStream inputStream = request.getInputStream();
        String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

        log.info("messageBody={}", messageBody);

        Board board = objectMapper.readValue(messageBody, Board.clss);

        log.info("board.getTitle()={}, board.getContent()={}", board.getTitle(), board.getContent());

        response.getWriter().write("success");

    }
    
}

4. 3가지 방식의 차이점 정리


1. GET + 쿼리 파라미터

  • 특징
    • @RequestParam 을 이용해 데이터를 받음
  • 언제 쓰나?
    • 조회(READ)할 때, 즉 데이터를 변경하지 않고 가져올 때
    • 검색, 필터링 등 간단한 데이터 전송이 필요할 때
    • URL을 공유하거나 북마크해야 할 때
  • 주의점
    • 길이 제한이 있음
    • 보안에 취약해 민감한 데이터를 보내면 안됨 (URL에 데이터가 남기 때문)

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

  • 특징
    • application/x=www-form-urlencoded 형식으로 전송
    • @RequestParam or @ModelAttribute 을 이용해 데이터를 받음
  • 언제 쓰나?
    • 간단한 Form 데이터 전송이 필요할 때 (로그인, 회원가입 등)
    • 데이터를 URL에 노출하지 않아야 할 때
  • 주의점
    • JSON을 처리하는 데 부적합함
    • 파일 업로드는 multipart/form-data 로 따로 처리해야 함

3. HTTP Request Body (JSON, XML 등)

  • 특징
    • application/json (기본값) 사용
    • @RequestBody 를 이용해 데이터를 받음
  • 언제 쓰나?
    • 복잡한 데이터(객체, 리스트 등)를 주고받을 때
    • REST API에서 리소스를 생성/수정할 때 (POST, PUT, PATCH 등)
  • 주의점
    • @RequestBody 를 사용할 때는 JSON을 객체로 매핑해야 함
      • ObjectMapper 활용

방식HTTP 메소드데이터 전송 방식언제 씀?
GET + 쿼리 파라미터GETURL에 포함조회, 검색 등 간단한 요청
POST + HTML FormPOSTBody에 key=value 형태로 저장간단한 폼 데이터 (로그인, 회원가입 등)
HTTP Request BodyPOST/PUB/PATCHBody에 JSON 포함복잡한 데이터 전송, REST API

참고자료


Spring 입문 - 5주차

  • HTTP 요청 데이터

0개의 댓글