웹 개발을 시작하면 가장 먼저 만나는 개념이 바로 GET과 POST입니다. 이 둘은 클라이언트(웹브라우저, 모바일 앱 등)가 서버에 요청할 때 사용하는 HTTP 메서드인데, 많은 초보자들이 이 둘의 차이를 명확히 구분하지 못합니다. 오늘은 GET과 POST의 차이를 쉽고 명확하게 설명해드리겠습니다.
🔍 GET과 POST의 정의
GET이란?
GET은 서버에 데이터를 요청할 때 사용합니다. 서버에서 정보를 읽기만 하려고 할 때 쓰는 방식입니다.
POST란?
POST는 서버에 새로운 데이터를 전송할 때 사용합니다. 서버에 데이터를 생성하거나 수정할 때 쓰는 방식입니다.
📋 GET vs POST 비교표
항목 GET POST
| 목적 | 데이터 조회 | 데이터 전송/생성 |
| 데이터 위치 | URL에 포함 | 요청 본문(Body)에 포함 |
| 보안 | 낮음 (URL에 노출됨) | 높음 (URL에 안보임) |
| 데이터 크기 | 제한됨 (2KB ~ 8KB) | 무제한 |
| 캐싱 | 가능 | 일반적으로 안함 |
| 북마크 | 가능 | 불가능 |
💡 실제 예제로 이해하기
GET 예제: 블로그 포스트 조회
// 사용자가 블로그 글을 조회할 때
fetch('https://example.com/api/posts/123')
.then(response => response.json())
.then(data => console.log(data));
URL에서 볼 수 있듯이, 어떤 포스트를 조회하는지가 URL에 표시됩니다.
- https://example.com/api/posts/123 ← 123번 글 조회
- https://example.com/api/posts?category=tech&sort=recent ← 카테고리와 정렬 옵션 포함
GET 요청은 서버의 상태를 변경하지 않습니다. 같은 요청을 여러 번 해도 결과는 동일합니다.
POST 예제: 새로운 댓글 작성
// 사용자가 새로운 댓글을 작성할 때
fetch('https://example.com/api/comments', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
postId: 123,
author: '김개발',
content: '좋은 글 감사합니다!'
})
})
.then(response => response.json())
.then(data => console.log('댓글이 등록되었습니다', data));
URL은 단순히 https://example.com/api/comments이지만, 실제 데이터는 요청 본문에 숨겨져 있습니다. 민감한 정보(비밀번호, 신용카드 번호 등)를 전송할 때는 반드시 POST를 사용해야 합니다.
🚗 생활 속 비유로 이해하기
GET과 POST를 도서관 이용에 비유해보겠습니다.
- GET = 도서관에서 책을 빌리는 행위
- "123번 책이 뭐죠?" 라고 물어보는 것
- 도서관의 상태가 변하지 않음
- 누가 봐도 알 수 있음 (투명함)
- POST = 도서관에 새로운 책을 기증하는 행위
- 도서관의 책 개수가 증가함 (서버 상태 변경)
- 기증 서류는 비공개 (URL에 노출 안됨)
- 같은 책을 다시 기증하면 결과가 다름
🛡️ 보안 관점에서의 차이
GET의 보안 문제
https://example.com/login?username=user123&password=1234567
URL에 비밀번호가 그대로 노출됩니다! 브라우저 히스토리, 서버 로그에도 남습니다.
POST의 보안 장점
fetch('https://example.com/login', {
method: 'POST',
body: JSON.stringify({
username: 'user123',
password: '1234567' // 요청 본문에만 존재
})
});
비밀번호가 URL에 노출되지 않습니다.
⚠️ 주의: POST라고 해서 완전히 안전한 것은 아닙니다. 반드시 HTTPS를 사용해야 합니다!
📝 Flask로 GET/POST 처리하기
Python Flask를 사용한다면 이렇게 구현합니다:
from flask import Flask, request, jsonify
app = Flask(__name__)
# GET 요청 처리 - 데이터 조회
@app.route('/api/posts/<int:post_id>', methods=['GET'])
def get_post(post_id):
# 데이터베이스에서 post_id 글 조회
post = {'id': post_id, 'title': '좋은 글', 'content': '내용..'}
return jsonify(post)
# POST 요청 처리 - 데이터 생성
@app.route('/api/comments', methods=['POST'])
def create_comment():
data = request.get_json() # 요청 본문에서 JSON 데이터 추출
# 데이터베이스에 새로운 댓글 저장
new_comment = {
'id': 1,
'author': data.get('author'),
'content': data.get('content')
}
return jsonify(new_comment), 201 # 201: Created
if __name__ == '__main__':
app.run(debug=True)
정리: 언제 뭘 써야 하나?
GET을 사용하세요
- ✓ 데이터를 조회할 때
- ✓ 검색, 필터링, 정렬할 때
- ✓ 서버의 상태를 변경하지 않을 때
- 예: 게시글 읽기, 사용자 정보 조회, 검색 결과 보기
POST를 사용하세요
- ✓ 새로운 데이터를 생성할 때
- ✓ 기존 데이터를 수정/삭제할 때
- ✓ 민감한 정보를 전송할 때
- ✓ 서버의 상태를 변경할 때
- 예: 회원가입, 댓글 작성, 로그인, 주문하기
🎓 추가 학습: PUT과 DELETE
GET과 POST 외에도 다른 HTTP 메서드들이 있습니다:
- PUT: 데이터 전체 수정
- DELETE: 데이터 삭제
- PATCH: 데이터 부분 수정
하지만 GET과 POST만 잘 이해해도 대부분의 웹 개발에서 충분합니다!
마치며
GET과 POST는 웹 개발의 기초이면서도 가장 중요한 개념입니다.
- GET = 서버에서 데이터를 가져오기
- POST = 서버에 데이터를 보내기
이 한 문장만 기억해도 충분합니다. 아직도 헷갈린다면 "도서관 비유"를 떠올려보세요! 🏫
다음 글에서는 RESTful API 설계 원칙을 더 자세히 다루겠습니다.
도움이 되셨나요? 댓글로 질문을 남겨주세요! 💬
'IT - 프로그래밍 > IT 상식' 카테고리의 다른 글
| [IT 상식] QR코드 원리 1분 만에 파악하기: 사각형 속에 숨겨진 비밀! (0) | 2026.06.06 |
|---|---|
| HTTP 상태 코드란? 초보자를 위한 쉬운 설명 (0) | 2025.02.25 |