◇ PART · WEB

GET vs POST

웹의 동작 원리 — 읽기 자료

📍 지금 어디를 만지고 있나요?
브라우저
서버
Controller
Service
DB

이 차시의 핵심 용어

GET 데이터를 URL 의 ?에 적어 보내는 방법. 주로 「조회」 용도. 예: 검색창, 게시판 목록.
POST 데이터를 메시지 바디 안에 숨겨 보내는 방법. 주로 「제출/저장」 용도. 예: 회원가입, 로그인, 글쓰기.
쿼리 스트링 (Query String) URL 의 ? 뒤에 붙는 이름=값&이름=값 형식의 문자열. GET 이 데이터를 싣는 자리.

1. 같은 부탁, 두 가지 방법

전 차시에서 우리는 「GET 은 보여줘, POST 는 저장해줘」 정도로 메서드 이름을 만났습니다. 그런데 둘 다 결국 "데이터를 서버로 보낸다"는 점은 같죠. 차이는 "데이터를 어디에 싣는가" 입니다.

왜 이걸 가르는 일이 중요한가

비밀번호를 입력해서 보냈는데 그게 URL 에 그대로 적혀 카카오톡에 공유되는 상황 — 상상만 해도 끔찍합니다. 어느 메서드가 어떤 자리에 데이터를 싣는지를 모르면 보안 사고가 일어납니다.

2. 비유 — 엽서 vs 봉투

GET = 엽서 / POST = 봉투

같은 편지를 부치더라도, 엽서는 겉면에 글자가 그대로 보여 누구나 볼 수 있고, 봉투는 안에 넣어 봉인합니다. GET 과 POST 의 차이는 정확히 이 차이입니다.

3. 직접 보는 두 모습

GET 으로 검색을 보낼 때

GET /search?q=spring&page=2 HTTP/1.1
Host: example.com
Accept: text/html

(바디 없음)

POST 로 같은 검색을 보낼 때

POST /search HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 14

q=spring&page=2

4. 표로 정리하는 차이

항목 GET POST
데이터 위치URL 의 ?메시지 바디
길이 제한있음 (브라우저별 ~2KB)사실상 없음
즐겨찾기·공유가능 (URL 복사)불가
새로고침 시그냥 다시 요청"재제출 하시겠습니까?"
민감 데이터❌ URL 에 노출✅ 바디에 숨김
기본 용도조회제출/생성
절대 금기

비밀번호·주민등록번호·신용카드 번호 같은 민감 데이터는 절대 GET 으로 보내지 않습니다. URL 은 브라우저 기록·서버 액세스 로그·검색 엔진 등 여러 곳에 흔적이 남습니다.

5. 언제 어느 것을 쓰는가

GET 의 자리
  • 검색 결과 보기
  • 게시글 목록
  • 게시글 상세 보기
  • 친구에게 공유 가능한 링크
POST 의 자리
  • 회원가입 폼 제출
  • 로그인 (비밀번호!)
  • 게시글 작성
  • 댓글 작성

6. F12 로 두 메서드 구별하기

크롬에서 F12 → Network 탭의 Method 열을 보면 각 요청이 GET 인지 POST 인지가 적혀 있습니다.

스크린샷
F12 Network 탭의 Method 열에 GET 과 POST 가 섞여 보이는 화면. POST 항목을 클릭하면 Payload 탭에 폼 데이터가 보임

POST 요청을 클릭하면 Payload(또는 Form Data) 탭에 바디 내용이 보입니다. GET 요청에는 그 탭이 없거나 비어 있습니다 — 데이터가 URL 에 있으니까요.

7. Before / After

전 차시 끝

메서드 이름은 알지만 둘이 어떻게 다른지 모름.

이번 차시 끝

데이터가 URL 에 실리는지 바디에 실리는지 안다. 회원가입 폼을 GET 으로 보내면 안 되는 이유를 설명할 수 있다.