π[Spring] κ³μΈ΅ν μν€ν μ²μμ Controllerμ μν .
Java λ°±μ€λ μ ν리μΌμ΄μ μ κ³μΈ΅ν μν€ν μ²(Layerd Architecture) μμ Controllerλ μ¬μ©μ(ν΄λΌμ΄μΈνΈ)λ‘λΆν° μμ²μ λ°μ μ²λ¦¬νκ³ , κ·Έμ λν μλ΅μ λ°ννλ μν μ λ΄λΉνλ μ€μν κ³μΈ΅μ λλ€.
Controllerλ μ ν리μΌμ΄μ μ μΈλΆ μΈν°νμ΄μ€λ‘ μλνλ©°, μ£Όλ‘ μΉ μμ²κ³Ό μλ΅μ νλ¦μ μ μ΄νλ μν μ μνν©λλ€.
1οΈβ£ Controllerμ μ£Όμ μν .
1. μμ² μμ λ° μλ΅ λ°ν.
- Controllerλ ν΄λΌμ΄μΈνΈ(λΈλΌμ°μ , λͺ¨λ°μΌ μ± λ±)λ‘ λΆν° HTTP μμ²μ μμ ν©λλ€.
- κ° μμ²μ URL κ²½λ‘ λ° HTTP λ©μλ(GET, POST, PUT, DELETE λ±)μ λ°λΌ Controllerμ νΉμ λ©μλμ λ§€νλ©λλ€.
- μ΄ λ©μλλ λΉμ¦λμ€ λ‘μ§μ νΈμΆνκ³ , μ²λ¦¬ κ²°κ³Όλ₯Ό λ€μ ν΄λΌμ΄μΈνΈμκ² μλ΅μΌλ‘ λ°νν©λλ€.
2. μμ² κ²μ¦.
- Controllerλ ν΄λΌμ΄μΈνΈλ‘λΆν° μ λ¬λ μμ² λ°μ΄ν°(쿼리 νλΌλ―Έν°, νΌ λ°μ΄ν°, JSON λ±)λ₯Ό κ²μ¦νλ μν μ ν©λλ€.
- μ΄ κ²μ¦ μμ μ μΌλ°μ μΌλ‘ μμ²μ΄ λΉμ¦λμ€ λ‘μ§μΌλ‘ μ λ¬λκΈ° μ μ μνλ©λλ€.
- κ²μ¦ μ€ν¨ μ, μλ¬ λ©μμ§λ μν μ½λλ₯Ό ν΄λΌμ΄μΈνΈμ λ°νν©λλ€.
3. λΉμ¦λμ€ λ‘μ§ νΈμΆ.
- Controllerλ μ§μ μ μΌλ‘ λΉμ¦λμ€ λ‘μ§μ μννμ§ μκ³ , Service κ³μΈ΅μ λ©μλλ₯Ό νΈμΆν©λλ€.
- μ΄ λ°©μμ μν μ λΆλ¦¬νμ¬ μ μ§λ³΄μμ±μ λμ΄κ³ , μ½λκ° λμ± μ΄ν΄νκΈ° μ½κ² λ§λλλ€.
- Service κ³μΈ΅μ΄ λΉμ¦λμ€ λ‘μ§μ μ²λ¦¬νκ³ κ²°κ³Όλ₯Ό λ°ννλ©΄, Controllerλ μ΄λ₯Ό ν΄λΌμ΄μΈνΈμκ² μ λ¬ν©λλ€.
4. λ·°μμ ν΅μ (Viewμ μ°λ)
- Controllerλ Viewμ ν΅μ νμ¬ μ μ ν μλ΅μ μμ±ν©λλ€.
- μΉ μ ν리μΌμ΄μ μμλ HTMLμ΄λ JSON λ°μ΄ν°λ₯Ό λ°ννλ κ²μ΄ μΌλ°μ μ λλ€.
- μλ₯Ό λ€μ΄, ν νλ¦Ώ μμ§(Thymeleaf λ±)μ μ¬μ©ν΄ λμ μΈ HTML νμ΄μ§λ₯Ό λ λλ§νκ±°λ, API μλ²μ κ²½μ° JSON ν¬λ§·μΌλ‘ λ°μ΄ν°λ₯Ό λ°νν©λλ€.
5. HTTP μν μ½λ κ΄λ¦¬.
- Controllerλ μμ² μ²λ¦¬ κ²°κ³Όμ λ°λΌ μ μ ν HTTP μν μ½λ(μ: 200 OK, 400 Bad Request, 404 Not Found, 500 Internal Server Error λ±) λ₯Ό μ€μ νμ¬ ν΄λΌμ΄μΈνΈμ μ λ¬ν©λλ€.
- μ΄λ‘μ¨ ν΄λΌμ΄μΈνΈκ° μμ² μ²λ¦¬ μνλ₯Ό μ μ μλλ‘ ν©λλ€.
6. μμΈ μ²λ¦¬
- Controllerλ μ ν리μΌμ΄μ μμ λ°μνλ μμΈλ₯Ό μ²λ¦¬νκ±°λ, μ μμ μΈ μμΈ μ²λ¦¬ λ©μ»€λμ¦μ μ¬μ©ν΄ μμΈλ₯Ό λ€λ£Ήλλ€.
- μ΄λ₯Ό ν΅ν΄ μ μ ν μλ¬ μλ΅μ ν΄λΌμ΄μΈνΈμκ² λ°ννκ³ , μλ¬κ° λ°μνμ λ μ ν리μΌμ΄μ μ΄ λΉμ μμ μΌλ‘ μ’ λ£λμ§ μλλ‘ ν©λλ€.
2οΈβ£ μμ μ½λ
Spring Boot μ ν리μΌμ΄μ μμμ Controller μμλ₯Ό ν΅ν΄ κ·Έ μν μ λ ꡬ체μ μΌλ‘ λ³Ό μ μμ΅λλ€.
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/{id}")
public ResponseEntity<UserDTO> getUser(@PathVariable Long id) {
UserDTO user = userService.getUserById(id);
return ResponseEntity.ok(user);
}
@PostMapping
public ResponseEntity<UserDTO> createUser(@RequestBody @Valid UserDTO userDTO) {
UserDTO createdUser = userService.createUser(userDTO);
return ResponseEntity.status(HttpStatus.CREATED).body(createdUser);
}
}
3οΈβ£ μ€λͺ .
-
@RestController
- Springμμ RESTful μΉ μλΉμ€λ₯Ό λ§λ€κΈ° μν΄ μ¬μ©λλ μ΄λ Έν μ΄μ μ λλ€.
- JSON λλ XML λ°μ΄ν°λ₯Ό λ°ννλ 컨νΈλ‘€λ¬λ₯Ό μ μν©λλ€.
-
@RequestMapping
- μ΄ μ»¨νΈλ‘€λ¬κ°
\users
κ²½λ‘μ λν μμ²μ μ²λ¦¬νλλ‘ μ€μ ν©λλ€.
- μ΄ μ»¨νΈλ‘€λ¬κ°
-
@GetMapping
- HTTP GET μμ²μ μ²λ¦¬νλ λ©μλλ‘,
id
κ²½λ‘ λ³μμ ν΄λΉνλ μ¬μ©μλ₯Ό κ°μ Έμ΅λλ€.
- HTTP GET μμ²μ μ²λ¦¬νλ λ©μλλ‘,
-
@PostMapping
- HTTP POST μμ²μ μ²λ¦¬νλ λ©μλλ‘, μλ‘μ΄ μ¬μ©μλ₯Ό μμ±νκ³ κ²°κ³Όλ₯Ό λ°νν©λλ€.
-
@RequestBody
,@Valid
- μμ² λ³Έλ¬Έ λ°μ΄ν°λ₯Ό κ°μ²΄λ‘ λ§€ννκ³ , μ λ ₯ λ°μ΄ν°λ₯Ό κ²μ¦ν©λλ€.
-
ResponseEntity
- μλ΅ λ³Έλ¬Έκ³Ό μν μ½λλ₯Ό ν¬ν¨ν΄ ν΄λΌμ΄μΈνΈμκ² μλ΅μ λ°νν©λλ€.
4οΈβ£ κ²°λ‘
Contollerλ μ¬μ©μ μμ²μ λ°μ Service κ³μΈ΅κ³Ό ν΅μ νλ©°, μμ²μ μ²λ¦¬νκ³ κ·Έ κ²°κ³Όλ₯Ό ν΄λΌμ΄μΈνΈμκ² λ°ννλ μν μ ν©λλ€.
μ΄λ¬ν μν λΆλ¦¬λ₯Ό ν΅ν΄ μ ν리μΌμ΄μ
μ λμ± μ μ°νκ³ κ΄λ¦¬νκΈ° μ¬μ΄ ꡬ쑰λ₯Ό κ°μΆκ² λ©λλ€.