π[Spring] Controller, DTO, API λͺ
μΈ, @GetMapping
, MIME, @RequestParam
, νΌ λ°μ΄ν°, @RestController
1οΈβ£ Controller.
- Controller λ μΉ μ ν리μΌμ΄μ μ μμ²μ μ²λ¦¬νλ ν΅μ¬ κ΅¬μ± μμλ‘, μ¬μ©μ μμ²(URL μμ²)μ λ°μ μ΄λ₯Ό μ²λ¦¬ν ν μ μ ν μλ΅(λ·° λλ λ°μ΄ν°λ₯Ό λ°ν)μ μ 곡νλ μν μ ν©λλ€.
- μ΄λ λ³΄ν΅ MVC(Model-View-Controller) ν¨ν΄μμ Controller μ ν΄λΉνλ©°, ν΄λΌμ΄μΈνΈμ μ λ ₯μ λ°μ λΉμ¦λμ€ λ‘μ§κ³Ό μνΈμμ©νκ³ κ²°κ³Όλ₯Ό λ°ννλ νλ¦μ λ΄λΉν©λλ€.
- Controllerλ μ£Όλ‘
@Controller
λλ@RestController
μ λν μ΄μ μ μ¬μ©νμ¬ μ μ λ©λλ€.
1. @Controller
μ @RestController
μ λν
μ΄μ
μ μ°¨μ΄μ .
-
1.
@Controller
- μΌλ°μ μΌλ‘ λ·°(View) λ₯Ό λ°νν©λλ€.
- Thymeleafμ κ°μ ν νλ¦Ώ μμ§μ μ¬μ©ν λ HTML νμΌμ λ°νν λ μ¬μ©λ©λλ€.
- μ: μ¬μ©μ μμ²μ μ²λ¦¬νκ³ HTML νμ΄μ§λ₯Ό λ λλ§νλ κ²½μ°.
-
2.
@RestController
- μ£Όλ‘ JSON, XML λ± λ°μ΄ν° ν¬λ§·μΌλ‘ μλ΅μ λ°νν©λλ€.
-
@Controller
μ@ResponseBody
λ₯Ό ν¨κ» μ¬μ©νλ κ²κ³Ό λμΌν μν μ ν©λλ€. - RESTful APIλ₯Ό ꡬνν λ μ£Όλ‘ μ¬μ©λ©λλ€.
2. κΈ°λ³Έ μμ.
- 1.
@Controller
λ₯Ό μ΄μ©ν HTML νμ΄μ§ λ°ν
@Controller
public class HomeController {
@GetMapping("/home")
public String homePage(Model model) {
model.attribute("message", "Welcome to the home page!");
return "home"; // resource/templates/home.htmlλ‘ μ°κ²°λ¨(Thymeleafμ κ°μ ν
νλ¦Ώ μμ§ μ¬μ©)
}
}
- 2.
@RestController
λ₯Ό μ΄μ©ν JSON μλ΅ λ°ν
@RestController
public class ApiController {
@GetMapping("/api/data")
public ResponseEntity<String> getData() {
return new ResponseEntity<>("Hello, this is JSON data!", HttpStatus.OK);
}
}
3. Controllerμ μ£Όμ μν .
-
μμ² λ§€ν
- URLμ νΉμ λ©μλμ 맀ννμ¬ μ μ ν μ²λ¦¬λ₯Ό νλλ‘ ν©λλ€.(
@GetMapping
,@PostMapping
,@RequestMapping
λ± μ¬μ©)
- URLμ νΉμ λ©μλμ 맀ννμ¬ μ μ ν μ²λ¦¬λ₯Ό νλλ‘ ν©λλ€.(
-
λΉμ¦λμ€ λ‘μ§ νΈμΆ
- μλΉμ€ κ³μΈ΅κ³Ό μνΈμμ©νμ¬ νμν μμ μ μνν©λλ€.
-
λͺ¨λΈκ³Ό λ·° μ²λ¦¬
- λ°μ΄ν°λ₯Ό μ²λ¦¬ν ν λ·°λ‘ λ°μ΄ν°λ₯Ό μ λ¬νκ±°λ JSON λ±μ νμμΌλ‘ μλ΅ν©λλ€.
Spring Bootμ Controllerλ μ΄λ¬ν λ°©μμΌλ‘ μ ν리μΌμ΄μ μ ν΅μ¬ νλ¦μ μ μ΄νλ©°, μΉ μμ²μ μ²λ¦¬νλ μ€μν μν μ λ΄λΉν©λλ€.
2οΈβ£ DTO(Data Transfer Object)
- DTO(Data Transfer Object) λ κ³μΈ΅ κ°μ λ°μ΄ν°λ₯Ό μ μ‘ν λ μ¬μ©νλ κ°μ²΄μ λλ€.
- μΌλ°μ μΌλ‘, λ°±μλ μ ν리μΌμ΄μ μμλ μ¬λ¬ κ³μΈ΅(Controller, Service, Repository λ±) κ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κ² λλλ°, μ΄λ μ¬μ©μκ° μ λ¬ν λ°μ΄ν°λ₯Ό λ΄κ±°λ κ°κ³΅λ λ°μ΄ν°λ₯Ό μ λ¬νκΈ° μν΄ DTOλ₯Ό μ¬μ©ν©λλ€.
1. DTOμ μ£Όμ λͺ©μ .
-
1. λ°μ΄ν° μΊ‘μν
- DTOλ νΉμ λ°μ΄ν° ꡬ쑰λ₯Ό μΊ‘μννμ¬ μΈλΆμ λ ΈμΆλ©λλ€.
- μ΄λ‘ μΈν΄ λΆνμν λ°μ΄ν° λ ΈμΆμ λ°©μ§ν μ μμ΅λλ€.
-
2. μ±λ₯ μ΅μ ν
- λκ·λͺ¨ λ°μ΄ν°λ₯Ό ν λ²μ μ μ‘νλ κ²λ³΄λ€λ, νμν λ°μ΄ν°λ§ DTOλ₯Ό ν΅ν΄ μ μ‘νλ κ²μ΄ λ€νΈμν¬ νΈλν½ λ° μ±λ₯μ μ΅μ ννλ λ° λμμ΄ λ©λλ€.
-
3. κ³μΈ΅ λΆλ¦¬
- DTOλ μ£Όλ‘ μλΉμ€ κ³μΈ΅μμ λ°μ΄ν°λ₯Ό μ‘°μνκ³ , μ΄λ₯Ό 컨νΈλ‘€λ¬ κ³μΈ΅μΌλ‘ μ λ¬νλ λ° μ¬μ©λ©λλ€.
- μ΄λ₯Ό ν΅ν΄ μ ν리μΌμ΄μ μ κ° κ³μΈ΅μ΄ λͺ ννκ² λΆλ¦¬λλ©°, μ μ§λ³΄μμ±κ³Ό νμ₯μ±μ΄ νμ±λ©λλ€.
2. DTOμ μν°ν°μ μ°¨μ΄μ .
-
μν°ν°(Entity)
- μν°ν°λ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈκ³Ό 1:1λ‘ λ§€νλλ©°, μ£Όλ‘ μμμ±(Persistence)μ λ΄λΉν©λλ€.
- λ°μ΄ν°λ² μ΄μ€μμ μνΈμμ©μ κ΄λ¦¬νλ μν μ νλ©°, λΉμ¦λμ€ λ‘μ§μ ν¬ν¨νμ§ μλ κ²μ΄ μΌλ°μ μ λλ€.
-
DTO
- DTOλ λ°μ΄ν°λ₯Ό μ λ¬νλ λ° μ€μ μ λλ©°, λ³΄ν΅ μν°ν°λ₯Ό λ³ννκ±°λ νΉμ λ‘μ§μ μ²λ¦¬νκΈ° μν΄ μ¬μ©λ©λλ€.
- μν°ν°μλ λ€λ₯΄κ² λ°μ΄ν°λ² μ΄μ€μ μ§μ μ μΌλ‘ 맀νλμ§ μμΌλ©°, μ μ‘νκ³ μ νλ λ°μ΄ν°λ§μ ν¬ν¨ν©λλ€.
3. μ¬μ© μμ.
-
λ€μμ κ°λ¨ν User μν°ν°μ UserDTOμ μμμ λλ€.
-
User μν°ν°
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// getters and setters
}
- UserDTO
public class UserDTO {
private String name;
private String email;
// μμ±μ, getters, setters
}
μ΄μ²λΌ μν°ν°λ λ°μ΄ν°λ² μ΄μ€μ μ°κ²°λ κ°μ²΄μ΄κ³ , DTOλ μ¬μ©μμκ² λ°μ΄ν°λ₯Ό μ λ¬νκ±°λ μμ²μ λ°μμ¬ λ μ¬μ©λλ κ°μ²΄μ λλ€.
3οΈβ£ API λͺ μΈ(API Specification)
- API λͺ μΈ(API Specification) λ API(Application Programming Interface)μ λμ λ°©μ, μμ² λ° μλ΅ νμ, μ¬μ© κ°λ₯ν λ©μλ, νλΌλ―Έν° λ±μ λͺ νν μ€λͺ ν λ¬Έμμ λλ€.
- API λͺ μΈλ API μ¬μ©μ(μ£Όλ‘ κ°λ°μ)λ€μ΄ APIλ₯Ό μ νν μ΄ν΄νκ³ μ¬μ©ν μ μλλ‘ λμμ£Όλ μ€μν λ¬Έμμ λλ€.
1. API λͺ μΈμ μ£Όμ λ΄μ©.
-
1. API κ°μ.
- APIκ° μ΄λ€ λͺ©μ μ κ°μ§κ³ μλμ§, μ£Όλ‘ μ΄λ€ κΈ°λ₯μ μννλμ§ κ°λ¨ν μ€λͺ μ ν¬ν¨ν©λλ€.
-
2. μλν¬μΈνΈ(Endpoint)
- APIμ μ κ·Ό κ²½λ‘λ₯Ό μλ―Ένλ©°, κ° μλν¬μΈνΈλ νΉμ κΈ°λ₯μ μνν©λλ€.
- μλ₯Ό λ€μ΄
GET /users
λ μ¬μ©μμ λͺ©λ‘μ κ°μ Έμ€λ API μλν¬μΈνΈμΌ μ μμ΅λλ€.
-
3. HTTP λ©μλ
- κ° μλν¬μΈνΈμ μ¬μ©ν μ μλ HTTP λ©μλ(GET, POST, PUT, DELETE λ±)κ° λͺ μλ©λλ€.
- μλ₯Ό λ€μ΄,
GET /users
λ μ¬μ©μ λͺ©λ‘μ μ‘°ννκ³ ,POST /users
λ μ μ¬μ©μλ₯Ό μμ±νλ APIλ₯Ό μλ―Έν μ μμ΅λλ€.
-
4. μμ²(Request) νλΌλ―Έν°
- API μμ² μ ν¬ν¨ν μ μλ νλΌλ―Έν°λ λ°μ΄ν° νμμ λͺ μν©λλ€.
- νλΌλ―Έν°λ κ²½λ‘ λ³μ(Path Variables), 쿼리 νλΌλ―Έν°(Query Parameters), ν€λ(Headers), λλ λ°λ(Body)μ ν¬ν¨λ μ μμ΅λλ€.
-
κ²½λ‘ λ³μ :
GET /users/{id}
μμ{id}
κ° κ²½λ‘ λ³μ μ λλ€. -
쿼리 νλΌλ―Έν° :
GET /users?status=active
μμstatus
κ° μΏΌλ¦¬ νλΌλ―Έν°μ λλ€.
-
κ²½λ‘ λ³μ :
-
5. μμ² λ³Έλ¬Έ(Request Body)
- μ£Όλ‘ POSTλ PUT κ°μ μμ²μμ μ¬μ©λλ©°, JSON, XML λλ νΌ λ°μ΄ν° λ±μΌλ‘ μ μ‘ν λ°μ΄ν°λ₯Ό μ μν©λλ€.
- μλ₯Ό λ€μ΄, μ¬μ©μλ₯Ό μμ±νλ APIμμλ λ€μκ³Ό κ°μ JSON μμ²μ΄ λ³Έλ¬Έμ΄ μμ μ μμ΅λλ€.
{
"name": "Jhon Doe",
"email": "jhon@example.com"
}
-
6. μλ΅(Response)
- API μμ²μ λν μλ΅ νμμ μ€λͺ ν©λλ€.
- μ±κ³΅μ μΈ μμ²μ΄λ μ€ν¨νμ λμ μλ΅ μ½λ(μ: 200 OK, 404 Not Found)μ ν¨κ» μλ΅ λ³Έλ¬Έ(Response Body) νμλ λͺ μλ©λλ€.
{
"id": 1,
"name": "Jhon Doe",
"email" "jhon@example.com"
}
-
7. μν μ½λ(Status Code)
- κ° μλ΅μ κ²°κ³Όλ₯Ό λνλ΄λ HTTP μν μ½λλ₯Ό ν¬ν¨ν©λλ€.
- μΌλ°μ μΈ μν μ½λλ λ€μκ³Ό κ°μ΅λλ€.
- 200 OK : μ±κ³΅μ μΈ μμ².
- 201 Created : 리μμ€ μμ± μ±κ³΅.
- 400 Bad Request : μλͺ»λ μμ².
- 401 Unauthorized : μΈμ¦ μ€ν¨.
- 404 Not Found : 리μμ€λ₯Ό μ°Ύμ μ μμ
- 500 Internet Server Error : μλ²μμ λ°μν μ€λ₯
-
8. μμ(Examples)
- μ€μ λ‘ μμ²μ 보λ΄λ λ°©λ²κ³Ό κ·Έμ λν μλ΅μ 보μ¬μ£Όλ μμκ° ν¬ν¨λ μ μμ΅λλ€.
- μλ₯Ό λ€μ΄,
curl
λͺ λ Ήμ΄λ₯Ό μ¬μ©ν HTTP μμ² λ°©λ² λ±μ λͺ μν©λλ€.
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "John Doe", "email": "john.doe@example.com"}'
2. API λͺ μΈμ μ€μμ±.
-
κ°λ°μ κ°μ μμ¬μν΅
- API λͺ μΈλ APIλ₯Ό μ 곡νλ μΈ‘κ³Ό μ¬μ©νλ μΈ‘ κ°μ μνν μμ¬μν΅μ κ°λ₯νκ² ν©λλ€.
- λͺ μΈκ° μ νν μλ‘ APIλ₯Ό μ¬μ©ν λ λ°μν μ μλ νΌλμ΄λ μ€λ₯κ° μ€μ΄λλλ€.
-
μΌκ΄μ±
- λͺ¨λ μλν¬μΈνΈμ μμ²/μλ΅ νμμ΄ μΌκ΄λκ² μ€κ³λκ³ κ΅¬νλ μ μλλ‘ λμμ€λλ€.
-
μ μ§λ³΄μ
- λͺ μΈλ₯Ό κΈ°μ€μΌλ‘ APIλ₯Ό λ³κ²½νκ±°λ νμ₯ν λ, μ΄λ₯Ό μ°Έκ³ νμ¬ κΈ°μ‘΄ μ¬μ©μλ€μκ² μν₯μ μ΅μννλ©΄μ μμ€ν μ κ°μ ν μ μμ΅λλ€.
3. API λͺ μΈ λꡬ.
API λͺ μΈλ λ€μν νμμΌλ‘ μμ±λ μ μμΌλ©°, λνμ μΈ λꡬμ νμ€μ λ€μκ³Ό κ°μ΅λλ€.
-
OpenAPI(Swagger)
- κ°μ₯ λ리 μ¬μ©λλ API λͺ μΈ νμ€μΌλ‘, Swagger UIλ₯Ό ν΅ν΄ μκ°νμ ν μ€νΈ κΈ°λ₯μ μ 곡ν©λλ€.
-
Postman
- API ν μ€νΈ λ° λͺ μΈ μμ±μ μν λꡬλ‘, λ€μν HTTP λ©μλλ₯Ό ν μ€νΈνκ³ λͺ μΈλ₯Ό μλμΌλ‘ μμ±ν μ μμ΅λλ€.
-
RAML
- RESTful API Modeling LAnguageμ μ½μλ‘, REST API λͺ μΈ μμ±μ μν΄ μ¬μ©λ©λλ€.
API λͺ μΈλ APIλ₯Ό μ¬μ©νλ €λ λͺ¨λ κ°λ°μμκ² νμμ μΈ κ°μ΄λ μν μ νλ©°, μ ννκ³ λͺ ννκ² μμ±νλ κ²μ΄ μ€μν©λλ€.
4οΈβ£ @GetMapping
μ λν
μ΄μ
.
-
@GetMapping
μ λν μ΄μ μ Spring Frameworkμμ HTTP GET μμ²μ μ²λ¦¬νκΈ° μν΄ μ¬μ©νλ μ λν μ΄μ μ λλ€. - μ£Όλ‘ Spring MVCμμ 컨νΈλ‘€λ¬μ λ©μλμ λΆμ¬μ νΉμ URLλ‘ λ€μ΄μ€λ GET μμ²μ μ²λ¦¬ν μ μλλ‘ λ§€νν©λλ€.
1. @GetMapping
μ κΈ°λ³Έ λμ.
- Spring Boot μ ν리μΌμ΄μ
μμλ ν΄λΌμ΄μΈνΈκ° μλ²λ‘ GET μμ²μ λ³΄λΌ λ ν΄λΉ μμ²μ μ²λ¦¬ν 컨νΈλ‘€λ¬ λ©μλλ₯Ό μ§μ νκΈ° μν΄
@GetMapping
μ μ¬μ©ν©λλ€. - μ΄ μ λν
μ΄μ
μ λ΄λΆμ μΌλ‘
@RequestMapping(method = RequestMethod.GET)
κ³Ό λμΌν μν μ ν©λλ€.
2. μ¬μ© μμ.
λ€μμ @GetMapping
μ μ¬μ©νμ¬ νΉμ URLμμ GET μμ²μ μ²λ¦¬νλ κ°λ¨ν μμμ
λλ€.
@RestController
public class UserController {
// '/users' κ²½λ‘μ λν GET μμ² μ²λ¦¬
@GetMapping("/users")
public List<User> getAllUsers() {
// μλΉμ€ κ³μΈ΅μμ μ¬μ©μ λͺ©λ‘μ κ°μ Έμ λ°ννλ λ©μλ
return userService.getAllUsers();
}
}
μμ μ½λμμ
-
@GetMapping("/users")
λ/users
κ²½λ‘λ‘ λ€μ΄μ€λ GET μμ²μ μ²λ¦¬ν©λλ€. - λ©μλ
getAllUsers()
λ GET μμ²μ μ²λ¦¬νλ©°, λ³΄ν΅ ν΄λΌμ΄μΈνΈμκ² λ°μ΄ν°λ₯Ό λ°νν©λλ€.- μ΄λ λ°ννλ λ°μ΄ν°λ κΈ°λ³Έμ μΌλ‘ JSON νμμΌλ‘ λ°νλ©λλ€(Spring Bootμμλ
@RestController
μ¬μ© μ).
- μ΄λ λ°ννλ λ°μ΄ν°λ κΈ°λ³Έμ μΌλ‘ JSON νμμΌλ‘ λ°νλ©λλ€(Spring Bootμμλ
3. μ£Όμ νΉμ§.
-
1. HTTP GET μμ² μ²λ¦¬.
-
@GetMapping
μ GET μμ²μ μ²λ¦¬νλ λ°λ§ μ¬μ©λλ©°, λ€λ₯Έ HTTP λ©μλ(POST, PUT, DELETE λ±) μμ²μ μ²λ¦¬νμ§ μμ΅λλ€.
-
-
2. κ²½λ‘ μ§μ .
-
@GetMapping("/path")
νμμΌλ‘ 맀ν κ²½λ‘λ₯Ό μ§μ ν μ μμ΅λλ€. - κ²½λ‘μ κ³ μ λ URLλΏλ§ μλλΌ κ²½λ‘ λ³μ, 쿼리 νλΌλ―Έν° λ±λ ν¬ν¨λ μ μμ΅λλ€.
-
-
3. κ²½λ‘ λ³μ μ¬μ©.
- κ²½λ‘ λ³μ(Path Variable)λ₯Ό μ¬μ©νμ¬ λμ μΌλ‘ URLμ μ²λ¦¬ν μλ μμ΅λλ€.
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
- μ μ½λμμ
@PathVariable
μ μ¬μ©νμ¬ URL κ²½λ‘μ ν¬ν¨λid
κ°μ λ©μλ νλΌλ―Έν°λ‘ μ λ¬λ°μ΅λλ€.- μλ₯Ό λ€μ΄,
/users/1
μ΄ μμ²λλ©΄id
κ° 1λ‘ μ€μ λ©λλ€.
- μλ₯Ό λ€μ΄,
-
4. 쿼리 νλΌλ―Έν° μ¬μ©.
- 쿼리 νλΌλ―Έν°(Query Parameter)λ₯Ό μ²λ¦¬ν λλ μ¬μ©ν μ μμ΅λλ€.
@GetMapping("/users")
public List<User> getUsersByStatus(@RequestParam String status) {
return userService.getUsersByStatus(status);
}
- μ μμμμ
@RequestParam
μ μ¬μ©νμ¬ μΏΌλ¦¬ νλΌλ―Έν°status
λ₯Ό λ©μλ νλΌλ―Έν°λ‘ μ λ¬λ°μ΅λλ€.- μλ₯Ό λ€μ΄,
/users?status=active
λ‘ μμ²νλ©΄status
κ°μ βactiveβκ° λ©λλ€.
- μλ₯Ό λ€μ΄,
4. @GetMapping
κ³Ό κ΄λ ¨λ μ£Όμ μ΅μ
.
-
produces
- μλ΅μΌλ‘ μ 곡νλ λ°μ΄ν°μ MIME νμ
μ μ§μ ν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, JSON, XML νμμ μλ΅μ μ§μ ν μ μμ΅λλ€.
- μλ΅μΌλ‘ μ 곡νλ λ°μ΄ν°μ MIME νμ
μ μ§μ ν μ μμ΅λλ€.
@GetMapping(value = "/users", produces = "application/json")
public List<User> getAllUsers() {
return userService.getAllUsers();
}
-
params
- νΉμ 쿼리 νλΌλ―Έν°κ° μ‘΄μ¬νλ κ²½μ°μλ§ ν΄λΉ λ©μλκ° λ§€νλλλ‘ μ νν μ μμ΅λλ€.
@GetMapping(value = "/users", params = "active")
public List<User> getActiveUsers() {
return userService.getActiveUsers();
}
- μ μμμμ
active
λΌλ 쿼리 νλΌλ―Έν°κ° μμ΄μΌλ§ μ΄ λ©μλκ° νΈμΆλ©λλ€.
5. @GetMapping
VS @RequestMapping
-
@RequestMapping
μ μ¬μ©νλ©΄ HTTP λ©μλλ₯Ό μ§μ ν΄μΌ ν©λλ€.
// @RequestMapping
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<User> getAllUsers() {
return userService.getAllUsers();
}
// @GetMapping
@GetMapping("/users")
public List<User> getAllUsers() {
return userService.getAllUsers();
}
-
@GetMapping
μ GET μμ² μ μ©μΌλ‘ λ³΄λ€ κ°κ²°νκ² μμ±ν μ μλ λ°©λ²μ λλ€.
리ν©ν λ§ ν¬μΈνΈ
-
1.
@RequestMapping
μ λ€μν HTTP λ©μλ(GET, POST, PUT, DELETE λ±)λ₯Ό μ²λ¦¬ν μ μλλ‘ μ€κ³λ λ²μ© μ λν μ΄μ μ λλ€. κ·Έλ¬λGET
μμ²λ§μ μ²λ¦¬ν λλ@GetMapping
μ μ¬μ©νμ¬ μ½λλ₯Ό κ°κ²°νκ² λ§λ€ μ μμ΅λλ€. -
2.
method = RequestMethod.GET
λμ@GetMapping
μ μ¬μ©ν¨μΌλ‘μ¨ λ μ§κ΄μ μ΄κ³ κ°λ¨νκ² GET μμ²μ μ²λ¦¬ν μ μμ΅λλ€. -
3.
@GetMapping
μ κΈ°λ³Έμ μΌλ‘GET
μμ²μ μ²λ¦¬νλ―λ‘value
μμ±μ κ²½λ‘λ§ λͺ μνλ©΄ λ©λλ€.
6. μμ½.
-
μ£Όμ μν
- HTTP GET μμ²μ νΉμ λ©μλμ 맀ννμ¬ μμ² μ²λ¦¬.
-
κ°κ²°ν λ¬Έλ²
-
@RequestMapping
μ GET μμ² μ²λ¦¬λ₯Ό κ°κ²°νκ² λ체.
-
-
μ£Όλ‘ μ¬μ©λλ κ³³
- 리μμ€ μ‘°ν, λ°μ΄ν° κ°μ Έμ€κΈ° λ±μ μν μ μνν λ μ¬μ©.
5οΈβ£ MIME(Mutipurpose Internet Mail Extensions) νμ .
- MIME(Mutipurpose Internet Mail Extensions) νμ μ μΈν°λ·μμ μ μ‘λλ λ°μ΄ν°μ νμμ λνλ΄λ νμ€μ λλ€.
- MIME νμ μ ν΄λΌμ΄μΈνΈμ μλ² κ°μ μ£Όκ³ λ°λ λ°μ΄ν°κ° μ΄λ€ νμμΈμ§ μ μνμ¬, μ΄λ₯Ό ν΅ν΄ ν΄λΌμ΄μΈνΈ(λΈλΌμ°μ λ±)λ λ°μ΄ν°μ μ²λ¦¬λ₯Ό μ΄λ»κ² ν΄μΌ νμ§ μ μ μμ΅λλ€.
1. MIME νμ μ ꡬμ±.
MIME νμ μ ν¬κ² λ λΆλΆμΌλ‘ λλ©λλ€.
-
νμ
(Type)
- λ°μ΄ν°μ μΌλ°μ μΈ λ²μ£Όλ₯Ό λνλ
λλ€.(μ:
text
,image
,application
λ±).
- λ°μ΄ν°μ μΌλ°μ μΈ λ²μ£Όλ₯Ό λνλ
λλ€.(μ:
-
μλΈνμ
(Subtype)
- λ°μ΄ν°μ ꡬ체μ μΈ νμμ λνλ
λλ€.(μ:
html
,plain
,json
,jpeg
λ±).
- λ°μ΄ν°μ ꡬ체μ μΈ νμμ λνλ
λλ€.(μ:
νμμ /
(μ¬λμ)λ‘ κ΅¬λΆλλ©°, μλ₯Ό λ€μ΄ text/html
μ HTML λ¬ΈμλΌλ μλ―Έμ
λλ€.
2. MIME νμ μ μμ.
-
1. ν
μ€νΈ νμ.
-
text/plain
- μΌλ° ν μ€νΈ(ASCII λλ UTF-8λ‘ μΈμ½λ©λ ν μ€νΈ).
-
text/html
- HTML λ¬Έμ.
-
text/css
- CSS νμΌ.
-
text/javascript
- JavaScript νμΌ.
-
-
2. μ΄λ―Έμ§ νμ.
-
image/jpeg
- JPEG μ΄λ―Έμ§.
-
image/png
- PNG μ΄λ―Έμ§.
-
image/gif
- GIF μ΄λ―Έμ§.
-
-
3. μμ© νλ‘κ·Έλ¨ νμ.
-
application/json
- JSON νμμ λ°μ΄ν°.
-
application/xml
- XML λ¬Έμ.
-
appliccation/pdf
- PDF νμΌ.
-
application/octet-stream
- μΌλ°μ μΈ λ°μ΄λ리 λ°μ΄ν°.
- νμΌ λ€μ΄λ‘λ μ μ£Όλ‘ μ¬μ©λ©λλ€.
-
-
4. λ©ν°λ―Έλμ΄ νμ.
-
audio/mpeg
- MP3 μ€λμ€ νμΌ.
-
video/mp4
- MP4 λΉλμ€ νμΌ.
-
-
5. κΈ°ν νμ.
-
multipart/form-data
- μ£Όλ‘ νμΌ μ λ‘λλ νΌ λ°μ΄ν°λ₯Ό μ μ‘ν λ μ¬μ©λλ νμ.
-
3. MIME νμ μ μν .
MIME νμ μ μΉ λΈλΌμ°μ μ κ°μ ν΄λΌμ΄μΈνΈκ° μλ²λ‘λΆν° λ°μ λ°μ΄ν°μ νμμ μ΄ν΄νκ³ μ μ νκ² μ²λ¦¬νλ λ° μ€μν μν μ ν©λλ€.
μλ₯Ό λ€μ΄
-
text/html
- λΈλΌμ°μ λ μ΄ MIME νμ μ λ°μΌλ©΄ μ΄λ₯Ό HTML λ¬Έμλ‘ ν΄μνκ³ νλ©΄μ λ λλ§ν©λλ€.
-
application/json
- λΈλΌμ°μ λ μ΄ MIME νμ μ λ°μΌλ©΄ μ΄λ₯Ό JSON νμμ λ°μ΄ν°λ‘ μΈμνκ³ , λ³΄ν΅ κ°λ°μ λꡬμμ ꡬ쑰νλ νμμΌλ‘ 보μ¬μ€λλ€.
-
application/octet=stream
- λ°μ΄λ리 νμΌ(μ: νλ‘κ·Έλ¨ νμΌ, μμΆ νμΌ)μ λ€μ΄λ‘λν λ μ¬μ©λλ©°, ν΄λΌμ΄μΈνΈλ μ΄ λ°μ΄ν°λ₯Ό νμΌλ‘ μ μ₯ν μ μμ΅λλ€.
4. MIME νμ μ§μ .
- μλ²κ° ν΄λΌμ΄μΈνΈμ λ°μ΄ν°λ₯Ό λ³΄λΌ λ MIME νμ
μ μ§μ νλλ°, HTTP μλ΅ ν€λμ
Content-Type
νλλ₯Ό ν΅ν΄ MIME νμ μ΄ μ μλ©λλ€.
μμ: Content-Type
ν€λ
HTTP/1.1 200OK
Content=Type: application/json
{
"name": "John",
"age": 30
}
- μ μμμμλ μλ²κ° JSON νμμ λ°μ΄ν°λ₯Ό μλ΅νλ©°,
Content-Type: application/json
μ ν΅ν΄ MIME νμ μ λͺ μνκ³ μμ΅λλ€.
5. Springμμμ MIME νμ μ§μ .
- Springμμλ
@GetMapping
λλ@PostMaping
κ³Ό κ°μ μ λν μ΄μ μ μ¬μ©ν λproduces
μμ±μ ν΅ν΄ MIME νμ μ μ§μ ν μ μμ΅λλ€.
μμ : JSON νμμ μλ΅ μ§μ .
@GetMapping(value = "/users", produces = "application/json")
public List<User> getAllUsers() {
return userService.getAllUsers();
}
- μ μ½λμμλ
/users
λ‘ λ€μ΄μ€λ GET μμ²μ λν΄ JSON νμ (application/json
)μΌλ‘ λ°μ΄ν°λ₯Ό μλ΅νλλ‘ μ§μ νκ³ μμ΅λλ€.
6. μμ½.
- MIME νμ μ μΈν°λ·μμ μ μ‘λλ λ°μ΄ν°μ νμμ λνλ΄λ νμ€.
- μ£Όλ‘ ν΄λΌμ΄μΈνΈμ μλ² κ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ λ λ°μ΄ν° νμμ μ§μ νμ¬ ν΄λΌμ΄μΈνΈκ° μ΄λ₯Ό μ μ ν μ²λ¦¬ν μ μλλ‘ λμμ€
-
νμ μ
νμ /μλΈνμ
μΌλ‘ ꡬμ±λλ©°, μλ₯Ό λ€μ΄text/html
μ HTML λ¬Έμλ₯Ό λνλ. - Springκ³Ό κ°μ νλ μμν¬μμλ μλ΅ νμμ λ°λΌ μ μ ν MIME νμ μ μ§μ ν μ μμ.
6οΈβ£ @RequestParam
μ λν
μ΄μ
.
-
@RequestParam
μ λν μ΄μ μ Spring MVCμμ HTTP μμ²μ 쿼리 νλΌλ―Έν°, νΌ λ°μ΄ν° λλ URLμ ν¬ν¨λ νλΌλ―Έν°λ₯Ό λ©μλ νλΌλ―Έν°μ λ°μΈλ©νλ λ° μ¬μ©λ©λλ€. - μ£Όλ‘ GET μμ²μμ λ리 μ€νΈλ§μ νλΌλ―Έν° κ°μ κ°μ Έμ€κ±°λ, POST μμ²μμ νΌ λ°μ΄ν°λ‘ μ λ¬λ νλΌλ―Έν° κ°μ μ²λ¦¬νλ λ° μ¬μ©λ©λλ€.
1. κΈ°λ³Έ μ¬μ©λ².
-
@RequestParam
μ μ¬μ©νλ©΄ ν΄λΌμ΄μΈνΈκ° μμ²ν URLμ νλΌλ―Έν° κ°μ λ©μλμ μΈμλ‘ λ°μ μ μμ΅λλ€.- μλ₯Ό λ€μ΄, μ¬μ©μκ°
GET /users?name=Jhon
κ³Ό κ°μ΄ μμ²νλ©΄name
νλΌλ―Έν° κ°μ λ©μλμμ λ°μ μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, μ¬μ©μκ°
μμ 1: λ¨μΌ 쿼리 νλΌλ―Έν° λ°κΈ°.
@GetMapping("/users")
public String getUserByName(@RequestParam String name) {
return "Requested user: " + name;
}
μ μ½λμμ
-
@RequestParam String name
- 쿼리 νλΌλ―Έν°
name
μ κ°μ λ°μμ λ©μλ νλΌλ―Έν°λ‘ μ λ¬ν©λλ€.- μλ₯Ό λ€μ΄
/users?name=Jhon
μΌλ‘ μμ²νλ©΄name
μ"John"
κ°μ΄ λ€μ΄κ°λλ€.
- μλ₯Ό λ€μ΄
- 쿼리 νλΌλ―Έν°
μμ 2: μ¬λ¬ 쿼리 νλΌλ―Έν° λ°κΈ°.
@GetMapping("/users")
public String getUser(@RequestParam String name, @RequestParam int age) {
return "User: " + name + ", Age: " + age;
}
- μ΄ μ½λλ λ κ°Έμ 쿼리 νλΌλ―Έν°(
name
κ³Όage
)λ₯Ό λ°μ΅λλ€. - ν΄λΌμ΄μΈνΈκ°
/users?name=Jhon&age=25
λ‘ μμ²νλ©΄name
μ"Jhon"
,age
λ25
κ° λ©λλ€.
3. μ νμ νλΌλ―Έν°μ κΈ°λ³Έκ°.
-
@RequestParam
μ μμ±μ μ΄μ©νλ©΄ μ νμ μΈ νλΌλ―Έν°λ₯Ό μ μν μ μμ΅λλ€. - νλΌλ―Έν°κ° μμ κ²½μ° κΈ°λ³Έκ°μ μ€μ ν μ μμ΅λλ€.
μμ 3: κΈ°λ³Έκ° μ€μ .
@GetMapping("/users")
pulbic String getUser(@RequestParam(defaultValue = "Unknown") String name) {
return "Requested user: " + name;
}
- μ μ½λμμ ν΄λΌμ΄μΈνΈκ°
/users
λ‘λ§ μμ²μ 보λ΄λ©΄,name
μ κΈ°λ³Έκ°μΌλ‘"Unknown"
μ΄ μ€μ λ©λλ€. -
/users?name=John
μΌλ‘ μμ²νλ©΄name
μ"John"
κ°μ΄ λ©λλ€.
μμ 4: νμ μ¬λΆ μ€μ .
-
required
μμ±μ μ¬μ©νλ©΄ νλΌλ―Έν°κ° νμμΈμ§ μ νμ μΈμ§ μ€μ ν μ μμ΅λλ€.- κΈ°λ³Έμ μΌλ‘
@RequestParam
μ νμμ λλ€. - νμ§λ§,
required = false
λ‘ μ€μ νλ©΄ νλΌλ―Έν°κ° μμ΄λ μμΈλ₯Ό λ°μμν€μ§ μμ΅λλ€.@GetMapping("/users") public String getUser(@RequestParam(required = false) String name) { return "Requested user: " + (name != null ? name : "Guest"); }
- κΈ°λ³Έμ μΌλ‘
- μ΄ κ²½μ°, ν΄λΌμ΄μΈνΈκ°
name
νλΌλ―Έν°λ₯Ό ν¬ν¨νμ§ μκ³ μμ²ν κ²½μ°name
κ°μnull
μ΄ λκ³ ,Guest
λ‘ λ체 λ μ μμ΅λλ€.
4. λ°°μ΄ λλ 리μ€νΈ νλΌλ―Έν° μ²λ¦¬.
-
@RequestParam
μ μ¬μ©νμ¬ μ¬λ¬ κ°μ ν λ²μ λ°μ μλ μμ΅λλ€.
μμ 5: λ°°μ΄λ‘ νλΌλ―Έν° λ°κΈ°.
@GetMapping("/users")
public String getUsersByNames(@RequestParam List<String> names) {
return "Requested users: " + String.join(", ", names);
}
- μ μ½λμμ
/users?names=John&names=Jane
κ³Ό κ°μ΄ μμ²νλ©΄names
λ["John", "Jane"]
리μ€νΈλ‘ μ λ¬λ©λλ€.
5. μμ½.
-
@RequestParam
μ URL 쿼리 νλΌλ―Έν°λ νΌ λ°μ΄ν°λ₯Ό 컨νΈλ‘€λ¬ λ©μλμ νλΌλ―Έν°λ‘ 맀ννλ λ° μ¬μ©λ©λλ€. - νμ μ¬λΆ(
required
), κΈ°λ³Έκ°(defaultValue
) μ€μ μ ν΅ν΄ μ μ°νκ² νλΌλ―Έν°λ₯Ό μ²λ¦¬ν μ μμ΅λλ€. - μ¬λ¬ νλΌλ―Έν°λ λ°°μ΄/리μ€νΈ ννμ νλΌλ―Έν°λ λ°μ μ μμ΅λλ€.
7οΈβ£ νΌ λ°μ΄ν°(Form Data).
- νΌ λ°μ΄ν°(Form Data) λ μΉ μ ν리μΌμ΄μ μμ μ¬μ©μκ° μΉ λΈλΌμ°μ λ₯Ό ν΅ν΄ μλ²λ‘ μ μΆνλ λ°μ΄ν°λ₯Ό λ§ν©λλ€.
- μ£Όλ‘ HTML
<form>
μμλ₯Ό μ¬μ©νμ¬ μ¬μ©μ μ λ ₯μ μλ²λ‘ μ μ‘νλ©°, μ¬μ©μκ° μ λ ₯ν ν μ€νΈ, νμΌ, μ νν μ΅μ λ±μ λ€μν λ°μ΄ν°λ₯Ό ν¬ν¨ν μ μμ΅λλ€.
1. νΌ λ°μ΄ν°μ ꡬμ±.
- νΌ λ°μ΄ν°λ μ¬λ¬ μ’ λ₯μ μ λ ₯ νλλ₯Ό ν΅ν΄ μμ±λλ©°, μ μ‘ λ°©μμ λ°λΌ λ€λ₯΄κ² μ²λ¦¬λ©λλ€.
- HTML
<form>
νκ·Έλ₯Ό μ΄μ©νμ¬ μ λ ₯ νΌμ λ§λ€κ³ , μ¬μ©μκ° μ λ ₯ν λ°μ΄ν°λ₯Ό μλ²λ‘ μ μ‘ν μ μμ΅λλ€.
HTML νΌμ μμ.
<form action="/submit" method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name">
<label for="age">Age:</label>
<input type="number" id="age" name="age">
<label for="file">Profile Picture:</label>
<input type="file" id="file" name="profilePicture">
<button type="submit">Submit</button>
</form>
- μ΄ νΌμμλ λ€μκ³Ό κ°μ λ°μ΄ν°λ₯Ό μλ²λ‘ μ μ‘ν μ μμ΅λλ€.
- Name : ν μ€νΈ μ λ ₯.
- Age : μ«μ μ λ ₯.
- Profile Picture : νμΌ μ λ‘λ.
2. νΌ λ°μ΄ν°μ μ μ‘ λ°©μ.
1. GET λ©μλ
- νΌμ΄
GET
λ©μλλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ μ‘ν λλ λ°μ΄ν°κ° URLμ 쿼리 μ€νΈλ§(Query String)μΌλ‘ μ λ¬ λ©λλ€. - URLμ λ³΄ν΅ λ€μκ³Ό κ°μ νμμ κ°μ§λλ€.
example.com/submit?name=Jhon&age=30
- λ°μ΄ν°λ URLμ ν¬ν¨λκΈ° λλ¬Έμ 보μμ μ·¨μ½νκ³ , μ μ‘ κ°λ₯ν λ°μ΄ν°μ μμ΄ μ νμ μ
λλ€.
- λ°λΌμ κ²μ 쿼리λ νν°μ κ°μ κ°λ¨ν λ°μ΄ν°λ₯Ό μ μ‘ν λ μ£Όλ‘ μ¬μ©λ©λλ€.
<form action="/submit" method="get">
<!-- μ
λ ₯ νλ -->
<button type="submit">Submit</button>
</form>
2. POST λ©μλ
-
POST
λ©μλλ₯Ό μ¬μ©νλ©΄ λ°μ΄ν°κ° HTTP μμ² λ³Έλ¬Έ(Body)μ ν¬ν¨λμ΄ μ μ‘λ©λλ€.- μ΄ λ°©μμ URLμ λ°μ΄ν°λ₯Ό λ ΈμΆνμ§ μκΈ° λλ¬Έμ λ μμ νλ©°, λμ©λ λ°μ΄ν°λ₯Ό μ μ‘ν μ μμ΅λλ€.
- νμΌ μ λ‘λλ λ―Όκ°ν μ 보λ₯Ό μ μ‘ν λ μ£Όλ‘ μ¬μ©λ©λλ€.
<form action="/submit" method="post">
<!-- μ
λ ₯ νλ -->
<button type="submit">Submit</button>
</form>
3. μ μ‘λλ λ°μ΄ν° νμ.
νΌ λ°μ΄ν°κ° μ μ‘λ λ, λΈλΌμ°μ λ Content-Type
ν€λλ₯Ό ν΅ν΄ μλ²μ μ΄λ€ λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μΈμ½λ©νλμ§ μλ €μ€λλ€.
νΌ λ°μ΄ν°μ μΈμ½λ© λ°©μμ λ°λΌ μλ²μμ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ λ°©μμ΄ λ¬λΌμ§λλ€.
-
1.
application/x-www.form-urlencoded
- κΈ°λ³Έ νΌ μΈμ½λ© λ°©μμ λλ€.
- νΌ λ°μ΄ν°λ₯Ό URL μΈμ½λ©νμ¬ ν€-κ° μμΌλ‘ μ μ‘ν©λλ€.
- μλ₯Ό λ€μ΄,
name=John&age=30
μ²λΌ ν€μ κ°μ&
λ‘ κ΅¬λΆνμ¬ μλ²λ‘ μ μ‘ν©λλ€. -
POST
μμ²μ λ³Έλ¬Έμ μ΄ νμμΌλ‘ λ°μ΄ν°κ° ν¬ν¨λ©λλ€. - μμ
name=Jhon&age=30
-
2.
multipart/form-data
- νμΌ μ λ‘λκ° ν¬ν¨λ νΌ λ°μ΄ν°λ₯Ό μ μ‘ν λ μ¬μ©λλ μΈμ½λ© λ°©μμ λλ€.
- λ°μ΄ν°μ νμΌμ μ¬λ¬ λΆλΆμΌλ‘ λλμ΄ μλ²λ‘ μ μ‘ν©λλ€.
- νμΌλΏλ§ μλλΌ ν μ€νΈ νλλ ν¨κ» μ μ‘ν μ μμ΅λλ€.
- μμ: λ€μκ³Ό κ°μ λ°©μμΌλ‘ νμΌκ³Ό λ°μ΄ν°λ₯Ό ν¨κ» μ μ‘ν©λλ€.
```plaintext
βboundary
Content-Disposition: form-data; name=βnameβ
John
βboundary
Content-Disposition: form-data; name=βprofilePictureβ; filename=βprofile.jpgβ
Content-Type: image/jpeg[λ°μ΄λ리 νμΌ λ°μ΄ν°]
βboundaryβ
``` -
3.
text/plain
- λ°μ΄ν°λ₯Ό λ¨μν ν μ€νΈ νμμΌλ‘ μ μ‘ν©λλ€.
- μ£Όλ‘ APIμμ κ°λ¨ν ν μ€νΈ μ μ‘μ μ¬μ©λλ©°, νΌ λ°μ΄ν°λ‘λ μ μ¬μ©λμ§ μμ΅λλ€.
4. μλ²μμ νΌ λ°μ΄ν° μ²λ¦¬.
- μλ²λ ν΄λΌμ΄μΈνΈκ° μ μ‘ν νΌ λ°μ΄ν°λ₯Ό μ²λ¦¬ν©λλ€.
- μλ₯Ό λ€μ΄, Spring Bootμμλ
@RequestParam
λλ@ModelAttribute
λ±μ μ¬μ©νμ¬ νΌ λ°μ΄ν°λ₯Ό μ½κ² μ²λ¦¬ν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, Spring Bootμμλ
μμ: Springμμ νΌ λ°μ΄ν° λ°κΈ°.
@PostMapping("/submit")
public String handleForm(@RequestParam String name, @RequestParam int age) {
// νΌ λ°μ΄ν° μ²λ¦¬
return "Name: " + name + ", Age: " + age;
}
- μλ²λ ν΄λΌμ΄μΈνΈκ° λ³΄λΈ νΌ λ°μ΄ν°μμ
name
κ³Όage
κ°μ μΆμΆνμ¬ μ²λ¦¬ν©λλ€.
5. μμ½.
- νΌ λ°μ΄ν°λ μ¬μ©μκ° μΉ λΈλΌμ°μ μ νΌμ ν΅ν΄ μλ²λ‘ μ μ‘νλ λ°μ΄ν°λ₯Ό μλ―Έν©λλ€.
- νΌ λ°μ΄ν°λ GET λλ POST λ©μλλ₯Ό ν΅ν΄ μ μ‘λλ©°, URL μΈμ½λ© λ°©μμ΄λ
multipart/form-data
λ°©μμΌλ‘ μλ²μ μ λ¬λ©λλ€. - μλ²λ ν΄λΉ λ°μ΄ν°λ₯Ό λ°μ μ²λ¦¬νμ¬ μ¬μ©μ μμ²μ λ§λ κ²°κ³Όλ₯Ό λ°νν©λλ€.
8οΈβ£ @RestController
μ λν
μ΄μ
.
-
@RestController
μ λν μ΄μ μ Spring Frameworkμμ RESTful μΉ μλΉμ€μ 컨νΈλ‘€λ¬λ₯Ό μ μν λ μ¬μ©νλ μ λν μ΄μ μ λλ€. - μ΄ μ λν μ΄μ μ 컨νΈλ‘€λ¬ ν΄λμ€μ λΆμ΄λ©°, μ΄ ν΄λμ€κ° JSONμ΄λ XMLκ³Ό κ°μ λ°μ΄ν°λ₯Ό HTTP μλ΅ λ³Έλ¬ΈμΌλ‘ μ§μ λ°ννλλ‘ ν΄μ€λλ€.
1. @RestController
μ νΉμ§.
1. @Controller
+ @ResponseBody
μ κ²°ν©.
-
@RestController
λ λ΄λΆμ μΌλ‘@Controller
μ@ResponseBody
μ λν μ΄μ μ κ²°ν©ν κ²μ λλ€. -
@Controller
λ Spring MVCμμ Viewλ₯Ό λ°ννλ μ ν΅μ μΈ μ»¨νΈλ‘€λ¬λ₯Ό μ μνλ λ° μ¬μ©λμ§λ§,@RestController
λ Viewλ₯Ό λ°ννμ§ μκ³ , κ°μ²΄λ λ°μ΄ν°λ₯Ό μ§μ HTTP μλ΅ λ³Έλ¬ΈμΌλ‘ λ°νν©λλ€. -
@ResponseBody
λ λ©μλκ° λ°ννλ κ°μ²΄λ₯Ό JSONμ΄λ XMLλ‘ μ§λ ¬ννμ¬ HTTP μλ΅μ λ³Έλ¬ΈμΌλ‘ λ°ννλλ‘ νλ μν μ ν©λλ€. -
@RestController
λ ν΄λμ€ λ 벨μμ λͺ¨λ λ©μλμ@ResponseBody
κ° μλμΌλ‘ μ μ©λ©λλ€.
2. RESTful μΉ μλΉμ€μ μ ν©.
-
@RestController
λ μ£Όλ‘ RESTful μΉ μλΉμ€ κ°λ°μ μ¬μ©λλ©°, ν΄λΌμ΄μΈνΈκ° μλ²λ‘λΆν° JSON, XML λ±μ λ°μ΄ν°λ₯Ό λ°μ μ μλλ‘ μ€κ³λμμ΅λλ€. - μ ν΅μ μΈ MVC ν¨ν΄μμλ λ°μ΄ν°λ₯Ό λ·° νμ΄μ§(HTML λ±)λ‘ μ λ¬νμ§λ§, RESTful μΉ μλΉμ€μμλ λ°μ΄ν° μ체(JSON, XML λ±)λ₯Ό μλ΅μΌλ‘ μ λ¬ν©λλ€.
2. μμ μ½λ.
@RestController
public class UserController {
@GetMapping("/users")
public List<User> getAllUsers() {
// μ¬μ©μ λͺ©λ‘μ λ°ννλ μμ
return userService.getAllUsers();
}
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// μλ‘μ΄ μ¬μ©μλ₯Ό μμ±νλ μμ
return userService.saveUser(user);
}
}
-
@RestController
- μ΄ ν΄λμ€λ RESTful 컨νΈλ‘€λ¬μ΄λ©°, λͺ¨λ λ©μλλ JSON λλ XMLκ³Ό κ°μ λ°μ΄ν°λ₯Ό HTTP μλ΅ λ³Έλ¬ΈμΌλ‘ λ°νν©λλ€.
-
@GetMapping("/users")
- GET μμ²μ μ²λ¦¬νλ©°,
List<User>
κ°μ²΄λ₯Ό JSON νμμΌλ‘ λ°νν©λλ€.
- GET μμ²μ μ²λ¦¬νλ©°,
-
@PostMapping("/users")
- POST μμ²μ μ²λ¦¬νλ©°, ν΄λΌμ΄μΈνΈκ° 보λΈ
User
λ°μ΄ν°λ₯Ό λ°μ μλ‘μ΄ μ¬μ©μλ₯Ό μμ±νκ³ κ·Έ κ²°κ³Όλ₯Ό JSON νμμΌλ‘ λ°νν©λλ€.
- POST μμ²μ μ²λ¦¬νλ©°, ν΄λΌμ΄μΈνΈκ° 보λΈ
3. @RestController
μ μΌλ° 컨νΈλ‘€λ¬(@Controller
)μ μ°¨μ΄.
-
1. μ£Όλ λͺ©μ .
-
@RestController
λ λ°μ΄ν°(μ£Όλ‘ JSON, XML)λ₯Ό μ§μ λ°ννλ λ° μ¬μ©λλ©°, API μλ²λ₯Ό ꡬμΆν λ μ£Όλ‘ μ¬μ©λ©λλ€. -
@Controller
λ λ·°(HTML, JSP νμ΄μ§ λ±)λ₯Ό λ°ννλ λ° μ£Όλ‘ μ¬μ©λλ©°, μΉ μ ν리μΌμ΄μ μ νλ©΄μ 보μ¬μ€ λ μ ν©ν©λλ€.
-
-
2. View ν΄μ.
-
@RestController
λ λ°μ΄ν°λ₯Ό μλ΅ λ³Έλ¬Έμ λ°λ‘ μ λ¬νλ©°, JSPλ Thymeleaf κ°μ λ·° ν νλ¦Ώ μμ§μ μ¬μ©νμ§ μμ΅λλ€. -
@Controller
λ λ·° μ΄λ¦μ λ°ννκ³ , Spring MVCλ μ΄ λ·° μ΄λ¦μ ν΄μνμ¬ JSPλ Thymeleaf κ°μ ν νλ¦Ώ μμ§μ μ¬μ©ν΄ νλ©΄μ λ λλ§ν©λλ€.
-
-
3.
@ResponseBody
νμ μ¬λΆ.-
@RestController
λ₯Ό μ¬μ©νλ©΄ λ©μλλ§λ€@ResponseBody
λ₯Ό λΆμΌ νμκ° μμ΅λλ€.- ν΄λμ€ λ 벨μμ μλμΌλ‘ μ μ©λ©λλ€.
-
@Controller
λ₯Ό μ¬μ©ν κ²½μ°, λ°μ΄ν°λ₯Ό λ°ννλ €λ©΄ λ©μλλ§λ€@ResponseBody
λ₯Ό λΆμ¬μ μλ΅ λ³Έλ¬Έμ λ°μ΄ν°λ₯Ό 보λ΄λλ‘ λͺ μν΄μΌ ν©λλ€.-
μΌλ° 컨νΈλ‘€λ¬(
@Controller
) μμ@Controller public class ViewController { @GetMapping("/home") public String home() { // "home.html"μ΄λΌλ λ·°λ₯Ό λ°νν¨ return "home"; } }
- μ΄ μ½λλ βhomeβμ΄λΌλ λ·° μ΄λ¦μ λ°ννλ©°, Springμ
home.html
λλhome.jsp
λ₯Ό μ°Ύμμ λ λλ§νκ² λ©λλ€.
-
μΌλ° 컨νΈλ‘€λ¬(
-
4. μμ½.
-
@RestController
λ RESTful μΉ μλΉμ€ κ°λ°μ μ¬μ©λλ©°, λ°μ΄ν°λ₯Ό JSONμ΄λ XML λ±μ νμμΌλ‘ λ°νν©λλ€. -
@RestController
λ@Controller
μ@ResponseBody
μ κ²°ν©μΌλ‘, λ°μ΄ν°λ₯Ό μλ΅ λ³Έλ¬Έμ λ°λ‘ λ°ννλλ‘ μ€κ³λμμ΅λλ€. - Spring MVCμμ μΉ μ ν리μΌμ΄μ
μ λ·°λ₯Ό λ λλ§νλ
@Controller
μ λ¬λ¦¬,@RestController
λ API κ°λ°μ λ μ ν©ν©λλ€.