Study/Java

[TIL] Spring MVC

hong- 2022. 6. 23. 14:02

๐Ÿ™Œ๐Ÿป  Spring MVC : Spring Web MVC 

 - ์„œ๋ธ”๋ฆฟ API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋“ˆ

 - ์›น ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•œ ์ข…๋ฅ˜์ด๊ธฐ ๋•Œ๋ฌธ์— Spring MVC ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ ๋„ ๋ถ€๋ฆ„

 ๐Ÿ’ก Spring Framework

   - ์Šคํ”„๋ง์—์„œ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ๋“ค

 ๐Ÿ’ก ์„œ๋ธ”๋ฆฟ : Servlet

   - ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํŠน์ • ๊ทœ์•ฝ์— ๋งž์ถ”์–ด Java ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋Š” ํด๋ž˜์Šค ํŒŒ

 ๐Ÿ’ก ์•„ํŒŒ์น˜ ํ†ฐ์บฃ : Apache Tomcat

    - ์„œ๋ธ”๋ฆฟ๋“ค์ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์‹คํ–‰์ด ๋˜๋„๋ก ํ•ด์ฃผ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ค‘ ํ•˜๋‚˜


๐Ÿ“ Spring MVC : Model

 - ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ

 - ์„œ๋น„์Šค ๊ณ„์ธต ? ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์‚ฌํ•ญ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜์—ญ

 - ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ? ์‹ค์ œ ์š”์ฒญ ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฐ” ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ


๐Ÿ“ Spring MVC : View

 - Model ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ์›น ๋ธŒ๋ผ์šฐ์ € ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๋Š” ๋ฆฌ์†Œ์Šค ์ œ๊ณต

  โ‘  HTML ํŽ˜์ด์ง€์˜ ์ถœ๋ ฅ

  - ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ณด์—ฌ์ง€๋Š” HTMl ํŽ˜์ด์ง€๋ฅผ ์ง์ ‘ ๋ Œ๋”๋งํ•ด์„œ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ „์†ก

  - HTML ํƒœ๊ทธ๋กœ ๊ตฌ์„ฑ๋œ ํŽ˜์ด์ง€์— Model ๋ฐ์ดํ„ฐ๋ฅผ ์ฑ„์›Œ๋„ฃ์–ด ์ตœ์ข…์ ์ธ HTML ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด ํด๋ผ์ด์–ธํŠธ ์ธก์œผ๋กœ ์ „์†ก

  - HTMLํŽ˜์ด์ง€ ์ถœ๋ ฅ ๊ธฐ์ˆ  : Thymeleaf, FreeMarker, JSP + JSTL, Tiles ๋“ฑ

  - ๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ ํ†ตํ•ฉ๋œ ๊ตฌ์กฐ

  โ‘ก PDF, Excel ๋“ฑ ๋ฌธ์„œ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ

  - Model ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•ด์„œ PDF ๋ฌธ์„œ๋‚˜ Excel ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค์–ด ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ „์†ก

  - ๋ฌธ์„œ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ

  โ‘ข XML, JSON ๋“ฑ ํŠน์ • ํ˜•์‹์˜ ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜

   - Model ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ํ”„๋กœํ† ์ฝœ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋ณ€ํ™˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ „์†ก

   - ํŠน์ • ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ „์†กํ•˜๊ณ  ํ”„๋ก ํŠธ์—”๋“œ ์ธก์—์„œ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ HTMLํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ฆ

     โ–ช๏ธ XML, JSON์˜ ์žฅ์ 

      - ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ ์˜์—ญ์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„๋˜์–ด ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์šฉ์ด

      - ํ”„๋ก ํŠธ ์ธก์—์„œ ๋น„๋™๊ธฐ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์ง

     ๐Ÿ’ก JSON : JavaScript Object Notation

     { "์†์„ฑ" : "๊ฐ’" }

      - Spring MVC์—์„œ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹

      - ๊ณผ๊ฑฐ์—๋Š” XML ํ˜•์‹์„ ๋งŽ์ด ์‚ฌ์šฉ 

        → But, ํ˜„์žฌ๋Š” ๋Œ€๋ถ€๋ถ„ XML๋ณด๋‹ค ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ€๋ณ๊ณ  ๋ณต์žกํ•˜์ง€ ์•Š๋Š” JSON ์‚ฌ์šฉ

 

(1) ์ปคํ”ผ๋ฅผ ์ฃผ๋ฌธํ•˜๊ธฐ ์œ„ํ•œ ์ปคํ”ผ ํด๋ž˜์Šค

public class Coffee {
    private String korID;
    private String engID;
    private int price;

    public Coffee(String korID, String engID, int price){
        this.korID = korID;
        this.engID = engID;
        this.price = price;
    }
}

 - ์„œ๋ฒ„๋Š” ๊ณ ๊ฐ์˜ ์ปคํ”ผ ์ฃผ๋ฌธ ์ •๋ณด๋ฅผ JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์ชฝ์œผ๋กœ ์ „์†กํ•ด์ฃผ์–ด์•ผ ํ•จ

(2) JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

public class JSONTest {
     public static void main(String[] args) {
    	Coffee coffee = new Coffee("์นดํŽ˜๋ผ๋–ผ", "Cafe Latte", 4500);
        Gson gson = new Gson();
        String str = gson.toJson(coffee);
        
        System.out.println(str);
    }       
}

 - Gson ์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปคํ”ผ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ JSON ํฌ๋งท ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ

 (3) ์ถœ๋ ฅ ๊ฒฐ๊ณผ

{ "korID" : "์นดํŽ˜๋ผ๋–ผ", "engID" : "cafe latte", "price" : 4500 }

๐Ÿ“ Spring MVC : Controller

 - ํด๋ผ์ด์–ธํŠธ ์ธก ์š”์ฒญ์„ ์ง์ ‘์ ์œผ๋กœ ์ „๋‹ฌ๋ฐ›์€ ์—”๋“œํฌ์ธํŠธ

 - Model๊ณผ View์˜ ์ค‘๊ฐ„์—์„œ ์ƒํ˜ธ์ž‘์šฉ ์—ญํ• 

 - ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์š”์ฒญ์„ ์ „๋‹ฌ ๋ฐ›์•„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฑฐ์นœ ํ›„ Model ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด ์ด ๋ฐ์ดํ„ฐ๋ฅผ View๋กœ ์ „๋‹ฌ


๐Ÿ™Œ๐Ÿป Spring MVC์˜ ๋™์ž‘๋ฐฉ์‹๊ณผ ๊ตฌ์„ฑ์š”์†Œ