목적 | 데이터를 요청(조회)할 때 사용 | 데이터를 생성/변경할 때 사용 |
데이터 전달 방식 | 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);
}
}
PostMapping
@RestController
public class UserController {
@PostMapping("/user")
public User createUser(@RequestBody UserDto userDto) {
return userService.createUser(userDto);
}
}
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") |
전달 형식
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 필요
}
@ModelAttribute @RequestBody
데이터 포맷 | application/x-www-form-urlencoded | application/json |
HTTP 메서드 | GET, POST | 주로 POST, PUT |
바인딩 방식 | 필드명 기반 (파라미터 → DTO) | JSON → 객체 변환 (Jackson) |
중첩 객체 지원 | ❌ 불편 | ✅ 쉽게 가능 |
요청 데이터 위치 | URL or Form | HTTP Body |
사용 예 | 로그인, 검색, 폼 제출 | 회원가입, 게시글 등록 등 |
헤더 (Header) 바디 (Body)
내용 | 요청/응답의 메타데이터 (ex. 인증, 형식) | 요청/응답의 실제 데이터 (ex. JSON, HTML) |
목적 | 요청/응답의 특성 설정, 처리 방법 명시 | 데이터 전송 (파일, 폼, JSON 등) |
크기 | 크기가 작고 짧은 정보들 | 크기가 커질 수 있음 |
예시 | Content-Type, Authorization | { "username": "kim", "password": "1234" } |
Swagger (1) | 2025.05.13 |
---|---|
CodeTree 커리큘럼 수강 2일차: Java 기초 문법 1 (2) | 2025.05.07 |
CodeTree 커리큘럼 수강 1일차: Java 기초 입출력 (0) | 2025.05.02 |