웹의 동작 원리 — 읽기 자료
? 뒤에 적어 보내는 방법. 주로 「조회」 용도. 예: 검색창, 게시판 목록.
? 뒤에 붙는 이름=값&이름=값 형식의 문자열. GET 이 데이터를 싣는 자리.
전 차시에서 우리는 「GET 은 보여줘, POST 는 저장해줘」 정도로 메서드 이름을 만났습니다. 그런데 둘 다 결국 "데이터를 서버로 보낸다"는 점은 같죠. 차이는 "데이터를 어디에 싣는가" 입니다.
비밀번호를 입력해서 보냈는데 그게 URL 에 그대로 적혀 카카오톡에 공유되는 상황 — 상상만 해도 끔찍합니다. 어느 메서드가 어떤 자리에 데이터를 싣는지를 모르면 보안 사고가 일어납니다.
같은 편지를 부치더라도, 엽서는 겉면에 글자가 그대로 보여 누구나 볼 수 있고, 봉투는 안에 넣어 봉인합니다. GET 과 POST 의 차이는 정확히 이 차이입니다.
GET /search?q=spring&page=2 HTTP/1.1
Host: example.com
Accept: text/html
(바디 없음)
?q=spring&page=2 가 그대로 적혀 있다POST /search HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 14
q=spring&page=2
/search 뿐)| 항목 | GET | POST |
|---|---|---|
| 데이터 위치 | URL 의 ? 뒤 | 메시지 바디 |
| 길이 제한 | 있음 (브라우저별 ~2KB) | 사실상 없음 |
| 즐겨찾기·공유 | 가능 (URL 복사) | 불가 |
| 새로고침 시 | 그냥 다시 요청 | "재제출 하시겠습니까?" |
| 민감 데이터 | ❌ URL 에 노출 | ✅ 바디에 숨김 |
| 기본 용도 | 조회 | 제출/생성 |
비밀번호·주민등록번호·신용카드 번호 같은 민감 데이터는 절대 GET 으로 보내지 않습니다. URL 은 브라우저 기록·서버 액세스 로그·검색 엔진 등 여러 곳에 흔적이 남습니다.
크롬에서 F12 → Network 탭의 Method 열을 보면 각 요청이 GET 인지 POST 인지가 적혀 있습니다.
POST 요청을 클릭하면 Payload(또는 Form Data) 탭에 바디 내용이 보입니다. GET 요청에는 그 탭이 없거나 비어 있습니다 — 데이터가 URL 에 있으니까요.
메서드 이름은 알지만 둘이 어떻게 다른지 모름.
데이터가 URL 에 실리는지 바디에 실리는지 안다. 회원가입 폼을 GET 으로 보내면 안 되는 이유를 설명할 수 있다.