ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๐Ÿ’ก์ •์  ์ปจํ…์ธ 

์ •์  ์ปจํ…์ธ ๋Š” ์„œ๋ฒ„์—์„œ ๋ญ˜ ํ•ด์ฃผ๋Š” ๊ฒƒ ์—†์ด ํŒŒ์ผ ๊ทธ๋Œ€๋กœ๋ฅผ ์›น๋ธŒ๋ผ์šฐ์ €๋กœ ๋‚ด๋ ค์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

resource/static ํด๋” ์•ˆ์— hello-static.html ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ 

<!DOCTYPE HTML>
<html>
<head>
    <title>static content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
์ •์  ์ปจํ…์ธ  ์ž…๋‹ˆ๋‹ค.
</body>
</html>

์œ„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค€ ํ›„์—

 http://localhost:8080/static.html์„ ์ณ์„œ ๋“ค์–ด๊ฐ€๋ฉด

์œ„์™€ ๊ฐ™์ด ์ •์ƒ์ ์ธ ์ •์  ์ปจํ…์ธ ๊ฐ€ ๋ณด์ธ๋‹ค.

 

๐Ÿ’ก์ •์  ์ปจํ…์ธ  ์›๋ฆฌ

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:8080/static.html ์ฃผ์†Œ์— ๋“ค์–ด๊ฐ€๋ฉด ๋‚ด์žฅ ํ†ฐ์ผ“ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๊ณ , '๋จผ์ €' static.html ์„ ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ์— static ๊ด€๋ จ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ์„ ํ•œ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ํŒŒ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋„˜์–ด๊ฐ€๊ณ  ๊ทธ ๋‹ค์Œ์œผ๋กœ static ๊ด€๋ จ html ์ด ์žˆ๋Š” ์ง€ ํ™•์ธ์„ ํ•˜์—ฌ ์ฐพ์œผ๋ฉด ์ด ํŒŒ์ผ์„ ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋ฐ”๋กœ ๋ณด๋‚ด์ฃผ๋Š” ๊ฒƒ์ด ์ •์  ์ปจํ…์ธ ์˜ ์›๋ฆฌ์ด๋‹ค. (์ถœ์ฒ˜:easy00.log)

 

๐Ÿ’กMVC์™€ ํ…œํ”Œ๋ฆฟ์—”์ง„

MVC๋Š” ์„œ๋ฒ„์—์„œ ๋ณ€ํ˜•์„ ํ•ด์ค˜์„œ (html์„ ๋ฐ”๊ฟ”์„œ) ๋‚ด๋ ค์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์›๋ž˜๋Š” view๋ž‘ controller๋ž‘ ๋ถ„๋ฆฌ๋˜์ง€ ์•Š๊ณ  view์—์„œ ๋‹ค ํ–ˆ์ง€๋งŒ ์ด์ œ๋Š” ๋ถ„๋ฆฌ๋˜์–ด MVC(model, view, controller)๋ผ๊ณ  ํ•œ๋‹ค.

 

html์„ ์„œ๋ฒ„์—์„œ ๋™์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•ด์„œ ์›น๋ธŒ๋ผ์šฐ์ €๋กœ ๋‚ด๋ ค์ฃผ๋Š” ๊ฒƒ์„ ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ปจํŠธ๋กค๋Ÿฌ, ๋ชจ๋ธ, ํ…œํ”Œ๋ฆฟ ์—”์ง„ ํ™”๋ฉด ์ด 3๊ฐ€์ง€ Model, View, Controller(MVC) ๋ผ๊ณ  ํ•œ๋‹ค.
view๋Š” ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๋ฐ์— ๋ชจ๋“  ์˜ํ–ฅ์„ ์ง‘์ค‘ํ•ด์•ผ ํ•˜๋ฉฐ, model๊ณผ controller๋Š” ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์— ๊ด€๋ จ์ด ์žˆ๊ฑฐ๋‚˜ ๋‚ด๋ถ€์ ์ธ ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์ง‘์ค‘ํ•œ๋‹ค. (์ถœ์ฒ˜:easy00.log)

์ฆ‰, view๋Š” ํ™”๋ฉด๊ณผ ๊ด€๋ จ๋œ ์ผ๋งŒ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์„œ๋ฒ„ ๋’ท๋‹จ์— ๊ด€๋ จ๋œ ๊ฑฐ๋Š” controller๋‚˜ ๋’ท๋‹จ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๋‹ค ์ฒ˜๋ฆฌํ•˜๊ณ , model์—๋‹ค๊ฐ€ ๊ด€๋ จ๋œ ํ™”๋ฉด์—์„œ ํ•„์š”ํ•œ ๊ฑฐ๋ฅผ ๋‹ด์•„์„œ ํ™”๋ฉด์— ๋„˜๊ฒจ์ฃผ๋Š” ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

์ €๋ฒˆ์— ๋งŒ๋“ค์–ด๋‘์—ˆ HelloController ํด๋ž˜์Šค์— 

    @GetMapping("hello-mvc") //์›น ๋ธŒ๋ผ์šฐ์ €์— ์น  ๋•Œ /hello-mvc๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฒƒ
    public String helloMvc(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
        return "hello-template";
    }

์œ„์™€ ๊ฐ™์€ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ๋‹ค.๋Š” localhost::8080/hello-mvc ๋กœ ๋“ค์–ด๊ฐ€๋ฉด helloMvc๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๊ณ , ์ด ๋•Œ name์ด๋ผ๋Š” ์ด๋ฆ„์˜ param์„ ๋ฐ›์•„ attribute์˜ "name"์— param์œผ๋กœ ๋ฐ›์€ ๊ฐ’์„ model์— ๋„ฃ์–ด hello-template์„ returnํ•ด์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

main/resources/templates ํด๋” ์•ˆ์— return ๊ฐ’๊ณผ ๋˜‘๊ฐ™์€ ์ด๋ฆ„์˜ ํŒŒ์ผ hello-template.htmlํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ ,

<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>

์ €๋ฒˆ์—๋Š” ${data}์˜€๋‹ค๋ฉด ์ด๋ฒˆ์—๋Š” ${name}์œผ๋กœ ์ž‘์„ฑํ•ด์ค€๋‹ค. 

hello! empty๊ฐ€ ์žˆ๋Š” ์ด์œ ๋Š” ์„œ๋ฒ„์—†์ด ๊ทธ๋ƒฅ html๋งŒ๋“ค์–ด์„œ ๋ณผ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์œผ๋กœ,

์‹ค์ œ ์„œ๋ฒ„๋ฅผ ํƒ€์„œ ๋Œ๋ฉด 'hello ' +${name}์œผ๋กœ ๊ฐ’์ด ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.

์ด์ œ localhost:8080/hello-mvc๋กœ ๋“ค์–ด๊ฐ€๋ฉด ์ด์™€ ๊ฐ™์€ ์—๋Ÿฌ ํŽ˜์ด์ง€๊ฐ€ ๋œจ๋Š”๋ฐ, ์ด๋Š” 2023-11-07 14:45:35.563  WARN 20544 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'name' for method parameter type String is not present] ์—๋Ÿฌ๋ฉ”์„ธ์ง€์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด Required๋œ request parameter 'name'์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ •์ƒ์ ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด name์— param๊ฐ’์„ ์ค˜์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์›๋ž˜์˜ localhost:8080/hello-mvc๊ฐ€ ์•„๋‹ˆ๋ผ, http://localhost:8080/hello-mvc?name=spring!!! ์œผ๋กœ name=spring!!!์ด ๋‹ค๋ฅธ ๊ฐ’์„ ์ค˜์•ผ ์ œ๋Œ€๋กœ ๋œ ํ™”๋ฉด์ด ๋œฌ๋‹ค.

 

๐Ÿ’กMVC ๋™์ž‘์›๋ฆฌ

hello-mvc?name=spring!!! ์—์„œ name์˜ param์œผ๋กœ ๋ฐ›์€ spring!!! ์ด ์•„๋ž˜ ์ฝ”๋“œ์— ์žˆ๋Š” name์˜ ์ž๋ฆฌ์— ๋“ค์–ด๊ฐ€๊ณ , ์ด ๊ฐ’๋“ค์ด Model์— ๋‹ด๊ฒจ hello-template๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

๊ทธ๋Ÿฌ๋ฉด template์—์„œ Model์˜ Key ๊ฐ’์ด name์ธ ๊ฒƒ์„ ์ฐพ์•„, ๊ทธ value๊ฐ’์„ ${name} ์— ์น˜ํ™˜์„ ํ•ด์ฃผ๋ฉด ๊ทธ ์ž๋ฆฌ์— spring!!! ์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. (์ถœ์ฒ˜:easy00.log)

 

๋จผ์ €, ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ "localhost:8080/hello-mvc" ์ฃผ์†Œ๋ฅผ ์š”์ฒญํ•˜๋ฉด ๋‚ด์žฅ ํ†ฐ์บฃ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋‚ด์žฅ ํ†ฐ์บฃ ์„œ๋ฒ„๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์›น ์„œ๋ฒ„ ์—ญํ• ์„ ํ•œ๋‹ค. ์ด ์„œ๋ฒ„๋Š” "hello-mvc" ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ปจํŠธ๋กค๋Ÿฌ(Controller)๋ฅผ ์ฐพ์•„์„œ ์‹คํ–‰ํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ, "helloController"๋ผ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์— ๋งคํ•‘(mapping)๋˜์–ด ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
"helloController"์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด, ํ•ด๋‹น ๋ฉ”์„œ๋“œ์—์„œ๋Š” "hello-template"๋ผ๋Š” ๋ทฐ(View)๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ทฐ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œํ•  ๋‚ด์šฉ์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด ๊ฒฝ์šฐ "hello-template"์€ ํ…œํ”Œ๋ฆฟ ์—”์ง„์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.
์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„(์˜ˆ: Thymeleaf)์„ ์‚ฌ์šฉํ•˜์—ฌ "hello-template"์„ ๋ Œ๋”๋งํ•œ๋‹ค. ํ…œํ”Œ๋ฆฟ ์—”์ง„์€ ๋™์  ๋ฐ์ดํ„ฐ๋ฅผ HTML๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, ์ด ๊ฒฝ์šฐ ๋ชจ๋ธ(Model)์— "name"์ด๋ผ๋Š” ํ‚ค(key)์™€ ๊ฐ’(value)์ธ "spring!!"์„ ์ „๋‹ฌํ•œ๋‹ค.
ํ…œํ”Œ๋ฆฟ ์—”์ง„์€ ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ "hello-template"์— ์‚ฝ์ž…ํ•˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ HTML์„ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์ด HTML์„ ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น HTML์„ ๋ Œ๋”๋งํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œํ•œ๋‹ค.

 

๐Ÿ’กAPI

์ •์  ์ปจํ…์ธ ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” html๋กœ ๋‚ด๋ฆฌ๋ƒ(MVC๋ฐฉ๋ฒ•), API๋ผ๋Š” ๋ฐฉ์‹์œผ๋กœ data๋ฅผ ๋ฐ”๋กœ ๋‚ด๋ฆฌ๋ƒ(API) ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

API๋Š” json์ด๋ผ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ํฌ๋ฉง์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์„œ๋ฒ„๋ผ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ API๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

๊ธฐ์กด HelloController์— 

@GetMapping("hello-string")
    @ResponseBody //http์˜ body๋ถ€์— "hello" + name; ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋„ฃ์–ด์ฃผ๊ฒ ๋‹ค
    public String helloString(@RequestParam("name") String name){
        return "hello" + name; // String name์—์„œ name์— spring์„ ๋„ฃ์œผ๋ฉด "hello spring"์œผ๋กœ ๋ฐ”๋€œ
        //๋ฌธ์ž๊ฐ€ ์š”์ฒญํ•œ client์— ๊ทธ๋ƒฅ ๋‚ด๋ ค๊ฐ (view ์ด๋Ÿฐ๊ฒŒ ์—†์Œ)
    }

 

์œ„ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด, name์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ param์„ ๋ฐ›์•„์„œ ๋ฐ›์€ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ returnํ•ด์ค€๋‹ค. ๋ฐ›์€ name๊ฐ’์ด ๊ทธ๋Œ€๋กœ ์„œ๋ฒ„์— ์ „๋‹ฌ๋˜๊ณ , http body์— name๊ฐ’์ด ์ง์ ‘ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.

์ด์ „์— template์—”์ง„์€ ํ™”๋ฉด์„ ๊ฐ€์ง€๊ณ  view๋ผ๋Š” template์„ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๋ฉด, api๋Š” data๋ฅผ ๊ทธ๋Œ€๋กœ ๋‚ด๋ ค์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค.

 http://localhost:8080/hello-string?name=spring!!! ์— ๋“ค์–ด๊ฐ€๋ฉด ์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋œฌ๋‹ค.

 

๐Ÿ’กAPI (JSON ๋ฐฉ์‹)

์ด๋ฒˆ์—” key, value๋กœ ์ด๋ฃจ์–ด์ง„ JSON๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค. (์ตœ๊ทผ์—๋Š” JSON๋ฐฉ์‹์œผ๋กœ ํ†ต์ผ์ด ๋จ)

HelloContoller์— 

 @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name){
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }

    static class Hello{
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

์œ„ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด 

hello-api๊ฐ€ @GetMapping์œผ๋กœ ๋งคํ•‘๋˜์–ด ์žˆ์–ด ์›น์— localhost:8080/hello-api์„ ์น˜๋ฉด ํ•ด๋‹น ๋ฉ”์„œ๋“œ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๊ณ ,

@ResponseBody๋Š” ์ง์ ‘ http์˜ body์— data๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋ฒˆ์—” ์œ„์™€ ๋‹ฌ๋ฆฌ JSON๋ฐฉ์‹์ด๋ฏ€๋กœ JSON๋ฐฉ์‹์œผ๋กœ data๋ฅผ ๋„˜๊ฒจ์ฃผ๊ธฐ ์œ„ํ•ด hello๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๊ณ , ๊ทธ ๊ฐ์ฒด์— ๊ฐ’์„ ๋„ฃ์–ด returnํ•ด์ฃผ์—ˆ๋‹ค. 

http://localhost:8080/hello-api?name=spring!!! ์„ ์น˜๋ฉด ์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋œฌ๋‹ค. 

{"key":"value"} ์ฒ˜๋Ÿผ JSON ํ˜•์‹์œผ๋กœ data๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋‚ด๋ ค๊ฐ„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’กAPI ๋™์ž‘์›๋ฆฌ

์›น ๋ธŒ๋ผ์šฐ์ €์— localhost:8080/hello-api๋ฅผ ํƒ€์ดํ•‘ํ•˜๋ฉด ๋‚ด์žฅ ํ†ฐ์ผ“ ์„œ๋ฒ„์—์„œ hello-api๋ฅผ spring์œผ๋กœ ๋ณด๋‚ด์ค€๋‹ค. spring์€ hello-api๊ฐ€ mapping ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ๋˜ํ•œ ๊ฑฐ๊ธฐ์— @ResponseBody๊ฐ€ ์žˆ์–ด http ์‘๋‹ต์— data๋ฅผ ๊ทธ๋Œ€๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๋™์ž‘์„ ํ•˜๊ฒŒ ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋ฐ”๋กœ ์œ„ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— data ๊ทธ๋Œ€๋กœ๊ฐ€ ์•„๋‹Œ JSON ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์„œ http ์‘๋‹ต์— ๋ฐ˜ํ™˜์„ ํ•ด์•ผํ•œ๋‹ค.
์ฆ‰, @ResponseBody๊ฐ€ ์žˆ์œผ๋ฉด HttpMessageConverter๊ฐ€ ๋™์ž‘์„ ํ•˜๊ณ , ๊ฐ์ฒด๊ฐ€ return ๋๊ธฐ ๋•Œ๋ฌธ์— JsonConverter๊ฐ€ ๋™์ž‘ํ•˜๊ฒŒ ๋˜์–ด ๊ฐ์ฒด๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ๊ฒŒ ๋˜์–ด JSON ํ˜•ํƒœ๋กœ ์‘๋‹ต์„ ํ•˜๊ฒŒ ๋œ๋‹ค. (์ถœ์ฒ˜:easy00.log)

 

์ฆ‰, @ResponseBody๊ฐ€ ์žˆ์œผ๋ฉด viewResolverํ•œํ…Œ ๋˜์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ทธ๋Œ€๋กœ http์‘๋‹ต์— data๋ฅผ ๋„˜๊ธด๋‹ค.

๋ฌธ์ž๊ฐ€ ์•„๋‹ˆ๊ณ  ๊ฐ์ฒด์ผ ๋•, return๊ฐ’์— ๋ฐ”๋กœ ๋„ฃ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ JSON๋ฐฉ์‹์œผ๋กœ data๋ฅผ ๋งŒ๋“ค์–ด์„œ http์‘๋‹ต์— ๋ฐ˜ํ™˜ํ•œ๋‹ค.

@ResponseBody๋ผ๊ณ  ์˜ค๋ฉด, HttpMessageConverter๊ฐ€ ๋™์ž‘ํ•ด์„œ ๋ฌธ์ž์ผ ๋• StringConverter, ๊ฐ์ฒด์ผ ๋• JsonConverter๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๊ฐ์ฒด์ผ ๋• ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ”์„œ ๋ฐ˜ํ™˜ํ•ด์•ผํ•˜๋ฏ€๋กœ ๊ฐ์ฒด๋ฅผ Json์Šคํƒ€์ผ๋กœ ๋ฐ”๊ฟ”์„œ ์›น๋ธŒ๋ผ์šฐ์ €ํ•œํ…Œ ๋ณด๋‚ด์ค€๋‹ค.

 

'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[SPRING]์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  ์„น์…˜6 (์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ )  (3) 2023.12.29
[SPRING]์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  ์„น์…˜5 (ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - ์›น MVC ๊ฐœ๋ฐœ)  (2) 2023.12.24
[SPRING]์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  ์„น์…˜4 (์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„)  (0) 2023.11.27
[SPRING]์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  ์„น์…˜3 (ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ)  (0) 2023.11.08
[SPRING]์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  ์„น์…˜ 0~1 (ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ดํŽด๋ณด๊ธฐ, Viewํ™˜๊ฒฝ์„ค์ •, ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ)  (0) 2023.11.07