GET, POST Method

심야·2023년 7월 14일
0

웹 개발

목록 보기
39/46
post-custom-banner

HTML Code

아래 코드는 각각 get method와 post method로 request하는 html 코드이다.

<h2>GET Method 실습</h2>
<form action="/hackthebox/get.jsp" method="get">
    <input type="text" name="getParameter" placeholder="get method request"/>
    <input type="submit" value="전송"/>
</form>
<br>
<h2>POST Method 실습</h2>
<form action="/hackthebox/post.jsp" method="post">
    <input type="text" name="postParameter" placeholder="post method request"/>
    <input type="submit" value="전송"/>
</form>

브라우저 화면

GET Method

request

form에 문자열을 입력하고 전송 버튼을 클릭하면 어떻게 데이터가 전송되는지 알아보자.

우선 전송 버튼을 누르면 클라이언트가 서버에 get.jsp 파일을 요청한다. 따라서 서버는 get.jsp 를 해석해 응답한다. 이 과정을 조금 더 자세히 살펴보자.

우선 클라이언트가 get method 를 사용해 request하면 url에 요청 경로와 파라미터 즉, input tag 에 입력한 데이터가 함께 남아있는 것을 볼 수 있다.

http://localhost:8081/hackthebox/get.jsp?getParameter=get+method+request

어떻게 된 것일까?

get 은 클라이언트에서 서버에 조회할 때 가장 많이 쓰이는 메소드이다. 주로 게시판 또는 검색 엔진의 검색 창에서 많이 쓰인다. 아래 url은 naver 검색 창에서 get method를 입력했을 때의 url이다.

https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=get+method

로컬호스트에서 전송 버튼을 눌렀을 때와 네이버에서 검색 버튼을 눌렀을 때 결과가 완전히 똑같지는 않지만 핵심은 같다. 바로 url에 내가 ‘입력한 데이터가 존재한다’는 것이다.

get 은 URL 뒤에 ?=[data]가 붙으며 ? 뒤에 오는 문장을 query string 이라 한다.

response

지금까지의 상황을 살펴보면 아래와 같다.

  1. 클라이언트의 input tag 에 get method request 문자열을 입력하고 전송 버튼을 눌렀다.
  2. 버튼을 눌렀더니 http://localhost:8081/hackthebox/http/http.html 페이지에서 http://localhost:8081/hackthebox/get.jsp 로 이동했다.
  3. url에는 get.jsp 뒤에 ‘?’를 기준으로 getParameter=get+method+request 문자가 있다.

브라우저 화면

get.jsp 페이지로 이동하니 위와 같이 클라이언트에서 입력한 내용이 브라우저에 출력된다.

이건 또 어떻게 된 것일까? 코드를 살펴보자.

Get method form

아래 코드는 get method request를 입력할 수 있게 해준 HTML 코드이다.

이 코드는 input tag 에 내용을 입력하고 전송 버튼을 누르면 get method 를 사용해 /hackthoebox/get.jsp 로 이동하라는 의미이다.

<h2>GET Method 실습</h2>
<form action="/hackthebox/get.jsp" method="get">
    <input type="text" name="getParameter" placeholder="get method request"/>
    <input type="submit" value="전송"/>
</form>

get.jsp

아래 코드는 클라이언트에서 서버에 요청한 get.jsp가 매핑 되어있는 컨트롤러의 코드이다. 이 글은 get, post method 동작 과정을 설명하는 글이므로 servletjsp 를 깊게 설명하지는 않겠다.

@WebServlet("/get.jsp")
public class GetRequestController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String getParameter = req.getParameter("getParameter");

        // 응답
        resp.setContentType("text/html;charset=utf-8");

        PrintWriter out = resp.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<meta charset='UTF-8'>");
        out.println("<title>Result</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h2>Get Method</h2>");
        out.println("<p>response data : " + getParameter + "</p>");
        out.println("</body>");
        out.println("</html>");
    }
}

우선 클라이언트는 form tag 를 사용해 get.jsp 페이지로 이동하게 해달라고 서버에 요청했다.

그럼 서버는 어떤 과정을 통해서 요청을 확인하고 응답할까?

클라이언트에서 get.jsp 로 이동하게 해달라는 요청이 들어오면 웹 서버, 정확하게는 Servlet을 사용하는 톰캣 서버(WAS)는 get.jsp 가 매핑되어있는 @WebServlet() 어노테이션을 찾는다.

해당하는 어노테이션을 가진 Java 파일 (정확히는 컨트롤러)은 request 객체가 가진 파라미터를
확인한다. 파라미터는 input 태그의 name 속성 값을 의미한다. 본 클라이언트의 name 속성 값은
아래와 같이 “getParameter”이다.

<input type="text" name="getParameter" placeholder="get method request"/>

파라미터에 값이 존재하면 Java 파일은 해당 값을 HTML 코드와 함께 클라이언트에게 응답한다.

위 Java 파일에서는 아래 코드를 클라이언트에게 응답하는 것이다.

				out.println("<html>");
        out.println("<head>");
        out.println("<meta charset='UTF-8'>");
        out.println("<title>Result</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h2>Get Method</h2>");
        out.println("<p>response data : " + getParameter + "</p>");
// getParameter 변수는 request객체의 파라미터 값을 갖고있다.
        out.println("</body>");
        out.println("</html>");

과연 서버에서 응답한 html 코드를 클라이언트가 갖고 있을까?

response html code

서버는 Java 코드만 해석 해 html 코드를 클라이언트에게 응답했고 클라이언트 즉, 브라우저는 html 코드를 해석하여 브라우저에 출력한다.

<html>
<head>
<meta charset='UTF-8'>
<title>Result</title>
</head>
<body>
<h2>Get Method</h2>
<p>response data : get method request</p>
</body>
</html>

POST Method

POST Method도 똑같은 원리이다. 단지 GET Method는 URL에 파라미터를 넣어서 요청하는 것이고 POST Method는 HTTP Body에 파라미터를 넣어서 요청한다.

profile
하루하루 성실하게, 인생 전체는 되는대로.
post-custom-banner

0개의 댓글