๋ชฉ์ฐจ
โถ SpringMVC Study
1. Spring MVC.txt
1. ์น ๊ฐ๋ฐ์ ์ํ MVC ํจํด์ด ์ ์ฉ๋ Spring Framework.
Spring ์์๋ DispatcherServlet ํด๋์ค๊ฐ ์ปจํธ๋กค๋ฌ ์ญํ ์ ์ํํ๊ฒ ๋๋ค.
2. Spring MVC ์ ์ฃผ์ ๊ตฌ์ฑ ์์
- DispatcherServlet
- HandlerMapping
- Controller : ์ฌ์ฉ์ ์ ์ Controller. ์ก์ ์ฒ๋ฆฌ. ์ฐ๋ฆฌ๊ฐ ์์ฑ
- ModelAndView
- ViewResolver
- view : ๊ฒฐ๊ณผ ์ถ๋ ฅ. ์ฐ๋ฆฌ๊ฐ ์์ฑ.
- web.xml : DispatcherServlet ๊ฐ์ฒด ๋ฑ๋ก. ์ฐ๋ฆฌ๊ฐ ์์ฑ
- dispatcher-servlet.xml : Controller ๊ฐ์ฒด ๋ฑ๋ก. ์ฐ๋ฆฌ๊ฐ ์์ฑ.
3. Spring MVC ์คํ ํ๋ฆ
- ์ฌ์ฉ์ ์์ฒญ → DispatcherServlet
- DispatcherServlet → HandlerMapping ์ ์ฃผ์ ๋ถ์ ์์ฒญ
- DispatcherServlet → ํน์ Controller ๊ฐ์ฒด ํธ์ถ ๋ฐ ๊ฒฐ๊ณผ ์์
๊ฒฐ๊ณผ๋ ModelAndView ๊ฐ์ฒด
โป ModelAndView ๊ฐ์ฒด
: View ๊ฐ์ฒด ์ ๋ณด์ ๊ฒฐ๊ณผ๊ฐ์ด ๋ค์ด์๋ ๊ฐ์ฒด.
- DispatcherServlet → ViewResolver ์ View ๊ฐ์ฒด ๋ถ์ ์์ฒญ
- Dispatcherservelt → ํน์ View ๊ฐ์ฒด์ Model ๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ฃผ๊ณ
๊ฒฐ๊ณผ ์ถ๋ ฅ.
4. Spring MVC ์์ ์ฐ๋ฆฌ๊ฐ ํด์ผ ํ ์ผ
- Controller
์ก์ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ Controller ํด๋์ค ์์ฑ.
Annotation ์ ์ฌ์ฉํ๊ฑฐ๋, Controller ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ์์ฑ
- View
๊ฒฐ๊ณผ ์ถ๋ ฅ์ฉ JSP ํ์ด์ง ์์ฑ.
- web.xml
์๋ธ๋ฆฟ ์ฃผ์์ DispatcherServlet ํด๋์ค ๋ฑ๋ก
- dispathcer-servlet.xml
์ฐ๋ฆฌ๊ฐ ์์ฑํ Controller ๊ฐ์ฒด ๋ฑ๋ก
URL ๋งคํ ์ฃผ์ ๋ฑ๋ก
- ํ์ํ ๊ฒฝ์ฐ ์ ๋ฌด ๋ก์ง ์ ์ฉ ๋ฐ ์ํ ๊ฐ๋ฅํ
Model ๊ด๋ จ ๊ณ์ธต ์๋น์ค ๊ตฌ์ฑ
·Connection
·DTO
·DAO
:
โป Spring ์ด ์คํธ๋ฟ์ธ ๋ฅผ ๋น๋กฏํ์ฌ ๋ค์ํ ์น ํ๋ ์์ํฌ์
๋น๊ต์ ์ฐ๋์ด ์ ๋๋ ํธ์ด๊ธฐ๋ ํ์ง๋ง
์๋ก ๋ค๋ฅธ ๋ ํ๋ ์์ํฌ๋ฅผ ์ฐ๋ํ๊ธฐ ์ํด์๋
์ค์ ์ ์ค๋ณต ๋ฑ ๊ฐ๋ฐ ๊ณผ์ ์์ ๋ถํธํจ์ด ์กด์ฌํ ์ ๋ฐ์ ์๋ค.
๋ฐ๋ผ์ Spring ์ด ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ MVC ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด
Spring ์ด ์ ๊ณตํ๋ AOP, ํธ๋์ญ์ ์ฒ๋ฆฌ, IoC / DI ๋ฑ์ ๊ธฐ๋ฅ์
๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด์ MVC ํจํด์ ๊ธฐ๋ฐํ์ฌ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋ค.
๋ํ, ๋ค๋ฅธ ํ๋ ์์ํฌ์ Spring ์ ์ฐ๋ํ๊ธฐ ์ํด์
์ค์ ์ ์ค๋ณตํด์ ์ ์ฉํด์ผ ํ๊ฑฐ๋.. ํ๋ ๊ฐ๋ฐ๊ณผ์ ์์ ๋ํ๋๋
๋ถํธ์ ํด์ํ ์ ์๊ฒ ๋๋ค.
----------------------------------------------------------------------------------
โ โ โ Spring MVC ํ๋ก์ ํธ ์ค์ต 01 โ โ โ
โ Perspective
: JavaEE
โ ๋ค์ด๋๋ฏน ์น ํ๋ก์ ํธ ์์ฑ (๋นSTS ๋ฒ์ )
: Mvc01
โ ํฐ์บฃ ์๋ฒ ๋ฑ๋ก ๋ฐ ํฌํธ(port) ์ค์ (์ธ์ฝ๋ฉ ํํฐ ์ ์ฉ ์ด์ )
: port 3306 / URIEncoding="UTF-8"
โ ๊ธฐํ ํ๊ฒฝ ์ค์
: ๊ธฐ๋ณธ ํ๊ฒฝ ์ค์ ์ ใweb_standard.epfใ๋ฅผ ํตํด ๊ตฌ์ฑ
(ํฐํธ, ์ค๋ฒํธ, ํธ์งํฌ๋งท, ์ธ์ฝ๋ฉ๋ฐฉ์, ํ ํ๋ฆฟ ๋ฑ...)
โ Spring MVC ํ๊ฒฝ ์ค์ ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ๋ก
: WebContent > WEB-INF > lib ๊ฒฝ๋ก์ ๋ฑ๋ก
- ๊ฒฝ๋ก 1 → C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.aop-3.0.2.RELEASE.jar
·ํ์ผ2 → org.springframework.asm-3.0.2.RELEASE.jar
·ํ์ผ3 → org.springframework.beans-3.0.2.RELEASE.jar
·ํ์ผ4 → org.springframework.context-3.0.2.RELEASE.jar
·ํ์ผ5 → org.springframework.core-3.0.2.RELEASE.jar
·ํ์ผ6 → org.springframework.expression-3.0.2.RELEASE.jar
·ํ์ผ7 → org.springframework.jdbc-3.0.2.RELEASE.jar
·ํ์ผ8 → org.springframework.transaction-3.0.2.RELEASE.jar
·ํ์ผ9 → org.springframework.web.servlet-3.0.2.RELEASE.jar
·ํ์ผ10 → org.springframework.web-3.0.2.RELEASE.jar
- ๊ฒฝ๋ก2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
·ํ์ผ11 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
- ๊ฒฝ๋ก3 → C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
·ํ์ผ12 → ojdbc6.jar
- ๊ฒฝ๋ก4 → C:\Downloads\12_JSTL\jakarta-taglibs-standard-1.1.2\lib
(JSTL ๋ค์ด๋ก๋ ๊ฒฝ๋ก)
·ํ์ผ13 → jstl.jar
·ํ์ผ14 → standard.jar
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
- HelloController.java
- Hello.jsp
- dispatcher-servlet.xml
- web.xml
- hello.action
โป ใdispatcher-servlet.xmlใ ํ์ผ์ ๊ธฐ๋ณธ ์ค์ ๋ด์ฉ(ํ ํ๋ฆฟ)์ ๊ตฌ์ฑํ๊ธฐ ์ํด
์คํ๋ง DOC ์ ๋ด์ฉ์ ์ฐธ๊ณ ํด์ ์์ฑํ ์ ์๋๋ก ํ๋ค.
· ๊ฒฝ๋ก → C:\s-f-3.0.2-with-docs\docs\spring-framework-reference\pdf
· ํ์ผ → spring-framework-reference.pdf
· ๋ด์ฉ(์์น) → ํด๋น pfd ๋ฌธ์์ ํ์ด์ง ๋ฒํธ ์ 425 ํ์ด์ง
ํ์ผ ๊ตฌ์กฐ์ ๋ฐ๋ก๊ฐ๊ธฐ ์ธ๋ฑ์ค ์ 450/805 ํ์ด์ง
·ํด๋น ์์น๋ก ์ด๋ํ๋ฉด XML ํ์ผ์ ๋ํ ์ํ(ํ ํ๋ฆฟ) ์ฝ๋๊ฐ ์๋ค.
์ด ๋ด์ฉ์ ๋ณต์ฌํ์ฌ dispatcher-servlet.xml ํ์ผ์ ๊ธฐ๋ณธ ๋ด์ฉ์ผ๋ก ์์ฑํ๋ค.
โ ์ฌ์ฉ์ ์ต์ด ์์ฒญ ์ฃผ์
http://localhost:3306/Mvc01/hello.action
โป ์ฐ๋ฆฌ๊ฐ ์์ฑํ Mvc01 ํ๋ก์ ํธ์ ์คํ ๋ฐ ์ฒ๋ฆฌ ๊ณผ์ ์ ๋ฆฌ
โ ์ธ๋ถ ์์ฒญ
http://localhost:3306/Mvc01/hello.action
===========================
http://www.test.co.kr
→ web.xml ๊ด์ฌ
(→ Front Controller ๋ฑ๋ก → DispatcherServlet ๋ฑ๋ก)
โก DispatcherServlet ์์ฒญ ์ ์
→ web.xml → DispatcherServlet ๋ฑ๋ก
web.xml → URL ํจํด ๋ฑ๋ก
→ ์ฌ์ฉ์ ์์ฒญ ๋ถ์ → ํน์ ์ปจํธ๋กค๋ฌ ์ง์
โข ํด๋น ์ปจํธ๋กค๋ฌ์ ํน์ ๋ฉ์๋ ํธ์ถ (์ก์ ์ฒ๋ฆฌ, ModelAndView ๊ฐ์ฒด ๋ฐํ)
→ ์ฌ์ฉ์์ ์์ฒญ์ ๋ง๋ ์ก์ ์ฒ๋ฆฌ
→ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋ ๋ชจ๋ธ ๊ฐ์ฒด ์ค๋น
→ ๋ทฐ ์ ๋ณด (JSP ํ์ด์ง ์ ๋ณด) ๋ฐํ
โป JSP ํ์ด์ง ์ ๋ณด
- ์ฌ๊ธฐ์๋ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ๋ก ํฌํจ๋ View ํ์ด์ง์ ์ด๋ฆ
โฃ ๋ทฐ ํ์ด์ง์์ ์ต์ข ์น ํ์ด์ง๋ฅผ ์์ฑ
→ JSP ํ์ด์ง ๋ด์์ ELL ์ด๋ JSTL ๋ฑ์ ํ๊ธฐ ์ฌ์ฉ ๊ฐ๋ฅ
โค ์๋ต ์๋ฃ~!!!
----------------------------------------------------------------------------------
โ โ โ Spring MVC ํ๋ก์ ํธ ์ค์ต 02 โ โ โ
โ Perspective
: JavaEE
โ ๋ค์ด๋๋ฏน ์น ํ๋ก์ ํธ ์์ฑ (๋นSTS ๋ฒ์ )
: Mvc02
โ ๊ธฐ๋ณธ ํ๊ฒฝ ๊ตฌ์ฑ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์
:Mvc00 (์ฐ๋ฆฌ๊ฐ ์์๋ก ๊ตฌ์ฑํด๋ ์ํ)๋ก ๋ถํฐ
src, WebContent ๋๋ ํฐ๋ฆฌ ๋ณต์ฌ & ๋ฎ์ด์ฐ๊ธฐ
โ ์ค์ต ์ฑ๊ฒฉ
: ๋ฐ์ดํฐ ์ก์์ ๊ด๋ จ ์ค์ต (Spring MVC ํจํด)
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
- SendController.java → ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด
- Send.jsp → ๋ทฐ ๊ฐ์ฒด
- ReceiveController.java → ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด
- Receive.jsp → ๋ทฐ ๊ฐ์ฒด
- web.xml → DispatcherServlet ๊ฐ์ฒด ๋ฑ๋ก / URL ๋งคํ ์ฃผ์ ๋ฑ๋ก
- dispatcher-servlet.xml → ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด ๋ฑ๋ก / URL ๋งคํ ์ฃผ์ ๋ฑ๋ก
- send.do → ์ดํด๋ฆฝ์ค ์คํ ๊ณผ์ ์์ ์์ฒญ์ ์ํ ๋น ํ์ผ
โ ์ฌ์ฉ์ ์ต์ด ์์ฒญ ์ฃผ์
http://localhost:3306/Mvc02/send.do
----------------------------------------------------------------------------------
โ โ โ Spring MVC ํ๋ก์ ํธ ์ค์ต 03 โ โ โ
โ Perspective
: JavaEE
โ ๋ค์ด๋๋ฏน ์น ํ๋ก์ ํธ ์์ฑ (๋นSTS ๋ฒ์ )
: Mvc03
โ ๊ธฐ๋ณธ ํ๊ฒฝ ๊ตฌ์ฑ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์
:Mvc00 (์ฐ๋ฆฌ๊ฐ ์์๋ก ๊ตฌ์ฑํด๋ ์ํ)๋ก ๋ถํฐ
src, WebContent ๋๋ ํฐ๋ฆฌ ๋ณต์ฌ & ๋ฎ์ด์ฐ๊ธฐ
โ ์ค์ต ์ฑ๊ฒฉ
: ๋ฐ์ดํฐ ์ก์์ ๊ด๋ จ ์ค์ต (Spring MVC ํจํด)
JDBC ๋ชจ๋ ์ถ๊ฐ ํ์ฉ
SimpleDriverDataSource ํด๋์ค(๊ฐ์ฒด) ํ์ฉ
โ ๊ธฐ๋ฅ ๊ตฌํ
: ์ฌ์ฉ์๋ก๋ถํฐ ์ด๋ฆ, ์ ํ๋ฒํธ, ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅ
์ ์ฅ๋ ์ด๋ฆ, ์ ํ๋ฒํธ ํญ๋ชฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ์ฝ์ด ํ๋ฉด์ ๊ตฌ์ฑ
โ ์ฌ์ ์์
- TBL_MEMBERLIST ํ ์ด๋ธ ์์ฑ
- MEMBERLISTSEQ ์์ฑ
- ์ํ ๋ฐ์ดํฐ ์ ๋ ฅ ๋ฐ ์กฐํ
โ ๊ธฐ๋ณธ ๋ ์ด์์ (ํ์ด์งํ๋ฉด ๊ตฌ์ฑ)
์ด๋ฆ [ ] → <input type="text">
์ ํ [ ] → <input type="text">
<ํ์ ์ถ๊ฐ> → <button type="button">
์ ์ฒด ์ธ์ ์ : 2๋ช → <p>...</p>
------------------ → <table>...</table>
๋ฒํธ ์ด๋ฆ ์ ํ๋ฒํธ
1 ๋ ธ.. 010..
2 ๊น.. 010..
------------------
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
- Mvc03_scott.sql → ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๊ฐ์ฒด ๊ตฌ์ฑ ๋ฐ ์ค์ต ๋ฐ์ดํฐ ์ค๋น
- MemberDTO.java → ์ฌ์ฉ์ ์ ์ ์๋ฃํ ํด๋์ค (DTO ํ์ฉ)
- IMemberDAO.java → ์ธํฐํ์ด์ค
- MemberDAO.java → ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ ์ฒ๋ฆฌ ํด๋์ค
→ Connection ๊ฐ์ฒด์ ๋ํ ์์กด์ฑ ์ฃผ์
(์์กด์ฑ ์ฃผ์ ์ ์ํ ์ค๋น ํ์)
- MemberListController.java → ์ฌ์ฉ์ ์ ์ ์ปจํธ๋กค๋ฌ ํด๋์ค
๋ฆฌ์คํธ ์ถ๋ ฅ ์ก์
DAO ๊ฐ์ฒด์ ๋ํ ์์กด์ฑ ์ฃผ์
(์์กด์ฑ ์ฃผ์ ์ ์ํ ์ค๋น ํ์)
- MemberList.jsp → ํ์ ๋ฆฌ์คํธ ์ถ๋ ฅ์ฉ ๋ทฐ
ํ์ ๋ฐ์ดํฐ ์ ๋ ฅ(์ถ๊ฐ) ํผ ํ๋ฉด ๊ตฌ์ฑ
- MemberInsertController.java → ์ฌ์ฉ์ ์ ์ ์ปจํธ๋กค๋ฌ
ํ์ ๋ฐ์ดํฐ ์ถ๊ฐ
DAO ๊ฐ์ฒด์ ๋ํ ์์กด์ฑ ์ฃผ์
(์์กด์ฑ ์ฃผ์ ์ ์ํ ์ค๋น ํ์)
- web.xml → DispatcherServlet ๊ฐ์ฒด ๋ฑ๋ก
URL ๋งคํ ์ฃผ์ ๋ฑ๋ก
- dispatcher-servlet.xml → ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด ๋ฑ๋ก
URL ๋งคํ ์ฃผ์ ๋ฑ๋ก
SimpleDriverDataSource ๊ฐ์ฒด ๋ฑ๋ก
์์กด ๊ฐ์ฒด ์ฃผ์ ์ค์
DAO ๊ฐ์ฒด ๋ฑ๋ก
- memberlist.do → ์ดํด๋ฆฝ์ค ์คํ ๊ณผ์ ์์ ์์ฒญ์ ์ํ ๋น ํ์ผ
โ ์ฌ์ฉ์ ์ต์ด ์์ฒญ ์ฃผ์
http://localhost:3306/Mvc03/memberlist.do
----------------------------------------------------------------------------------
โ โ โ Spring MVC ํ๋ก์ ํธ ์ค์ต 04 โ โ โ
โ Perspective
: JavaEE
โ ๋ค์ด๋๋ฏน ์น ํ๋ก์ ํธ ์์ฑ (๋นSTS ๋ฒ์ )
: Mvc04
โ ๊ธฐ๋ณธ ํ๊ฒฝ ๊ตฌ์ฑ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์
:Mvc00 (์ฐ๋ฆฌ๊ฐ ์์๋ก ๊ตฌ์ฑํด๋ ์ํ)๋ก ๋ถํฐ
src, WebContent ๋๋ ํฐ๋ฆฌ ๋ณต์ฌ & ๋ฎ์ด์ฐ๊ธฐ
โ ์ค์ต ์ฑ๊ฒฉ
: ์ง์ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ (Spring MVC ํจํด)
JDBC ๋ชจ๋ ์ถ๊ฐ ํ์ฉ
SimpleDriverDataSource ํด๋์ค(๊ฐ์ฒด) ํ์ฉ
โ ๊ธฐ๋ฅ ๊ตฌํ (๋ฐ์ดํฐ ๊ฐ ์ ํ๋ณ CRUD ์ค์ต)
- ์ง์ ์ ๋ณด ์ ๋ ฅ, ์ถ๋ ฅ, ์์ , ์ญ์ ๊ธฐ๋ฅ ๊ตฌํ.
- ์ง์ญ ์ ๋ณด ์ ๋ ฅ, ์ถ๋ ฅ, ์์ , ์ญ์ ๊ธฐ๋ฅ ๊ตฌํ.
- ๋ถ์ ์ ๋ณด ์ ๋ ฅ, ์ถ๋ ฅ, ์์ , ์ญ์ ๊ธฐ๋ฅ ๊ตฌํ.
- ์ง์ ์ ๋ณด ์ ๋ ฅ, ์ถ๋ ฅ, ์์ , ์ญ์ ๊ธฐ๋ฅ ๊ตฌํ.
- ๋ก๊ทธ์ธ / ๋ก๊ทธ์์ ๊ธฐ๋ฅ ๊ตฌํ
→ ๊ด๋ฆฌ์ ๋ฐ ์ผ๋ฐ ์ง์ ๋ก๊ทธ์ธ ๊ตฌ๋ถ.
==> Spring MVC, JSP/Servlet, Oracle, HTML/CSS/Javascript, AJAX
, jQuery, EL, JSTL ํํ ๋ฑ ์ฌ์ฉ.
โ ์ฌ์ ์์ → ํ ์ด๋ธ ๋ฐ ์ํ์ค, ์ฃผ์ ์ฟผ๋ฆฌ๋ฌธ, ์ํ ๋ฐ์ดํฐ ๋ฑ ๊ตฌ์ฑ
- EMPLOYEE ์ง์
- REGION ์ง์ญ
- DEAPRTMENT ๋ถ์
- POSITION ์ง์
- ์ํ ๋ฐ์ดํฐ ์ ๋ ฅ...
โ ์ฌ์ ์์
- TBL_MEMBERLIST ํ ์ด๋ธ ์์ฑ
- MEMBERLISTSEQ ์์ฑ
- ์ํ ๋ฐ์ดํฐ ์ ๋ ฅ ๋ฐ ์กฐํ
โ ๊ธฐ๋ณธ ๋ ์ด์์ (ํ์ด์งํ๋ฉด ๊ตฌ์ฑ)
์ด๋ฆ [ ] → <input type="text">
์ ํ [ ] → <input type="text">
<ํ์ ์ถ๊ฐ> → <button type="button">
์ ์ฒด ์ธ์ ์ : 2๋ช → <p>...</p>
------------------ → <table>...</table>
๋ฒํธ ์ด๋ฆ ์ ํ๋ฒํธ
1 ๋ ธ.. 010..
2 ๊น.. 010..
------------------
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
#00. Mvc04_scott.sql → ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๊ฐ์ฒด ๊ตฌ์ฑ ๋ฐ ์ค์ต ๋ฐ์ดํฐ ์ค๋น
#01. Employee.java → DTO ๊ณ์ธต, ์ง์ ๋ฐ์ดํฐ ์๋ฃํ ํด๋์ค.
#02. Department.java → DTO ๊ณ์ธต, ๋ถ์ ๋ฐ์ดํฐ ์๋ฃํ ํด๋์ค.
#03. Region.java → DTO ๊ณ์ธต, ์ง์ญ ๋ฐ์ดํฐ ์๋ฃํ ํด๋์ค.
#04. Position.java → DTO ๊ณ์ธต, ์ง์ ๋ฐ์ดํฐ ์๋ฃํ ํด๋์ค.
#05. IEmployeeDAO.java → ์ธํฐํ์ด์ค.
#06. IDepartmentDAO.java → ์ธํฐํ์ด์ค.
#07. IRegionDAO.java → ์ธํฐํ์ด์ค.
#08. IPositionDAO.java → ์ธํฐํ์ด์ค.
#09. EmployeeDAO.java → ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ ์ฒ๋ฆฌ ํด๋์ค
์ง์ ๋ฐ์ดํฐ CRUD ์ก์
Connection ๊ฐ์ฒด์ ๋ํ ์์กด์ฑ ์ฃผ์ ์ค๋น
(์ธํฐํ์ด์ค ์์ฑ ๊ตฌ์ฑ / setter ๊ตฌ์ฑ)
#10. DepartmentDAO.java → ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ ์ฒ๋ฆฌ ํด๋์ค
์ง์ ๋ฐ์ดํฐ CRUD ์ก์
Connection ๊ฐ์ฒด์ ๋ํ ์์กด์ฑ ์ฃผ์ ์ค๋น
(์ธํฐํ์ด์ค ์์ฑ ๊ตฌ์ฑ / setter ๊ตฌ์ฑ)
#11. RegionDAO.java → ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ ์ฒ๋ฆฌ ํด๋์ค
์ง์ ๋ฐ์ดํฐ CRUD ์ก์
Connection ๊ฐ์ฒด์ ๋ํ ์์กด์ฑ ์ฃผ์ ์ค๋น
(์ธํฐํ์ด์ค ์์ฑ ๊ตฌ์ฑ / setter ๊ตฌ์ฑ)
#12. PostionDAO.java → ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ ์ฒ๋ฆฌ ํด๋์ค
์ง์ ๋ฐ์ดํฐ CRUD ์ก์
Connection ๊ฐ์ฒด์ ๋ํ ์์กด์ฑ ์ฃผ์ ์ค๋น
(์ธํฐํ์ด์ค ์์ฑ ๊ตฌ์ฑ / setter ๊ตฌ์ฑ)
#13. EmployeeMenu.jsp → ๋ฉ์ธ ๋ฉ๋ด ๋ทฐ ํ์ด์ง.
๋ก๊ทธ์์ ๊ธฐ๋ฅ ํฌํจ.
#14. menuStyle.css → ๋ฉ๋ด ์คํ์ผ ๊ตฌ์ฑ.
#15. EmployeeList.jsp → ์ง์ ๋ฆฌ์คํธ ์ถ๋ ฅ ํ์ด์ง.
#16. main.css → ๋ฉ์ธ ์คํ์ผ ๊ตฌ์ฑ
#17. EmployeeListController.java → ์ฌ์ฉ์ ์ ์ ์ปจํธ๋กค๋ฌ ํด๋์ค
(employeelist.action) ๋ฆฌ์คํธ ์ถ๋ ฅ ์ก์
DAO ๊ฐ์ฒด์ ๋ํ ์์กด์ฑ ์ฃผ์
(์์กด์ฑ ์ฃผ์ ์ ์ํ ์ค๋น ํ์)
#18. web.xml → DispatcherServlet ๊ฐ์ฒด ๋ฑ๋ก
URL ๋งคํ ์ฃผ์ ๋ฑ๋ก
#19. dispatcher-servlet.xml → ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด ๋ฑ๋ก
URL ๋งคํ ์ฃผ์ ๋ฑ๋ก
SimpleDriverDataSource ๊ฐ์ฒด ๋ฑ๋ก
์์กด ๊ฐ์ฒด ์ฃผ์ ์ค์
DAO ๊ฐ์ฒด ๋ฑ๋ก
#20. employeelist.action → ์ดํด๋ฆฝ์ค ์คํ ๊ณผ์ ์์ ์์ฒญ์ ์ํ ๋น ํ์ผ
#21. EmployeeInsertForm.jsp →
#22. EmployeeInsertFormController.java
(employeeinsertform.action)
#23. jquery-ui.js
#24. jquery-ui.css
#25. images
#26. AjaxController.java
(ajax.action)
#27. Ajax.jsp
#28. EmployeeInsertController.java
(employeeinsert.action)
#29. EmployeeUpdateForm.jsp
#30. EmployeeUpdateFormController.java
(employeeupdateform.action)
#31. EmployeeUpdateController.java
(employeeupdate.action)
#32. EmployeeDeleteController.java
(employeedelet.action)
#33. LoginForm.jsp
#34. LoginFormController.java
(loginform.action)
#35. LoginController.java
(login.action)
#36. LogoutController.java
#37. EmpList.jsp
#38. EmpListController.java
(emplist.action)
:
:
==========================================
#39. DepartmentList.jsp
#40. DepartmentInsertForm.jsp
#41. DepartmentUpdateForm.jsp
#42. DepartmentListController.java
(departmentlist.action)
#43. DepartmentInsertFormController.java
(departmentinsert.action)
#44. DepartmentInsertController.java
(departmentinsertcontroller.action)
#45. DepartmentUpdateFormController.java
(departmentupdateform.action)
#46. DepartmentUpdateController.java
(departmentupdate.action)
#47. DepartmentDeleteController.java
#48. DeptList.jsp
#49. DeptListController.java
:
:
#50. RegionList.jsp
#51. RegionInsertForm.jsp
#52. RegionUpdateForm.jsp
#53. RegionListController.java
#54. RegionInsertFormController.java
#55. RegionInsertController.java
#56. RegionUpdateFormController.java
#57. RegionUpdateController.java
#58. RegionDeleteController.java
#59. RegList.jsp
#60. RegListController.java
:
:
#61. PositionList.jsp
#62. PositionInsertForm.jsp
#63. PositionUpdateForm.jsp
#64. PositionListController.java
(positionlist.action)
#65. PositionInsertFormController.java
(positioninsertform.action)
#66. PositionInsertController.java
#67. PositionUpdateFormController.java
#68. PositionUpdateController.java
#69. PositionDeleteController.java
:
:
#70. PosList.jsp
#71. PosListController.java
==========================================
โ ์ฌ์ฉ์ ์ต์ด ์์ฒญ ์ฃผ์
http://localhost:3306/Mvc04/employeelist.action → ๊ด๋ฆฌ์
http://localhost:3306/Mvc04/emplist.action → ์ผ๋ฐ์ง์
โป ์ถํ ์ฐ๋ฆฌ๋... ์ค๋ฌด ํ๋ก์ ํธ๋ฅผ ์ํํ๋ ๊ณผ์ ์์...
์ปจํธ๋กค๋ฌ๋ฅผ ์ก์ ๋จ์๊ฐ ์๋, ์ ๋ฌด ๋จ์๋ก ๋ฌถ์ด ์์ ๋ฐ ์ฒ๋ฆฌํ๊ฒ ๋ ๊ฒ์ด๋ค.
์ดํ, ์ด๋ ธํ ์ด์ ์ ํ์ฉํ์ฌ ์ปจํธ๋กค๋ฌ๋ฅผ ์ง์ ํด์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ๋ ์ํํ๊ฒ ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง, ์ด๋ฒ ์ค์ต ๊ณผ์ ์์๋ ๊ธฐ๋ณธ ์ก์ ๋จ์์ ์ปจํธ๋กค๋ฌ ๊ตฌ์ฑ์ ์ํํด ๋ด์ผ๋ก์จ
Model-View-Controller ์ ๊ธฐ๋ฅ ๋ฐ ์ฒ๋ฆฌ ํ๋ฆ์ ๋ํ ์ดํด์ ํ์ ์ ์ ๋๋ก ํ ์ ์๋๋ก ํ๋ค.
2. Annotation.txt
โ ๊ฐ์
- ์ผ์ข ์ ์ฃผ์(์ฌ์ ์ ์ธ ์๋ฏธ : ์ฃผ์๋ฌ๊ธฐ, ๋ฉํ๋ฐ์ดํฐ)
- ๋ฉํ ๋ฐ์ดํฐ : ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ค๋ช ํ๊ธฐ ์ํ ๋ฐ์ดํฐ
- ์ฃผ์์ ์ง์์ฑ
: *.java(์์ค ๋ ๋ฒจ) → [์ปดํ์ผ๋ฌ(Compiler)] → *.class → [JVM:Runtime]
์ด ๊ณผ์ ์์ ๋ณดํต ์ปดํ์ผ์ด ์ํ๋๋ฉด ์ฃผ์์ด ์ ๊ฑฐ
(//, /*...*/, /**...*/)
- ใ@ใ : Annotation, JDK 1.5(JavaSE 5.0)๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅ, Runtime ๊น์ง๋ ์กด์ฌ
- AT(Annotation Type)
โ ๋ฉํ ๋ฐ์ดํฐ์ ๊ฐ์น
์ผ๋ฐ์ ์ผ๋ก ๋ฉํ ๋ฐ์ดํฐ์ ํจ์ฉ์ ๋ค์์ ์ธ ๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
๋ฌธ์ํ, ์ปดํ์ผ๋ฌ ์ฒดํฌ, ์ฝ๋ ๋ถ์
- ๋ฌธ์ํ
๋ชจ๋ ๋ ๋ฒจ์ ๋ฌธ์ํ๋ ์์ฃผ ์ธ์ฉ๋๋ ์ฌ์ฉ๋ฒ์ด๋ค.
๋ฉํ ๋ฐ์ดํฐ๋ ๋ฉ์๋๊ฐ ๋ค๋ฅธ ๋ฉ์๋์ ์์กดํ๊ณ ์๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๋
์ ์ฉํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
๋ํ ๊ทธ๋ค์ด ๋ถ์์ ํ์ง, ํน์ ํด๋์ค๊ฐ ๋ ๋ค๋ฅธ ํด๋์ค๋ฅผ ๋ ํผ๋ฐ์ฑ ํ๋์ง
๋ฑ์ ์๋ ค์ค๋ค.
์ด๋ ์ ์ฉํ์ง๋ง ๋ฌธ์ํ๋ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์๋ฐ์ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๊ฐ์ฅ ๊ด๋ จ์ด
์ ์ ํญ๋ชฉ์ด๋ค.
์ฝ๋ ๋ฌธ์ํ์ ์์ด์๋ Javadoc ๋ผ๋ ์ฌ์ฉ์ด ์ฝ๊ณ ๊ฐ๋ ฅํ ๋ฐฉ์์
์ ๊ณตํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ปดํ์ผ๋ฌ ์ฒดํฌ
๋ณด๋ค ์ค์ํ ๋ฉํ ๋ฐ์ดํฐ์ ์ฅ์ ์
์ปดํ์ผ๋ฌ๊ฐ ๋ฉํ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ์ปดํ์ผ ์๊ฐ ์ฒดํฌ๋ฅผ
์ํํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ผ๊ณ ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, Override ์ด๋ ธํ ์ด์ ์ ์ด์ฉํ์ฌ ์ํผ ํด๋์ค์ ๋ฉ์๋๊ฐ
์ฌ์ ์๋ ๊ฒ์ ๊ธฐ์ , ์๋ฐ ์ปดํ์ผ๋ฌ๋ ๋ฉํ ๋ฐ์ดํฐ์์ ์๋ ค์ฃผ๋ ์๋์ด
์ค์ ๋ก ์ฝ๋ ๋ ๋ฒจ์์ ๋ฐ์ํ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ ์ค์๋ก ์ค๋ฒ๋ผ์ด๋ฉํ๋ ๊ฒฝ์ฐ์ ๋ฒ๊ทธ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.
- ์ฝ๋ ๋ถ์
์ข์ ์ด๋ ธํ ์ด์ ๋๋ ๋ฉํ ๋ฐ์ดํฐ ํ์ ์ต๊ณ ์ ๊ธฐ๋ฅ์
์ฌ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๋ถ์ํ๋ ๊ฒ์ด๋ค.
๊ฐ๋จํ ๊ฒฝ์ฐ, ์ฝ๋ ๋ชฉ๋ก์ ๊ตฌํํ๊ณ ํ์ํ ์ธํ ์ ํ์ ์ ๊ณตํ๊ณ
๋ฆฌํด ์ ํ์ ์ ์ํ๋ค.
์๋ฐ ๋ฆฌํ๋ ์ ๋ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค๊ณ ์๊ฐํ ์ ์๋ค.
๊ฒฐ๊ตญ ์ด ๋ชจ๋ ์ ๋ณด์ ๋ํ ์ฝ๋๋ฅผ ๊ฒ์ฌํ ์ ์๋ค.
ํ๋ฉด์ ์ผ๋ก ๋ณผ ๋ ๊ทธ๋ด๋ฏ ํ์ง๋ง ์ค์ ๋ก ๊ทธ๋ ์ง ์๋ค.
๋ง์ ๊ฒฝ์ฐ ๋ฉ์๋๋ ์ธํ์ผ๋ก ๋ฐ์๋ค์ด๊ฑฐ๋ ์์ํ์ผ๋ก ๋ฆฌํดํ๋ค.
์ด๋ ๋ฉ์๋๊ฐ ์ํ๋ ๊ฒ์ด ์๋๋ค.
์๋ฅผ ๋ค์ด, ๋งค๊ฐ๋ณ์ ์ ํ์ด Object ์ด์ง๋ง ๋ฉ์๋๋ Integer ๋ฅผ ์ฌ์ฉํด์๋ง ์๋ํ๋ค.
์ด๋ ๋ฉ์๋๊ฐ ๊ฒน์ณ์ฐ๊ธฐ๋ ๊ณณ์์ ์ฝ๊ฒ ๋ฐ์ํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ํผ ํด๋์ค๊ฐ ๋ฉ์๋๋ฅผ ์ผ๋ฐ ๋งค๊ฐ๋ณ์๋ก ์ ์ธํ๋๊ฐ
๋ง์ ์ง๋ ฌํ๊ฐ ์งํ๋๋ ์์คํ ์์ ์ฝ๊ฒ ๋ฐ์ํ๋ค.
๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฉํ ๋ฐ์ดํฐ๋ ์ฝ๋ ๋ถ์ ํ์ ์ง์ ํ ์ ์๋ค.
๋งค๊ฐ๋ณ์ ์ ํ์ด Object ์ด๋๋ผ๋ ์ ๋ง๋ก ์ํ๋ ๊ฒ์ Integer ๋ผ๋ ๊ฒ์ ๋ํ๋ผ ์ ์๋ค.
์ด๋ฌํ ์ข ๋ฅ์ ๋ถ์์ ์๋นํ ์ ์ฉํ๋ฉฐ ๊ทธ ๊ฐ์น๋ ์๋นํ๋ค.
๋ณด๋ค ๋ณต์กํ ์ฝ๋ ๋ถ์ ํด์ ๋ชจ๋ ์ข ๋ฅ์ ์ถ๊ฐ ํ์คํฌ๋ฅผ ์ํํ ์ ์๋ค.
๊ทธ ์ ์ค ํ๋๊ฐ EJB(Enterprise JavaBean) ์ปดํฌ๋ํธ์ด๋ค.
์ฌ์ง์ด ๊ฐ๋จํ EJB ์์คํ ๋ ์์กด์ฑ๊ณผ ๋ณต์ก์ฑ์ ์๋นํ๋ค.
๋ก์ปฌ ์ธํฐํ์ด์ค์ด๋ฉด์ ๋ก์ปฌ ํ ์ธํฐํ์ด์ค๊ฐ ๋ ๊ฐ๋ฅ์ฑ๊ณผ ํจ๊ป
ํ ์ธํฐํ์ด์ค์ ์๊ฒฉ ์ธํฐํ์ด์ค๋ฅผ ์ป๋๋ค.
์ด ๋ชจ๋ ํด๋์ค๋ค์ ์ฐ๋์ํค๋ ๊ฒ์ ๊ฝค ํ๋ค๋ค.
ํ์ง๋ง, ๋ฉํ ๋ฐ์ดํฐ๋ ์ด ๋ฌธ์ ์ ๋ํ ์๋ฃจ์ ์ ์ ๊ณตํ๋ค.
์ข์ ํด์ ์ด ๋ชจ๋ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ฉด์ ์ฝ๋-๋ ๋ฒจ ์ฐ๊ฒฐ์ด ์์ง๋ง
์ฝ๋-๋ ๋ฒจ ๊ด๊ณ๋ฅผ ๊ฐ์ง ํด๋์ค๋ค์ด ์ฐ๋๋ ์ ์๋๋ก ํ๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ๋ฉํ ๋ฐ์ดํฐ์ ์ง์ ํ ๊ฐ์น๋ผ๊ณ ํ ์ ์๋ค.
โ Annotation์ ์ข ๋ฅ
1) Mark Annotation
๋ณ์๊ฐ ์๋ค. ์ด ์ด๋ ธํ ์ด์ ์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถ๋๋ฉฐ ์ถ๊ฐ ๋ฐ์ดํฐ ์์ด ๋ํ๋๋ค.
์๋ฅผ ๋ค์ด, @ Mark Annotation์ marker ์ด๋ ธํ ์ด์ ์ด๋ค.
๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉฐ ๋จ์ง ์ด๋ ธํ ์ด์ ์ด๋ฆ๋ง ์์ ๋ฟ์ด๋ค.
ex) @Stateless
2) Single Annotation
marker ์ ๋น์ทํ์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค.
์ฑ๊ธ ๋นํธ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ ์ ํ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
(๋จ, ์ด๋ ธํ ์ด์ ์ ํ์ด ์ด ๋ฌธ๋ฒ์ ์์ฉํด์ผ ํจ)
: @SingleValueAnnotation("my data")
→ ์ด๋ @ ํ์๋ง ์ ์ธํ๊ณ ๋ ์ผ๋ฐ์ ์ธ ์๋ฐ ๋ฉ์๋ ํธ์ถ๊ณผ ๋น์ทํ๋ค.
3) Full Annotation(Multi value Annotation)
๋ค์ค ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ ์ฒด ์ ํ์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
(๊ทธ๋ฆฌ๊ณ , ์ด๋ ธํ ์ด์ ์ ์ผ๋ฐ ์๋ฐ ๋ฉ์๋์ ๋์ด์ ๋น์ทํ์ง ์๋ค. )
: @FullAnnotation(var1="dataValue1", var2="dataValue2", var3="dataValue3")
4) Custom Annotation ๊ตฌํ
: ๊ฐ๋ฐ์๊ฐ ์ง์ Annotation์ ๊ตฌํ
ex)
public @interface TODO // Single Value Annotation
{
String Value(); // value ๊ฐ ์๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ฉด
} // ์ฌ์ฉ์ ๋ฉ์๋์ ์ด๋ฆ์ ์จ์ค๋ค.
// @TODO("Something todo")
public @interface TODO // Single-value Annotation
{
String msg(); // value ๊ฐ ์๋ ์ด๋ฆ์ ์ฌ์ฉํ ๊ฒฝ์ฐ
}
// @TODO(msg="Something todo")
โ Annotation ์ ๊ตฌ๋ถํ๋ ๋ ๋ค๋ฅธ ๊ธฐ์ค
1) Simple Annotation
๋ฉ์๋๊ฐ ๋ณ์ ์์ ๋ถ์ด๋ ์ผ๋ฐ์ ์ธ Annotation
2) Meta Annotation
Annotation ์ Annotation
(ํ Annotation ์์ ๋ค๋ฅธ Annotation ์ค์ )
โป Meta Annotation
1) @Target Annotation
์์ฑํ Annotation ์ด ์ด๋์์ ์ฌ์ฉํ๊ฒ ๋ ์ง๋ฅผ ๊ฒฐ์
@Target(
{
ElementType.type // ํด๋์ค, ์ธํฐํ์ด์ค, enum
, ElementType.METHOD // ์์ฑ์๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฉ์๋
, ElementType.CONSTRUCTOR // ์์ฑ์
, ElementType.ANNOTATION_TYPE // ๋ฉํ Anntation
})
2) @Retention Annotation
@Retention Annotation([์์ฑ๊ฐ])
์์ฑํ Annotation์ ์ง์์ฑ์ ์ค์
- RententionPosicy.SOURCE
: ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผ ์ ์ญ์ ํ์ฌ ํด๋์ค ํ์ผ์ ์ ์ฅ๋์ง ์๋๋ค.
- RententionPosicy.CLASS
: ํด๋์ค ํ์ผ์ ์ ์ฅ๋์ง๋ง JVM ์ ๋ฌด์
- RententionPosicy.RUNTIME
: ํด๋์ค ํ์ผ์ ์ ์ฅ๋๋ JVM ์ ์ ์ง
โ ๋ด์ฅ(Built-in) Annotation (โป java.lang.* ์ ์ ์๋ 3๊ฐ์ ํ์ค ์ด๋ ธํ ์ด์ )
1) @Override
์ํผ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋
public class OverrideTest
{
public OverrideTest() { }
@Override
public String toString()
{
return super.toString() + "[Override Test Implementation]";
}
@Override
public int hashCode()
{
return super.toString().hashCode();
}
}
2) @Deprecated
@Override ์ ๋ง์ฐฌ๊ฐ์ง๋ก @Deprecated ๋ marker ์ด๋ ธํ ์ด์ ์ด๋ค.
@Deprecated๋ฅผ ์ฌ์ฉํ์ฌ ๋์ด์ ์ฌ์ฉ๋์ง ๋ง์์ผ ํ ๋ฉ์๋์ ์ฃผ์์ ๋ถ์ฌํ๋ค.
@Override์ ๋ค๋ฅธ ์ ์, @Deprecated๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ๋ง์์ผ ํ๋ (deprecated)
๋ฉ์๋์ ๋์ผํ ๋ผ์ธ์์ ๋์ฌ์ ธ์ผ ํ๋ค.
public class Deprecated
{
@Deprecated public void doSomethig()
{
//.. ์คํ ์ฝ๋
// doSomethig() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋ค
// ํฅ์๋ ํํ์ ์ฝ๋
}
}
3) @SuppressWarnings
๋ฒ๊ฑฐ๋ก์ด ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ๋ค.
Override ๋ Deprecated ์๋ ๋ค๋ฅด๊ฒ @SuppressWarnings ๋ ๋ณ์๋ฅผ ๊ฐ๊ณ ์๋ค.
๋ฐ๋ผ์ ์ด๋ฅผ ์๋ํ๊ฒ ํ๋ ค๋ฉด Single-value Annotation ์ ํ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
๊ฐ ์ด๋ ์ด๋ก์ ๋ณ์๋ฅผ ์ ๊ณตํ ์ ์๋ค.
๊ฐ๊ฐ ์ญ์ ํ (Suppress) ํน์ ์ ํ์ ๊ฒฝ๊ณ ๋ฅผ ๋ํ๋ธ๋ค.
@SuppressWarnings(value="unchecked")
public void nonGenericMethod()
{
List wordList = new ArrayList();
wordList.add("foo");
}
------------------------------------------------------------------------------------------------------
โ โ โ Spring Annotation โ โ โ
โ ๊ฐ์
Spring Framework ๋ JAVA 5+ ๋ถํฐ Annotation์ ์ ๊ณตํ๋ฉฐ,
Annotation ์ ์ฌ์ฉ์ผ๋ก ์ค์ ํ์ผ์ ๊ฐ๊ฒฐํํ๊ณ
๊ฐ์ฒด ๋๋ ๋ฉ์๋์ ๋งคํ์ ๋ช ํํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
โ @Component
- ํจํค์ง : org.springframework.stereotype
- ๋ฒ์ : spring2.5
- ๊ฐ์
: ใ<context:component-scan>ใํ๊ทธ๋ฅผ ์ค์ ํ์ผ์ ์ถ๊ฐํ๋ฉด
ํด๋น ์ด๋ ธํ ์ด์ ์ด ์ ์ฉ๋ ํด๋์ค๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ๊ฒ ๋๋ค.
๋ฒ์๋ ๋ํดํธ๋ก ์ฑ๊ธํค(Singleton)์ด๋ฉฐ ใ@Scopeใ๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ํ ์ ์๋ค.
- ์ค์ ์์น : ํด๋์ค ์ ์ธ๋ถ ์
- ์ถ๊ฐ ์ค์
: XML ์ค์ ํ์ผ์ ใ<context:component-scan>ใ์ ์ ์ํ๊ณ
์ ์ฉํ ๊ธฐ๋ณธ ํจํค์ง๋ฅผ ใ<base-package>ใ์์ฑ์ผ๋ก ๋ฑ๋กํ๋ค.
ใ<context:component-scan>ใํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด
@Component, @Required, @Autowired ๋ฑ์ ์ด๋ ธํ ์ด์ ์ด ํจ๊ป ์ ์ฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด, ใ<context:component-scan base-package="xxx">ใ ์์
xxx ํจํค์ง์ ํ์์์ @Component ๋ก ์ ์ธ๋ ํด๋์ค๋ Bean ์ผ๋ก ์๋ ๋ฑ๋กํ๋ค.
Bean ์ ์ด๋ฆ์ ํด๋น ํด๋์ค๋ช (์ฒซ ๊ธ์๋ ์๋ฌธ์)์ด ์ฌ์ฉ๋๋ค.
ใ<context:component-scan>ใ ์์์๋ scoped-proxy ์์ฑ์ด ์กด์ฌํ๋ค.
scoped-proxy ์์ฑ์ <aop:scoped-proxy/> ์์์ฒ๋ผ
WebApplicationContext ์์๋ง ์ ํจํ๋ฉฐ
" session", "globalSession", "request" ์ด์ธ์ scope ๋ ๋ฌด์๋๋ฉฐ
๋ค์์ 3๊ฐ์ง ๊ฐ์ ์ค์ ํ ์ ์๋ค.
·no : proxy ๋ฅผ ์ค์ ํ์ง ์๋๋ค.(๊ธฐ๋ณธ๊ฐ)
·interfaces : JDK Dynamic Proxy๋ฅผ ์ด์ฉํ proxy ์์ฑ
·targetClass : ํด๋์ค์ ๋ํด ํ๋ก์๋ฅผ ์์ฑ(CGLIB ๋ฅผ ์ด์ฉํ Proxy ์์ฑ)
- ์ฌ์ฉ ์
@Component
@Scope("prototype") //-- ์๋ตํ๋ฉด ์ฑ๊ธ์ฝ
public class Test
{
//...
}
โ @Required
- ํจํค์ง : org.springframework.beans.factory.annotation
- ๋ฒ์ : spring 2.0
- ๊ฐ์
: @Required ์ด๋ ธํ ์ด์ ์ ํ์ ํ๋กํผํฐ์์ ๋ช ์ํ๋ ๊ฒ์ผ๋ก
ํ์ ํ๋กํผํฐ๋ฅผ ์ค์ ํ์ง ์์ ๊ฒฝ์ฐ ๋น ์์ฑ ์ ์์ธ๋ฅผ ๋ฐ์์ํค๊ฒ ๋๋ค.
- ์ค์ ์์น : setter ๋ฉ์๋
- ์ถ๊ฐ ์ค์
: <bean class="org.springframeword.beans.factory.annotation"
.RequiredAnnotationBeanPostProcessor"> ํด๋์ค๋ฅผ
๋น์ผ๋ก ๋ฑ๋ก์์ผ ์ค์ผ ํ๋ค.
ํด๋น ์ค์ ๋์ ์ ใ<context:annotation-config>ใํ๊ทธ๋ฅผ ์ฌ์ฉํด์ผ ๋๋ค.
ใ<context:annotation-config>ใ ํ๊ทธ๋
์ด๋ ธํ ์ด์ ๊ณผ ๊ด๋ จํ์ฌ ๋ค์์ BeanPostProcessor ๋ฅผ ํจ๊ป ๋ฑ๋กํ๋ค.
·@Required(RequiredAnnotationBeanPostProcessor)
·@Autowired(AutowiredAnnotationBeanPostProcessor)
·@Resource, @PostConstruct, @PreDestroy(CommonAnnotationBeanPostProcessor)
·@Configuration(ConfigurationClassPostProcessor)
โ 1 ๋จ๊ณ : ์ฝ๋ ๋ด์ ํ๋กํผํฐ ์ค์ ๋ฉ์๋์ ใ@Requiredใ ์ด๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค.
public class TestBean
{
private TestDAO testDAO;
@Required
public void setTestDAO(TestDAO testDAO)
{
this.testDAO = testDAO;
}
}
โก 2 ๋จ๊ณ : ์คํ๋ง ์ค์ ํ์ผ์ RequiredAnnotationBeanPostProcessor ํด๋์ค๋ฅผ
๋น์ผ๋ก ๋ฑ๋กํ๋ค.
<bean class="org.springframework.beans.factory.annotation
.RequriedAnnotationBeanPostProcessor"/>
<bean name="testBean" class="com.test.TestBean">
<!-- ใ@Requiredใ ์ด๋ ธํ ์ด์ ์ ์ ์ฉํ์์ผ๋ฏ๋ก
์ค์ ํ์ง ์์ ๊ฒจ์ ์์ธ๋ฅผ ๋ฐ์์ํค๊ฒ ๋๋ค. -->
<property name="testDAO" ref="testDAO"/>
</bean>
RequiredAnnotationBeanPostProcessor ํด๋์ค๋
์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก๋ bean ๊ฐ์ฒด๋ฅผ ์กฐ์ฌํ์ฌ
@Required ์ด๋ ธํ ์ด์ ์ผ๋ก ์ค์ ๋์ด ์๋ ํ๋กํผํฐ์ ๋ํด
๊ฐ์ด ์ ๋๋ก ์ค์ ๋์ด ์๋์ง ๊ฒ์ฌํ๊ณ
์ค์ ๋์ด ์์ง ์์ผ๋ฉด bean ์์ฑ ์ ์์ธ๋ฅผ ๋ฐ์์ํค๊ฒ ๋๋ ๊ฒ์ด๋ค.
RequiredAnnotationBeanPostProcessor ํด๋์ค๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ์ง ์๊ณ
ใ<context:annotation-config>ใ ์ ๊ฐ์ด ํ๊ทธ๋ฅผ ์ด์ฉํ ์๋ ์๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config /> <!-- โโโ -->
</beans>
โ @Autowired
- ํจํค์ง : org.springframework.beans.factory.annotation
- ๋ฒ์ : spring 2.5
- ๊ฐ์
: @@Autowired ์ด๋ ธํ ์ด์ ์ ์์กด๊ด๊ณ๋ฅผ ์๋ ์ค์ ํ ๋ ์ฌ์ฉํ๋ฉฐ
ํ์ ์ ์ด์ฉํ์ฌ ์์กดํ๋ ๊ฐ์ฒด๋ฅผ ์ฝ์ ํด ์ฃผ๋๋ก ์ฒ๋ฆฌํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก ํด๋น ํ์ ์ ๋น ๊ฐ์ฒด๊ฐ ์กด์ฌํ์ง ์๊ฑฐ๋
๋๋ 2๊ฐ ์ด์ ์กด์ฌํ ๊ฒฝ์ฐ, ์คํ๋ง์ ์์ธ๋ฅผ ๋ฐ์์ํค๊ฒ ๋๋ค.
- ์ค์ ์์น : ์์ฑ์, ํ๋, ๋ฉ์๋(setter ๊ฐ ์๋์ด๋ ๋ฌด๋ฐฉํ๋ค.)
- ์ถ๊ฐ ์ค์
: <bean class="org.springframework.beans.factory.annotation"
.AutowiredAnnotationBeanPostProcessor"/> ํด๋์ค๋ฅผ
๋น์ผ๋ก ๋ฑ๋ก์์ผ์ค์ผ ํ๋ค.
ํด๋น ์ค์ ๋์ ์ ใ<context:annotation-config/>ใ ํ๊ทธ๋ฅผ ์ฌ์ฉํด๋ ๋๋ค.
- ์ต์
·required
@Autowired ์ด๋ ธํ ์ด์ ์ ์ ์ฉํ ํ๋กํผํฐ์ ๋ํด
์ค์ ํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ์ false ๊ฐ์ ๋ถ์ฌํ๋ฉฐ,
์ด ๋ , ํด๋น ํ๋กํผํฐ๊ฐ ์กด์ฌํ์ง ์๋๋ผ๋ ์คํ๋ง์ ์์ธ๋ฅผ ๋ฐ์์ํค์ง ์๋๋ค.
ใ@Autowired(required=false)ใ๋ก ์ ์ธํ๋ค. (๊ธฐ๋ณธ๊ฐ์ true)
- ํน์ง
byType ์ผ๋ก ์์กด๊ด๊ณ๋ฅผ ์๋์ผ๋ก ์ค์ ํ ๊ฒฝ์ฐ
๊ฐ์ ํ์ ์ ๋น์ด 2๊ฐ ์ด์ ์กด์ฌํ๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๊ฒ ๋๋๋ฐ,
@Autowired ๋ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ด ๊ฒฝ์ฐ, @Qualifier ๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ผํ ํ์ ์ ๋น ์ค
ํน์ ๋น์ ์ฌ์ฉํ๋๋ก ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
@Autowired
@Qualifier("test")
private Test test;
โ @Qualifier
- ํจํค์ง : org.springframework.beans.factory.annotation
- ๋ฒ์ : spring 2.5
- ๊ฐ์
: @Qualifier ์ด๋ ธํ ์ด์ ์ @Autowired ์ ๋ชฉ์ ์์
๋์ผ ํ์ ์ ๋น ๊ฐ์ฒด๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ํน์ ๋น์ ์ฝ์ ํ ์ ์๊ฒ ์ค์ ํ๋ค.
@Qualifier("mainBean")์ ํํ๋ก @Autowired ์ ๊ฐ์ด ์ฌ์ฉํ๋ฉฐ
ํด๋น <bean>ํ๊ทธ์ <quaulifier value="mainBean"/> ํ๊ทธ๋ฅผ ์ ์ธํด ์ฃผ์ด์ผ ํ๋ค.
๋ฉ์๋์์ ๋ ๊ฐ ์ด์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋
๊ทธ ํ๋ผ๋ฏธํฐ ์์ ์ ์ธํด์ผ ํ๋ค.
- ์ค์ ์์น : @Autowired ์ด๋ ธํ ์ด์ ๊ณผ ํจ๊ป ์ฌ์ฉ.
- ์ถ๊ฐ ์ค์ : ๋์ผ ํ์ ์ ๋น ๊ฐ์ฒด ์ค์ ์์
ใ<qualifier value="[alias๋ช ]"/>ใ๋ฅผ ์ถ๊ฐํด ์ค๋ค.
- ์ต์ : name -alias๋ช
โ @Resource
- ๊ฐ์
: Java 6 ๋ฒ์ ๋ฐ JEE 5 ๋ฒ์ ์ ์ถ๊ฐ๋ ๊ฒ์ผ๋ก
์ดํ๋ฆฌ์ผ์ด์ ์์ ํ์๋ก ํ๋ ์์์ ์๋ ์ฐ๊ฒฐํ ๋ ์ฌ์ฉํ๋ค.
์คํ๋ง 2.5 ๋ถํฐ ์ง์ํ๋ ์ด๋ ธํ ์ด์ ์ผ๋ก
์คํ๋ง์์๋ ์์กดํ๋ ๋น ๊ฐ์ฒด๋ฅผ ์ ๋ฌ ํ ๋ ์ฌ์ฉํ๋ค.
@Autowired์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ํํ๋ฉฐ
@Autowired ์์ ์ฐจ์ด์ ์ @Autowired๋ ํ์ ์ผ๋ก(byType)
@Resource ๋ ์ด๋ฆ์ผ๋ก (byName) ์ฐ๊ฒฐ์ ์ํํ๋ค๋ ๊ฒ์ด๋ค.
- ์ค์ ์์น : ํ๋กํผํฐ, setter ๋ฉ์๋
- ์ถ๊ฐ ์ค์
: ใ<bean class="org.springframework.beans.factory.annotation
.CommonAnnotationBeanPostProcessor"/>ใ ํด๋์ค๋ฅผ
๋น์ผ๋ก ๋ฑ๋ก์์ผ์ค์ผ ํ๋ค.
ํด๋น ์ค์ ๋์ ์ ใ<context:annotation-config/>ใ ํ๊ทธ๋ฅผ ์ฌ์ฉํด๋ ๋๋ค.
- ์ต์ : name
name ์์ฑ์ ์๋์ผ๋ก ์ฐ๊ฒฐ๋ ๋น ๊ฐ์ฒด์ ์ด๋ฆ์ ์ ๋ ฅํ๋ค.
@Resource(name="testDAO")
CommonAnnotationBeanPostProcessor ํด๋์ค๋ฅผ
์ค์ ํ์ผ์ ๋น ๊ฐ์ฒด๋ก ๋ฑ๋กํ์ฌ ์ด๋ ธํ ์ด์ ์ ์ ์ฉ์ํค๊ฒ ๋๋ค.
โ @PostConstruct
- ํจํค์ง : javax.annotation
- ๋ฒ์ : jdk 1.6, spring 2.5
- ๊ฐ์
: ์์กดํ๋ ๊ฐ์ฒด๋ฅผ ์ค์ ํ ์ดํ์ ์ด๊ธฐํ ์์ ์ ์ํํ๊ธฐ ์ํด ์ฌ์ฉ,
- ์ค์ ์์น : ์ด๊ธฐํ ์์ ์ํ ๋ฉ์๋
- ์ถ๊ฐ ์ค์
: ใ<bean class="org.springframework.beans.factory.annotation
.CommomnAnnotationPostProcessor"/>ใ ํด๋์ค๋ฅผ
๋น์ผ๋ก ๋ฑ๋ก์์ผ์ค์ผ ํ๋ค.
ํด๋น ์ค์ ๋์ ์ ใ<context:annotation-config/>ใ ํ๊ทธ๋ฅผ ์ฌ์ฉํด๋ ๋๋ค.
โ @PreDestory
- ํจํค์ง : javax.annotation
- ๋ฒ์ : jdk 1.6, spring 2.5
- ๊ฐ์
: ์ปจํ ์ด๋์์ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ ์ ํด์ผํ ์์ ์ ์ํํ๊ธฐ ์ํด ์ฌ์ฉ
- ์ค์ ์์น : ํด๋น ์์ ์ํ ๋ฉ์๋
- ์ถ๊ฐ ์ค์
: ใ<bean class="org.springframework.beans.factory.annotation
.CommomnAnnotationPostProcessor"/>ใ ํด๋์ค๋ฅผ
๋น์ผ๋ก ๋ฑ๋ก์์ผ์ค์ผ ํ๋ค.
ํด๋น ์ค์ ๋์ ์ ใ<context:annotation-config/>ใ ํ๊ทธ๋ฅผ ์ฌ์ฉํด๋ ๋๋ค.
------------------------------------------------------------------------------------------------
โ โ โ Spirng AOP ๊ด๋ จ Annotation โ โ โ
โป spring AOP Annotation ์ ํ์ฉํ๊ธฐ ์ํ ๊ด๋ จ ์ฉ์ด
- advice : ๊ณตํต ๊ธฐ๋ฅ์ ๊ตฌํํ ํด๋์ค
- target : advice ๊ฐ ์ ์ฉ๋ ๊ฐ์ฒด
- joinpoint : advice ๊ฐ ์ ์ฉ๋ ์ง์ (์ฆ, target ์ ๋ฉ์๋)
- pointcut : ์ค์ ๋ก advice ๊ฐ ์ ์ฉ๋ joinpoint(pointcut ์ joinpoint์ ๋ถ๋ถ์งํฉ)
- advisor(=aspect) : advice + pointcut
- weaving : advice ๋ฅผ ํต์ฌ ๋ก์ง ์ฝ๋์ ์ ์ฉํ๋ ๊ฒ
โ @Aspect
- ๊ฐ์
: AspectJ 5 ๋ฒ์ ์ ์๋กญ๊ฒ ์ถ๊ฐ๋ ์ด๋ ธํ ์ด์ ์ผ๋ก
@Apspect ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ์ค์ ํ์ผ์ Advice ๋ฐ Pointcut ๋ฑ์ ์ค์ ์
ํ์ง ์๊ณ ๋ ์๋์ผ๋ก Advice ๋ฅผ ์ ์ฉํ ์ ์๋ค.
- ์ค์ ์์น
: ํด๋์ค ์ ์ธ๋ถ ์
- ์ถ๊ฐ ์ค์
: XML ์ค์ ํ์ผ์ ใ<aop:aspectj-autoproxy/>ใ๋ฅผ ์ ์ํ๋ค.
ใ<aop:aspectj-autoproxy/>ใํ๊ทธ๋ @Aspect ์ด๋ ธํ ์ด์ ์ด ์ ์ฉ๋ ํด๋์ค๋ฅผ
๋ก๋ฉํ์ฌ ํด๋์ค์ ๋ช ์๋ Advice ๋ฐ Pointcut ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ
์๋ง์ ๋น ๊ฐ์ฒด์ Adivce๋ฅผ ์ ์ฉํ๊ฒ ๋๋ค.
โป @Aspect ์ด๋ ธํ ์ด์ ์ด ์ ์ฉ๋ ํด๋์ค
Advice ๋ก ์ฌ์ฉ๋ ๋ฉ์๋์๋ Advice ๋ฅผ ์๋ฏธํ๋ ์ด๋ ธํ ์ด์ ์ ์ค์ ํ๋ค.
1) @Before ์ด๋ ธํ ์ด์
Before Advice๋ก ์ฌ์ฉํ ๋ฉ์๋์ ์ ์ฉ
2) @After ์ด๋ ธํ ์ด์
Afer Advice๋ก ์ฌ์ฉํ ๋ฉ์๋์ ์ ์ฉ
3) @AfterReturning ์ด๋ ธํ ์ด์ ๊ณผ @AfterThrowing ์ด๋ ธํ ์ด์
๊ฐ๊ฐ ๋ฆฌํด๊ฐ๊ณผ ์์ธ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ์ ํ๋ผ๋ฏธํฐ์ ์ด๋ฆ์ผ๋ก ์ง์ ํ๋ฉฐ
Advice ๋ฉ์๋์์ ๋ฆฌํด๊ฐ๊ณผ ์์ธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
4) @Around ์ด๋ ธํ ์ด์
ProceedingJoinPoint.proceed() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ
ํ๋ก์ ๋์ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
5) @Around ์ด๋ ธํ ์ด์ ์ ์ ์ธํ ๋๋จธ์ง Advice๋ฅผ ํ์ํ๋ ์ด๋ ธํ ์ด์ ๋ค
๋ฉ์๋๋ ํ๋ก์ ๋์ ๊ฐ์ฒด์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ ๊ฒฝ์ฐ
์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก JoinPoint ๋ฅผ ์ฌ์ฉํ๋ค.
โป AspectJ์ ํํ์
AspectJ ๋ Pointcut์ ๋ช ์ํ ์ ์๋ ๋ค์ํ ๋ช ์์๋ฅผ ์ ๊ณตํ๋๋ฐ,
์คํ๋ง์ ๋ฉ์๋ ํธ์ถ๊ณผ ๊ด๋ จํ ๋ช ์์๋ง์ ์ง์ํ๊ณ ์๋ค.
execution ๋ช ์์๋ Advice ๋ฅผ ์ ์ฉํ ๋ฉ์๋๋ฅผ ๋ช ์ํ ๋ ์ฌ์ฉ๋๋ฉฐ,
๊ธฐ๋ณธํ์์ ๋ค์๊ณผ ๊ฐ๋ค.
execution(์์์ดํจํด ๋ฆฌํดํ์ ํจํด ํจํค์งํจํด.ํด๋์คํจํด.๋ฉ์๋ํจํด(ํ๋ผ๋ฏธํฐํจํด))
- ์์์ดํจํด : ์๋ต ๊ฐ๋ฅํ๋ฉฐ public, protected ๋ฑ์ด ์จ๋ค.
- ๋ฆฌํดํ์ ํจํด : ๋ฆฌํด ํ์ ์ ๋ช ์ํ๋ค.
- ํจํค์งํจํด, ํด๋์คํจํด, ๋ฉ์๋ํจํด : ํด๋์ค ์ด๋ฆ ๋ฐ ๋ฉ์๋ ์ด๋ฆ์ ํจํด์ผ๋ก ๋ช ์
- ํ๋ผ๋ฏธํฐํจํด : ๋งค์นญ๋ ํ๋ผ๋ฏธํฐ์ ๋ํด ๋ช ์ํ๋ค.
๊ฐ ํจํด์ ใ*ใ๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ ๊ฐ์ ํํํ ์ ์์ผ๋ฉฐ,
ใ..ใ์ ์ด์ฉํ์ฌ 0๊ฐ ์ด์์ด๋ผ๋ ์๋ฏธ๋ฅผ ํํํ ์ ์๋ค.
ใwithinใ๋ช ์์๋ ์ผ๋ฐ ๋ฉ์๋๊ฐ ์๋ ํน์ ํ์ ์ ์ํ๋ ๋ฉ์๋๋ฅผ
Pointcut ์ผ๋ก ์ค์ ํ ๋ ์ฌ์ฉ๋๋ค.
๊ฐ๊ฐ์ ํํ์์ ใ&&ใ๋ ใ||ใ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ์ฐ๊ฒฐํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ใ@Aspectใ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
@AfterThrowing(pointcut="execution(public * get*())
&& execution(public void set*(..))")
public void throwingLogging()
{
//...
}
------------------------------------------------------------------------------------------------------------
โ โ โ Spring MVC ๊ด๋ จ Annotation โ โ โ
โ ๊ฐ์
Spring Web MVC Framework ๋ JAVA 5+ ๋ถํฐ Annotation ์ ์ ๊ณตํ๋ฉฐ,
Annotation ์ ์ฌ์ฉ์ผ๋ก ์ค์ ํ์ผ์ ๊ฐ์ํํ๊ณ ,
View ํ์ด์ง์ ๊ฐ์ฒด ๋๋ ๋ฉ์๋์ ๋งคํ์ ๋ช ํํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
โป 4๊ฐ์ ์คํ ๋ ์ค(stereo)ํ์ ์ด๋ ธํ ์ด์
- @Component
: ์คํ ๋ ์ค ํ์ ์ด๋ ธํ ์ด์ ์ ์กฐ์
- @Controller
: Spring NVC ์์ ์ปจํธ๋กค๋ฌ๋ก ์ธ์
- @Service
: ์ญํ ๋ถ์ฌ ์์ด ์ค์บ ๋์์ด ๋๋๋ฐ... ๋น์ฆ๋์ค ํด๋์ค์ ์ฌ์ฉ
- @Repository
: @Repository ์ด๋ ธํ ์ด์ ์ ์ผ๋ฐ์ ์ผ๋ก DAO ์ ์ฌ์ฉ๋๋ฉฐ
DB Exception ์ DataAccessException์ผ๋ก ๋ณํ
โป Spring Annotation ์์ ์ ๋ฆฌํ ๋ด์ฉ์... ์ถ๊ฐ ++
โ @Service
- ๊ฐ์
: @Service ๋ฅผ ์ ์ฉํ ํด๋์ค๋ ๋น์ฆ๋์ค ๋ก์ง์ด ๋ค์ด๊ฐ๋ Service ๋ก ๋ฑ๋ก์ด ๋๋ค.
Controller ์ ์๋ @Autowired ๋ @Servic("xxxService")์ ๋ฑ๋ก๋
ใxxxServiceใ์ ๋ณ์๋ช ์ด ๊ฐ์์ผ ํ๋ฉฐ
Service ์ ์๋ @Autowired ๋ @Repository("xxxDao")์ ๋ฑ๋ก๋
ใxxxDaoใ ์ ๋ณ์๋ช ์ด ๊ฐ์์ผ ํ๋ค.
@Service("helloService")
public class HelloServiceImpl implements HelloService
{
@Autowired
private HelloDAO helloDao;
public void hello()
{
System.out.println("HelloServiceImpl :" + hello());
helloDao.selectHello(); // โโโ
}
}
// ใhelloDao.selectHello();ใ์ ๊ฐ์ด @Autowired, ๋ฅผ ์ด์ฉํ
// ๊ฐ์ฒด๋ฅผ ํ์ฉํ์ฌ DAO ๊ฐ์ฒด๋ฅผ ํธ์ถํ๋ค.
โ @Repository
- ํจํค์ง : org.springframework.stereotype
- ๋ฒ์ : spring 2.0
- ๊ฐ์
: @Repository ์ด๋ ธํ ์ด์ ์ ์ผ๋ฐ์ ์ผ๋ก DAO ์ ์ฌ์ฉ๋๋ฉฐ
DB Exception ์ DataAccessException ์ผ๋ก ๋ณํํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค.
โ @Controller
- ํจํค์ง : org.springframework.stereotype
- ๋ฒ์ : spring 2.5
- ๊ฐ์
: Spring MVC ์ Controller ํด๋์ค ์ ์ธ์ ๋จ์ํ์์ผ์ค๋ค.
์คํ๋ง ์ปจํธ๋กค๋ฌ ์๋ธ๋ฆฟ ๋ฑ์ ์์ํ ํ์๊ฐ ์์ผ๋ฉฐ,
@Controller ๋ก ๋ฑ๋ก๋ ํด๋์ค ํ์ผ์ ๋ํ bean ์ ์๋์ผ๋ก ์์ฑํด์ค๋ค.
@Controller ๋ก ์ฌ์ฉํ๊ณ ์ ํ๋ ํด๋์ค์ @Controller ๋ฅผ ์ง์ ํด์ฃผ๋ฉด
Component-scan ์ผ๋ก ์๋ ๋ฑ๋ก๋๋ค.
- ์ถ๊ฐ ์ค์ (java)
: package com.test;
import org.springframework.sterotype.Controller;
@Controller
public class SpringC
{
//..
}
โ @RequestMapping
- ๊ฐ์
: @RequestMapping ์ด๋ ธํ ์ด์ ์ URL ์ class ๋๋ method ์
mapping ์์ผ์ฃผ๋ ์ญํ ์ ์ํํ๋ค.
Annotation ์ ์ฌ์ฉํ์ง ์์ ๋ ์ง์ ํ๋ Controller ๋ฑ๋ก์ ์ํ
URL bean ์ค์ ์ ์๋ตํ ์ ์๋ค.
ํด๋์ค์ ํ๋์ url mapping ์ ํ ๊ฒฝ์ฐ
class ์์ ใ@RequestMapping("/url")ใ์ ์ง์ ํ๋ฉฐ,
GET ๋๋ POST ๋ฐฉ์ ๋ฑ์ ์ต์ ์ ๋ถ์ฌํ ์ ์๋ค.
ํด๋น ๋ฉ์๋๊ฐ ์คํ๋ ํ return ํ์ด์ง๊ฐ ๋ณ๋๋ก ์ ์๋์ด ์์ง ์์ผ๋ฉด
@RequestMapping("/url")์์ ์ค์ ๋ url ๋ก ๋ค์ ๋์๊ฐ๋ค.
@Controller
@RequestMapping("/com/test/*")
public class HelloController
{
@RequestMapping(method=RequestMethod.GET, value="go")
public returntype getMethodBName()
{
//...
}
@RequestMapping(method=RequestMethod.GET, value="go2")
public returntype getMethodBName2()
{
//...
}
}
โ @RequestParam
- ๊ฐ์
: @RequestParam ์ด๋ ธํ ์ด์ ์ key=value ํํ๋ก
ํ๋ฉด์์ ๋์ด์ค๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋งคํ๋ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ์ง์ ํด์ค๋ค.
์ฃผ๋ก get ๋ฐฉ์์ผ๋ก ๋ค์ด์ค๋ request์์ ์ฌ์ฉํ๋ค.
@Controller
public class BlogController
{
//...
@RequestMapping("/editBlog")
public ModelMap eidtBlogHandler(@RequestParam("blogId") int blogId)
{
blog = blogService.findBlog(blogId);
return new ModelMap(blog);
}
//...
}
// ใ.../editblog.action?blogId=3ใ ๊ณผ ๊ฐ์ ์์ฒญ์ผ๋ก ์ ๊ทผํ ๋
// editBlogHandler() ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ์ธ blogId ์๋ 3 ์ด ์ธํ ๋๋ค.
// ํ์์๊ฑด์ด ์๋ ๊ฒฝ์ฐ, @RequestParam(value="id", required="false")์ ๊ฐ์ด
// ์ต์ ์ ๋ถ์ฌํด์ ์ฌ์ฉํ ์ ์๋ค.
โ @ModelAttribute
- ๊ฐ์
: @ModelAttribute ์ด๋ ธํ ์ด์ ์ ํ๋ฉด์ form ์์ฑ์ผ๋ก ๋์ด์จ model์
๋งคํ๋ method์ ํ๋ผ๋ฏธํฐ๋ก ์ง์ ํด์ฃผ๋ ์ญํ ์ ์ํํ๋ค.
์ฃผ๋ก post ํ์ ์ผ๋ก ๋์ด์ค๋ form ์์ฑ์ model ๊ฐ์ ๋ฐ์์ฌ ๋ ์ฌ์ฉํ๋ค.
(ํ์ง๋ง ์ฃผ๋ก get / post ๋ชจ๋๋ก ํต์ฉ๋๋ค.)
@Controller
public class BlogController
{
// ...
@RequestMapping("/updateBlog")
public String updateBlogHandler(@ModelAttribute("blog") Blog blog)
{
blogService.updateBlog(blog);
return "redirect:fingBlog.action";
}
// ...
}
โ @SessionAttribute
- ๊ฐ์
: @SessionAttribute ์ด๋ ธํ ์ด์ ์ ์ธ์ ์์์ model์ ์ ๋ณด๋ฅผ
์ ์งํ๊ณ ์ ํ ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์๋ค.
@Controller
@SessionAttributes("blog")
public class BlogController
{
// ...
@RequestMapping("/createBlog")
public ModelMap creatBlogHandler
{
blog = new Blog();
blog.setRegDate(new Date());
// ...
return new ModelMap(blog);
}
// ...
}
โ @InitBinder
- ๊ฐ์
: WebDateBinder ๋ฅผ ์ด๊ธฐํ ํ๋ method ๋ฅผ ์ง์ ํ ์ ์๋ ์ค์ ์ ์ ๊ณตํ๋ค
์ผ๋ฐ์ ์ผ๋ก WebDateBinder ๋ Annotation Handler ๋ฉ์๋์
command ์ form ๊ฐ์ฒด ์ธ์๋ฅผ ์กฐ์ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
initBinder ๋ฉ์๋๊ฐ ํ์์ ์ผ๋ก ๋ณํ ๊ฐ์ ๊ฐ์ง ํ์๋ ์์ผ๋ฉฐ,
์ผ๋ฐ์ ์ผ๋ก ์ด๋ฐ ๊ฒฝ์ฐ์ voide๋ฅผ ์ ์ธํ๋ค.
ํน๋ณํ ์ธ์๋ WebDataBinder ์ WebRequest ๋๋ Locale ์ ์กฐํฉ์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ
์ด๋ฌํ ์กฐ๊ฑด์ด ๋ง์กฑ๋๋ฉด context-specific eidtors๋ฅผ ๋ฑ๋กํ๋ ๊ฒ์ด ํ์ฉ๋๋ค.
·WebDateBinder
: WebDateBinder ๋ web request parameter๋ฅผ
์๋ฐ ๋น ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉํ๋ ํน์ ํ DataBinder, dlek.
WebDateBinder ๋ ์น ํ๊ฒฝ์ด ํ์ํ์ง๋ง
Servlet API์ ์์กด์ ์ด์ง ์๋ค.
Servlet API์ ์์กด์ ์ธ Servlet RequestDatatBinder์ ๊ฐ์ด
ํน์ ํ DataBinder ๋ฅผ ์ํ ๋ ๋ง์ bass class๋ฅผ ์ ๊ณตํ๋ค.
· RequestMapping
: RequestMapping ์ด๋ ธํ ์ด์ ์ web request ๋ฅผ
ํน์ ํ handelr class ์ handelr method ์ mapping ํ๋ ์ญํ ์ ์ํํ๋ค.
๋์ํ๋ handlerMapping(for type level annotation)๊ณผ
handlerAdatpter(for method level anntation) ๊ฐ dispath ์ ์กด์ฌํ๋ค๋ฉฐ๋
@RequestMapping์ด ์ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.
·WebRequest
: WebRequest๋ ์น ์์ฒญ์ ๋ํ Generic interface ์ด๋ค.
์ฃผ๋ก ์ผ๋ฐ request metadata ์ generic web request interseptors ์
์ ๊ทผ์ ํ์ฉํ์ฌ metadate ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฒ์ด์ง
request ์์ฒด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฒ์ ์๋๋ค.
โป Annotation ๊ธฐ๋ฐ Controller ์์ ServletContext ๊ตฌํ๊ธฐ
// ...
@Controller
public class downloadController
{
@Autowired
private ServletContext sc;
@RequestMapping
public ModelAndView download(@RequestParam("filePath") String filePath) theows Exception
{
String path = sc.getRealPath(filePath);
return new ModelAndView("common.download", "downloadfile", new file(path));
}
}
3. Mybatis Framework.txt
โป ORM(Object Relational Mapping : ๊ฐ์ฒด ๊ด๊ณ ๋งคํ)
ORM ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๋ค์ ๊ฐ์ฒดํํ์ฌ ์ ๊ทผํ ์ ์์ผ๋ฉฐ,
PreparedStatement์ ํ๋ผ๋ฏธํฐ์ ResultSet ์ ๊ฐ๋ค์
์๋ฐ ๋น๊ณผ ๊ฐ์ฒดํ๊ฐ ์ฌ์ด ๋งคํ์ ์์ผ์ฃผ์ด
์๋ฐ ์ฝ๋์ ๊ฐ์์ ๋์์ ์ฃผ๋ ๊ฒ์ผ๋ก,
์คํ ์์ค๋ก๋ mybatis(ibatis), Hibernate ๋ฑ์ด ์๋ค.
โป SQL Mapper
- ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ค์ SQL ๋ฌธ์ฅ์ ๋งคํ. (์๋ฐ ์ฝ๋์์ SQL ๊ด๋ จ ๋ถ๋ถ์ ์ ๊ฑฐ)
- SQL ๋ฌธ์ฅ์ด ์๋์ผ๋ก ์์ฑ๋๋ ๊ฒ์ด ์๋๋ผ ๊ฐ๋ฐ์๊ฐ ๊ธฐ์ ํด์ค๋ค.
- ๋งคํ ์์ฒด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํฐํฐ์ ๊ด๊ณ์ ๋ ๋ฆฝ์ ์ด๋ค.
(mapping ์์ฒด๊ฐ SQL ๋ฌธ์ ๊ตญํ)
- ์ค์ ์ ์ผ๋ก ๋ชจ๋ ์๋ฒ ๋๋ SQL ์์คํ ์ ๋ชจ๋ SQL Mapper๋ก ๊ฐ์ฃผ ๊ฐ๋ฅ
- ๋ง์ด๋ฐํฐ์ค(mybatis) SQL Map ์ ๊ฒฝ์ฐ
XML ์ ์๋ฒ ๋๋๋ SQL. (์๋ฐ ์ฝ๋์ SQL์ XML ํ์ผ๋ก ๋ถ๋ฆฌ)
โ ๋ง์ด๋ฐํฐ์ค(mybatis) ๊ฐ์
mybatis ๋ persistence(์์์ ์ธ, ์๋ฉธ๋์ง ์๊ณ ์ค๋๋๋ก ์ง์๋๋) ๊ณ์ธต์
ํ๋ ์์ํฌ๋ก ๋ค๋ฅธ ๊ฐ์ฒด ๊ด๊ณ ๋งคํ ํ๋ ์์ํฌ๋ค๊ณผ๋ ๋ฌ๋ฆฌ
์ ํํ๋ ํ ์ด๋ธ ๊ตฌ์กฐ์ ์์กดํ์ง ์๊ณ
SQL ๊ตฌ๋ฌธ์ ์คํ ๊ฒฐ๊ณผ์ ๊ฐ์ฒด๋ฅผ ๋งคํํ๋ ๋ฐฉ์์ผ๋ก
ํ ์ด๋ธ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง๊ณ ์ ๊ทํ๊ฐ ๋์ด ์์ง ์๋๋ผ๋ ํ ์ด๋ธ์ ๋ณ๊ฒฝํ ํ์ ์์ด
๊ธฐ์กด ๊ฐ๋ฐ ๋ฐฉ๋ฒ์์ ์ฌ์ฉํ SQL ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์๊ฐ ์์ผ๋ฉฐ,
SQL ์ ์ ์ฉํ ๊ฐ๊ฐ์ ํ๋ ํญ๋ชฉ๋ค๋ ๋ชจ๋ ๊ทธ๋๋ก ์ ์ง๋๋ค.
mybatis ํ๋ก์ ํธ๋ mybatis SQL Map ๊ณผ mybatis DAO ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
์ด ์ค, mybatis SQL Map ์ SQL ๋ฌธ ๊ด๋ฆฌ์ ์ด์ ์ ๋ง์ถ๊ณ ์๋ค.
mybatis DAO ์ปดํฌ๋ํธ๋ hibernate ์ mybatis SQL Map ์ ํจ๊ป ์ฌ์ฉํ ๊ฒฝ์ฐ
ํธ๋์ญ์ ํตํฉ๊ณผ ๊ฐ์ ์ ์ฅ ๋งค์ปค๋์ฆ์ ์ด์ ์ ๋ง์ถ๊ณ ์๋ค.
mybatis Data Mapper ํ๋ ์์ํฌ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ๋
ํ์ํ ์๋ฐ ์ฝ๋๋ฅผ ํ์ ํ๊ฒ ์ค์ผ ์ ์๋๋ฐ
๊ฐ๋จํ XML ์์ ์๋ฅผ ์ฌ์ฉํด์ ํธ๋ฆฌํ๊ฒ ์๋ฐ ๋น์ฆ๋ฅผ SQL Statement ์ ๋งคํ์ํจ๋ค.
๊ฐ๋จํจ(Simpleicity)์ด๋ ๋ค๋ฅธ ํ๋ ์์ํฌ์ ๊ฐ์ฒด ๊ด๊ณ ๋งคํ ๋๊ตฌ์ ๋น๊ตํ์ฌ
mybatis์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ด๋ค.
mybatis Data Mapper ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์๋ฐ ๋น์ฆ์ XML ๊ทธ๋ฆฌ๊ณ SQL ์ ๋ํ
์ ์์ง์์ด ํ์ํ๋ฉฐ Data Mapper ๋ฅผ ์ฌ์ฉํ๋ฉด
์ค์ SQL ๋ฌธ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
๊ฐ์ฒด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๊ณ ๋งคํ์ ์ค์ ํ๋ฉด
SQL ๋ฌธ์ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ hibernate ์ ๋นํด SQL ๋ฌธ ์๋ ์์ฑ ๊ธฐ๋ฅ์ด ์๋
mybtis ์ SQL Mapper ๋ ์ง์ ํ ์๋ฏธ์ ORM ์ด ์๋๋ผ๋ ๋ถ์๊ธฐ๋ ์์์ง๋ง
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํต์ ํ ์ ์๋ ์ ์ผํ ๋งค๊ฐ์ฒด์ธ SQL ๋ฌธ๊ณผ ๊ฐ์ฒด๋ฅผ
๋งคํ์์ผ์ค๋ค๋ ์๋ฏธ์์ SQL Mapper ๋ํ ORM ์ผ๋ก ๋ค๋ฃจ๊ณ ์๋ค.
โ ๋ง์ด๋ฐํฐ์ค(mybatis)์ ํน์ง
- ํ๋ ์์ํฌ(ํ๊ฒฝ, ํด, ์ฝ์)
·mybatis ๋ JDBC ํ๋ ์์ํฌ๋ค.
·๊ฐ๋ฐ์๋ SQL ์ ์์ฑํ๊ธฐ๋ก ์ฝ์ํ๊ณ
๋ง์ด๋ฐํฐ์ค๋ JDBC ๋ฅผ ์ฌ์ฉํด์ ์ด๋ฅผ ์คํ์ํค๊ธฐ๋ก ์ฝ์ํ๋ค.
- ๊ฐ๋จํ
·๊ฐ๋จํ ํผ์์คํด์ค ํ๋ ์์ํฌ
·JDBC๋ฅผ ์ฌ์ฉํ ๋์ try / catch / finally ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ํ์๊ฐ ์๋ค.
- ์์ฐ์ฑ
·JDBC์ ๋น๊ตํ์ ๋ 62%์ ๋ ์ค์ด๋๋ ์ฝ๋์ ๊ฐ๋จํ ์ค์
(๊ทผ๊ฑฐ : ์ดํ๋ฆฌ์๋์๋ฐ ์ฌ์ฉ์ ๊ทธ๋ฃน์ ์ฐ๊ตฌ)
- ์ฑ๋ฅ
·๊ตฌ์กฐ์ ๊ฐ์ (๋ฐ์ดํฐ ์ ๊ทผ ์๋๋ฅผ ๋์ฌ์ฃผ๋ join๋งคํ)
·์ฌ๋ฌ๊ฐ์ง ๋ฐฉ์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์ ๋ต.(๊ฐ์ ธ์ค๊ธฐ ๋ฏธ๋ฃจ๊ธฐ, SQL ์ค์ด๊ธฐ ๊ธฐ๋ฒ ๋ฑ)
- ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ
·์ค๊ณ๋ฅผ ํฅ์(์ฐจํ ์ ์ง๋ณด์์ฑ์ ์ํด)
·๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ์ฌ ๊ณ์ธตํ๋ฅผ ์ง์(Connection, PrepareStatement, ResultSet ๋ฑ)
- SQL ๋ฌธ์ด ์ ํ๋ฆฌ์ผ์ด์ ์์ค ์ฝ๋๋ก๋ถํฐ ์์ ํ ๋ถ๋ฆฌ.
- ์์ ์ ๋ถ๋ฐฐ : ํ์ ์ธ๋ถํํ์ฌ ์ ๋ฌด ๊ตฌ๋ถ์ ๋ช ํํ ํ๋ ๊ฒ์ ๋์
- ์ด์์ฑ : ์ด๋ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก๋ ๊ตฌํ๊ฐ๋ฅ (JAVA, C#, RUBY ๋ฑ)
- ์คํ์์ค : ๋ฌด๋ฃ + ์ปค๋ฎค๋ํฐ
- SQL Mapper
·๊ธฐ๋ณธ์ ์ผ๋ก ORM์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด๋ฅผ ์๋ฐ ๊ฐ์ฒด๋ก ๋งคํํจ์ผ๋ก์จ
๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ฐํ์ผ๋ก SQL ์ ์๋์ผ๋ก ์์ฑํด ์ฃผ์ง๋ง,
๋ง์ด๋ฐํฐ์ค๋ SQL์ ์์ฑ ๋ฐ ๋ช ์ํด ์ฃผ์ด์ผ ํ๋ค.
- ์คํ๋ง๊ณผ ๊ฐ์ ์ธ๋ถ ํธ๋์ญ์ ๊ด๋ฆฌ์๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
- ์คํ๋ง ์ฐ๋ ๋ชจ๋์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์คํ๋ง๊ณผ ์ฐ๋ํ ์๋ ์๋ค.
โ ๋ง์ด๋ฐํฐ์ค(mybatis) ์๋ ์๋ฆฌ
Data Mapper ๋ ์๋ฐ ๋น์ฆ, Map ๊ตฌํ, ์์ ๋ํผ ํ์ (String, Integer, ...)
๊ทธ๋ฆฌ๊ณ SQL ๋ฌธ์ ์ํด XML ๋ฌธ์๋ฅผ ๋งคํํ๊ธฐ ์ํ XML ์์ ์๋ฅผ ์ฌ์ฉํ๋
๊ฐ๋จํ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํ๋ค.
1) ํ๋ผ๋ฏธํฐ(์๋ฐ ๋น์ฆ, Map ๋๋ ์์๋ํผ)๋ก์จ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ค.
ํ๋ผ๋ฏธํฐ ๊ฐ์ฒด๋ update ๋ฌธ ๋ด๋ถ์ ์ ๋ ฅ ๊ฐ์ ์ธํ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๊ฑฐ๋
์ฟผ๋ฆฌ๋ฌธ์ where ์ ์ ์ธํ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
2) ๋งคํ๋ statement๋ฅผ ์คํํ๋ค.
Data Mapper ํ๋ ์์ํฌ๋ PrepareStatement ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ
์ ๊ณต๋ ํ๋ผ๋ฏธํฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ธํ ํ๋ค.
๊ทธ๋ฆฌ๊ณ statement ๋ฅผ ์คํํ๊ณ ResultSet ์ผ๋ก๋ถํฐ ๊ฒฐ๊ณผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
3) update๋ฌธ์ ๊ฒฝ์ฐ์ ์ํฅ์ ๋ฏธ์น rows์ ์ซ์๋ฅผ ๋ฐํํ๋ค.
์กฐํ๋ฌธ์ผ ๊ฒฝ์ฐ์ ํ ๊ฐ (single)์ ๊ฐ์ฒด ๋๋ ์ปฌ๋ ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
ํ๋ผ๋ฏธํฐ์ฒ๋ผ ๊ฒฐ๊ณผ ๊ฐ์ฒด๋ ์๋ฐ ๋น์ฆ, Map, ์์ ๋ํผ, XML ์ด ๋ ์ ์๋ค.
โ ๋ง์ด๋ฐํฐ์ค(mybatis) ์๋ ํ๋ฆ
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํด DAO ๋ mybatis ์ ์ ๊ณตํ๋ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
- mybatis ๋ SQL ๋ฌธ์ด ์ ์ฅ๋ ๋งคํผ ํ์ผ์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํ์ํ SQL๋ฌธ์ ์ฐพ๋๋ค.
- mybatis ๋ ๋งคํผ ํ์ผ์์ ์ฐพ์ SQL๋ฌธ์ ์๋ฒ๋ก ๋ณด๋ด๊ณ ์ JDBC ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ๋ค.
- JDBC ๋๋ผ์ด๋ฒ๋ SQL ๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ก ์ ์กํ๋ค.
- mybatis๋ select๋ฌธ์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ ๊ฐ์ฒด์ ๋ด์์ ๋ฐํํ๋ค.
(insert, update, delete ๋ฌธ์ธ ๊ฒฝ์ฐ ์ ๋ ฅ, ๋ณ๊ฒฝ, ์ญ์ ๋ ๋ ์ฝ๋์ ๊ฐฏ์๋ฅผ ๋ฐํํ๋ค.)
โ ๋ง์ด๋ฐํฐ์ค(mybatis)๊ด๋ จ ์ฌ์ดํธ
- ibatis์ด์ ํํ์ด์ง
http://ibatis.apache.org/
- mybatis ์ ํํ์ด์ง
http://www.mybatis.org/
- ๋ค์ด๋ก๋
·mybatis
http://blog.mybatis.org/p/products/html
·spring ์ฐ๋
http://github.com/mybatis/spring/release
- ๋์๋ง
http://mybatis.github.io/mybatis-3/ko/getting-starged.html
- API
http://ibatis.apache.org/docs/java/dev
โป ์ฐธ๊ณ
- 2.3.0.677 ๋ฒ์ ๋ถํฐ๋ jarํ์ผ๋ค(/lib ๋๋ ํฐ๋ฆฌ ๋ด)์ด
ibatis-2.3.0.677.jar ํ๋๋ก ํตํฉ๋์๋ค.
- ibatis-common-2.jar
: SQL Maps์ DAO ํ๋ ์์ํฌ ๋ชจ๋๊ฐ ์ฌ์ฉํ๋ ๊ณตํต ์ปดํฌ๋ํธ ํฌํจ
- ibatis-sqlmap-2.jar
: SQL Maps ํ๋ ์์ํฌ์ ์ปดํฌ๋ํธ๋ค์ ํฌํจํ๊ณ ์๋ ํ์ผ
- ibatis-dao-2.jar
: DAO ํ๋ ์์ํฌ ์ปดํฌ๋ํธ๋ค์ ํฌํจํ๊ณ ์๋ ํ์ผ
โ ์ฃผ์ ํด๋์ค ๋ฐ ์ธํฐํ์ด์ค
- SqlSessionFactoryBuilder
·SqlSessionFactory ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํ ๋ฒ๋ง ์ฌ์ฉํ๋ฉด ๋๊ธฐ ๋๋ฌธ์
๊ณ์ ์ด ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ ์งํ ํ์๋ ์๋ค.
- SqlSessionFactory
·SqlSessionFactory ๊ฐ์ฒด๊ฐ mybatis ์ ์ ๋ฐ์ ์ธ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ ์ดํ๋ค.
·SqlSessionFactory ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด SqlSessionFactoryBuilder ๊ฐ์ฒด๋ฅผ
๋จผ์ ์์ฑํ๋ค.
·SqlSessionFactory ๊ฐ์ฒด๋ SqlSessionFactoryBuilder ์ build ๋ฉ์๋๋ก ์์ฑํ๋ค.
·SqlSessionFactory ๊ฐ์ฒด๊ฐ mybatis ์ ์ ๋ฐ์ ์ธ ์ ๋ณด๋ฅผ ๊ฐ๋ ํน์ฑ์ผ๋ก ์ธํด
์ด ๊ฐ์ฒด๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ํ ๊ฐ๋ง ์์ฑ๋์ด์ผ ํ๋ค.
- SqlSessionFactory ์์ SqlSession ๊ฐ์ฒด ์์ฑ
·SqlSessionFactory ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด SqlSession ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
·SqlSession ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด SQL ๋ช ๋ น์ด๋ฅผ ์คํํ๊ธฐ ์ํด
ํ์ํ ๋ชจ๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๊ทธ๋์ SqlSssion ์ธ์คํด์ค๋ฅผ ํตํด ์ง์ SQL๊ตฌ๋ฌธ์ ์คํํ ์ ์๋ค.
ex)
Reader reader = Resource.getResourceAsReader("mybatis/mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().builder(reader);
SqlSession session = factory.openSession();
- SqlSession
๊ฐ๊ฐ์ ์ค๋ ๋๋ ์์ฒด์ ์ผ๋ก SqlSession ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
SqlSession ์ธ์คํด์ค๋ ๊ฐ ์์ฒญ์ ๋ฐ์ ์ฟผ๋ฆฌ๋ฌธ์ ์คํํ๋ ๊ฐ์ฒด์ด๋ค.
๋ฐ๋ผ์ SqlSession ์ธ์คํด์ค๋ ๊ณต์ ๋์ง ์๊ณ ,
thread safetyํ๊ฒ ๋ง๋ค์ด์ง์ง๋ ์์๋ค.
(์ฌ๋ฌ ์ค๋ ๋๊ฐ ์ ๊ทผํด์ ์ฌ์ฉํด๋ ์ ๋ณด๊ฐ ์ด๊ธ๋์ง ์๋๋ก ๋ง๋ค์ด์ง๋ ๊ฒ)
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด ์ธ์คํด์ค๋ฅด ๊ณต์ ํด์ ์ฌ์ฉํ์ง ์๋๋ค.
์๋ฅผ ๋ค์ด, ์ด๋ค ํด๋์ค ์์ static๋ณ์๋, ์๋ธ๋ฆฟ์ HttpSession ๊ณผ ๊ฐ์
๊ด๋ฆฌ ๋ฒ์ ์์ ์ ์ฅํด์๋ ์๋๋ ๊ฒ์ด๋ค.
๋ง์ฝ, ์ฌ์ฉํด์ผ ํ ๊ฒฝ์ฐ์๋ Http ์์ฒญ์ ๋ฐ์ ๋๋ง๋ค ๋ง๋ค๊ณ
์๋ต์ ๋ฆฌํดํ ๋ ๋ง๋ค SqlSession ์ ๋ซ์์ผ(๋ฆฌ์์ค๋ฅผ ๋ฐ๋ฉํด์ผ)ํ๋ค.
SqlSession ์ด ๋ซํ์ง ์์ผ๋ฉด ํด๋น ์ธ์คํด์ค ๋ฆฌ์์ค๊ฐ ๊ณ์ ์ ์ง๋๋ฏ๋ก
๊ผญ ๋ซ์์ผ ํ๋ค.
ex)
...
SqlSession session = SqlSessionFactory.openSession();
try
{
...
}
finally
{
session.close(); // โโโโ
}
- Mapper ์ธ์คํด์ค
Mapper ๋ SQL ๊ตฌ๋ฌธ๊ณผ ๊ฐ์ฒด๋ฅผ ์ค์ ํด๋์๋๋ก ๋ฐ์ธ๋ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค์ด๋ค.
Mapper ์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ SqlSession ์์ ์์ฑํ๋ค.
๊ทธ๋์ Mapper ์ธ์คํด์ค์ ๊ฐ์ฅ ์ข์ ์ค์ฝํ๋ SqlSession ๊ณผ ๋์ผํ๋ค.
์ฌ์ฉํ ๋ฉ์๋๊ฐ ํธ์ถ์ด ๋๋ฉด ์์ฑ๋๊ณ ์ข ๋ฃ๋๊ธฐ ๋๋ฌธ์
๋ช ์์ ์ผ๋ก ๋ซ์ ํ์๋ ์๋ค.
ex)
...
SqlSession session = SqlSessionFactory.openSession();
try
{
BolgMapper mapper = session.getMapper(BlogMapper.class);
}
finally
{
session.close();
}
- Mapper XML ํ์ผ
mybatis์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋งคํ๋ ๊ตฌ๋ฌธ์ด๋ฉฐ,
SQL Map XML ํ์ผ์ ์๋์ ์ผ๋ก ๊ฐ๋จํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ผํ ๊ธฐ๋ฅ์ JDBC ์ฝ๋์ ๋น๊ตํ๋ฉด ๋ค๋์ ์ฝ๋๊ฐ ๊ฐ์ํ๊ธฐ๋ ํ๋ค.
์ฆ, mybatis ๋ SQL ์ ์์ฑํ๋๋ฐ ์ง์คํ๋๊ณ ๋ง๋ค์ด์ก๋ค.
โป SQL Map XML ํ์ผ์ ์ฒซ ๋ฒ์งธ (first class)์์๋ง์ ๊ฐ์ง๋ค.
·cache : ํด๋น ๋ช ๋ช ๊ณต๊ฐ์ ์ํ ์บ์ ์ค์
·cache-ref : ๋ค๋ฅธ ๋ช ๋ช ๊ณต๊ฐ์ ์บ์ ์ค์ ์ ๋ํ ์ฐธ์กฐ
·resultMap : ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด์ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ์์
·parameterMap : ๊ถ์ฅํ์ง ์์
๊ณผ๊ฑฐ์๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋งคํํ๊ธฐ ์ํด ์ฌ์ฉํ์ผ๋
ํ์ฌ๋ ์ฌ์ฉํ์ง ์์
·sql : ๋ค๋ฅธ ๊ตฌ๋ฌธ์์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํ SQL ์กฐ๊ฐ
·insert : ๋งคํ๋ insert ๊ตฌ๋ฌธ
·update : ๋งคํ๋ update ๊ตฌ๋ฌธ
·delete : ๋งคํ๋ delete ๊ตฌ๋ฌธ
·select : ๋งคํ๋ select ๊ตฌ๋ฌธ
4. Mybatis Framework ํ๊ฒฝ์ค์ .txt
โ โ โ Mybatis Framework ํ๊ฒฝ์ค์ โ โ โ
1. ใhttp://blog.mybatis.org/ใ ์์ mybatis ๋ค์ด๋ก๋
- Products ๋ฉ๋ด ์ ํ(ํด๋ฆญ)
→ ใhttps://blog.mybatis.org/p/products.htmlใ ๋ก ์ด๋
- ์ด๋ํ ํ์ด์ง์ Products ํญ๋ชฉ์ ๋ฆฌ์คํธ๋ค ์ค
ใMyBatis 3 SQL Mapping Framework for Javaใ์์
download ๋ฉ๋ด ์ ํ(ํด๋ฆญ)
→ ใhttps://github.com/mybatis/mybatis-3/releasesใ๋ก ์ด๋
- ์ด๋ํ ํ์ด์ง์์ ใMybatis 3.5.10ใ ํญ๋ชฉ์
ใโถ Assetsใ ์ ํ(ํด๋ฆญ) → ใโผ Assetsใ ํํ๋ก ๋
ธ๋ ํ์ฅ
- ํ์ฅ๋ ๋
ธ๋์ ๋ชฉ๋ก๋ค ์ค ใmybatis-3.5.10.zip 3.69 MB May 24, 2022ใ ์ ํ (ํด๋ฆญ)
→ ํ์ผ ๋ค์ด๋ก๋ ์งํ
- ๋ค์ ์น๋ธ๋ผ์ฐ์ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ ์ ํ(ํด๋ฆญ)
→ ใhttps://blog.mybatis.org/p/products.htmlใ๋ก ์ด๋
- ์ด๋ํ ํ์ด์ง์ Integration ํญ๋ชฉ์ ๋ฆฌ์คํธ๋ค ์ค
ใSpring Integration with Springใ์์
download ๋ฉ๋ด ์ ํ(ํด๋ฆญ)
→ ใhttps://github.com/mybatis/spring/releasesใ๋ก ์ด๋
- ์ด๋ํ ํ์ด์ง์์ ใmybatis-spring-1.3.2ใ ํญ๋ชฉ์
ใโถ Assetsใ ์ ํ(ํด๋ฆญ) → ใโผ Assetsใ ํํ๋ก ๋
ธ๋ ํ์ฅ
- ํ์ฅ๋ ๋
ธ๋์ ๋ชฉ๋ก๋ค ์ค ใmybatis-spring-1.3.2.zip 52.1 KB Mar 14, 2018ใ ์ ํ(ํด๋ฆญ)
→ ํ์ผ ๋ค์ด๋ก๋ ์งํ
2. ๋ค์ด๋ก๋ ์๋ฃ๋ ํ์ผ์ ์์ถ ํด์ ํ์ฌ ์๋์ ํ์ผ์ ์ค๋นํ๋ค.
- mybatis-3.5.10.jar
- mybatis-spring-1.3.2.jar
3. SpringMVC + mybatis ํ๋ก์ ํธ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ๋ก
- org.springframework.aop-3.0.2.RELEASE.jar
- org.springframework.asm-3.0.2.RELEASE.jar
- org.springframework.beans-3.0.2.RELEASE.jar
- org.springframework.context-3.0.2.RELEASE.jar
- org.springframework.core-3.0.2.RELEASE.jar
- org.springframework.expression-3.0.2.RELEASE.jar
- org.springframework.jdbc-3.0.2.RELEASE.jar
- org.springframework.transaction-3.0.2.RELEASE.jar
- org.springframework.web-3.0.2.RELEASE.jar
- org.springframework.web.servlet-3.0.2.RELEASE.jar
- cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
- ojdbc6.jar
- jstl.jar
- standard.jar
+
- mybatis-3.5.10.jar
- mybatis-spring-1.3.2.jar
โป ๋งคํผ XML ์ํ
๋ค์ด๋ก๋๋ฅผ ์ํํ pdf ํ์ผ(mybatis-3.5.10.pdf)์ ๋ด์ฉ ์ค
ใ2.1.5 Exploring Mapped SQL Statementsใํญ๋ชฉ์
XML ๊ด๋ จ ๋ด์ฉ์ ํ์ธํ์ฌ ์ํ DTD ๋ฅผ ๊ตฌ์ฑํ ์ ์๋๋ก ํ๋ค.
(→ pdf ํ์ผ์ ํ์ด์ง ๋ฒํธ 4)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
-------------------------------------------------------------------------------------
โ โ โ Spring MVC + Annotation + mybatis ํ๋ก์ ํธ ์ค์ต 01 โ โ โ
โ ํ๋ก์ ํธ
: MybatisWork01
โ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ๋ก ๋ฐ ํ๊ฒฝ๊ตฌ์ฑ (โป ์์์ ์ ๋ฆฌํ ๋ด์ฉ์ฐธ์กฐ)
..
โ ๊ธฐ๋ฅ ๊ตฌํ
: ๋ง์ด๋ฐํฐ์ค ํ๊ฒฝ ๊ตฌ์ฑ ํ ํ๋ก์ ํธ ์ ์ ์คํ ์ฌ๋ถ ํ์ธ
-------------------------------------------------------------------------------------
โ โ โ Spring MVC + Annotation + mybatis ํ๋ก์ ํธ ์ค์ต 02 โ โ โ
โ ํ๋ก์ ํธ
: MybatisWork02
โ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ๋ก ๋ฐ ํ๊ฒฝ๊ตฌ์ฑ (โป ์์์ ์ ๋ฆฌํ ๋ด์ฉ์ฐธ์กฐ)
..
โ ๊ธฐ๋ฅ ๊ตฌํ
: ์ด๋ฆ, ์ ํ๋ฒํธ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฝ์ด๋ด์ด ํ๋ฉด์ ์ถ๋ ฅ
์ด ๊ณผ์ ์์ mybatis ํ์ฉ.
โ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๊ฐ์ฒด ์ค๋น
- ์ฌ์ฉ ๊ณ์ : scott
- ํ
์ด๋ธ : TBL_MEMBERLIST
- ํ
์ด๋ธ ๊ตฌ์กฐ : MID NUMBER --PK
, NAME VARCHAR2(30)
, TELEPHONE VARCHAR2(40)
- ์ํ์ค : MEMBERLISTSEQ
โ ํ์ด์ง ๋ ์ด์์ ๊ตฌ์ฑ
ํ์ ๊ด๋ฆฌ
์ด๋ฆ [ ]
์ ํ [ ]
< ํ์ ์ถ๊ฐ >
์ ์ฒด ์ธ์ ์ : 2๋ช
----------------------
๋ฒํธ ์ด๋ฆ ์ ํ
1 ๋
ธ์ํ 010-11..
2 ์ด์ฃผํ 010-22..
----------------------
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
- MybatisWork02_scott.sql → ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ์์
- MemberDTO.java → ๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด ์๋ฃํ ํด๋์ค(DTO)
- IMemberDAO.java → ์ธํฐํ์ด์ค
- MemberDAO.xml → mybatis ํ๊ฒฝ ์ค์ ํ์ผ ํ์ฉ
- MemberMain.java → mybatis ๊ฐ์ฒด ํ์ฉ(Controller)
- MemberList.jsp → view ํ์ด์ง ํ์ฉ
- dispatcher-servlet.xml → mybatis ๊ฐ์ฒด ๋ฑ๋ก ๋ฐ ํ์ฉ
- web.xml → front Controller ๋ฑ๋ก ๋ฐ ์ธ์ฝ๋ฉ ์ค์ (ํํฐํ์ฉ)
โ ์ฌ์ฉ์ ์ต์ด ์์ฒญ ์ฃผ์
http://localhost:3306/MybatisWork02/memberlist.action
-------------------------------------------------------------------------------------
โ โ โ Spring MVC + Annotation + mybatis ํ๋ก์ ํธ ์ค์ต 03 โ โ โ
โ ํ๋ก์ ํธ
: MybatisWork03
โ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ๋ก ๋ฐ ํ๊ฒฝ๊ตฌ์ฑ (โป ์์์ ์ ๋ฆฌํ ๋ด์ฉ์ฐธ์กฐ)
..
โ ๊ธฐ๋ฅ ๊ตฌํ
: ๊ธฐ๋ณธ์ ์ธ ์ฑ์ ๊ด๋ฆฌ
์ด ๊ณผ์ ์์ mybatis ํ์ฉ
โ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๊ฐ์ฒด ์ค๋น
- ์ฌ์ฉ ๊ณ์ : scott
- ํ
์ด๋ธ : TBL_STUDENT
- ํ
์ด๋ธ ๊ตฌ์กฐ : SID NUMBER --PK
, NAME VARCHAR2(30)
, TEL VARCHAR2(40)
- ํ
์ด๋ธ : TBL_GRADE
- ํ
์ด๋ธ ๊ตฌ์กฐ : SID NUMBER --PK
, SUB1 NUMBER(3)
, SUB2 NUMBER(3)
, SUB3 NUMBER(3)
- ๋ทฐ : STUDENTVIEW
·๋ทฐ ๊ตฌ์กฐ : SID, NAME, TEL, SUB
---- ์ฐธ์กฐ ๋ ์ฝ๋ ์
- ๋ทฐ : GRADEVIEW
·๋ทฐ ๊ตฌ์กฐ : SID, NAME, SUB1, SUB2, SUB3, TOT, AVG, CH
---- --- ---
์ด์ ํ๊ท ๋ฑ๊ธ(ํฉ๊ฒฉ, ๊ณผ๋ฝ, ๋ถํฉ๊ฒฉ)
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
- MybatisWork03_scott.sql → ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ์์
- StudentDTO.java → ๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด ์๋ฃํ ํด๋์ค(DTO)
ํ์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ ์ก
- GradeDTO.java → ๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด ์๋ฃํ ํด๋์ค(DTO)
์ฑ์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ ์ก
- IStudentDAO.java → ์ธํฐํ์ด์ค
ํ์ ๋ฐ์ดํฐ ์ก์
์ฒ๋ฆฌ ๋ฉ์๋ ์ ์ธ
- IGradeDAO.java → ์ธํฐํ์ด์ค
์ฑ์ ๋ฐ์ดํฐ ์ก์
์ฒ๋ฆฌ ๋ฉ์๋ ์ ์ธ
- StudentDAO.xml → mybatis ํ๊ฒฝ ์ค์ ํ์ผ ํ์ฉ
- GradeDAO.xml → mybatis ํ๊ฒฝ ์ค์ ํ์ผ ํ์ฉ
- StudentController.java → Controller
- GradeController.java → Controller
- StudentList.jsp → View ํ์ด์ง
(ํ์ ๋ช
๋จ ์ถ๋ ฅ ๋ ์ด์์ ๊ตฌ์ฑ)
- StudentInsertForm.jsp → View ํ์ด์ง
(ํ์ ๋ฐ์ดํฐ ์
๋ ฅ ํผ ๊ตฌ์ฑ)
- GradeList.jsp → View ํ์ด์ง
(์ฑ์ ๋ฆฌ์คํธ ์ถ๋ ฅ ๋ ์ด์์ ๊ตฌ์ฑ)
- GradeInsertForm.jsp → View ํ์ด์ง
(์ฑ์ ๋ฐ์ดํฐ ์
๋ ฅ ํผ ๊ตฌ์ฑ)
- dispatcher-servlet.xml → mybatis ๊ฐ์ฒด ๋ฑ๋ก ๋ฐ ํ์ฉ
- web.xml → front Controller ๋ฑ๋ก ๋ฐ ์ธ์ฝ๋ฉ ์ค์ (ํํฐํ์ฉ)
โ ์ฌ์ฉ์ ์ต์ด ์์ฒญ ์ฃผ์
http://localhost:3306/MybatisWork03/studentlist.action
5. ํ์ผ์์คํ ๋ฐ ํ์ผ์ ๋ก๋.txt
โ โ โ ํ์ผ ์์คํ
๋ฐ ํ์ผ ์
๋ก๋.txt โ โ โ
โ java.io.FileInputStream ํด๋์ค
์๋ฐ์์๋ ํ์ผ์ ๋ํ ๋ฐ์ดํธ ๋จ์ ์
์ถ๋ ฅ์ ์ํํ ์ ์๋๋ก ํ๊ธฐ ์ํด
FileInputStream ํด๋์ค์ FileOutputStream ํด๋์ค๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
โป FileInputStream ํด๋์ค
: ์์คํ
์ ํ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ์คํธ๋ฆผ์ผ๋ก ์ฝ์ด๋ค์ด๊ธฐ ์ํด ์ฌ์ฉ
โป FileInputStream ํด๋์ค๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ค์ผ ๋์๋
๋ฐ์ดํฐ์์ค์ธ ํ์ผ๊ณผ ์ง์ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ๋ค.
(์ด ๋, ์ง์ ํ ํ์ผ์ด ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ IOExcepion ๋ฐ์)
โป FileInputStream ํด๋์ค๋ Inputstream ํด๋์ค์ ํ์ ํด๋์ค์ด๋ฏ๋ก
InputStream ํด๋์ค์ ๊ธฐ๋ณธ์ ์ธ ๋ฉ์๋๋ฅผ ์์๋ฐ๊ฑฐ๋ ์ฌ์ ์ํ์ฌ ์ฌ์ฉํ๋ค.
(InputStream ํด๋์ค๋ ๋ฐ์ดํธ ๋จ์ ์
์ถ๋ ฅ ๊ธฐ๋ฅ์ ์ต์์ ํด๋์ค์ด๋ฉฐ ์ถ์ ํด๋์ค์ด๋ค.)
- ์์ฑ์
· FileInputStream(File file)
: ์ฃผ์ด์ง File ๊ฐ์ฒด๊ฐ ๊ฐ๋ฆฌํค๋ ํ์ผ์ ๋ฐ์ดํธ์คํธ๋ฆผ์ผ๋ก ์ฝ๊ธฐ ์ํ
FileInputStream ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
· FileInputStream(FileDescriptor fdObj)
: ์ฃผ์ด์ง FileDescriptor ๊ฐ์ฒด๊ฐ ๊ฐ๋ฆฌํค๋ ํ์ผ์ ๋ฐ์ดํธ์คํธ๋ฆผ์ผ๋ก ์ฝ๊ธฐ ์ํ
FileInputStream ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
· FileInputStream(String name)
: ์ฃผ์ด์ง ์ด๋ฆ์ด ๊ฐ๋ฆฌํค๋ ํ์ผ์ ๋ฐ์ดํธ์คํธ๋ฆผ์ผ๋ก ์ฝ๊ธฐ ์ํ
FileInputStream ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
โ java.io.FileOutputStream ํด๋์ค
FileOutputStream ํด๋์ค๋
๋ฐ์ดํฐ๋ฅผ ํ์ผ์ ๋ฐ์ดํธ์คํธ๋ฆผ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
ํ์ผ๋ช
์ด๋ File ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋๊ฒจ์ค์ผ๋ก์จ
์์คํ
์ ํ์ผ์ ์ง์ ์์ฑํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก(default) ํ์ผ์ด ์ด๋ฏธ ์กด์ฌํ๋ค๋ฉด ๋ฎ์๊ธ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์
๊ธฐ์กด์ ๋ด์ฉ์ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
โปFileOutputStream ํด๋์ค๋ OutputStream ํด๋์ค์ ํ์ ํด๋์ค์ด๋ฏ๋ก
OutputStream ํด๋์ค์ ๊ธฐ๋ณธ์ ์ธ ๋ฉ์๋๋ฅผ ์์๋ฐ๊ฑฐ๋ ์ฌ์ ์ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
- ์์ฑ์
· FileOutputStream(File file)
: ์ฃผ์ด์ง File ๊ฐ์ฒด๊ฐ ๊ฐ๋ฆฌํค๋ ํ์ผ์ ๋ฐ์ดํธ์คํธ๋ฆผ์ผ๋ก ์ฐ๊ธฐ ์ํ
FileOutputStream ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
๊ธฐ์กด์ ํ์ผ์ด ์กด์ฌํ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก (default) ๊ทธ ๋ด์ฉ์ ์ง์ฐ๊ณ
์๋ก์ด ํ์ผ์ ์์ฑํ๊ฒ ๋๋ค.(๋ฎ์ด์ฐ๊ธฐ)
· FileOutputStream(FileDescriptor fdObj)
: ์ฃผ์ด์ง FileDescriptor ๊ฐ์ฒด๊ฐ ๊ฐ๋ฆฌํค๋ ํ์ผ์ ๋ฐ์ดํธ์คํธ๋ฆผ์ผ๋ก ์ฐ๊ธฐ ์ํ
FileOutputStream ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
๊ธฐ์กด์ ํ์ผ์ด ์กด์ฌํ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก (default) ๊ทธ ๋ด์ฉ์ ์ง์ฐ๊ณ
์๋ก์ด ํ์ผ์ ์์ฑํ๊ฒ ๋๋ค.(๋ฎ์ด์ฐ๊ธฐ)
· FileOutputStream(String name)
: ์ฃผ์ด์ง ์ด๋ฆ์ด ๊ฐ๋ฆฌํค๋ ํ์ผ์ ๋ฐ์ดํธ์คํธ๋ฆผ์ผ๋ก ์ฐ๊ธฐ ์ํ
FileOutputStream ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
๊ธฐ์กด์ ํ์ผ์ด ์กด์ฌํ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก (default) ๊ทธ ๋ด์ฉ์ ์ง์ฐ๊ณ
์๋ก์ด ํ์ผ์ ์์ฑํ๊ฒ ๋๋ค.(๋ฎ์ด์ฐ๊ธฐ)
· FileOutputStream(String name, boolean append)
: ์ฃผ์ด์ง ์ด๋ฆ์ด ๊ฐ๋ฆฌํค๋ ํ์ผ์ ๋ฐ์ดํธ์คํธ๋ฆผ์ผ๋ก ์ฐ๊ธฐ ์ํ
FileOutputStream ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
๊ธฐ์กด์ ํ์ผ์ด ์กด์ฌํ ๊ฒฝ์ฐ append ๋ก ์ค์ ๋ ๊ฐ์ ๋ฐ๋ผ(true / false)
๊ทธ ๋ด์ฉ์ ์ง์ฐ๊ณ ์๋ก์ด ํ์ผ์ ์์ฑํ๊ฑฐ๋(false) ๊ธฐ์กด์ ๋ด์ฉ์ ์ถ๊ฐํ๋ค.(true)
โ java.io.FileReader ํด๋์ค
FileReader ํด๋์ค๋
ํ์ผ์ ์ ์ฅ๋ ๋ฐ์ดํธ๋ฅผ ์ ๋์ฝ๋ ๋ฌธ์๋ก ๋ณํํ์ฌ ์ฝ์ด๋ค์ด๊ณ ,
ํ์ผ ์ฐ๊ธฐ ํด๋์ค์ธ FileWriter ํด๋์ค๋
์ถ๋ ฅํ ์ ๋์ฝ๋ ๋ฌธ์์ด์ ์์คํ
์ ๋ง๋ ๋ํดํธ ๋ฌธ์ ์ธ์ฝ๋ฉ ๋ฐฉ์์ผ๋ก ๋ณํํ์ฌ
ํ์ผ์ ์ ์ฅํ๋ ์ญํ ์ ์ํํ๋ค.
FileReader ํด๋์ค๋
ํ์ผ์ ์ ์ฅ๋ ๋ฌธ์์ด์ ์ฝ์ด๋ค์ด๋๋ฐ ์ฌ์ฉ๋๋ฉฐ,
์ด ํด๋์ค๋ InputStreamReader ํด๋์ค๋ฅผ ์์ํ ๊ฒ์ผ๋ก
๋ฐ์ดํธ ์คํธ๋ฆผ์ ์ฝ์ด์ ๊ทธ ๋ฐ์ดํธ๋ฅผ ์ ๋์ฝ๋๋ก ๋ํ๋ด๋ ์ ์ํ์
์ ๊ฐ์ผ๋ก
๋ณํํด์ค๋ค.
FileReader ํด๋์ค ์ญ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ค์ผ ์์ค์ธ ํ์ผ๊ณผ ์ง์ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉ๋๋ฉฐ,
์ง์ ํ ํ์ผ์ด ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ FileNotFoundException ์ ๋ฐ์์ํค๊ฒ ๋๋ค.
- ์์ฑ์
·FileReader(File file)
: ์ฃผ์ด์ง File ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ FileReader ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค
·FileReader(FileDescriptor fd)
: ์ฃผ์ด์ง FileDescriptor ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ FileReader ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค
·FileReader(String fileName)
: ์ฃผ์ด์ง ์ด๋ฆ์ ํ์ผ์ ์ด์ด FileReader ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค
โ java.io.FileWriter ํด๋์ค
FileWriter ํด๋์ค๋
ํ์ผ ๋ฌธ์ ์ถ๋ ฅ์คํธ๋ฆผ์ผ๋ก ์ถ๋ ฅํ ๋ฌธ์๋ฅผ ๋ํดํธ ๋ฌธ์ ์ธ์ฝ๋ฉ ๋ฐ์ดํธ๋ก ๋ณํํ์ฌ
ํ์ผ์ ์ ์ฅํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค.
์ด ํด๋์ค๋ OutputStreamWriter ํด๋์ค์ ์๋ธ ํด๋์ค๋ก
์ ๋์ฝ๋๋ฅผ ๋ฐ์ดํธ๋ก ๋ณํํ๋ ๊ธฐ๋ฅ์ ๋ด๋นํ๊ฒ ๋๋ค.
FileOutputStream ํด๋์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก
ํ์ผ๋ช
์ด๋ File ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋๊ฒจ์ค์ผ๋ก์จ
์์คํ
์ ํ์ผ์ ์ง์ ์์ฑํ๊ฒ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก(default) ํด๋น ํ์ผ์ด ์ด๋ฏธ ์กด์ฌํ ๊ฒฝ์ฐ ๋ฎ์ด์ฐ๊ธฐ ํ๊ฒ ๋๋ค.
- ์์ฑ์
·FileWriter(File file)
: ์ฃผ์ด์ง File ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ FileWriter ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
·FileWriter(FileDescriptor fd)
: ์ฃผ์ด์ง FileDescriptor ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ FileWriter ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
·FileWriter(String fileName)
: ์ฃผ์ด์ง ์ด๋ฆ์ ํ์ผ์ ์ด์ด FileWriter ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
·FileWriter(String fileName, boolean append)
: ์ฃผ์ด์ง ํ์ผ์ append ๊ฐ์ ๋ฐ๋ผ(true / false)
์ฝ๊ธฐ / ์ถ๊ฐ ๋ชจ๋๋ก ์ด์ด FileWriter ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
โป ํ์ผ๊ณผ ๋๋ ํฐ๋ฆฌ ๊ด๋ จ(๊ด๋ฆฌ) ํด๋์ค → java.io.File ํด๋์ค
File ํด๋์ค๋ ํ์ผ ๋ฐ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ ์ ์๋๋ก ๊ธฐ๋ฅ์ ์ ๊ณตํด์ฃผ๋ ํด๋์ค๋ก
ํ์ผ์ ๋ณต์ฌ ๋๋ ์ด๋ฆ ๋ณ๊ฒฝ ๋ฑ์ ์กฐ์์ ํ ๊ฒฝ์ฐ ์ฌ์ฉ๋ ๋ฟ
ํ์ผ์ ๋ด์ฉ์ ์
์ถ๋ ฅํ๊ธฐ ์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํด์ฃผ์ง๋ ์๋๋ค.
์๋ฐ์์๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ์
์ถ๋ ฅ์ ใ์ค.ํธ.๋ฆผใ์ ๊ธฐ๋ฐํ์ฌ ์ํํ๊ธฐ ๋๋ฌธ์
File ํด๋์ค๋ ๋ด๋ถ์ ์ผ๋ก ์ด๋ฌํ ๋ฉ์๋๋ฅผ ๊ตฌํํ ํ์๊ฐ ์๋ ๊ฒ์ด๋ค.
๋จ, File ํด๋์ค์ ์ธ์คํด์ค๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๋ค.
์ฆ, ํ ๋ฒ ์์ฑ๋๋ฉด File ๊ฐ์ฒด์ ์ํด ํํ๋๋ ์ถ์ ๊ฒฝ๋ก๋ช
์ ์ ๋ ๋ณํ์ง ์๋๋ค.
โป ํ์ผ ์
๋ก๋
์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ํ์ผ์ ์ ์กํ๊ธฐ ์ํด ํผ์ ๊ตฌ์ฑํ ๊ฒฝ์ฐ
- form ํ๊ทธ ์์.. input ํ๊ทธ์ type ์์ฑ์ ์์ฑ๊ฐ์ด
file ์ธ ํ๊ทธ๋ฅผ ํตํด ํ์ผ์ ์ ํํ ์ ์๋ ๋ํ์ฐฝ์ ์ ๊ณตํ๋ค.
- ์ด ๋, method ์ ์์ฑ์ post ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ,
enctype ์์ฑ์ ์์ฑ๊ฐ์ ใ"multipart/form-data"ใ๋ก ์ง์ ํ ํผ์ ์ ์กํ ๊ฒฝ์ฐ
- ๋จ, ใ"multipart/form-data"ใ๋ก ์ง์ ํ ํผ์ ์ ์กํ ๊ฒฝ์ฐ
request ๊ฐ์ฒด๋ก ์ป์ด๋ธ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ผ๋ก ๊ฐ์ ์ป์ด๋ผ ์ ์๋ค.
์ด ๋ง์ ใ<input type="file">ใ๋ก ์ง์ ๋ ํ์ผ์
์๋ฒ ์์ ํน์ ๊ฒฝ๋ก์ ์
๋ก๋ ํ๊ธฐ ์ํด์ ใํน๋ณํ ์ปดํฌ๋ํธใ๊ฐ
ํ์ํ๋ค๋ ์๋ฏธ์ด๋ค.
โป ํน๋ณํ ์ปดํฌ๋ํธ : ใcos.jarใ
- ๋ค์ด๋ก๋ URL → http://www.servlets.com/cos
- ๋ค์ด๋ก๋ ํ์ผ → cos-22.05.zip