본문 바로가기
IT - 프로그래밍/IT 상식

POST는 뭐고, GET은 뭐죠? HTTP 메서드 완벽 정리

by 파란 호랑 2026. 9. 3.
반응형

웹 개발을 시작하면 가장 먼저 만나는 개념이 바로 GETPOST입니다. 이 둘은 클라이언트(웹브라우저, 모바일 앱 등)가 서버에 요청할 때 사용하는 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에 표시됩니다.

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 설계 원칙을 더 자세히 다루겠습니다.


도움이 되셨나요? 댓글로 질문을 남겨주세요! 💬

반응형