Practice for Next_Step book
์๊ฐํด๋ณผ๊ฑฐ๋ฆฌ
- ์ค์ ๋ก ์๋น์ค๋ฅผ ๋ด๋นํ๋ ํ๋ก๋์ ์ฝ๋์ ์ด ํ๋ก๋์ ์ฝ๋๊ฐ ์ ์์ ์ผ๋ก ํ์ธํ๊ธฐ ์ํ main() ํน์ ํ ์คํธ ์ฝ๋๋ก ๋ถ๋ฆฌ
- ํ๋ก๋์ ์ฝ๋์์ ์ ๊ทผ์(public, protected, private ๋ฑ)์ ์ค์ ํ๋ ๊ธฐ์ค์ ๋ฌด์?
- private method๋ ํ ์คํธ๋ฅผ ํด์ผํ๋๊ฐ?
- ํ๋ก๊ทธ๋๋ฐ์์ else๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ๊ณ ํ๋ค. ์?
- ์๊ตฌ์ฌํญ ์ด์ธ์๋ ์ถ๊ฐ์ ์ผ๋ก ํ์ํ ์๊ตฌ์ฌํญ์ ๋ํด์ ๊ณ์ ๊ณ ๋ฏผ ํ์. ์ถ๊ฐ์ ์ธ ์์ธ ์ํฉ์ด ์๋์ง์ ๋ํ ๊ฒํ ๊ธฐํ. intellij์์ ์ผ๋ฐ java project junit ์ค์ ๋ฐฉ๋ฒ์? (ํ๊ธด ํ์ง๋ง ๊ตฌ๋ฆฌ๊ฒ ํ ๊ฑฐ ๊ฐ์)
์ ์ฉํ ์๋ฃ ๋ฐ ๋งํฌ๋ค
- ๋ฆฌ๋ ์ค ์ปค๋ : [๋ฆฌ๋ ์ค ์ปค๋งจ๋๋ผ์ธ ์๋ฒฝ ์ ๋ฌธ์] or https://youtu.be/JbH-xzD7IkE
- ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ : http://goo.gl/Mq6hRd (๋งํฌ ๊นจ์ง)
Cookie ๊ด๋ จ ๋ด์ฉ
- ์๋ฒ์์ ํ ๋ฒ๋ง ์ฟ ํค ์ ๋ณด๋ฅผ ๋ณด๋ด๋ฉด ๋ธ๋ผ์ฐ์ ธ์์ ์ฟ ํค๋ฅผ ์ ์งํจ
- ์ฟ ํค ์์ฑ ์ผ์ด์ค
- ์ฒ์ ๋ก๊ทธ์ธ ํ์ ๋ ์ต์ด์ logined=true ๋ง๋ค์ด์ค
- ํ ๋ฒ๋ง logined=true๋ง๋ค์ด์ค ์ดํ์๋ ๋ฐ๋ก ์ธํ ํด์ค ํ์ ์์
- ๋ก๊ทธ์์ ํ์ ๋ logined=false๋ก ๋ง๋ค์ด ์ค
- ์ฟ ํค ์์ฑ ์ /user ํ์์์ ์ฟ ํค๋ฅผ ์์ฑํ๋ฉด /index.html์์๋ ์์ฑ๋ ์ฟ ํค๊ฐ ๋ณด์ด์ง ์๋๋ค.
- Set-Cookie์์ path๋ฅผ ์ง์ ํด์ฃผ์ด์ผ ํ๋ค. (์ : Set-Cookie: logined=true;path=/)
java ํ์ผ์์ ํ์ผ ๊ฒฝ๋ก ์ค์
- './'๋ก ์ค์ ํ๋ฉด ํ๋ก๊ทธ๋จ์ root๋ก ์ธ์์ ํ๋ ๊ฑด๊ฐ?
- ์ ์ ์ฝํ ์ธ (html, css, javascript)์ ๊ฒฝ์ฐ์๋ ๋ฆฌ์์ค์ด๊ธฐ ๋๋ฌธ์ .., ..., ../ ๋ฑ์ผ๋ก ์๋๊ฒฝ๋ก๋ฅผ ์ง์ ํ์ง๋ง, ๋์ ์ฝํ ์ธ ์ ๊ฒฝ์ฐ(class ํ์ผ) ํ๋ก์ ํธ ํด๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒฝ๋ก๊ฐ ์ค์ ์ด ๋๋ค. (์: ./๋ก ํ๋ฉด ํ๋ก์ ํธ ํด๋์ 1depth์ด๋ค.)
java i/o package ์ ๋ฆฌ
- ์๋ฐ์์ ๋ฐ์ดํฐ๋ ์คํธ๋ฆผ(Stream)์ ํตํด ์ ์ถ๋ ฅ ๋๋ค.
- ๋ฐ์ดํธ ๊ธฐ๋ฐ ์คํธ๋ฆผ์ ๊ทธ๋ฆผ, ๋ฉํฐ๋ฏธ๋์ด, ๋ฌธ์ ๋ฑ ๋ชจ๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ณ ๋ณด๋ผ ์ ์์ผ๋, ๋ฌธ์ ๊ธฐ๋ฐ ์คํธ๋ฆผ์ ์ค๋ก์ง ๋ฌธ์๋ง ๋ฐ๊ณ ๋ณด๋ผ ์ ์๋๋ก ํนํ๋์ด ์๋ค.
| java.io ํจํค์ง์ ์ฃผ์ ํด๋์ค | ์ค๋ช |
|---|---|
| File | ํ์ผ ์์คํ ์ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํ ํด๋์ค |
| Console | ์ฝ์๋ก๋ถํฐ ๋ฌธ์๋ฅผ ์ ์ถ๋ ฅํ๊ธฐ ์ํ ํด๋์ค |
| InputStream/OutputStream | ๋ฐ์ดํธ ๋จ์ ์ ์ถ๋ ฅ์ ์ํ ์ต์์ ์ ์ถ๋ ฅ ์คํธ๋ฆผ |
| FileInputStream/FileOutputStream DataInputStream/DataOutputStream ObjectInputStream/ObjectOutputStream PrintStream BufferedInputStream/BufferedOutputStream |
๋ฐ์ดํธ ๋จ์ ์ ์ถ๋ ฅ์ ์ํ ํ์ ์คํธ๋ฆผ |
| Reader/Writer | ๋ฌธ์ ๋จ์ ์ ์ถ๋ ฅ์ ์ํ ์ต์์ ์คํธ๋ฆผ ํด๋์ค |
| FileReader/FileWriter InputStreamReader/InputStreamWriter PrintWriter BufferedReader/BufferedWriter |
๋ฌธ์ ๋จ์ ์ ์ถ๋ ฅ์ ์ํ ํ์ ์คํธ๋ฆผ ํด๋์ค |
์๊ฐํ ๊ฑฐ๋ฆฌ๋ค
- ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ ์์ ๊ฐ์ ๊ตณ์ด enum์ผ๋ก ์ถ๊ฐํ ํ์๋ ์์ง๋ง, ๋จ์(M), ์ฌ์(F) ๋๋ ๋,์,๋จ,๋ถ ๊ณผ ๊ฐ์ด ์์๊ฐ์ด ์ฐ๊ด์ฑ์ ๊ฐ์ง๋ ๊ฒฝ์ฐ enum์ ์ฌ์ฉํ๊ธฐ ์ ํฉํ๋ค. (์ : GET, POST)
- ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ์ฒ์ ์ฐ์ตํ ๋ ์๊ตฌ์ฌํญ์ด ๋ช ํํ์ง ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ ๋ณด๋ค "์ง๋ขฐ์ฐพ๊ธฐ", "์ฒด์ค๊ฒ์" ๋ฑ ์ด๋ฏธ ์๊ตฌ์ฌํญ์ด ๋ช ํํ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ฐ์ตํ๋ ๊ฒ์ ์ถ์ฒ
- OCP(Open-Closed Principle) ์์น : ์๊ตฌ์ฌํญ์ ๋ณ๊ฒฝ์ด๋ ์ถ๊ฐ์ฌํญ์ด ๋ฐ์ํ๋๋ผ๋ ๊ธฐ์กด ๊ตฌ์ฑ์์๋ ์์ ์ด ์ผ์ด๋์ง ๋ง์์ผ ํ๋ฉฐ, ๊ธฐ์กด ๊ตฌ์ฑ์์๋ฅผ ์ฝ๊ฒ ํ์ฅํด์ ์ฌ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค.
- ์๋ธ๋ฆฟ์ ์์์ ๊ตฌํํ ์น์๋ฒ์ Controller, HttpRequest, HttpResponse๋ฅผ ์ถ์ํํด ์ธํฐํ์ด์ค๋ก ์ ์ํด ๋์ ํ์ค. ์๋ธ๋ฆฟ์ ์น์๋น์ค๋ฅผ ์ํ ์ธํฐํ์ด์ค๋ก, ์์น์ ์ผ๋ก๋ javax.servlet.Servlet ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด. ์ผ๋ฐ์ ์ธ java ๋ ๋ฆฝ ์คํํ๋ก๊ทธ๋จ๊ณผ๋ ๋ฌ๋ฆฌ main ๋ฉ์๋๊ฐ ์์ผ๋ฉฐ, ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ๋ฑ๋ก๋ ํ ์ปจํ ์ด๋์ ์ํด ์์ฑ, ํธ์ถ, ์๋ฉธ์ด ์ผ์ด๋๋ค. ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์ด๋ฌํ ์๋ธ๋ฆฟ์ ๊ด๋ฆฌํ๋ฉฐ ๋คํธ์ํฌ ํต์ , ์๋ธ๋ฆฟ์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ, ์ค๋ ๋ ๊ธฐ๋ฐ์ ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ๋ํํ๋ค. ์ฆ, ์น ํด๋ผ์ด์ธํธ๋ก ๋ถํฐ HTTP ์์ฒญ์ด ์ ๋ฌ๋๋ฉด ํด๋น HTTP ์์ฒญ์ ํด์ํ์ฌ ์ ์ ํ ์๋ธ๋ฆฟ์ service ๋ฉ์๋๋ฅผ ServletRequet, ServletResponse ๋งค๊ฐ๋ณ์์ ํจ๊ป ํธ์ถ.
- ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์์ฒญ์ด ๋ค์ด์ฌ ๋ ๋ง๋ค ์๋ก์ด java thread๋ฅผ ๋ง๋ ๋ค. ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ๋ํ์ ์ธ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ Tomcat์ด๋ค. Tomcat๊ฐ์ was๊ฐ java ํ์ผ์ ์ปดํ์ผํด์ class ํ์ผ์ ๋ง๋ค๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
- ์ปจํ ์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ปจํ ์ด๋์ ์ํด ์ธ์คํด์ค๊ฐ ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์ด๊ธฐํ, ์๋ฉธ๊ณผ ๊ฐ์ ์์ ์ ์ํ ๋ฉ์๋๋ฅผ ์ธํฐํ์ด์ค ๊ท์ฝ์ผ๋ก ๋ง๋ค์ด ๋๊ณ ํ์ฅํ ์ ์๋๋ก ์ง์ํ๋ ๊ฒ์ด๋ค.
- github์ ํน์ ๋ธ๋์น๋ฅผ ๊ทธ๋๋ก ๋ก์ปฌ์ ์์ฑํ๊ธฐ
์๊ฒฉ ์ ์ฅ์์ ๋ธ๋์น ๋ก์ปฌ์ ์์ฑ
git checkout -b step0-getting-started origin/step0-getting-started
- UpdateUserServlet ์์ user์ ๋ณด update ์ database๋ฅผ ํธ์ถํ์ง ์์๋ ๋๋ ๊ฒ์ Database์์ addUser์ User ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ํด๋น ๋ฉ๋ชจ๋ฆฌ ์์น์ User ์ ๋ณด๋ง ๋ฐ๊พธ์ด์ฃผ๋ฉด ์๋์ ์ผ๋ก update๊ฐ ๋๋ค.
- ์ธ์ ์ด ์ํ ๋ฐ์ดํฐ๋ฅผ ์น ์๋ฒ์์ ๊ด๋ฆฌํ๋ค๋ ์ ๋ง ๋ค๋ฅผ ๋ฟ HTTP์์ ์ํ ๊ฐ์ ์ ์งํ๊ธฐ ์ํ ๊ฐ์ ์ ๋ฌํ ๋๋ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ค.
- @WebServlet์์ loadOnStartUp ์กฐ๊ฑด
- ๋ณดํต์ ์๋ธ๋ฆฟ์ ํด๋น ์๋ธ๋ฆฟ์ ์ต์ด ์์ฒญ์ด ๋ค์ด์ฌ ๋์๋ง ํด๋น ์ธ์คํด์คํ ์ด๊ธฐ ์ค์ ์ ํ๊ฒ ๋๋๋ฐ, ์ด๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ Context์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ํฐ์บฃ์ ์ํด ์ธ์๋๋ ์์ ์ ์๋ธ๋ฆฟ์ด ์ด๊ธฐํ ๋๋๋ก ์ค์ ํ๋ ๊ฒ
- ์์์ผ ๋๋ ํฐ์บฃ ์คํ ์ ์๋์ผ๋ก ์๋ธ๋ฆฟ ํธ์ถ๋์ง ์์ผ๋ฉฐ, ์์์ผ ๋ 0์ ๊ฐ๊น์ธ์๋ก ๋จผ์ ์ด๊ธฐํ๋จ. ๊ฐ์ ์ซ์๊ฐ mapping๋์์ ๊ฒฝ์ฐ ๋จผ์ ์์ฑ๋ ์๋ธ๋ฆฟ๋ถํฐ ์ด๊ธฐํ๋จ
- SerialVersionUID ์์ฑ ์ด์ ๋?
- Serializable์ ์์๋ฐ์ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์(DispatcherServelt, Exception)
- ์๋ธ๋ฆฟ ๊ธฐ๋ฐ์ WAS(ํฐ์บฃ, ์น๋ก์ง ๋ฑ)๋ค์ ๋๋ถ๋ถ ์ธ์ ์ ์๋ฐ ์ง๋ ฌํ๋ฅผ ์ง์ํ๊ณ ์์ต๋๋ค.๋ฌผ๋ก ๋จ์ํ ์ธ์ ์ ์๋ธ๋ฆฟ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ด์ฉํ๋ค๋ฉด ์ง๋ ฌํ๋ฅผ ํ์๋ก ํ์ง ์์ง๋ง, ํ์ผ๋ก ์ ์ฅํ๊ฑฐ๋ ์ธ์ ํด๋ฌ์คํฐ๋ง, DB๋ฅผ ์ ์ฅํ๋ ์ต์ ๋ฑ์ ์ ํํ๊ฒ ๋๋ฉด ์ธ์ ์์ฒด๊ฐ ์ง๋ ฌํ๊ฐ ๋์ด ์ ์ฅ๋์ด ์ ๋ฌ๋ฉ๋๋ค.
- Exception ์ ์ ์ SerialVersionUID๊ฐ ์ค๋ณต๋์ด๋ ๊ด์ฐฎ์๊ฑด๊ฐ??
- tomcat์์๋ localhost:8080๊ฒฝ๋ก๋ก ๋ค์ด์์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก index.jsp, index.html ํ์ผ์ ๋จผ์ ์ฐพ๋๋ค.
- index.jsp ํ์ผ์ home.jspํ์ผ๋ก ๋ณ๊ฒฝํ์์.
- dispatcherServlet์์ urlmapping์ "/" ๋ก ํด์ฃผ๋ ๊ฒ์ jsp ํ์ผ์ ๊ธฐ๋ณธ ํฐ์บฃ ์ค์ ์์ ์ฐพ๊ฒํ๋ฉฐ, ๋๋จธ์ง ๋์ ์ธ ์์ญ์ ๋ํด์ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ธฐ ์ํจ์ด๋ค.
shell script
wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.tar.gz
gunzip apache-tomcat-8.5.47.tar.gz
# -x : ์์ถํด์ , -v : ์งํ์จ, -f : ํ์ผ
tar -xvf apache-tomcat-8.5.47.tar
ln -s apache-tomcat-8.5.47/ tomcat
git checkout -b origin/step1-user-completed-no-database
rm -rf /home/yeonbn/tomcat/webapps/ROOT
cp -r jwp-basic /home/yeonbn/tomcat/webapps/ROOT
- ContextLoaderListener
- ํฐ์บฃ ์๋ฒ๊ฐ ์์ํ ๋ contextInitialized() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ด๊ธฐํ ์์ ์คํ
- ContextLoaderListener๋ ServeletContextListener ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์์ผ๋ฉฐ @WebListener ์ ๋ ธํ ์ด์ ์ด ์ค์ ๋์ด ์๋ค. ์ด ๊ฒฝ์ฐ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ฅผ ์์ํ๋ ๊ณผ์ ์์ contextInitialized() ๋ฉ์๋๋ฅผ ํธ์ถํด ์ด๊ธฐํ ์์ ์ ์งํํ๋ค.
- ์๋ธ๋ฆฟ ์ด๊ธฐํ๊ฐ ํด๋น ์๋ธ๋ฆฟ๊ณผ ๊ด๋ จํ ์ด๊ธฐํ๋ฅผ ๋ด๋นํ๋ค๋ฉด ServletContextListener ์ด๊ธฐํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์ ์ํฅ์ ๋ฏธ์น๋ ์ด๊ธฐํ๊ฐ ํ์ํ ๊ฒฝ์ฐ ํ์ฉํ ์ ์๋ค.
- PreparedStatement์์ setValue ๋ฉ์๋ ํธ์ถ ์ ๋ฆฌํด ๊ฐ ์์ด ์ธํ ๋ง ํด์ฃผ์ด๋ PreparedStatement์ ๋ฐ์์ด ์ ๋๋๊ฑฐ์ง?
- PreparedStatementMapper, RowMapper ์ธํฐํ์ด์ค ์์ฑ
- ๋ฉ์๋ ํ๋๋ง ๊ฐ์ง๋ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ ํ ํ์์ ๋ฐ๋ผ ๋ฉ์๋์ ์ธ์๋ก ์ ๋ฌํด ์ ๋จ๊ณ์์ ๋ฐ์ํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๋ค. ์ฆ, ๋ณํ ์์ ์ด ๋ค๋ฅธ ๋ถ๋ถ์ ์๋ก ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํจ์ผ๋ก์จ ๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ ์ฐํจ์ ๋์ผ ์ ์๊ฒ ๋์๋ค. ์ด ์์ ์์ ์ฌ์ฉํ ์ธํฐํ์ด์ค๋ฅผ ์ฝ๋ฐฑ(callback) ์ธํฐํ์ด์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ์ฝ๋ฐฑ ์ธํฐํ์ด์ค๋ ํจ์ํ ์ธ์ด์์ ํจ์๋ฅผ ๋ฉ์๋์ ์ธ์๋ก ์ ๋ฌํจ์ผ๋ก์จ ์ ์ฐํจ์ ์ป๋ ๊ฒ๊ณผ ๊ฐ๋ค. ์๋ฐ๊ฐ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ์๋ฐ์ ์๋ ์ด์ ๋ ๊ธฐ๋ณธ๋จ์๊ฐ ํจ์๊ฐ ์๋ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- Runtime Exception, Compile Exception
- try-with-resource ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ํด๋์ค๋ java.io.AutoClosable์ ์์ํ๊ณ ์์ด์ผ ํ๋ค.
- Connection, PreparedStatement, ResultSet
- ์ ๋ค๋ฆญ์ ์ฌ์ฉํ์ฌ ๋ฆฌํฉํ ๋ง ํ๋ฉด ๋ฐ์ดํฐ ์กฐํ ์ ๊ตณ์ด ์บ์คํ ์ ํ์ง ์์๋ ๋๋ค.
- ๋๋ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ธํฐํ์ด์ค์ ๋ฉ์๋๊ฐ ํ๋๋ง ์กด์ฌํด์ผ ํ๋ค. ๋ํ ๋๋ค ํํ์์ผ๋ก ์ฌ์ฉํ ์ธํฐํ์ด์ค๋ผ๊ณ ์ง์ ํ๋ ค๋ฉด ์ธํฐํ์ด์ค์ @FunctionalInterface ์ ๋ ธํ ์ด์ ์ ์ถ๊ฐํด์ผํ๋ค.
- filter์ interceptor์ ์ฌ์ฉ ์ฌ๋ก
- filter
- interceptor : ๋ก๊น
- model hashcode์ equals๋ฅผ ์์ํด์ผํ๋ ์ด์ ์ ๋ํด์ โhttps://minwan1.github.io/2018/07/03/2018-07-03-equals,hashcode/
- ์๋ฐ์คํฌ๋ฆฝํธ์ this๋ ํด๋น ํจ์๋ฅผ ๋๊ฐ ํธ์ถํ๋๋์ ๋ฐ๋ผ this ๊ฐ ๋ณ๊ฒฝ๋๋ค....... ์๋ฐ์คํฌ๋ฆฝํธ์ this์ ๋ํด ๋ ๊น์ด ์๊ฒ ํ์ตํ๋ ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ์์์ Scope๋ฅผ ๋ค๋ฃจ๋ ๋ถ๋ถ์ ํ์ตํ๋ฉด ๋๋ค. ์ด ๋ถ๋ถ์ ํ์ตํ๋ค๋ณด๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์ apply(), call(), bind() ํจ์๋ ๋ฑ์ฅํ๋๋ฐ ์ด ์ธ ํจ์์ ์ฐจ์ด์ ์ ๋ํด์๋ ํ์ตํด์ผ ํ๋ค.
- ModelAndView๋ฅผ ๋ง๋ค์ด์ controller์ view์์ ๋ง๋ค์๋ model๋ฅผ ๋ง๋ค๊ณ , View๋ ์ฃผ์ ์ ๋ฐ๋๋ค.
- db trigger๋ก ๋ต๋ณ ๊ฐฏ์๋ฅผ ๊ธฐ๋กํ ์๋ ์์๊น?