웹 프로그래밍 기초 수업을 수강하면서 JSP와 자바스크립트를 배웠다.
이때 데이터베이스 삽입, 삭제, 수정, 검색 그리고 쿠키나 세션을 활용한 로그인과 회원가입 로직을 구현해보며 1학기를 마무리했다.
GET과 POST는 HTTP 프로토콜을 이용해 서버에 무언가를 요청할 때 사용하는 방식이다. 둘 다 요청을 보내는 역할을 하지만, 사용하는 목적과 방식에 큰 차이가 있다.
엽서(GET)와 편지 봉투(POST)에 비유할 수 있다.
GET 방식은 엽서
를 보내는 것과 비슷하다.
주소(URL)에 전달할 내용(데이터)이 전부 드러나 있어 누구나 쉽게 볼 수 있다.
POST 방식은 편지 봉투
에 편지를 넣어 보내는 것과 같다.
내용(데이터)을 봉투(Body) 안에 숨겨서 보내기 때문에, 겉에서는 내용을 알 수 없다.
항목 | GET | POST |
---|---|---|
데이터 전송 위치 | URL 뒤에 쿼리 스트링(Query String)으로 붙여서 전송하다. ?key=value&key2=value2 형태. | HTTP Request Body에 담아서 전송하다. |
보안 | URL에 데이터가 그대로 노출되어 보안에 취약하다. (서버 로그, 브라우저 기록에 남음) | Body에 데이터를 담으므로 URL에 노출되지 않아 상대적으로 안전하다. |
데이터 길이 | URL 길이에 제한이 있어 전송할 수 있는 데이터의 양이 적다. | 길이 제한이 거의 없어 대용량 데이터 전송이 가능하다. |
데이터 형태 | 주로 텍스트 데이터만 가능하다. | 텍스트, 파일(이미지, 영상 등) 다양한 형태의 데이터 전송이 가능하다. |
멱등성(Idempotency)* | 멱등성을 가진다. (여러 번 요청해도 결과가 동일하다) | 멱등성을 가지지 않는다. (요청할 때마다 서버 상태가 바뀔 수 있다) |
캐싱(Caching) | 브라우저가 결과를 캐싱(저장)할 수 있다. 그래서 속도가 빠를 수 있다. | 기본적으로 캐싱하지 않는다. |
북마크 / 방문 기록 | 북마크하거나 방문 기록에 남길 수 있다. | 북마크하거나 방문 기록에 남길 수 없다. |
서버에서 데이터를 조회(Read)할 때 주로 사용하다.
검색 엔진에서 검색어를 전달하는 것처럼, 데이터가 노출되어도 괜찮은 경우에 사용하다.
캐싱이 필요한 경우에 유리하다. (예: 이미지나 CSS 파일 요청)
서버에 데이터를 생성(Create)하거나 수정(Update)할 때 주로 사용하다.
로그인 정보나 회원가입 정보처럼 민감한 데이터를 전송할 때 사용하다.
파일 업로드처럼 데이터의 크기가 클 때 사용하다.
input.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="process.jsp" method="post">
이름입력:<input type="text" name="name" size="10">
점수입력:<input type="text" name="score" size="10">
<input type="submit" value="입력">
</form>
</body>
</html>
output.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
입력한 사용자 아이디 :<%=request.getParameter("userId") %><br>
입력한 사용자 패스워드 :<%=request.getParameter("password") %><br>
</body>
</html>
주소창에 GET 방식으로 userId와 password를 전달하여서 결과가 잘 출력되었다.