Home HTTP 요청 파라미터
Post
Cancel

HTTP 요청 파라미터

HTTP 요청 데이터

HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 다양한 방법이 있다. 그 중 아래의 3가지 방식이 주로 사용된다.

  1. GET - 쿼리 파라미터
  2. POST - HTML Form
  3. HTTP message Body

GET - 쿼리 파라미터

클라이언트에서 서버로 데이터를 전달하는 방법중의 하나는 Url 주소에 파라미터를 명시하여 전달하는 방법이 있다.

예) http://localhost/member?memberId=admin&memberNm=관리자

?memberId=admin&memberNm=관리자와 같이 물음표 뒤에 연결된 keyvalue를 쿼리 파라미터라고 한다. 주로 검색, 필터, 페이징에서 많이 사용되는 방식이다.

전달 데이터

  • memberId = admin
  • memberNm = 관리자

서버에서는 HttpServletRequest가 제공하는 메서드들을 통해 쿼리 파라미터를 편리하게 조회할 수 있다.

1
2
3
4
String memberId = request.getParameter("memberId"); //단일 파라미터 조회(memberId 조회)
Enumeration<String> parameterNames = request.getParameterNames(); //파라미터 이름들 모두 조회
Map<String, String[]> parameterMap = request.getParameterMap(); //파라미터를 Map으로 조회
String[] memberIds = request.getParameterValues("memberId"); //복수 파라미터 조회

POST - HTML Form

HTML의 Form을 활용하여 Url이 아닌 Message Body에 쿼리 파라미터 형식으로 전달하는 방식이다.

application/x-www-form-urlencoded 형식은 Url이 아닌 Message Body를 사용할 뿐 쿼리 파라미터의 형식은 동일하다. 이 방식 또한 GET의 쿼리파라미터 조회 메서드를 그대로 사용하면 된다.

HTTP message Body

이 방식은 HTTP Message body에 데이터를 직접 담아서 요청하는 방식으로 HTTP API (JSON, XML, TEXT)에서 주로 사용되는 방식이다.

사용하는 데이터 형식에서 차이가 있기 때문에 서버에서 조회할 때는 위의 두 방식과는 다른 방식으로 조회를 해야한다. (HttpServletRequestinputStream을 사용하여 HTTP 메시지 바디의 데이터를 직접 읽을 수 있다.)

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

Spring Annotation

스프링은 HTTP 요청 파라미터를 편리하게 조회할 수 있는 다양한 어노테이션을 지원한다.

@RequestParam

@RequestParam 어노테이션은 Get과 Form 방식에서 사용된 쿼리 파라미터를 편리하게 조회할 수 있도록 지원한다.

?memberId=admin&memberNm=관리자에서 memberId를 조회하기 위해 request.getParameter("memberId")와 같은 방식을 사용하였다. 이는 어노테이션을 활용하여 아래와 같이 작성할 수 있다.

1
2
3
4
5
6
@PostMapping("/save")
public String save(@RequestParam("memberId") String memberId,
                    @RequestParam("memberNm") String memberNm) {
    Member member = new Member(memberId, memberNm);
    ...
}

@ModelAttribute

@RequestParam 어노테이션을 활용하면 편리하게 요청 파라미터를 받을 수 있다. 위의 예제를 보면 요청 파라미터를 받아 새로운 객체를 만드는 것을 볼 수 있다. 실무에서는 이렇게 요청 파라미터를 통해 새로운 객체를 만들어야 하는 경우가 빈번하다. @ModelAttribute는 이러한 과정을 자동화 해준다. 아래의 코드는 @RequestParam의 예제와 동일하게 동작한다.

1
2
3
4
5
6
@PostMapping("/save")
public String save(@ModelAttribute Member member) {
    System.out.println(member.getMemberId()); //admin
    System.out.println(member.getMemberNm()); //관리자
    ...
}

@RequestBody

@RequestBody를 사용하면 HTTP 메시지 바디 정보를 편리하게 조회할 수 있다. 이는 위의 RequestParam@ModelAttribute와 같이 요청 파라미터를 조회하는 방식과는 차이가 있다. 주로 JSON 형식의 데이터를 처리할 때 사용한다.

  • 요청 파라미터 조회: @RequestParam, @ModelAttribute
  • HTTP 메시지 바디 직접 조회: @RequestBody

참고

This post is licensed under CC BY 4.0 by the author.

뷰 리졸버

JPA 영속성 컨텍스트

Comments powered by Disqus.