[TIL] Spring MVC
๐๐ป 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๋ก ์ ๋ฌ