Spring (65) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ์คํ๋ง ์ปจํ ์ด๋์ ์ข ๋ฅ BeanFactory ์คํ๋ง ์ค์ ํ์ผ์ ๋ฑ๋ก๋ Bean ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๋ค. ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ํด์ Bean ๊ฐ์ฒด๊ฐ ์ฌ์ฉ๋๋ ์์ (Lazy Loading) ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์คํ๋ง ํ๋ก์ ํธ์์๋ ์ฌ์ฉ๋ ์ผ์ด ์๋ค! BeanFactory๋ฅผ ์์ํ ApplicationContext Bean ๊ฐ์ฒด ์์ฑ ๋ฐ ๊ด๋ฆฌ, ํธ๋์ญ์ ๊ด๋ฆฌ, ๋ฉ์์ง ๊ธฐ๋ฐ์ ๋ค๊ตญ์ด ์ฒ๋ฆฌ, AOP ์ฒ๋ฆฌ, ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ง์ ๋ฑ ๋ง์ ๋ถ๋ถ์ ์ง์ํ๊ณ ์๋ค. ์ปจํ ์ด๋๊ฐ ๊ตฌ๋๋๋ ์์ ์ ๊ฐ์ฒด๋ค์ ์์ฑํ๋ Pre-Loading ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ApplicationContext์ ๊ตฌํ ํด๋์ค๋ ๋งค์ฐ ๋ค์ํ๋ฐ ๋ฐ์ ๋ ํด๋์ค๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค. GenericXmlApplicationnCont.. IoC, ๋ฎ์ ๊ฒฐํฉ๋ ํ๋ก๊ทธ๋๋ฐ ์ดํดํ๊ธฐ IoC(Inversion of Control): ์ ์ด์ ์ญํ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ฐ์ฒด ๊ฐ์ ์์กด๊ด๊ณ๋ฅผ ์์ค์ฝ๋๋ก ์ฒ๋ฆฌํ์ง ์๊ณ ์ปจํ ์ด๋๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค. IoC๋ฅผ ์ด์ฉํ๋ฉด ๋ฎ์ ๊ฒฐํฉ๋์ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ ์ ์๋ค. ๊ฒฐํฉ๋๊ฐ ๋์ ํ๋ก๊ทธ๋จ์ ์ ์ง๋ณด์๊ฐ ์ด๋ ต๋ค. ๋ฐ์ ๊ฒฐํฉ๋๊ฐ ๋์ ํ๋ก๊ทธ๋จ์ ์์ด๋ค. public class LgTV { public void turnOn() { System.out.println("LgTV---์ ์ ์ผ ๋ค."); } public void turnOff() { System.out.println("LgTV---์ ์ ๋๋ค."); } public void soundUp() { System.out.println("LgTV---์๋ฆฌ ์ฌ๋ฆฐ๋ค."); } public voi.. ํ๋ ์์ํฌ๋? ์คํ๋ง ํ๋ ์์ํฌ๋? ํ๋ ์์ํฌ ๊ฐ๋ ํ๋ ์์ํฌ๋ ๊ฐ๋ฐ์์ ๊ธฐ๋ณธ์ด ๋๋ ๋ผ๋๋ ํ์ ์ ๊ณตํ๋ค. ๊ฐ๋ฐ์๋ ๋ผ๋์ ์ด์ ๋ถ์ด๋ ์์ ์ ํ๋ ๊ฒ์ด๋ค. ์ฅ์ ๋น ๋ฅธ ๊ตฌํ ์๊ฐ ์ฌ์ด ๊ด๋ฆฌ ๊ฐ๋ฐ์๋ค์ ์ญ๋ ํ์ผํ ๊ฒ์ฆ๋ ์ํคํ ์ฒ์ ์ฌ์ฌ์ฉ๊ณผ ์ผ๊ด์ ์ ์ง ์คํ๋ง ํ๋ ์์ํฌ ์คํ๋ง ํ๋ ์์ํฌ๋ ๋ก๋ ์กด์จ์ด 2004๋ ์ ๋ง๋ ์คํ์์ค ํ๋ ์์ํฌ์ด๋ค. ์คํ๋ง์ ํ ์ค๋ก "IoC์ AOP๋ฅผ ์ง์ํ๋ ๊ฒฝ๋์ ์ปจํ ์ด๋ ํ๋ ์์ํฌ"๋ผ๊ณ ํ ์ ์๋ค. ๊ฒฝ๋(Lightweight) ์คํ๋ง์ ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋๋ก ๊ตฌ์ฑ๋์ด์์ผ๋ฉฐ, ๊ฐ ๋ชจ๋์ ํ๋ ์ด์์ JAR ํ์ผ๋ก ๊ตฌ์ฑ๋จ. ๋ช ๊ฐ์ JAR ํ์ผ๋ง ์์ผ๋ฉด ๊ฐ๋ฐ๊ณผ ์คํ์ด ๊ฐ๋ฅํ๋ค. ์คํ๋ง ํ๋ ์์ํฌ๊ฐ POJO(Plain Old Java Object)ํํ์ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ค. (POJO๋ ํด๋์ค๋ฅผ ๊ตฌํํ๋๋ฐ ํน๋ณํ ๊ท.. InTelliJ๋ก ์คํ๋ง ํ๋ก์ ํธ ์์ํ๊ธฐ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ ์ฑ ์์๋ Eclipse, Tomcat ์๋ฒ, H2 database๋ฅผ ์ฌ์ฉํ๋ค. ํ์ง๋ง ๋๋ ๊ธฐ์กด์ eclipse๋ก Spring ๊ฐ๋ฐ์ ํ๋ค๊ฐ ๋๋ฌด ํ๋๋ ์ผ์ด ๋ง์๋ค... ๊ทธ๋์ jetbrains์ฌ์ intelliJ๋ก ์ค์ต์ ์งํํ ์์ ์ด๋ค. ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ญ์ SQL๋ฌธ์ ์ด๋ฏธ ์๊ณ ์๋ MySQL๋ก ๋ฐ๊ฟ์ ์งํํ ์์ ์ด๋ค. ๋์ ์ค์ต ํ๊ฒฝ์ intelliJ + Tomcat ์๋ฒ + MySQL์ด๋ค. Spring ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๊ฒ์ ์๊ฐ๋ณด๋ค ๋ณต์กํ๋ค. ์ธํ๋ฐ์ "์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ IntelliJ IDEA ์ค์ " ๋ฌด๋ฃ ๊ฐ์๋ฅผ ํตํด ๋์์ ๋ฐ์๋ค. ๊ฐ์์ ๋ง๋ถ์ด์๋ฉด, ๋ํ์ ์ ๋ถ์ด๋ผ๋ฉด intelliJ์ ultimate(์ ๋ฃํ)์ ๋ฌด๋ฃ๋ก ์ฝ๊ฒ ๋ค์ด ๋ฐ์ ์ธ ์ ์๋ค. ์ค์ต ํ๋ก.. ๐ซ Spring Quick Start ๐ซ ์ฑ ์ ๋ณด 2020.12.24-2020.12.28 ์๋ ๐ซ ์๋ก Spring์ ๊ณต๋ถํด๋ณธ ์ด๋ ฅ์ ์์ผ๋ ๊ทผ๋ณธ์ ์ธ ๊ฐ๋ ์ ์ฌ์ ํ ์ ๋ชจ๋ฅธ๋ค๊ณ ํ๋จํ๋ค. ๊ทธ๋์ Spring์ ๋ํ ๋๋ ค์์ด ๋ง์๋ ์ฐฐ๋, ์ ๋ฐฐ๋์ ์ถ์ฒ์ ํตํด ์ฑ ์ ๊ตฌ๋งคํด์ ๊ฐ๋ณ๊ฒ ์ฝ์ด๋ณด์๋ค. ํญ์ ๊ฐ์๋ฅผ ํตํด ๊ณต๋ถํ์๋๋ฐ, ๊ฐ๋ ๋ค์ด ์ ๋๋ ๋ง๋ก ์ ๋ฆฌ๋์ด ์์ด์ ์ดํด๊ฐ ํจ์ฌ ์ ๋์๋ค. ์๋ ๋ถ๋ถ์ ๋น ๋ฅด๊ฒ ์ง๋๊ฐ๊ณ , ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ๊ฒ์ํ๋ฉด์ ์ด์ฌํ ์ฝ์๋ค. ๋๋ถ์ ๋๋ฌด ํจ์จ์ ์ผ๋ก ๊ณต๋ถํ ์ ์์๋ค. java ๊ฐ๋ฐ์๊ฐ ๋ ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์๊ฐ์ด ์ง๋๋ฉด์ ๊น๋จน๋ ๊ฒ ์๊น๊ธฐ๋ ํ๊ณ ๊ธฐ๋กํ๋ฉด์ ๋น ๋ฅด๊ฒ 2ํ๋ ํ๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํด์ ์ ๋ฆฌ ๋ ธํธ๋ฅผ ์ฝ๋์ ํจ๊ป ์์ฑํ๋ ค ํ๋ค. ์ฝ๋๋ฅผ ์ ๋ฆฌํ๋ ๊ฒ์ด ๋ฐ๋ก ์ด ๋ ํฌ์งํ ๋ฆฌ์ ๋ชฉ์ ์ด๋ผ ํ ์ ์๊ฒ ๋ค. ์ .. 5.1 ์ํ์ ์ง๊ธฐ์ - Cookie & Session 1) ์ํ์ ๋ณด๋? ์น์์์ ์ํ ์ ์ง ๊ธฐ์ HTTPํ๋กํ ์ฝ์ ์ํ ์ ์ง๊ฐ ์๋๋ ํ๋กํ ์ฝ์ ๋๋ค. - ์ด์ ์ ๋ฌด์์ ํ๊ณ , ์ง๊ธ ๋ฌด์์ ํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์์ง ์์ต๋๋ค. - ์น ๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)์ ์์ฒญ์ ๋ํ ์๋ต์ ํ๊ณ ๋๋ฉด ํด๋น ํด๋ผ์ด์ธํธ์์ ์ฐ๊ฒฐ์ ์ง์ํ์ง ์์ต๋๋ค. ์ํ ์ ์ง๋ฅผ ์ํด Cookie์ Session๊ธฐ์ ์ด ๋ฑ์ฅํฉ๋๋ค. ์ฟ ํค(Cookie)์ ์ธ์ (Session) ์ฟ ํค - ์ฌ์ฉ์ ์ปดํจํฐ์ ์ ์ฅ - ์ ์ฅ๋ ์ ๋ณด๋ฅผ ๋ค๋ฅธ ์ฌ๋ ๋๋ ์์คํ ์ด ๋ณผ ์ ์๋ ๋จ์ - ์ ํจ์๊ฐ์ด ์ง๋๋ฉด ์ฌ๋ผ์ง ์ธ์ - ์๋ฒ์ ์ ์ฅ - ์๋ฒ๊ฐ ์ข ๋ฃ๋๊ฑฐ๋ ์ ํจ์๊ฐ์ด ์ง๋๋ฉด ์ฌ๋ผ์ง๋๋ค. ์ฟ ํค(Cookie) ๋์ ์ดํด ์ธ์ ์ ๋์ ์ดํด HttpSession์ด๋ผ๋ ๊ฐ์ฒด: ์ธ์ ์ ์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ํด ์์ฑ๋๋ ๊ฐ์ฒด 2) .. 4.5 Swagger 1) Swagger ๊ฐ์ 1. ์ค์จ๊ฑฐ(Swagger)๋? ์ค์จ๊ฑฐ๋ Web API ๋ฌธ์ํ๋ฅผ ์ํ ๋๊ตฌ์ ๋๋ค. ์ค์จ๊ฑฐ ํํ์ด์ง(https://swagger.io)์์๋ ์ค์จ๊ฑฐ๋ฅผ OAS(Open API Specification)์ด๋ผ๊ณ ์๊ฐํ๊ณ ์์ต๋๋ค. ๋ง๊ทธ๋๋ก API๋ค์ด ๊ฐ์ง๋ ๋ช ์ธ(Spec)์ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ๋ก์ ํธ๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. Web API๋ฅผ ์๋์ผ๋ก ๋ฌธ์ํ ํ๋ ๊ฒ์ ๊ต์ฅํ ํ๋ ์์ ์ ๋๋ค. Web API์ ์คํ์ด ๋ณ๊ฒฝ๋์์ ๋ ๋ฌธ์ ์ญ์ ๋ณ๊ฒฝ์ด ๋์ผ ํ๋๋ฐ ์ด๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ฝ์ง๊ฐ ์์ต๋๋ค. Swagger๋ฅผ ์ฌ์ฉํ๋ฉด Web API๊ฐ ์์ ๋๋๋ผ๋ ์๊ด ์์ต๋๋ค. ๋ฌธ์๊ฐ ์๋์ผ๋ก ๊ฐฑ์ ์ด ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. 2. ์ค์จ๊ฑฐ์ ๊ธฐ๋ฅ ์ค์จ๊ฑฐ ํํ์ด์ง๋ฅผ ๊ฐ๋ณด๋ฉด ์๋์ ๊ฐ์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. 1) API .. 4.4 Controller 1) RestController๋? Spring MVC์์ ์ ๊ณตํ๋ RestController @RestController Spring 4 ์์ Rest API ๋๋ Web API๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ์ด๋ ธํ ์ด์ ํฉ๋๋ค. ์ด์ ๋ฒ์ ์ @Controller์ @ResponseBody๋ฅผ ํฌํจํฉ๋๋ค. MessageConvertor ์๋ฐ ๊ฐ์ฒด์ HTTP ์์ฒญ / ์๋ต ๋ฐ๋๋ฅผ ๋ณํํ๋ ์ญํ @ResponseBody, @RequestBody @EnableWebMvc ๋ก ์ธํ ๊ธฐ๋ณธ ์ค์ WebMvcConfigurationSupport ๋ฅผ ์ฌ์ฉํ์ฌ Spring MVC ๊ตฌํ Default MessageConvertor ๋ฅผ ์ ๊ณต ๋งํฌ ๋ฐ๋ก๊ฐ๊ธฐ์ addDefaultHttpMessageConverters๋ฉ์๋ ํญ๋ชฉ ์ฐธ์กฐ M.. 4.3 WEB API 1) Rest API๋? HTTP ํ๋กํ ์ฝ์ ์ด์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ๋ ์์ฒญ์ ๋ณด๋ด๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ๋๋๋งํ์ฌ ํ๋ฉด์ ๋ณด์ฌ์ง๊ฒ ๋ฉ๋๋ค. HTTP์ ์ด๋ฐ ํน์ง์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉํ ์ ์์๊น? ๋ผ๋ ๊ณ ๋ฏผ์ ๊ฐ๋ฐ์๋ค์ ํ๊ฒ ๋์์ต๋๋ค. ์ฆ, ์๋๋ก์ด๋ ์ฑ, ๋ชจ๋ฐ์ผ ์ฑ, Javascript ๋ฑ์์ HTTP๋ก ์์ฒญ์ ๋ณด๋ด๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์์๊น? ํ๋ ์๊ฐ์ ํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ๋ถ์์ ๋ฒ์ค ์ดํ ์๊ฐํ๋ฅผ ์ ๊ณตํ๋ค๊ณ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ ๋ถ์์๋ 300๋ฒ ๋ฒ์ค์ ๋ํ ์๊ฐํ๋ฅผ ์ ๊ณตํ๋ URL์ ์๋์ ๊ฐ์ ํํ๋ก ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. http://ip์ฃผ์/api/buses/300 ์์ ๊ฐ์ URL์ ํธ์ถ ํ๊ฒ ๋์์ ๋ ์๊ฐํ ์ ๋ณด๋ฅผ ํน์ ํ ํํ๋ก ์ ๊ณตํ๋ค๋ฉด, ๊ทธ ์ ๋ณด๋ฅผ ๋ค์ํ.. 4.2 Layered Architecture 1) ๋ ์ด์ด๋ ์ํคํ ์ฒ๋? Controller์์ ์ค๋ณต๋๋ ๋ถ๋ถ์ ์ฒ๋ฆฌํ๋ ค๋ฉด? ๋ณ๋์ ๊ฐ์ฒด๋ก ๋ถ๋ฆฌํฉ๋๋ค. ๋ณ๋์ ๋ฉ์๋๋ก ๋ถ๋ฆฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ผํ๋ชฐ์์ ๊ฒ์ํ์์๋ ํ์ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ์ํ ๋ชฉ๋ก ๋ณด๊ธฐ์์๋ ํ์ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋ค๋ฉด ํ์ ์ ๋ณด๋ฅผ ์ฝ์ด์ค๋ ์ฝ๋๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ์ปจํธ๋กค๋ฌ์ ์๋น์ค ๋น์ง๋์ค ๋ฉ์๋๋ฅผ ๋ณ๋์ Service๊ฐ์ฒด์์ ๊ตฌํํ๋๋ก ํ๊ณ ์ปจํธ๋กค๋ฌ๋ Service๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๋ก ํฉ๋๋ค. ์๋น์ค(Service)๊ฐ์ฒด๋? ๋น์ง๋์ค ๋ก์ง(Business logic)์ ์ํํ๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ์๋น์ค ๊ฐ์ฒด๋ผ๊ณ ํฉ๋๋ค. ๋ณดํต ํ๋์ ๋น์ง๋์ค ๋ก์ง์ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ๋์ํฉ๋๋ค. ํธ๋์ญ์ (Transaction)์ด๋? ํธ๋์ญ์ ์ ํน์ง์ ํฌ๊ฒ 4๊ฐ์ง๋ก ๊ตฌ๋ถ๋ฉ๋๋ค. ์์์ฑ (.. 4.1 Spring MVC 1) Spring MVC๋? MVC๋? MVC๋ Model-View-Controller์ ์ฝ์์ ๋๋ค. ์๋๋ ์ ๋ก์ค ์ฐ๊ตฌ์์์ ์ผํ๋ ํธ๋คผ๊ทธ๋ฒ ๋ฆฐ์ฆ์ปค๊ทธ๊ฐ ์ฒ์์ผ๋ก ์๊ฐํ ๊ฐ๋ ์ผ๋ก, ๋ฐ์คํธํฑ ์ดํ๋ฆฌ์ผ์ด์ ์ฉ์ผ๋ก ๊ณ ์๋์์ต๋๋ค. Model : ๋ชจ๋ธ์ ๋ทฐ๊ฐ ๋ ๋๋งํ๋๋ฐ ํ์ํ ๋ฐ์ดํฐ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ํ ๋ชฉ๋ก์ด๋, ์ฃผ๋ฌธ ๋ด์ญ์ด ์ด์ ํด๋นํฉ๋๋ค. View : ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ทฐ(View)๋ ์ค์ ๋ก ๋ณด์ด๋ ๋ถ๋ถ์ด๋ฉฐ, ๋ชจ๋ธ์ ์ฌ์ฉํด ๋ ๋๋ง์ ํฉ๋๋ค. ๋ทฐ๋ JSP, JSF, PDF, XML๋ฑ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ํํํฉ๋๋ค. Controller : ์ปจํธ๋กค๋ฌ๋ ์ฌ์ฉ์์ ์ก์ ์ ์๋ตํ๋ ์ปดํฌ๋ํธ์ ๋๋ค. ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ์ ์ ๋ฐ์ดํธํ๊ณ , ๋ค๋ฅธ ์ก์ ์ ์ํํฉ๋๋ค. MVC Model 1 ์ํคํ ์ฒ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญ์ ํ๊ฒ.. 3.3 Spring JDBC 1) Spring JDBC ์๊ฐ Spring JDBC JDBC ํ๋ก๊ทธ๋๋ฐ์ ๋ณด๋ฉด ๋ฐ๋ณต๋๋ ๊ฐ๋ฐ ์์๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋ฐ๋ณต์ ์ธ ์์๋ ๊ฐ๋ฐ์๋ฅผ ์ง๋ฃจํ๊ฒ ๋ง๋ญ๋๋ค. ๊ฐ๋ฐํ๊ธฐ ์ง๋ฃจํ JDBC์ ๋ชจ๋ ์ ์์ค ์ธ๋ถ์ฌํญ์ ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ์ฒ๋ฆฌํด์ค๋๋ค. ๊ฐ๋ฐ์๋ ํ์ํ ๋ถ๋ถ๋ง ๊ฐ๋ฐํ๋ฉด ๋ฉ๋๋ค. Spring JDBC - ๊ฐ๋ฐ์๊ฐ ํด์ผ ํ ์ผ์? Spring JDBC ํจํค์ง org.springframework.jdbc.core JdbcTemplate ๋ฐ ๊ด๋ จ Helper ๊ฐ์ฒด ์ ๊ณต org.springframework.jdbc.datasource DataSource๋ฅผ ์ฝ๊ฒ ์ ๊ทผํ๊ธฐ ์ํ ์ ํธ ํด๋์ค, ํธ๋์ ์ ๋งค๋์ ธ ๋ฐ ๋ค์ํ DataSource ๊ตฌํ์ ์ ๊ณต org.springframework.jdbc.object.. 3.2 Spring Test 1) Test ๊ฐ์ 1. ํ ์คํ ์ด๋ ๋ฌด์์ธ๊ฐ? ์๊ตฌํ๋ ์์ค์ ๋ง์กฑํ๋์ง ํ์ธํ๊ธฐ ์ํด ๊ฒฐํจ์ ๋ฐ๊ฒฌํ๋ ๊ณผ์ ์ด๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. ์ ํต์ ์ธ ํ ์คํ ๊ฐ๋ ์ ์์ฉ ํ๋ก๊ทธ๋จ ๋๋ ์์คํ ์ด ์ ์๋ํ๋์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค. ํ์ฌ์ ํ ์คํ ๊ฐ๋ ์ ์ฌ์ฉ์์ ๊ธฐ๋ ์์ค๊ณผ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ๊ตฌํ๋๊ณ ๋์ํ๋์ง๋ฅผ ํ์ธํ๊ณ ์ด๋ฅผ ํตํด ๊ฒฐํจ์ ๋ฐ๊ฒฌํ๊ณ , ์ต์ข ์ ์ผ๋ก ๊ฒฐํจ ๋ฐ์ดํฐ๋ฅผ ๊ทผ๊ฐ์ผ๋ก ๊ฐ๋ฐ ํ๋ก์ ํธ์ ๋ฆฌ์คํฌ(Risk)์ ๋ํ ์์น์ ์ธ ํ๋จ ๊ทผ๊ฑฐ๋ฅผ ์์ฌ ๊ฒฐ์ ๊ถ์(ํ๋ก์ ํธ ๊ด๋ฆฌ์ ๋ฑ)์๊ฒ ์ ๋ฌํ๋ ๊ฒ์ ๋งํฉ๋๋ค. ๊ฐ๋ฐ ํ๋ก์ ํธ ์ด๊ธฐ์ ๊ฐ๋ฐ ์ค๊ฐ ์ฐ์ถ๋ฌผ(Work products)์ ํ ์คํ ๊ด์ ์์ ๋ฆฌ๋ทฐ(Review)ํ๊ณ , ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋๋ ๊ณผ์ ์์ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ๋ ์์ (๊ฒฐํจ ์๋ฐฉ ํ๋)๋ ํ ์คํ ํ๋์ ์ค์ํ ๋ถ.. 3.1 Spring Core ๋ชจ๋ ์ค์ต ์ฝ๋(+์ฃผ์) ๋งํฌ: ํ๋ก์ ํธ๋ช : diexam01 1) Spring์ด๋? Spring Framework๋? ์ํฐํ๋ผ์ด์ฆ๊ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋ ๊ฐ๋ฒผ์ด ์๋ฃจ์ ์ด์, ์์ค-์คํ-์(One-Stop-Shop) ์ํ๋ ๋ถ๋ถ๋ง ๊ฐ์ ธ๋ค ์ฌ์ฉํ ์ ์๋๋ก ๋ชจ๋ํ๊ฐ ์ ๋์ด ์์ต๋๋ค. IoC ์ปจํ ์ด๋์ ๋๋ค. ์ ์ธ์ ์ผ๋ก ํธ๋์ญ์ ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์์ ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ MVC Framework๋ฅผ ์ ๊ณตํฉ๋๋ค. AOP ์ง์ํฉ๋๋ค. ์คํ๋ง์ ๋๋ฉ์ธ ๋ ผ๋ฆฌ ์ฝ๋์ ์ฝ๊ฒ ๋ถ๋ฆฌ๋ ์ ์๋ ๊ตฌ์กฐ๋ก ๋์ด ์์ต๋๋ค. ํ๋ ์ ์ํฌ ๋ชจ๋ ์คํ๋ง ํ๋ ์์ํฌ๋ ์ฝ 20๊ฐ์ ๋ชจ๋๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ํ์ํ ๋ชจ๋๋ง ๊ฐ์ ธ๋ค ์ฌ์ฉํ ์ ์์ต๋๋ค. AOP์ ์ธ์คํธ๋ฃจ๋ฉํ ์ด์ (Instrumentation) spring-AOP : A.. 2.6 JSTL & EL 1) EL(Expression Language) ํํ ์ธ์ด์ ๊ธฐ๋ณธ ๊ฐ์ฒด ์ฌ์ฉ ์ ํํ ์ธ์ด์ ๋ฐ์ดํฐ ํ์ ๋ถ๋ฆฌ์ธ ํ์ - true์ false ์ ์ํ์ - 0~9๋ก ์ด๋ฃจ์ด์ง ์ ์ ๊ฐ ์์์ ๊ฒฝ์ฐ '-'๊ฐ ๋ถ์ ์ค์ํ์ - 0~9๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์์์ ('.')์ ์ฌ์ฉํ ์ ์๊ณ , 3.24e3๊ณผ ๊ฐ์ด ์ง์ํ์ผ๋ก ํํ ๊ฐ๋ฅํ๋ค. ๋ฌธ์์ด ํ์ - ๋ฐ์ดํ( ' ๋๋" )๋ก ๋๋ฌ์ผ ๋ฌธ์์ด. ๋ง์ฝ ์์ ๋ฐ์ดํ(')๋ฅผ ์ฌ์ฉํด์ ํํํ ๊ฒฝ์ฐ ๊ฐ์ ํฌํจ๋ ์์ ๋ฐ์ดํ๋ \' ์ ๊ฐ์ด \ ๊ธฐํธ์ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ค. \ ๊ธฐํธ ์์ฒด๋ \\ ๋ก ํ์ํ๋ค. ๋ ํ์ - null ๊ฐ์ฒด ์ ๊ทผ ๊ท์น ํํ 1์ด๋ ํํ 2๊ฐ null์ด๋ฉด null์ ๋ฐํํ๋ค. ํํ1์ด Map์ผ ๊ฒฝ์ฐ ํํ2๋ฅผ key๋กํ ๊ฐ์ ๋ฐํํ๋ค. ํํ1์ด Lis.. 2.5 Scope 1) scope๋? 4๊ฐ์ง Scope page : ํ์ด์ง ๋ด์์ ์ง์ญ๋ณ์์ฒ๋ผ ์ฌ์ฉ pageContext (์์ ใ ) Request : http์์ฒญ์ WAS๊ฐ ๋ฐ์์ ์น ๋ธ๋ผ์ฐ์ ์๊ฒ ์๋ตํ ๋๊น์ง ๋ณ์๊ฐ ์ ์ง๋๋ ๊ฒฝ์ฐ ์ฌ์ฉ ํ๋์ ์์ฒญ์ด ๋ค์ด์์ ์๋ต์ด ๋๊ฐ ๋๊น์ง HttpServletRequest Session : ์น ๋ธ๋ผ์ฐ์ ๋ณ๋ก ๋ณ์๊ฐ ๊ด๋ฆฌ๋๋ ๊ฒฝ์ฐ ์ฌ์ฉ session ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด ์๋ฉธ๋ ๋๊น์ง (์์ฒญ์ด ํ๋๊ฐ ์๋๋ผ ์ฌ๋ฌ ๊ฐ์ ์์ฒญ์ด ๋ค์ด์๋ ๊ณ์ ๋จ์์๋) ์ํ์ ์ง๋ฅผ ํ ๋ ์ฌ์ฉํ๋ scope, HttpSession Application : ์น ์ดํ๋ฆฌ์ผ์ด์ ์ด ์์๋๊ณ ์ข ๋ฃ๋ ๋๊น์ง ๋ณ์๊ฐ ์ ์ง๋๋ ๊ฒฝ์ฐ ์ฌ์ฉ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ฑ๋์ด ์ด๊ฒ ์๋ฉธ๋ ๋๊น์ง ServletContext (์์ ใ .. 2.4 JSP 1) JSP๋? ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ jsp๋ ์์ฒด๊ฐ ๋์ํ๋ ๊ฒ ์๋๋ผ ๋ชจ๋ jsp ์๋ธ๋ฆฟ์ผ๋ก ๋ฐ๋์ด์ ๋์ํด์ jsp๋ WebContent ์์ ์์. ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด๋ ๋๊ณ . ๋งจ ์ ์ง์๋ฌธ, ์ด๋ฐ ์ง์๋ฅผ ๋ฃ๋ ๊ฒ์ JSP๋ฅผ ์คํํ๋ WAS ๋ฐ ๊บฝ์ ์ ์๋ฐ ์ฝ๋ 1๋ถํฐ 10๊น์ง์ ํฉ : JSP ๋ฑ์ฅ ๋ฐฐ๊ฒฝ ๋ง์ดํฌ๋ก์ํํธ์์ ASP(Active Server Page)๋ผ๋ ์ฝ๊ฒ ์น์ ๊ฐ๋ฐํ ์ ์๋ ์คํฌ๋ฆฝํธ(script) ์์ง์ ๋ฐํํจ (1998๋ ) 1997๋ ์ ๋ฐํ๋ ์๋ธ๋ฆฟ์ ASP์ ๋นํ์ฌ ์๋์ ์ผ๋ก ๊ฐ๋ฐ ๋ฐฉ์์ด ๋ถํธํจ ASP์ ๋ํญํ๊ธฐ ์ํ์ฌ 1999๋ ์ฌ๋ง์ดํฌ๋ก์์คํ ์ฆ์์ JSP๋ฅผ ๋ฐํ JSP๋ ์ค์ ๋ก ์๋ธ๋ฆฟ ๊ธฐ์ ์ ์ฌ์ฉ ํญ์ jsp ๋ ์๋ธ๋ฆฟ์ผ๋ก ๋ฐ๋๊ณ ์ด ๋ฐ๋ ์๋ธ๋ฆฟ์ด ์คํ๋๋ .. 2.3 Servlet 1) Servlet ์ด๋? dynamic web ์ค๋ฅ https://skypotato-note.tistory.com/136 https://stackoverflow.com/questions/4119448/the-import-javax-servlet-cant-be-resolved ์๋ฐ ์น ์ดํ๋ฆฌ์ผ์ด์ (Java Web Application) WAS์ ์ค์น(deploy)๋์ด ๋์ํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ์๋ฐ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ HTML, CSS, ์ด๋ฏธ์ง, ์๋ฐ๋ก ์์ฑ๋ ํด๋์ค(Servlet๋ ํฌํจ๋จ, package, ์ธํฐํ์ด์ค ๋ฑ), ๊ฐ์ข ์ค์ ํ์ผ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค. ์๋ฐ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ํด๋ ๊ตฌ์กฐ web.xml ํ์ผ ์ค์ํ๋ค ์ ๋ ์๋ธ๋ฆฟ์ด๋? ์๋ฐ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑ์์ ์ค ๋์ ์ธ ์ฒ๋ฆฌ๋ฅผ ํ๋ ํ๋ก๊ทธ๋จ์.. 2.2 ์น ๊ฐ๋ฐํ๊ฒฝ ์ค์ 1) Tomcat ๋ค์ด๋ฐ๊ธฐ ๋ฐ ์ค์นํ๊ธฐ Apache Tomcat์ด๋? ์ํ์น ํฐ์บฃ(Apache Tomcat)์ ์ํ์น ์ํํธ์จ์ด ์ฌ๋จ(Apache Software Foundation, ASF)์์ ๊ฐ๋ฐํ ์ธ๊ณ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ WAS(Web Application Server)์ ๋๋ค. ์ปดํจํฐ์ ์ด์์ฒด์ ๋ฅผ ์ค์นํด์ผ๋ง ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ฒ๋ผ, ์๋ฐ๋ฅผ ์ด์ฉํ์ฌ ์์ฑ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ WAS๊ฐ ์์ด์ผ๋ง ์คํํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ WAS๊ฐ ์ํ์น ํฐ์บฃ์ด๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. ์ํ์น ํฐ์บฃ์ ์คํ์์ค ์ํํธ ์จ์ด๋ก์จ ๋๊ตฌ๋ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฐธ๊ณ ๋ก Tomcat์ '์๊ณ ์์ด'๋ฅผ ๋ปํฉ๋๋ค. ํฐ๊ณผ ์ ๋ฆฌ์ ํฐ์ด ์๊ฐ๋๊ธฐ๋ ํฉ๋๋ค. Tomcat 8๋ฒ์ ์ JDK 7์ด์์์ ๋์ํ๋ฉฐ.. 2.1 Web๊ฐ๋ฐ์ ์ดํด 1) ์น ํ๋ก๊ทธ๋๋ฐ์ ์ํ ํ๋ก๊ทธ๋จ ์ธ์ด๋ค ์ ๊ธ ์ธ์ด ์ ๊ธ ์ธ์ด๋ ๊ธฐ๊ณ ์ค์ฌ์ ์ธ์ด๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. ๊ธฐ๊ณ๊ฐ ์ง์ ์์๋ค์ ์ ์๋ ๋ง๋ก 'ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ์์ฑํ๋ค'๊ณ ๋งํ ์ ์์ต๋๋ค. ์ปดํจํฐ๋ ์ ๊ธฐ๋ก ๋์ํฉ๋๋ค. ์ฆ, ์ ๊ธฐ์ ํธ์ธ ์ผ์ก๋ค(on)์ ๊บผ์ก๋ค(off) 2๊ฐ์ง ์ํ ๊ฐ์ผ๋ก ๋์ํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ๋ณดํต ์ซ์๋ก ํํํ๋ฉด ์ผ์ก๋ค๋ 1, ๊บผ์ก๋ค๋ 0์ ์๋ฏธํฉ๋๋ค. 0๊ณผ 1๋ก ํํ๋๋ ์ซ์๋ฅผ ์ฐ๋ฆฌ๋ 2์ง์๋ผ๊ณ ๋งํฉ๋๋ค. 2์ง์๋ก ์ด๋ค์ง ๊ฐ์ผ๋ก ์์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ธฐ๊ณ์ด(Machine Language)๋ผ๊ณ ๋งํฉ๋๋ค. ์ซ์๋ก๋ง ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์๋ ๊ต์ฅํ ์ด๋ ต์ต๋๋ค. ์ซ์๋ก๋ง ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์ฌ์ฉ์ด ๊ต์ฅํ ์ด๋ ค์ ์ต๋๋ค. ๊ทธ๋์, ์ด ์ซ์๋ก ๋ ๋ฌธ์ฅ๊ณผ 1:1๋ก ๋์ํ๋ ๊ธฐํธ๋ฅผ.. ์ด์ 1 2 3 4 ๋ค์