[공부] IT 강의 수강/IT 05
HTTP GET vs POST
기뮹디_
2025. 5. 9. 13:26
목적 | 데이터를 요청(조회)할 때 사용 | 데이터를 생성/변경할 때 사용 |
데이터 전달 방식 | URL에 쿼리 파라미터로 전달 (?key=value) | HTTP Body에 담아서 전달 |
노출 여부 | 주소창에 보임 (보안에 취약) | 주소창에 안 보임 |
데이터 크기 | 제한적 (브라우저마다 다름) | 상대적으로 큼 |
캐싱 | 캐싱 가능 | 기본적으로 캐싱 안 함 |
안전성/멱등성 | 안전하고 멱등적 | 멱등성 없음 (같은 요청 여러 번 보내면 부작용 발생 가능) |
GetMapping
@RestController
public class UserController {
// 예: /user?id=123
@GetMapping("/user")
public User getUser(@RequestParam Long id) {
return userService.getUserById(id);
}
}
- 클라이언트는 URL에 파라미터를 붙여서 요청함
- 조회용 API에 주로 사용
PostMapping
@RestController
public class UserController {
@PostMapping("/user")
public User createUser(@RequestBody UserDto userDto) {
return userService.createUser(userDto);
}
}
- 클라이언트는 JSON 등을 body에 담아 전송
- 생성/수정/삭제용 API에 주로 사용
API 호출 예시
GET http://localhost:8080/user?id=123
POST http://localhost:8080/user
Body: { "name": "Alice"
, "email": "alice@example.com" }
@RequestParam @RequestBody
데이터 위치 | URL의 쿼리 파라미터 | HTTP Request Body |
형식 예시 | /user?id=10&name=kim | { "id": 10, "name": "kim" } |
사용 상황 | 단순 파라미터 전달 (주로 GET) | JSON, 복잡한 객체 전달 (POST/PUT 등) |
Spring MVC에서 파라미터를 넘기는 종류
쿼리 파라미터 | @RequestParam | URL의 ?key=value 형식 | /user?id=1 |
경로 변수 | @PathVariable | URL 경로에 값 포함 | /user/1 |
JSON 바디 | @RequestBody | JSON으로 넘긴 데이터 전체 | { "name": "kim" } |
폼 데이터 | @ModelAttribute | 폼 입력값 바인딩 (GET/POST) | name=kim&age=20 |
헤더 | @RequestHeader | 요청 헤더에서 값 추출 | Authorization 등 |
쿠키 | @CookieValue | 요청 쿠키에서 값 추출 | JSESSIONID 등 |
세션 | HttpSession | 세션에서 사용자 정보 등 꺼낼 때 | session.getAttribute("user") |
ModelAttribute
전달 형식
POST /register
Content-Type: application/x-www-form-urlencoded
name=Alice&email=alice@example.com&age=30
DTO 클래스 정의
public class UserForm {
private String name;
private String email;
private int age;
// 반드시 기본 생성자 + getter/setter 필요
}
RequestBody와 차이점
@ModelAttribute @RequestBody
데이터 포맷 | application/x-www-form-urlencoded | application/json |
HTTP 메서드 | GET, POST | 주로 POST, PUT |
바인딩 방식 | 필드명 기반 (파라미터 → DTO) | JSON → 객체 변환 (Jackson) |
중첩 객체 지원 | ❌ 불편 | ✅ 쉽게 가능 |
요청 데이터 위치 | URL or Form | HTTP Body |
사용 예 | 로그인, 검색, 폼 제출 | 회원가입, 게시글 등록 등 |
HTTP Header와 Body
✅ 3. 헤더와 바디의 차이점
🔸 헤더의 특징
- 메타데이터: 데이터를 어떻게 처리할지, 데이터의 성격을 지정하는 정보
- 클라이언트와 서버 간의 상호작용을 정의: 예를 들어, 어떤 형식의 데이터가 오갈지, 인증은 어떻게 처리할지 등
- 각각의 요청/응답에 필수적으로 들어가는 정보가 많음 (ex. Content-Type, Authorization 등)
🔸 바디의 특징
- 실제 데이터: 요청이나 응답의 핵심 데이터가 담기는 부분
- 유동적인 데이터: 바디에는 데이터 포맷이 다양할 수 있음 (ex. JSON, XML, 폼 데이터, 파일 등)
- 바디의 크기는 가변적이고 커질 수 있음 (ex. 파일 업로드 시)
헤더 (Header) 바디 (Body)
내용 | 요청/응답의 메타데이터 (ex. 인증, 형식) | 요청/응답의 실제 데이터 (ex. JSON, HTML) |
목적 | 요청/응답의 특성 설정, 처리 방법 명시 | 데이터 전송 (파일, 폼, JSON 등) |
크기 | 크기가 작고 짧은 정보들 | 크기가 커질 수 있음 |
예시 | Content-Type, Authorization | { "username": "kim", "password": "1234" } |
반응형