📕 목차
1. 요청 데이터 (Request Data)
요청 데이터(Request Data)
- 클라이언트(Client)가 서버(Server)에 HTTP 요청을 보낼 때, 원하는 작업을 수행하거나 정보를 전달하기 위해 함께 보내는 데이터를 의미한다.
- 요청 데이터 전달 방식은 크게 세가지가 있다.
- Query Parameter
- HTTP Form Data
- HTTP Request Body
전달 방식 | 전송 위치 | 사용 용도 | 특징 |
Query Parameter | URL | 검색, 필터링 | 데이터 노출됨 |
HTTP Form Data | Body | 로그인, 회원가입 등 | HTML 폼에 최적화 |
HTTP Request Body | Body | API 호출, JSON 전송 | 구조화된 데이터 전송 |
2. Query Parameter
Query Parameter
- URL에 데이터를 key=value 형식으로 붙여 전달하는 방식
- 주로 GET 요청에서 사용
- 데이터가 주소창에 노출된다.
GET /hello?name=kim&age=25
Spring 요청 처리 예시 (Controller)
@GetMapping("/hello")
public String hello(@RequestParam String name, @RequestParam int age) {
return "Hello " + name + ", age: " + age;
}
3. HTTP Form Data
HTTP Form Data
- HTML <form> 태그를 통해 데이터를 전달하는 방식
- 주로 POST, PUT 요청에서 사용
- application/x-www-form-urlencoded 방식으로 전송됨
<form method="post" action="/submit">
<input type="text" name="username">
<input type="password" name="password">
<button type="submit">Submit</button>
</form>
POST /login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
username=kim&password=1234
Spring 요청 처리 예시
@PostMapping("/submit")
public String submit(@RequestParam String username, @RequestParam String password) {
return "Username: " + username;
}
또는
// 객체로 받기
@PostMapping("/submit")
public String submit(@ModelAttribute LoginForm form) {
return "Username: " + form.getUsername();
}
public class LoginForm {
private String username;
private String password;
// getters/setters
}
4. HTTP Request Body
HTTP Request Body
- 요청 본문(Body)에 데이터를 담아 전달하는 방식
- 주로 POST, PUT, PATCH 요청에서 사용
- JSON, XML, TEXT 등의 포맷 사용
- application/json, text/plain 등의 Content-Type
POST /json
Content-Type: application/json
{
"title": "hello",
"content": "world"
}
Spring 요청 처리 예시
@PostMapping("/json")
public String json(@RequestBody ArticleDto article) {
return "Title: " + article.getTitle();
}
public class ArticleDto {
private String title;
private String content;
}
5. 어노테이션별 사용법 정리
어노테이션 | 주 용도 | 데이터 위치 | 변환 대상 |
@RequestParam | 단일 파라미터 추출 | Query / Form | 기본 타입 |
@ModelAttribute | 폼 데이터 → 객체 바인딩 | Form | 객체 |
@RequestBody | Body 데이터 → 객체 바인딩 | JSON, TEXT 등 | 객체 |
HttpEntity<T> | Body + Header 받기 | 전체 요청 | 객체 or 문자열 |
@ResponseBody | 객체 → 응답 본문 | JSON 등 응답 | 객체 |
@RequestParam
- Query Parameter 또는 Form Data에서 단일 값 추출 시 사용
@GetMapping("/hello")
public String hello(@RequestParam String name, @RequestParam int age) {
return "Hello " + name + ", age: " + age;
}
GET /hello?name=kim&age=30
@ModelAttribute
- Form Data를 객체로 바인딩할 때 사용
- 내부적으로 @RequestParam을 필드별로 적용한 것과 유사
@PostMapping("/login")
public String login(@ModelAttribute LoginForm form) {
return "User: " + form.getUsername();
}
public class LoginForm {
private String username;
private String password;
// getters/setters
}
@RequestBody
- HTTP 요청 본문(Body)에 담긴 JSON, XML, TEXT 등을 자바 객체로 변환
- HttpMessageConverter가 자동으로 변환 처리
@PostMapping("/article")
public String postArticle(@RequestBody ArticleDto dto) {
return "Title: " + dto.getTitle();
}
public class ArticleDto {
private String title;
private String content;
// getters/setters
}
POST /article
Content-Type: application/json
{
"title": "Spring",
"content": "Framework"
}
HttpEntity<T>
- 요청 전체(Request Header + Body)를 포함한 객체로 받고 싶을 때 사용
@PostMapping("/raw")
public String rawRequest(HttpEntity<String> httpEntity) {
String body = httpEntity.getBody();
return "Received: " + body;
}
@ResponseBody
- 메서드 반환값을 뷰 이름이 아니라 HTTP 응답 본문으로 직접 전달
- 주로 JSON 응답 시 사용
@GetMapping("/data")
@ResponseBody
public ArticleDto data() {
return new ArticleDto("Title", "Content");
}
* @RequestBody와 @ResponseBody는 모두 HttpMessageConverter에 의존하여 동작한다.
- HttpMessageConverter: 데이터 → Java 객체 변환, Java 객체 → 데이터 변환하는 역할. (데이터는 보통 JSON)
'Spring > 강의' 카테고리의 다른 글
[📕 기초 Spring] 5-3. 메모장 프로젝트 - ver1 (CRUD 실습, MVC 패턴 적용) (0) | 2025.05.04 |
---|---|
[📕 기초 Spring] 5-2. 응답 데이터(서버 → 클라이언트)와 처리 방법 (0) | 2025.05.04 |
[📕 기초 Spring] 4-1. 스프링 주요 어노테이션(Annotation) (1) | 2025.05.03 |
[📕 기초 Spring] 3-3. Spring MVC (0) | 2025.05.03 |
[📕 기초 Spring] 3-2. MVC 패턴의 발전 (0) | 2025.05.03 |