# ์น
# ์คํ๋ง
# ์คํ๋ง์ด ๋ญ์ง ๊ฐ๋จํ ์ค๋ช ํด๋ณด์ธ์
์คํ๋ง์ ์๋ฐ ํ๋ซํผ์ ์ํ ์คํ์์ค ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ์ ๋๋ค. ์๋ฐ SE๋ก ๋ ์๋ฐ ๊ฐ์ฒด POJO๋ฅผ ์๋ฐ EE์ ์์กด์ ์ด์ง ์๊ฒ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค. ์คํ๋ง์ ํน์ง์ผ๋ก๋ ํฌ๊ธฐ์ ๋ถํ ์ธก๋ฉด์์ ๊ฒฝ๋ ์ํจ ๊ฒ๊ณผ, IOC ๊ธฐ์ ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์จํ ๊ฒฐํฉ์ ๋๋ชจ์ํจ ๊ฒ์ด ์์ต๋๋ค.
# ์คํ๋ง์ด๋ ์คํ๋ง ๋ถํธ๋ ์ฐจ์ด์ ์ด ๋ญ๊ฐ์?
์คํ๋ง ๋ถํธ๋ ์คํ๋ง์์ ์ฌ์ฉํ๋ ํ๋ก์ ํธ๋ฅผ ๊ฐํธํ๊ฒ ์ ์ ํ ์ ์๋ ์๋ธ ํ๋ก์ ํธ์ ๋๋ค. ๋ ๋ฆฝ ์ปจํ ์ด๋์์ ๋์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฒ ๋๋ ํฐ์ผ์ด ์๋์ผ๋ก ์คํ๋๊ตฌ์. ์๋ฒ ๋๋ ์ปจํ ์ด๋์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ํค๊ธฐ์๋ ๋ค์ ๋ถ์์ ํด์ ํฐ ํ๋ก์ ํธ๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
# MVCํจํด์ด๋?
MVC ํจํด์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ ์ ์ฉํ๋ฉฐ, ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์์ฉ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ์์๋๋ ์๊ฐ์ ์ค์ฌ์ฃผ๋ ํจ๊ณผ์ ์ธ ์ค๊ณ ๋ฐฉ์์ ๋งํฉ๋๋ค.
๊ตฌ์ฑ์์๋ก๋ Model, View, Controller๊ฐ ์๋๋ฐ์. ๋ชจ๋ธ์ ํต์ฌ์ ์ธ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๋ ๋ถ๋ถ์ด๊ณ , ๋ทฐ๋ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ํ๋ฉด, ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ๊ณผ ๋ทฐ ์ฌ์ด์์ ์ ๋ณด ๊ตํ์ ํ ์ ์๋๋ก ์ฐ๊ฒฐ์์ผ์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
# MVC1์ด๋ MVC2 ํจํด ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๋ชจ๋ธ1์ JSPํ์ด์ง ์์์ ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ์ํด ์๋ฐ ์ฝ๋๊ฐ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค. ์์ฒญ์ด ์ค๋ฉด, ์ง์ ์๋ฐ๋น์ด๋ ํด๋์ค๋ฅผ ์ด์ฉํด ์์ ์ ์ฒ๋ฆฌํ๊ณ , ์ด๋ฅผ ํด๋ผ์ด์ธํธ์ ์ถ๋ ฅํด์ค๋๋ค. ๊ตฌ์กฐ๊ฐ ๋จ์ํ ์ฅ์ ์ด ์์ง๋ง, JSP ๋ด์์ html ์ฝ๋์ ์๋ฐ ์ฝ๋๊ฐ ๊ฐ์ด ์ฌ์ฉ๋๋ฉด์ ๋ณต์กํด์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์ด ๋จ์ ์ด ์์ต๋๋ค.
๋ชจ๋ธ2๋ ์ด์๋ ๋ค๋ฅด๊ฒ ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ JSP์์๋ง ๋ด๋นํ๋ ๊ฒ์ด ์๋๋ผ ์๋ธ๋ฆฟ์ ๋ง๋ค์ด ์ญํ ๋ถ๋ด์ ํ๋ ํจํด์ ๋๋ค. ์์ฒญ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด์ฃผ๋ ๋ทฐ๋ง JSP๊ฐ ๋ด๋นํ๊ณ , ํ๋ฆ์ ์ ์ดํด์ฃผ๊ณ ๋น์ฆ๋์ค ๋ก์ง์ ํด๋นํ๋ ์ปจํธ๋กค๋ฌ์ ์ญํ ์ ์๋ธ๋ฆฟ์ด ๋ด๋นํ๊ฒ ๋ฉ๋๋ค. ์ด์ฒ๋ผ ์ญํ ์ ๋ถ๋ดํ๋ฉด์ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋ ์ฅ์ ์ด ์์ง๋ง ์ต๋ํ๊ธฐ ํ๋ค๊ณ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง๋ ๋จ์ ๋ ์์ต๋๋ค.
# ์คํ๋ง MVC ๊ตฌ์กฐ ํ๋ฆ์ ๋ํด ๊ณผ์ ๋๋ก ์ค๋ช ํด๋ณด์ธ์.
์ฐ์ , ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์ผ๋ฉด, ์ด๋ฅผ ์์ฒญํ ํธ๋ค๋ฌ ์ด๋ฆ์ ์๊ธฐ ์ํด ํธ๋ค๋ฌ๋งตํ์๊ฒ ๋ฌผ์ด๋ด ๋๋ค.
ํธ๋ค๋ฌ๋งตํ์ ์์ฒญ url์ ๋ณด๊ณ ํธ๋ค๋ฌ ์ด๋ฆ์ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์๊ฒ ์๋ ค์ค๋๋ค. ์ด๋ ํธ๋ค๋ฌ๋ฅผ ์คํํ๊ธฐ ์ /ํ์ ์ฒ๋ฆฌํ ๊ฒ๋ค์ ์ธํฐ์ ํฐ๋ก ๋ง๋ค์ด ์ค๋๋ค.
๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ํด๋น ํธ๋ค๋ฌ์๊ฒ ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ๊ณ , ์ด ํธ๋ค๋ฌ๋ ์๋ต์ ํ์ํ ์๋น์ค๋ฅผ ํธ์ถํ๊ณ ๋ ๋๋งํด์ผ ํ๋ ๋ทฐ ์ด๋ฆ์ ํ๋จํ์ฌ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์๊ฒ ์ ์กํด์ค๋๋ค.
๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๋ฐ์ ๋ทฐ ์ด๋ฆ์ ๋ทฐ ๋ฆฌ์กธ๋ฒ์๊ฒ ์ ๋ฌํด ์๋ต์ ํ์ํ ๋ทฐ๋ฅผ ๋ง๋ค๋ผ๊ณ ๋ช ๋ นํฉ๋๋ค.
์ด๋ ํด๋นํ๋ ๋ทฐ๋ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์๊ฒ ๋ฐ์ ๋ชจ๋ธ๊ณผ ์ปจํธ๋กค๋ฌ๋ฅผ ํ์ฉํด ์ํ๋ ์๋ต์ ์์ฑํด์ ๋ค์ ๋ณด๋ด์ค๋๋ค.
๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๋ทฐ๋ก๋ถํฐ ๋ฐ์ ๊ฒ์ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ตํด์ค๋๋ค.
# ์คํ๋ง ํํฐ๋ ์ธํฐ์ ํฐ์ ์ฐจ์ด์ ์ ๋ญ๊ฐ์?
ํํฐ์ ์ธํฐ์ ํฐ๋ ์คํ๋๋ ์์ ์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ํํฐ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฑ๋ก์ ํ๊ณ , ์ธํฐ์ ํฐ๋ ์คํ๋ง์ context์ ๋ฑ๋ก์ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ปจํธ๋กค๋ฌ์ ๋ค์ด๊ฐ๊ธฐ ์ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ณตํต์ ์ด ์์ง๋ง, ํธ์ถ๋๋ ์์ ์์ ์ฐจ์ด๊ฐ ์กด์ฌํฉ๋๋ค.
# IOC๋?
IOC๋, ์ธ์คํด์ค์ ์์ฑ๋ถํฐ ์๋ฉธ๊น์ง ๊ฐ๋ฐ์๊ฐ ์๋ ์ปจํ ์ด๋๊ฐ ๋์ ๊ด๋ฆฌํด์ฃผ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์ธ์คํด์ค ์์ฑ์ ์ ์ด๋ฅผ ์๋ธ๋ฆฟ๊ณผ ๊ฐ์ bean์ ๊ด๋ฆฌํด์ฃผ๋ ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํฉ๋๋ค.
# Dispatcher-Servlet์ด๋?
์๋ธ๋ฆฟ ์ปจํ ์ด๋์์ HTTP ํ๋กํ ์ฝ์ ํตํด ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ์ ์ผ ์์์ ์ฒ๋ฆฌํด์ฃผ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ฅผ ๋งํฉ๋๋ค.
๋ฐ๋ผ์ ์๋ฒ๊ฐ ๋ฐ๊ธฐ ์ ์, ๊ณตํต์ฒ๋ฆฌ ์์ ์ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ์ฒ๋ฆฌํด์ฃผ๊ณ ์ ์ ํ ์ธ๋ถ ์ปจํธ๋กค๋ฌ๋ก ์์ ์ ์์ํด์ค๋๋ค.
๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ์ฒ๋ฆฌํ๋ url ํจํด์ ์ง์ ํด์ค์ผ ํ๋๋ฐ, ์ผ๋ฐ์ ์ผ๋ก๋ .mvc์ ๊ฐ์ ํจํด์ผ๋ก ์ฒ๋ฆฌํ๋ผ๊ณ ๋ฏธ๋ฆฌ ์ง์ ํด์ค๋๋ค.
๋์คํจ์ฒ ์๋ธ๋ฆฟ์ผ๋ก ์ธํด web.xml์ด ๊ฐ์ง ์ญํ ์ด ์๋นํ ์ถ์๋์์ต๋๋ค. ๊ธฐ์กด์๋ ๋ชจ๋ ์๋ธ๋ฆฟ์ url ๋งคํ ํ์ฉ์ ์ํด ๋ชจ๋ web.xml์ ๋ฑ๋กํด ์ฃผ์์ง๋ง, ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๊ทธ ์ ์ ๋ชจ๋ ์์ฒญ์ ํธ๋ค๋งํด์ฃผ๋ฉด์ ์์ ์ ํธ๋ฆฌํ๊ฒ ํ ์ ์๋๋ก ๋์์ค๋๋ค. ๋ํ ์ด ์๋ธ๋ฆฟ์ ํตํด MVC๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์น ๊ฐ๋ฐ ์ ํฐ ์ฅ์ ์ ๊ฐ์ ธ๋ค ์ค๋๋ค.
# DI(Dependency Injection)๋?
์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ง์ํ๋ ํต์ฌ ๊ฐ๋ ์ค ํ๋๋ก, ์ค์ ํ์ผ์ ํตํด ๊ฐ์ฒด๊ฐ์ ์์กด๊ด๊ณ๋ฅผ ์ค์ ํ๋ ์ญํ ์ ํฉ๋๋ค.
๊ฐ ํด๋์ค ์ฌ์ด์ ํ์๋ก ํ๋ ์์กด๊ด๊ณ๋ฅผ Bean ์ค์ ์ ๋ณด ๋ฐํ์ผ๋ก ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ์ฐ๊ฒฐํฉ๋๋ค.
๊ฐ์ฒด๋ ์ง์ ์์กดํ๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ฒ์ํ ํ์๊ฐ ์์ผ๋ฏ๋ก ์ฝ๋ ๊ด๋ฆฌ๊ฐ ์ฌ์์ง๋ ์ฅ์ ์ด ์์ต๋๋ค.
# AOP(Aspect Oriented Programming)๋?
๊ณตํต์ ๊ด์ฌ ์ฌํญ์ ์ ์ฉํด์ ๋ฐ์ํ๋ ์์กด ๊ด๊ณ์ ๋ณต์ก์ฑ๊ณผ ์ฝ๋ ์ค๋ณต์ ํด์ํด์ค๋๋ค.
๊ฐ ํด๋์ค์์ ๊ณตํต ๊ด์ฌ ์ฌํญ์ ๊ตฌํํ ๋ชจ๋์ ๋ํ ์์กด๊ด๊ณ๋ฅผ ๊ฐ๊ธฐ ๋ณด๋จ, Aspect๋ฅผ ์ด์ฉํด ํต์ฌ ๋ก์ง์ ๊ตฌํํ ๊ฐ ํด๋์ค์ ๊ณตํต ๊ธฐ๋ฅ์ ์ ์ฉํฉ๋๋ค.
๊ฐ๋จํ ์ค์ ๋ง์ผ๋ก๋ ๊ณตํต ๊ธฐ๋ฅ์ ์ฌ๋ฌ ํด๋์ค์ ์ ์ฉํ ์ ์๋ ์ฅ์ ์ด ์์ผ๋ฉฐ ํต์ฌ ๋ก์ง ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์, ๋ก๊น , ํธ๋์ญ์ ๊ณผ ๊ฐ์ ๊ณตํต ๊ด์ฌ ์ฌํญ์ AOP๋ฅผ ์ด์ฉํด ๊ฐ๋จํ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
# AOP ์ฉ์ด๋ค์ ์ค๋ช ํด๋ณด์ธ์
Advice : ์ธ์ ๊ณตํต ๊ด์ฌ๊ธฐ๋ฅ์ ํต์ฌ ๋ก์ง์ ์ ์ฉํ ์ง ์ ์
Joinpoint : Advice๋ฅผ ์ ์ฉ์ด ๊ฐ๋ฅํ ์ง์ ์ ์๋ฏธ (before, after ๋ฑ๋ฑ)
Pointcut : Joinpoint์ ๋ถ๋ถ์งํฉ์ผ๋ก, ์ค์ ๋ก Advice๊ฐ ์ ์ฉ๋๋ Joinpoint๋ฅผ ๋ํ๋
Weaving : Advice๋ฅผ ํต์ฌ ๋ก์ง์ฝ๋์ ์ ์ฉํ๋ ๊ฒ
Aspect : ์ฌ๋ฌ ๊ฐ์ฒด์ ๊ณตํต์ผ๋ก ์ ์ฉ๋๋ ๊ณตํต ๊ด์ฌ ์ฌํญ์ ๋งํจ. ํธ๋์ญ์ ์ด๋ ๋ณด์ ๋ฑ์ด Aspect์ ์ข์ ์
# DAO(Data Access Object)๋?
DB์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์กฐ์ํ๋ ๊ธฐ๋ฅ๋ค์ ์ ๋ดํฉ๋๋ค.
Mybatis๋ฅผ ์ด์ฉํ ๋๋, mapper.xml์ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๊ณ ์ด๋ฅผ mapper ํด๋์ค์์ ๋ฐ์์ DAO์๊ฒ ๋๊ฒจ์ฃผ๋ ์์ผ๋ก ๊ตฌํํฉ๋๋ค.
# Annotation์ด๋?
์์ค์ฝ๋์ @์ด๋ ธํ ์ด์ ์ ํํ๋ก ํํํ๋ฉฐ ํด๋์ค, ํ๋, ๋ฉ์๋์ ์ ์ธ๋ถ์ ์ ์ฉํ ์ ์๋ ํน์ ๊ธฐ๋ฅ์ด ๋ถ์ฌ๋ ํํ๋ฒ์ ๋งํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก, xml ํ๊ฒฝ์ค์ ์ด ๋งค์ฐ ๋ณต์กํด์ง๋๋ฐ ์ด๋ฌํ ์ด๋ ค์์ ๊ฐ์ ์ํค๊ธฐ ์ํด ์๋ฐ ํ์ผ์ ์ด๋ ธํ ์ด์ ์ ์ ์ฉํด์ ๊ฐ๋ฐ์๊ฐ ์ค์ ํ์ผ ์์ ์ ํ ๋ ๋ฐ์์ํค๋ ์ค๋ฅ๋ฅผ ์ต์ํํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
์ด๋ ธํ ์ด์ ์ฌ์ฉ์ผ๋ก ์์ค ์ฝ๋์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ ์ ์๊ณ , ์ปดํ์ผ ํ์์ ์ฒดํฌ๋ฟ ์๋๋ผ ์ด๋ ธํ ์ด์ API๋ฅผ ์ฌ์ฉํด ์ฝ๋ ๊ฐ๋ ์ฑ๋ ๋์ฌ์ค๋๋ค.
- @Controller : dispatcher-servlet.xml์์ bean ํ๊ทธ๋ก ์ ์ํ๋ ๊ฒ๊ณผ ๊ฐ์.
- @RequestMapping : ํน์ ๋ฉ์๋์์ ์์ฒญ๋๋ URL๊ณผ ๋งค์นญ์ํค๋ ์ด๋ ธํ ์ด์
- @Autowired : ์๋์ผ๋ก ์์กด์ฑ ์ฃผ์ ํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
- @Service : ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌํ๋ ์๋น์ค ํด๋์ค์ ๋ฑ๋ก
- @Repository : DAO์ ๋ฑ๋ก
# Spring JDBC๋?
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ๊ณผ, ์๋ฐ ๊ฐ์ฒด ์ฌ์ด์ ๋จ์ํ ๋งคํ์ ๊ฐ๋จํ ์ค์ ์ ํตํด ์ฒ๋ฆฌํ๋ ๊ฒ
๊ธฐ์กด์ JDBC์์๋ ๊ตฌํํ๊ณ ์ถ์ ๋ก์ง๋ง๋ค ํ์ํ SQL๋ฌธ์ด ๋ชจ๋ ๋ฌ๋๊ณ , ์ด์ ํ์ํ Connection, PrepareStatement, ResultSet ๋ฑ์ ์์ฑํ๊ณ Exception ์ฒ๋ฆฌ๋ ๋ชจ๋ ํด์ผํ๋ ๋ฒ๊ฑฐ๋ฌ์์ด ์กด์ฌํ์ต๋๋ค.
Spring์์๋ JDBC์ ORM ํ๋ ์์ํฌ๋ฅผ ์ง์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์์ฑํ์ง ์์๋ ๋ชจ๋ ๋ค ์ฒ๋ฆฌํด์ฃผ๋ ์ฅ์ ์ด ์์ต๋๋ค.
# MyBatis๋?
๊ฐ์ฒด, ๋ฐ์ดํฐ๋ฒ ์ด์ค, Mapper ์์ฒด๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฑํ๊ณ , DTO์ ํด๋นํ๋ ๋ถ๋ถ๊ณผ SQL ์คํ๊ฒฐ๊ณผ๋ฅผ ๋งคํํด์ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํจ
๊ธฐ์กด์๋ DAO์ ๋ชจ๋ SQL๋ฌธ์ด ์๋ฐ ์์ค์์ ์์นํ์ผ๋, MyBatis๋ฅผ ํตํด SQL์ XML ์ค์ ํ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
์ค์ ํ์ผ๋ก ๋ถ๋ฆฌํ๋ฉด, ์์ ํ ๋ ์ค์ ํ์ผ๋ง ๊ฑด๋๋ฆฌ๋ฉด ๋๋ฏ๋ก ์ ์ง๋ณด์์ ๋งค์ฐ ์ข์ต๋๋ค. ๋ํ ๋งค๊ฐ๋ณ์๋ ๋ฆฌํด ํ์ ์ผ๋ก ๋งคํ๋๋ ๋ชจ๋ DTO์ ๊ด๋ จ๋ ๋ถ๋ถ๋ ๋ชจ๋ ์ค์ ํ์ผ์์ ์์ ํ ์ ์๋ ์ฅ์ ์ด ์์ต๋๋ค.
โ - ๋คํธ์ํฌ - ๊ธฐ๋ณธ ๋ช ๋ น์ด โ