Spring MVC
Controller
Spring MVC
Model, View, Controller ์ธ๊ฐ์ง๋ก ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ค์ ๊ตฌ๋ถํ์ฌ ๊ฐ๊ฐ์ ์ญํ ์ ๋ถ๋ฆฌํ๋ค.
-> Spring์์ ํด๋น ํจํด์ ์ ์ฉํ์ฌ HTTP ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํจ.
-> Spring ์์ MVC ํด๋น ํจํด์ DispatcherServlet์ด ์ค์์์ HTTP ์์ฒญ์ ์ฒ๋ฆฌํด์ฃผ๋๋ฐ
์ด๊ฒ์ FrontController ํจํด์ผ๋ก ์ค๊ณ๋์ด ์๋ค. ๋ผ๊ณ ์ค๋ช ํ๋ค. ์๋ธ๋ฆฟ์ ๋ฌด์์ด๊ณ ํด๋น ์ปจํธ๋กค๋ฌ๋ ๋ฌด์์ผ๊น?
์ฐ์ , ์๋ธ๋ฆฟ ์์ฒด๋ ์๋ฐ๋ฅผ ์ฌ์ฉํ์ฌ ์นํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๋ ์๋ฒ ์ธก ํ๋ก๊ทธ๋จ์ด๋ค.
๊ทธ๋ฆผ๊ณผ ์ค๋ช ์ ์ฒจ๋ถํ์ฌ ๋ณด์!
์ ๋ฆฌํด๋ณด๋ฉด, ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์๋ธ๋ฆฟ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ํด๋น ์์ฒญ์ด ์ด๋ค ์๋ธ๋ฆฟ์ ๋ํ ์์ฒญ์ธ์ง ์ฐพ๊ณ service ๋ฉ์๋๋ฅผ ํธ์ถํด
์์ฒญ์ ๋ง๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. ๊ทธ๊ฒ์ ๊ทธ๋๋ก return ํน์ ํ์ด์ง๋ฅผ ์์ฑํด ๋ง๋ค์ด๋๋ ๊ฐ์ฒด์ ์๋ต์ ๋ฐํํ๊ณ ์๋ต์ด ์๋ฃ๋ ํ ํด๋น ๊ฐ์ฒด๋ฅผ ์๋ฉธํ๋ค.
๊ทธ๋ ์ง๋ง ํด๋น ๋์ ๋ฐฉ์์ ๋ง์ถ๋ค๋ฉด ๋ฌด์ํ ๋ง์ ์ฝ๋์ ํด๋์ค๋ฅผ ๊ตฌํํด์ผ ํ๋ค. (API ์ ๋ง๊ฒ ์๋ธ๋ฆฟ์ ํ๋ํ๋ ๋ค ๊ตฌํํด์ผ ๋จ ใ ใ )
๊ทธ๋์!
Spring์์๋ DispatcherServlet์ ์ฌ์ฉํด FrontController ํจํด์ผ๋ก API ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ค๋ค.
์ฐ์ ๊ทธ๋ฆผ์ผ๋ก ๊ณผ์ ์ ์ดํด๋ณด๋ฉด
-> ์ด์ ์ ์๋ธ๋ฆฟ์ด ์์ฒญ์ ๋ฐ์ ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์๋ต์ ํ๋ค๋ฉด!
DispatcherServlet / FrontController
- ํด๋น ์๋ธ๋ฆฟ ๊ฐ์ฒด๊ฐ ์์ฒญ์ ๋ถ์ํด Handler mapping์ ํตํด Controller ๋ฅผ ์ฐพ์์ ์ ๋ฌ! (Handler์๋ API path, Controlelr ๋ฉ์๋๊ฐ ๋งค์นญ๋์ด ์์.)
- ์ปจํธ๋กค๋ฌ ํด๋์ค์ ์ ๋ํ ์ด์ ์ ๋ช ์ํด์ฃผ๊ณ method์ ์ฌ๋ฐ๋ฅธ url์ ์ ์ธํด์ฃผ๋ฉด ์์์ ๋งคํํด์ค๋ค.
-> DispatcherServlet, FrontController ์ด ๋๊ฐ์ง๋ฅผ ํตํด ํจ์ฌ ๋ ํจ์จ์ ์ผ๋ก HTTP ์์ฒญ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
#Controller ๊ตฌํ
^ ๋ชจ๋ API๋ฅผ ํ controller ์ ๋ด๋ ๊ฒ์ด ์๋ ์ ์ฌํ ์ฑ๊ฒฉ์ ๊ฐ์ง API ๋ค๋ง ํ ์ปจํธ๋กค๋ฌ์์ ๊ด๋ฆฌ.
^ ๋ฉ์๋ ์ด๋ฆ์ ์์ ๋กญ๊ฒ ์ค์ ๊ฐ๋ฅํ๋ ํ ํด๋์ค์์ ์ค๋ณต๋ ๋ฉ์๋๋ช ์ด ์์ผ๋ฉด ์ ๋๋ค.
1. Controller ๋ง๋ค๊ธฐ (get, post ๋ฐฉ์๋ณ๋ก ๊ฐ๊ฐ ํ๋์ฉ๋ง ๋ง๋ค์ด๋ณด์.)
@Controller //์ ๋ํ
์ด์
๋ฐ๋์ ๋ช
์ํด์ค์ผ ํจ.
public class HelloController{
@GetMapping("/api/get")
@ResponseBody
public String get(){
return "Hello World";
}
@PostMapping("/api/post")
@ResponseBody
public String post(){
return "POST method ์์ฒญ!";
}
}
// controller ์ญํ ์ ์ํํ๋ ํด๋์ค์๋ ๋ฐ๋์ @controller ์ ๋ํ ์ด์ ์ ์ด์ฃผ์ด์ผ ํ๋ค.
// ๋ง์ฝ ๋ฉ์๋์ return ๊ฐ์ด html ํ์ผ์ด ์๋ ๋จ์ ๋ฌธ์์ด์ผ ๊ฒฝ์ฐ์๋ @ResponseBody ์ ๋ํ ์ด์ ์ ์ ์ด์ค๋ค.
// ++ ๋ค์ ํ๋ฒ ์์ง ๋ง๊ธฐ url ์ค๋ณต์ ์๊ด์์ผ๋ ํ ํด๋์ค ๋ด์์ ๋ฉ์๋ ๋ช ์ด ์ค๋ณต๋์ด์ ์ ๋๋ค.
// ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ํ ๊ฐ์ง ๊ฑธ๋ฆฌ๋ ๋ถ๋ถ์ด ์๋ค. url์ ์ค๋ณต๋๋ ๊ฒฝ๋ก๊ฐ ์๋ค. ํด๊ฒฐํด๋ณด์.
2. RequestMapping
- @RequestMapping ํด๋น ์ ๋ํ ์ด์ ์ ํตํด ์ค๋ณต๋๋ URL์ ์ค์ผ ์ ์๋ค.
@Controller
@RequestMapping("/api") //#1
public class HelloController{
@GetMapping("/get") //#2
@ResponseBody
public String get(){
return "Hello World";
}
@PostMapping("/post") //#3
@ResponseBody
public String post(){
return "POST method ์์ฒญ!";
}
}
์ง ! ๋งค์ฐ ์ฝ๋ค. ์ ๋ํ ์ด์ ์ ์ธ ํ ๋ฐ๋ณต๋๋ URL์ ์ ์ด์ฃผ๋ฉด ๋!
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TIL Spring #2-3 (0) | 2023.12.12 |
---|---|
TIL Spring 2-2 (0) | 2023.12.08 |
TIL Spring 2-1 (1) | 2023.12.07 |
TIL Spring 1-3 (0) | 2023.12.06 |
TIL Spring 1-2 (0) | 2023.12.05 |