본문 바로가기
CS

GET 방식과 POST 방식 차이(feat. REST)

by 김무스비 2025. 1. 18.
728x90
반응형

오늘은 GET 방식과 POST 방식의 차이에 대해서 간단히 알아보려고 합니다. 

오픈 API를 활용해 데이터를 가져올 때, 다음과 같이 GET/POST로 구분이 되어있는 걸 볼 수 있는데요.

두 방식의 차이가 뭘까요? 그 차이를 살펴보기 전에 알아두면 좋은 개념인 REST에 대해서 먼저 알아봅시다.


REST란?

REST란 HTTP를 통해 데이터를 요청하고 응답하는 방식입니다. 여기서 HTTP란, 서버와 클라이언트 사이에 데이터를 주고 받는 프로토콜, 즉 약속 같은 개념입니다.

즉, REST는 HTTP URI(주소)를 통해 자원을 정의하고, HTTP의 Method(GET, POST, PUT, DELETE)를 사용해 정의한 자원에 대한 CRUD(Create, Read, Update, Delete) 연산을 하는 것을 의미합니다. REST API란 이런 REST 규칙들을 바탕으로 클라이언트와 서버가 통신하는 규칙 집합인것이구요.. 

 

더 쉽게 표현해보자면, 클라이언트가 요청을 보내고(프론트), 서버가 그 요청을 받아서 DB와 상호작용하고 결과를 프론트엔드로 반환(백엔드) 해주는 규칙, 방식이라고 생각하면 될 것 같습니다.

클라이언트는 REST API를 통해 백엔드 서버의 특정 엔드포인트(URL)에 http 요청을 보내고, 백엔드 서버가 비즈니스 로직을 처리하고/DB와 상호작용을 통해 결과물을 클라이언트에게 전달해주는거죠.

 

그리고 그 전송 방식 중에 GET 방식과 POST 방식이 있습니다.


GET 방식

GET 방식은 url에 필요한 정보를 담아서 필요한 정보를 요청해 데이터를 가져오는 읽기 전용 방식입니다. 특정 url로 가면 거기에 우리가 필요한 데이터(주로 JSON, XML 형태)가 있고, 그걸 읽어오는 방식인거죠. 

 

https://api.example.com/users?name=Alice

 

이런 식으로 하면 users 중에서 name이 Alice인 정보를 가져올 수 있습니다. 우리가 필요한 정보가 url에 담겨있죠?

 

{
  "id": 123,
  "name": "Alice",
  "email": "alice@example.com"
}

그렇게 해서 전달받는 데이터의 예시는 다음과 같을 겁니다.


POST 방식

POST 방식은 서버에 데이터를 전송하거나 새로운 리소스를 생성할 때 사용하는 방식입니다. 클라이언트가 서버로 데이터를 보낼 때 주로 사용하는 방식이고, 데이터는 요청의 본문(Body)에 포함해 전송합니다.

똑같이 엔드포인트는 존재하지만, GET 방식과는 달리 요청할 내용이 url에 그대로 담겨있는 게 아니라, 처리가 이뤄질 공간에 대한 내용만 정의되어있고, 요청은 body영역에 담아서 보내는 방식인거죠. 

 

좀 쉽게 설명해보면, 클라이언트가 서버로 필요한 데이터를 본문(body)영역에 담아서 보내고, 그에 맞는 결과를 받아오는 것이라고 생각하면 됩니다.   POST 방식으로는 데이터를 생성하거나 수정할 때 주로 사용하지만, 데이터를 조회할 때도 사용이 가능합니다.

 

예시1 - POST로 계정 생성

사용자가 입력한 정보를 바탕으로 계정을 생성하는 예시를 한 번 볼까요?

POST /users HTTP/1.1
Host: api.example.com   // 요청이 전달될 서버의 도메인 이름 또는 IP 주소.

Content-Type: application/json //요청 본문(body)에 포함된 데이터의 형식을 서버에 알려줌.

{
  "name": "Alice",
  "email": "alice@example.com"
}

사용자가 계정 생성을 위해 위와 같은 요청을 서버에 보내면,(Alice라는 이름으로, alice@exampl.com 이메일로 계정을 등록해주세요) 

 

HTTP/1.1 201 Created
Content-Type: application/json

{
  "id": 123,
  "name": "Alice",
  "email": "alice@example.com",
  "createdAt": "2025-01-18T12:34:56Z"
}

서버는 계정 생성이 성공했다면 위와 같은 결과를 돌려보내주게 됩니다. 

위와 같이 서버에 데이터를 보내 뭔가를 생성하는 것 뿐만 아니라, POST 방식으로도 GET 방식처럼 데이터 조회가 가능한데요.  주로 요청할 데이터가 매우 복잡한 조건을 포함하거나 필터링이 필요한데, URL로 모든 조건을 표현하기 어려울 때, 민감한 데이터를 서버에 전달해야 할 때 주로 사용합니다.

 

예시2 - POST로 복잡한 조건 조회

POST /filter-data HTTP/1.1
Content-Type: application/json

{
  "category": "electronics",
  "priceRange": [100, 500],
  "sortBy": "popularity"
}

 

위처럼 복잡한 로직을 url에 전부 담아서 적용하기는 힘들겠죠? 이럴 때는 POST 방식을 쓸 수 있습니다.

 

{
  "status": "success",
  "message": "Filtered data retrieved successfully",
  "data": [
    {
      "id": 1,
      "name": "Smartphone",
      "category": "electronics",
      "price": 299,
      "popularity": 1500
    },
    {
      "id": 2,
      "name": "Laptop",
      "category": "electronics",
      "price": 499,
      "popularity": 1200
    },
    {
      "id": 3,
      "name": "Headphones",
      "category": "electronics",
      "price": 149,
      "popularity": 800
    }
  ]
}

요청이 성공했다면, 위와 같은 결과를 받을 수 있겠죠?


 

하지만, RESTful 설계 하에서는 데이터를 조회할 때는 주로 GET을 사용하는 것이 더 적합하고, POST는 주로 데이터를 생성하거나 복잡한 작업을 위해 사용해야 RESTful 원칙에 부합하다고 합니다.

이건 왜 그럴까요? 여기에는 다음과 같은 이유들이 있습니다.

1)안전성

 

  • GET 요청은 서버에서 데이터를 읽기만 하며, 서버의 상태를 변경하지 않기 때문에 안전한 요청으로 간주됩니다.
  • GET 방식은 같은 요청을 여러 번 보내도 결과가 변하지 않음.(GET 방식이 멱등성 보장)
  • 반면, POST 요청은 데이터 생성, 수정, 삭제 등을 포함할 수 있기 때문에 서버 상태를 변경할 수 있어 "안전하지 않다"는 평가를 받습니다.

 

2) 캐싱 가능성

 

  • GET 요청은 브라우저나 서버에서 캐싱할 수 있어, 동일한 요청에 대해 반복적인 요청을 피하고, 성능을 개선할 수 있습니다.
  • POST 요청은 주로 데이터 생성이나 처리와 관련된 요청이기 때문에 캐싱되지 않는 경우가 많습니다.

 

3)URL에 파라미터 포함

 

  • GET 요청은 요청하는 데이터를 URL에 포함시켜서 쉽게 요청할 수 있습니다. URL에 포함된 파라미터를 통해 어떤 데이터를 조회할지 명확하게 알 수 있습니다.
  • POST 요청은 데이터를 요청 본문에 담아 보내는 방식이기 때문에, 조회할 데이터의 조건을 명확히 전달하기 어렵고, 요청 본문이 복잡해질 수 있습니다.

4) SEO(검색 엔진 최적화)

 

  • GET 요청은 URL이 공개되므로, 검색 엔진에서 이 URL을 크롤링하고, SEO에 유리할 수 있습니다.
  • POST 요청은 URL이 아닌 본문을 통해 데이터를 전송하기 때문에 검색 엔진에서 처리되지 않으며, SEO에 불리합니다.

그렇기 때문에 가급적이면 데이터를 조회할 때는 가급적이면 GET 방식으로 조회하고, 데이터를 생성/수정/삭제 할 때는 POST를 사용하는게 REST 규칙을 잘 지킨다고 할 수 있겠죠?


이상입니다. 읽어주셔서 감사합니다.

 

 

728x90
반응형