본문 바로가기
백엔드개발지식

GET과 POST의 차이점은 무엇일까?

by 세류오 2026. 1. 27.

왜 GET과 POST로 나뉘었는지, 언제 어떤 걸 써야 하는지 에 대해 알아보자


[보통 기억하는 방법]

GET -> 조회

POST -> 저장

GET -> URL에 보임

POST -> URL에 안보임

[1. GET과 POST의 차이는 "서버에게 거는 말투"이다]

웹은 결국 다음과같이 요약된다.

"클라이언트가 서버에게 요청(Request)하고 서버가 응답(Response)한다.

GET과 POST를 다시 정리하면 다음과 같다.

- GET -> 이미 있는 데이터를 보여줘

- POST -> 이 데이터를 가지고 일 좀 해줘

이 관점으로 보면 URL의 노출 여부 같은 건 부차적인 결과일 뿐이다.

[2. GET은 왜 '조회 전용'일까?]

GET요청은 아래와 같이 생겼다.

GET /products?id=10 HTTP/1.1

위 코드는 상품 목록 중에서 id가 10인 상품 정보만 보여달라는 요청이다.

여기서 중요한 포인트는 이거다.

GET은 "서버 상태를 바꾸지 않겠다고 약속한 요청"

그래서 GET요청은 다음과 같은 특징을 가진다

- 새로고침을 해도 안전하다.

- 북마크해도 문제없다.

- 검색엔진이 마음껏 호출해도 된다.

같은 요청 -> 같은 결과 이것이 GET요청의 정체성이다.

 

[3. POST는 왜 '처리 요청'일까?]

POST /orders HTTP/1.1

{
  "productId": 10,
  "quantity": 2
}

POST요청은 이렇게 생겼다

이 요청의 의미는 단순 조회가 아니고 "이 데이터로 주문이라는 행동을 실행해줘"라는 뜻이다.

즉 POST는 

- DB에 데이터가 저장될 수 있다.

- 기존 데이터가 바뀔 수 있다.

- 서버 상태가 변할 수 있다.

➡️ 결과가 매번 같을 필요가 없다.

그렇기 때문에 POST요청은 "조심해서 한 번만 실행해야 하는 요청"이다.

 

[4. 비유를 들어 이해해보자]

GET요청은 "진열대에 있는 상품 구경만 할게요"

POST요청은 "이 상품 계산해주세요"

구경은 몇 번 해도 괜찮지만 계산은 단 한번만 해야한다.

그래서 GET요청은 안전하지만 POST요청은 주의가 필요하다.

 

[5. URL에 보이느냐 안 보이느냐는 왜 중요하지 않을까?]

GET요청은 URL에 파라미터가 보이고 POST는 안보인다. 라고 이야기한다.

하지만 중요한 것은 "이 요청이 서버 상태를 바꾸는가?"이다.

이 기준이 바로 설계의 기준이다.

 

[6. 그래서 새로고침 차이가 생긴다]

GET요청 페이지에서 새로고침을 하면 그냥 다시 조회되거나 별 다른 문제가 없다.

POST요청 후 페이지에서 새로고침을 할 시 "같은 요청을 다시 보낼까요?" 라는 경고가 필요하며 그렇지 않다면 중복 주문이 발생 할 수 있다.

 

[7. Spring 백엔드 관점에서 바라보기]

Spring에서 URL을 설계할 때도 이 철학을 따른다

@GetMapping("/users")
public List<User> getUsers() { }
@PostMapping("/users")
public void createUser(@RequestBody User user) { }

GET요청은 "회원들을 조회"

POST요청은 "회원 생성"

메서드의 선택 자체가 API의 의도를 설명하는 것 이다.

 

[8. 다시 정리해보자]

GET은 서버 상태를 변경하지 않는 조회 요청이다.

POST는 서버에 데이터를 전달 해 처리를 요청하는 방식이다.

GET요청은 안전하고 반복 호출이 가능하다.

POST요청은 중복 실행에 주의를 해야한다.

📌 요청의 의도
 ├─ 조회 → GET (안전, 반복 가능)
 └─ 처리 → POST (상태 변경, 주의)

 

[9. 진짜 마지막 정리]

1. GET과 POST의 차이는 '의도'이다

2. GET은 조회, POST는 처리 요청이다.

3. URL노출 여부는 본질적인 내용이 아니다.