๐ํ๋ก๊ทธ๋๋จธ์ค ๋ฐฑ์๋ ๋ฐ๋ธ์ฝ์ค 4๊ธฐ ๊ต์ก๊ณผ์ ์ ๋ฃ๊ณ ์ ๋ฆฌํ ๊ธ์
๋๋ค.๐
WebApplicationContext
- Spring Framework์์ ์ ๊ณตํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ ApplicationContext์ ๊ตฌํ์ฒด
- ์น ์ ํ๋ฆฌ์ผ์ด์
ํ๊ฒฝ์์ Spring์ IoC ์ปจํ
์ด๋์ DI(Dependency Injection) ๊ธฐ๋ฅ์ ์ ๊ณต
- ์น ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ํ ๋น(Bean)๋ค์ ์์ฑํ๊ณ ๊ด๋ฆฌ
- ์น ์คํ์, ContextLoaderListener๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ServletContext์ ์ ์ฅ
- ContextLoaderListener๋ฅผ ํตํด
์๋
์ผ๋ก ์์ฑ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ๋ฅผ ํธ์์ servlet applicationContext๋ผ๊ณ ํจ
ServletContext
๊ทธ๋ฆผ ์ถ์ฒ
- ์ฌ๋ฌ ์๋ธ๋ฆฟ์ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์ผ์ข
์ ๊ฐ์ฒด
- Dispatcher Servlet์ ํฌํจํ ์ฌ๋ฌ ์๋ธ๋ฆฟ์์ ์ ๊ทผํ์ฌ ๊ณต์ฉ ์์์ฒ๋ผ ์ฌ์ฉ๋จ
- ๊ฐ ์๋ธ๋ฆฟ์ ํ์์ ๋ฐ๋ผ WebApplicationContext์์ ํ์ํ ๋น(Bean)๋ค์ ๊ฐ์ ธ์ ์ฌ์ฉ
ContextLoaderListener
- ์น ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ ์ญํ ์ ๋ด๋น
- ContextLoaderListener๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ servlet applicationContext์ ์ ์ฅ
- ContextLoaderListener๋ฅผ ํตํด
์๋
์ผ๋ก ์์ฑ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ๋ฅผ ํธ์์ root applicationContext๋ผ๊ณ ํจ
๋์ ๋ฐฉ์
๊ทธ๋ฆผ ์ถ์ฒ
- Dispatcher Servlet์ ์ฌ๋ฌ๊ฐ ๋ง๋ค์ด์ง ์ ์๊ณ , ์ปจํธ๋กค๋ฌ๋ ํด๋น Dispatcher Servlet์ ๋งคํ ๋จ
- Dispatcher Servlet์ด ์ฌ์ฉํ๋ ์ปจํธ๋กค๋ฌ๋ ์น ์คํ์, ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ servlet applicationContext์ ๋ฑ๋ก๋ ๋น๋ค
- ์๋น์ค์ DAO์์ญ์ ์น ์คํ์, ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ root applicationContext์ ๋ฑ๋ก๋ ๋น๋ค
- ์์ ๊ฐ์ด ๊ณ์ธต ๋ณ๋ก ๋๋์๋ ์๊ณ , ํ๋์ IOC ์ปจํ
์ด๋(์น ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ)์ ๋ชจ๋ ๋น๋ค์ ๋ฑ๋กํ ์ ์์
REST(ful) API
REST ์ํคํ
์ณ ์คํ์ผ์ ๋ฐ๋ฅด๋ API
Rest ์ํคํ
์ณ ์คํ์ผ
- ํด๋ผ์ด์ธํธ-์๋ฒ (client-server)
- ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋ํ ๊ด์ฌ์ ๋ฐ์ดํฐ ์ ์ฅ์ ๋ํ ๊ด์ฌ์ผ๋ก๋ถํฐ ๋ถ๋ฆฌํจ์ผ๋ก์จ ํด๋ผ์ด์ธํธ์ ์ด์์ฑ๊ณผ ์๋ฒ์ ๊ท๋ชจ ํ์ฅ์ฑ์ ๊ฐ์
- ์คํ
์ดํธ๋ฆฌ์ค (stateless)
- ํด๋ผ์ด์ธํธ ์๋ฒ์ ํต์ ์ ์ํ๊ฐ ์์
- ๋ชจ๋ ์์ฒญ์๋ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ด ๊ฐ์์ฑ์ด ์ข๊ณ ์์ฒญ ์คํจ์ ๋ณต์์ด ์ฝ๊ธฐ ๋๋ฌธ์ ์ ๋ขฐ์ฑ์ด ์ข์
- ์ํ๋ฅผ ์ ์ฅํ ํ์๊ฐ ์์ด ๊ท๋ชจํ์ฅ์ฑ์ด ๊ฐ์
- ์บ์ (cache)
- ์บ์๊ฐ ๊ฐ๋ฅํด์ผ ํ๊ณ , HTTP๊ฐ ๊ฐ์ง ์บ์ฑ ๊ธฐ๋ฅ์ด ์ ์ฉ ๊ฐ๋ฅ
- HTTP ํ๋กํ ์ฝ ํ์ค์์ ์ฌ์ฉํ๋ Last-Modifiedํ๊ทธ๋ E-Tag๋ฅผ ์ด์ฉํ๋ฉด ์บ์ฑ ๊ตฌํ์ด ๊ฐ๋ฅ
- ๊ท ์ผํ ์ธํฐํ์ด์ค (uniform interface)
- URI๋ก ์ง์ ํ ๋ฆฌ์์ค์ ๋ํ ์กฐ์์ ํต์ผ๋๊ณ ํ์ ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ํํ๋ ์ํคํ
์ฒ ์คํ์ผ
- ๊ณ์ธตํ๋ ์์คํ
(layered system)
- REST ์๋ฒ๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์
- ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๊ณ์ธต์ ์ถ๊ฐํด ๊ตฌ์กฐ์์ ์ ์ฐ์ฑ์ ๋ ์ ์๊ณ PROXY, ๊ฒ์ดํธ์จ์ด ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ๋งค์ฒด๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅ
REST ์ํคํ
์ณ ์คํ์ผ Level
๊ทธ๋ฆผ ์ถ์ฒ
Level 3๊น์ง ์ ์ฉํ๋ฉด, REST ์ํคํ
์ณ ์คํ์ผ์ ๊ฐ์ฅ ๊ทผ์ ํ๊ฒ API๋ฅผ ๋ง๋ค์๋ค๊ณ ๋ด
- Level 0
- ๊ฐ์ฅ ํ์์ ๋ ๋ฒจ
- HTTP๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ์ ๋ฌํ๋ค๋ผ๋ ์์
- REST๋ ์๋
- Level 1
- Resources ์ถ๊ฐ
- ๋ฆฌ์์ค์ ์ํ๋ฅผ ๋ฐ์ํ๊ณ ์๋ ์ ๋ณด์ด๊ณ representation data์ representation metadata๋ก ๊ตฌ์ฑ
๊ทธ๋ฆผ ์ถ์ฒ
- Level 2
- Level 3
- HATEOAS
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ต ๋ฐ์ ๋ฆฌ์์ค๋ฅผ ๊ฐ๊ณ ๋ฌด์์ ํ ์ ์๋์ง ์๋ต ๋ฉ์ธ์ง์ ์๋ ค์ค
๊ทธ๋ฆผ ์ถ์ฒ
API ์ค๊ณ
GET /members/delete/1
DELETE /members/1
GET /members/show/1
GET /members/1
POST /task/1/run
- URI๋ ์ ๋ณด์ ์์์ ํํํด์ผ ํ๊ณ , ๋ฆฌ์์ค๋ช
์ ๋์ฌ๋ณด๋ค ๋ช
์ฌ๋ฅผ ์ฌ์ฉ
- ์์์ ๋ํ ํ์๋ ๋์ฌ ๋์ HTTP Method๋ก ํํ
- ์ฌ๋์ ๊ตฌ๋ถ์(/)๋ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ
- URI ๋ง์ง๋ง ๋ฌธ์๋ก ์ฌ๋์(/) ํฌํจ ์ํจ
- ๊ฐ๋
์ฑ์ ๋์ด๊ธฐ ์ํด ํ์ดํฐ(-) ์ฌ์ฉ ๊ฐ๋ฅ
- CRUD๊ฐ ์๋, ํน์ ํ์๋ฅผ ํํํ๋ ค๋ฉด URI์ ๋ง์ง๋ง์ ๋์ฌ ํํ
์คํ๋ง์์ REST API ์ฌ์ฉ
- @RequestBody: ์ ๋ฌ๋ฐ์ ์์ฒญ ๋ฉ์ธ์ง๋ฅผ ์ํ๋ ํํ๋ก ๋ณํ
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
return ResponseEntity.ok(user);
}
- @ResponseBody: ์ ์ํ ๋ชจ๋ธ ํด๋์ค๋ฅผ ResponseBody ํํ๋ก ๋ณํ
@GetMapping("/users/{id}")
@ResponseBody
public User getUser(@PathVariable Long id) {
return user;
}
- @RestController: ํด๋์ค์ ๋ชจ๋ ๋ฉ์๋์ @ResponseBody ์ ์ฉ
@RestController
public class UserController {
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
}
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
}
}
HTTP ๋ฉ์์ง ์ปจ๋ฒํฐ
๊ทธ๋ฆผ ์ถ์ฒ
- Spring MVC์์ HTTP ์์ฒญ๊ณผ ์๋ต์ ๋ณธ๋ฌธ(body)์ ์๋ฐ ๊ฐ์ฒด์ HTTP ๋ฉ์์ง ํ์(JSON, XML, TEXT ๋ฑ) ๊ฐ์ ๋ณํํด์ฃผ๋ ๊ธฐ๋ฅ์ ์ํ
- ํด๋ผ์ด์ธํธ๊ฐ JSON ํ์์ผ๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด HTTP ๋ฉ์์ง ์ปจ๋ฒํฐ๋ JSON ๋ฐ์ดํฐ๋ฅผ ์๋ฐ ๊ฐ์ฒด๋ก ๋ณํ
- ์๋ฒ๊ฐ JSON ํ์์ผ๋ก ์๋ต์ ๋ณด๋ด๋ฉด ์๋ฐ ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ๋ณํํ์ฌ ์ ์ก
- ํด๋ผ์ด์ธํธ ์์ฒญ์ Content-Type ํค๋์ ์๋ฒ ์๋ต์ Accept ํค๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ํ ๋ฉ์์ง ์ปจ๋ฒํฐ๋ฅผ ์ ํ
- Spring MVC๋ ๋ค์ํ ํ์์ ์ฒ๋ฆฌํ๋ ์ฌ๋ฌ ๊ฐ์ HTTP ๋ฉ์์ง ์ปจ๋ฒํฐ๋ฅผ ์ง์ํ๋ฉฐ, ์ฐ์ ์์ ๋ถ์ฌ ๊ฐ๋ฅ
Http Client ๋๊ตฌ
- Intellij HTTP Client
- Postman