Spring

TIL Spring #1-1

๋ฆฐ์˜ˆ์กฐ 2023. 12. 4. 21:39

Spring MVC

Controller


 

Spring MVC

Model, View, Controller ์„ธ๊ฐ€์ง€๋กœ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๋“ค์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ฐ๊ฐ์˜ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•œ๋‹ค.

-> Spring์—์„œ ํ•ด๋‹น ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ HTTP ์š”์ฒญ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•จ.

 

-> Spring ์—์„œ MVC ํ•ด๋‹น ํŒจํ„ด์„ DispatcherServlet์ด ์ค‘์•™์—์„œ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š”๋ฐ

 ์ด๊ฒƒ์€ FrontController ํŒจํ„ด์œผ๋กœ ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค. ๋ผ๊ณ  ์„ค๋ช…ํ•œ๋‹ค. ์„œ๋ธ”๋ฆฟ์€ ๋ฌด์—‡์ด๊ณ  ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ฌด์—‡์ผ๊นŒ?

 

์šฐ์„ , ์„œ๋ธ”๋ฆฟ ์ž์ฒด๋Š” ์ž๋ฐ”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›นํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์„œ๋ฒ„ ์ธก ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. 

๊ทธ๋ฆผ๊ณผ ์„ค๋ช…์„ ์ฒจ๋ถ€ํ•˜์—ฌ ๋ณด์ž!

์„œ๋ธ”๋ฆฟ ๋™์ž‘ ๊ณผ์ •

 

์ •๋ฆฌํ•ด๋ณด๋ฉด, ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์„œ๋ธ”๋ฆฟ์€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ์š”์ฒญ์ด ์–ด๋–ค ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•œ ์š”์ฒญ์ธ์ง€ ์ฐพ๊ณ  service ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด

์š”์ฒญ์— ๋งž๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๊ทธ๊ฒƒ์„ ๊ทธ๋Œ€๋กœ return ํ˜น์€ ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•ด ๋งŒ๋“ค์–ด๋’€๋˜ ๊ฐ์ฒด์— ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‘๋‹ต์ด ์™„๋ฃŒ๋œ ํ›„ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์†Œ๋ฉธํ•œ๋‹ค. 

 

๊ทธ๋ ‡์ง€๋งŒ ํ•ด๋‹น ๋™์ž‘ ๋ฐฉ์‹์— ๋งž์ถ˜๋‹ค๋ฉด ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ์ฝ”๋“œ์™€ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. (API ์— ๋งž๊ฒŒ ์„œ๋ธ”๋ฆฟ์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ๊ตฌํ˜„ํ•ด์•ผ ๋จ ใ… ใ… )

 

๊ทธ๋ž˜์„œ!

Spring์—์„œ๋Š” DispatcherServlet์„ ์‚ฌ์šฉํ•ด FrontController ํŒจํ„ด์œผ๋กœ API ์š”์ฒญ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. 

 

 ์šฐ์„  ๊ทธ๋ฆผ์œผ๋กœ ๊ณผ์ •์„ ์‚ดํŽด๋ณด๋ฉด 

FrontController ํŒจํ„ด์˜ ๋™์ž‘๊ณผ์ •

 

-> ์ด์ „์— ์„œ๋ธ”๋ฆฟ์ด ์š”์ฒญ์„ ๋ฐ›์•„ ๋ชจ๋“  ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์‘๋‹ต์„ ํ–ˆ๋‹ค๋ฉด!

 

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