왜 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노출 여부는 본질적인 내용이 아니다.
'백엔드개발지식' 카테고리의 다른 글
| 프로세스와 스레드의 차이 (0) | 2026.01.29 |
|---|---|
| [네트워크] https://www.google.com을 입력하면 무슨일이 일어날까? (0) | 2026.01.25 |
| [네트워크] Snappy에 대해 알아보자 (0) | 2026.01.10 |