GET 요청 방식 이해하기
GET 요청은 클라이언트가 서버로부터 특정 자원을 요청할 때 사용하는 HTTP메서드이다. 주로 웹 페이지나 데이터 등을 가져올 때 사용된다.
GET 방식은 HTTP 요청 메세지 구성에 바디가 존재하지 않는다.
GET 방식 특징
● 요청 데이터가 URL에 포함됨 : GET 요청의 파라미터는 URL의 쿼리 스트링에 포함된다.
예를 들어, http://example.com/page?name=John&age=30에서 name=John과 age=30이 쿼리 스트링이다.
● 데이터 크기 제한 : URL에 포함되는 데이터의 크기에는 제한이 있다. (일반적으로 약 2048자)
● 캐싱 가능 : GET 요청은 브라우저 캐싱이 가능하여, 동일한 요청에 대해 서버에 재요청하지 않고 캐시된 데이터를 사용할 수 있다.
● 보안에 취약 : URL에 데이터가 노출되기 때문에 민감한 정보 전달에는 부적합하다.
POST 요청 방식 이해하기
POST 방식은 주로 데이터를 서버에 전송하거나 서버에서 데이터 처리를 요청할 때 사용된다. 즉, POST 요청은 클라이언트가 서버로 데이터를 전송할 때 사용하는 HTTP 메서드이다. 주로 폼 데이터를 서버로 제출하거나 파일 업로드와 같은 작업에 사용된다.
POST 방식의 특징
● 요청 데이터가 본문에 포함됨 : GET요청과 달리, POST 요청의 데이터는 HTTP 메시지의 본문(Body)에 포함되어 전송된다.
● 데이터 크기 제한 없음 : 본문에 포함된 데이터는 크기에 제한이 거의 없기 때문에 대용량 데이터를 전송할 수 없다.
● 캐싱 불가 : POST 요청은 일반적으로 캐싱되지 않는다. 즉, 매번 서버에 요청이 전송된다.
● 보안에 유리 : 데이터가 URL에 노출되지 않기 때문에 GET 요청보다 상대적으로 안전하지만 HTTPS를 사용하지 않는 한 절대적인 보안을 보장하지는 않는다.
시나리오 코드1
구글 웹 스토어에서 talend api 사용하기
쿼리문을 이용하여 입력한 이름 출력해보기
package com.tenco.controller;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
// http://localhost:8080/req-test
@WebServlet("/req-test")
public class RequestTest extends HttpServlet {
private static final long serialVersionUID = 1L;
public RequestTest() {
super();
}
// http://localhost:8080/gp/req-test?name="홍길동"
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// METHOD <-- GET방식일 때
// 요청을 받고 응답시에 MIME TYPE -> text/html
response.setContentType("text/html; charset=UTF-8");
// HTTP 요청 메세지에 시작줄에 /req-test?name="홍길동" <-- 이렇게 보낼 것이라 예상중
String name = request.getParameter("name");
String greeting = "Hello," + (name != null ? name : "바보") + "!!";
response.getWriter().print("<html><body> <h2>" + greeting + "</h2></body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
// 만약 데이터베이스 연동까지 한다면
// 요청을 받아서 (인증검사, 요청값 유효성 검사)를 먼저 실시해야 한다.
// HTTP 요청 바디에서 데이터를 추출
String name = request.getParameter("name");
String email = request.getParameter("email");
// 보통 DB에 접근해서 CRUD 작업
response.getWriter().write("<html>");
response.getWriter().write("<head>");
response.getWriter().write("</head>");
response.getWriter().write("<body>");
response.getWriter().write("<h1>");
response.getWriter().write("<p>");
response.getWriter().write("name : " + name);
response.getWriter().write("</br>");
response.getWriter().write("email : " + email);
response.getWriter().write("</p>");
response.getWriter().write("</h1>");
response.getWriter().write("</body>");
response.getWriter().write("</html>");
// URL 인코딩 처리
// http://localhost:8080/gp/req-test?name=%22%ED%99%8D%EA%B8%B8%EB%8F%99%22
}
}
출력결과
+) GET 방식은 URL의 쿼리 문자열로 전송되기 때문에 폼을 사용하지 않아도 파라미터를 전송할 수 있다.
컨텍스트 루트(Context Root)
웹 애플리케이션이 URL을 통해 접근될 때 사용되는 기본 경로이다. 웹 애플리케이션이 웹 서버나 애플리케이션 서버에 배포될 때, 서버는 각 애플리케이션에 대해 고유한 컨텍스트 루트를 할당한다. 이를 통해 여러 애플리케이션이 동일한 서버에서 여러 애플리케이션을 동시에 실행시킬 수도 있다.
server.xml 파일에서 설정할 수 있다. server.xml 파일은 Apache Tomcat의 주요 설정 파일로 서버의 구성 요소와 동작 방식을 정의한다. 이 파일을 통해 Tomcat 서버의 다양한 설정을 구성할 수 있다.
URL 구성
http://<서버 주소>:<포트>/<컨텍스트 루트>/<서블릿 경로>
URL 인코딩
URL은 ASCII 문자만을 안전하게 포함할 수 있다. 아스키 코드로 표현되지 않는 문자(예:한글), 공백, 특수 문자 등은 URL에서 문제를 일으킬 수 있다.
따라서 비 ASCII 즉, 문자나 특수 문자는 URL 인코딩(퍼센트 인코딩) 되어야 한다.
URL 인코딩은 해당 문자를 % 기호와 두 자리 16진수로 변환한다. 예를 들어, 한글 '홍길동'은 UTF-8 바이트 시퀀스로 변환된 후 각 바이트가 퍼센트 인코딩된다.
홍길동의 UTF-8 인코딩: ED 99 8D EA B8 B8 EB 8F 99
URL 인코딩: %ED%99%8D%EA%B8%B8%EB%8F%99
크롬 웹 브라우저
인코딩
홍길동 -> %22%ED%99%8D%EA%B8%B8%EB%8F%99%22
웹 서버(WAS)
디코딩
%22%ED%99%8D%EA%B8%B8%EB%8F%99%22 -> 홍길동
'Java' 카테고리의 다른 글
디자인 패턴 - 싱글톤 패턴 (0) | 2024.07.01 |
---|---|
서블릿과 서블릿 컨텍스트(html 파일 불러오기) (0) | 2024.07.01 |
Dynamic Web Project 1 (0) | 2024.06.29 |
DAO,DTO,VO,Entity (0) | 2024.06.21 |
JDBC 실습 - CRUD, SOLID, 성능최적화, SQL예외처리, HikariCP (0) | 2024.06.18 |