ํด๋น ๋ ํฌ์งํ ๋ฆฌ๋ ์๋ฐ ์น ํ๋ก๊ทธ๋๋ฐ Next Step์ ์ฐธ์กฐํด ์งํํฉ๋๋ค.
html/css๋ ํด๋น ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ต๋๋ค.
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ์ก๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฑํด ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- ์์ฒญ์ ๋ง๋ ์ ์ ํ์ด์ง๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ ๋ฌํ๋ค.
- Http ๋ฉ์์ง ํ์ฑํด์ HttpRequest ๊ฐ์ฒด๋ก ๋ง๋ค๊ธฐ
- URI์ HTTP ๋ฉ์๋๋ฅผ ๋ฐํ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ๋งคํํ๋ค.
- ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด์ ์ ์ฉํด์ ์์ฒญ ์ฒ๋ฆฌ
- ์์ฒญ์ ๋ฐ๋ฅธ ์๋ต์ ๋ธ๋ผ์ฐ์ ์ ์ ๋ฌํด ์ ์ ํ์ด์ง๋ฅผ ํ๋ฉด์ ๋์ด๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ด๋ถ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค.
.
โโโ app
โย ย โโโ core
โโโ framework
โโโ RequestHandler.java
โโโ annotation
โโโ context
โโโ core
โโโ http
โโโ servlet
โโโ util
โโโ utils
โโโ view
ํ๋ก์ ํธ๋ ํฌ๊ฒ app, framework ๋ ๋ถ๋ถ์ผ๋ก ๋๋์ด์ง๋๋ค. app์ด framework์ ์์กดํ๊ณ framework๋ app์ ์์กดํ์ง ์๋๋ก ํ์ฌ ์์กด์ฑ ์ฌ์ดํด์ ์์ ๊ณ ์ ํ์ต๋๋ค.
HTTP ํ๋กํ ์ฝ์ ๋ง๊ฒ ํด๋ผ์ด์ธํธ์ ํต์ ํ๋ ค๋ฉด ์์ฒญ์ HTTP ๋ฉ์์ง๋ฅผ ํด์ํ๊ณ ์ด์ ๋ํ ์๋ต์ HTTP ๋ฉ์์ง๋ก ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํด์ผ ํฉ๋๋ค.
์ด๋ฅผ ์ํด ๊ณต๋ถํ ์ฃผ์ ํํ ํค๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Content-Length : HTTP ๋ฐ๋์ ํฌ๊ธฐ์ด๊ณ , ๋จ์๋ byte์ ๋๋ค.
- Content-Type : ๋ฆฌ์์ค์ media type์ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค. HTTP ์๋ต์์ Content-Type ํค๋๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ค์ ์ปจํ ์ธ ํ์ ์ ์ ๊ณตํฉ๋๋ค. ์๋ต ํํ ํค๋์์ ์ ์ ํ Content-Type์ ์ค์ ํ์ง ์์ ํ๋ฉด์ css๊ฐ ๋ฐ์๋์ง ์๋ ์ด์๋ฅผ ๊ฒช์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฆฌ์์ค์ MediaType์ ํด์ํ๊ณ ์ ์ ํ ํ๋ฉด์ ๋์์ฃผ๊ธฐ ์ํด์ ๋ฐ๋์ ์ค์ ํด์ผ ํฉ๋๋ค.
- Location : ๋ฆฌ๋ค์ด๋ ํธ(redirect)ํ ํ์ด์ง๋ฅผ ๋ํ๋ด๋ ์๋ต ํค๋์ ๋๋ค. HTTP ์ํ ์ฝ๋๊ฐ 300๋ฒ๋ ์ผ๋๋ง ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ด ์๋ตํค๋๋ ํ์๊ฐ์ ํผ ์ ์ถ ํ POST์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๋ฆฌ๋ค์ด๋ ํธ ํ ๋ ์ฌ์ฉํฉ๋๋ค. ๋ฆฌ๋ค์ด๋ ํธ๋ฅผ ํ๋ ์ด์ ๋ ์๋ก๊ณ ์นจ์ผ๋ก ์ธํ ์ค๋ณต ์ ์ถ์ ๋ฐฉ์งํ๊ธฐ ์ํจ์ ๋๋ค.
DispatcherServlet์ ์ด์ฉํด ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ฅผ ๊ตฌํํ์ต๋๋ค. DispatcherServlet์์๋ HTTP ํ๋กํ ์ฝ๋ก ๋ค์ด์ค๋ ์์ฒญ์์ ๊ณตํต์ ์ผ๋ก ์ฒ๋ฆฌํด์ผํ ์์ ์ ์ํํ๊ณ ์์ต๋๋ค.
์ง๊ธ์ ๋ฑ๋กํ ๋น์ ๋ค ์กฐํํด์ ์ ํฉํ ์ด๋ ธํ ์ด์ ์ ๊ฐ๊ณ ์๋ ํธ๋ค๋ฌ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ผ๋ก ํธ๋ค๋ฌ ๋งคํ์ ์งํํ๊ณ ์์ต๋๋ค. ์ถํ์ ๋ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์๋๋ก ํธ๋ค๋ฌ ๋งคํ ๋ก์ง์ ์์ ํ ์์ ์ ๋๋ค.
@Component
์ด๋
ธํ
์ด์
๊ธฐ๋ฐ ์คํ๋ง ์๋ ๋น ๋ฑ๋ก ๋ฐฉ์์ธ Component Scan๊ณผ @Configuration
๊ณผ @Bean
์ ํตํ ์๋ ๋น ๋ฑ๋ก ๋ฐฉ์์ ๋ฆฌํ๋ ์
(Reflection)์ ํตํด
๊ตฌํํ์ต๋๋ค.
๋ฆฌํ๋ ์ ์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ด ์์ต๋๋ค.
- ์บก์ํ ์๋ฐ : ๋ฆฌํ๋ ์ ์ ์ด์ฉํ๋ฉด ํด๋์ค์ ๋ด๋ถ๊ตฌ์กฐ์ ์ ๊ทผํ ์ ์๊ณ , ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์์ ์ทจ์ฝ์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ์ ํ : ๋ฆฌํ๋ ์ ์ ํตํ ๋ฉ์๋ ํธ์ถ์ ์ผ๋ฐ์ ์ธ ๋ฉ์๋ ํธ์ถ์ ๋นํด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
- ํ์ ์์ ์ฑ ๋ฌธ์ : ์ปดํ์ผ ์์ ์ ํ์ ์ฒดํฌ๊ฐ ์ด๋ฃจ์ด์ง์ง ์๊ณ ๋ฐํ์์ ๊ฒฐ์ ๋ฉ๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ ์ด์ ๋ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ ๋๋ค. ๊ฐ์ฒด ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ๋ณ๊ฒฝํ ๋, ์์กด ๊ด๊ณ๋ฅผ ์ค์ ํ๋ ๋ถ๋ถ์์๋ง ๋ณ๊ฒฝ์ด ์ผ์ด๋๊ณ , ๋ค๋ฅธ ๋ถ๋ถ์๋ ์ํฅ์ ๋ฏธ์น์น ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ ์์กด์ฑ ์ฃผ์ ์ด ๋์ ์ผ๋ก ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ๋ ์์ํฌ ํจํค์ง์์ ์ ํ๋ฆฌ์ผ์ด์ ํจํค์ง์ ๋ํด์ ์์กดํ์ง ์๊ณ ๊ฐ์ฒด ์์ฑ๊ณผ ์์กด์ฑ ์ฃผ์ ์ ์งํํ ์ ์์ต๋๋ค.
๋ฆฌํ๋ ์ ์ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ผ ์ ์์ง๋ง, ์บก์ํ ์๋ฐ, ์ฑ๋ฅ ์ ํ, ํ์ ์์ ์ฑ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฆฌํ๋ ์ ์ ๊ผญ ํ์ํ ๊ณณ์๋ง ์ฌ์ฉํด์ผ ๋ฉ๋๋ค.
- ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ.
- Session ๋ง๋ฃ์๊ฐ ๊ด๋ฆฌ.
- ํ์ ์ ๋ณด ์์ธ๋ณด๊ธฐ
- ํ์ ์ ๋ณด ์์
- ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ ์ค์ผ ์ ์์ต๋๋ค.
- ์์ฒญ ์ ์ฟ ํค ๋ด๋ถ์ ์๋ ์ ๋ณด๋ค์ด ๊ทธ๋๋ก ๋ ธ์ถ๋ ์ ์์ด ๋ณด์ ์์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
- ์ฟ ํค์ ํฌ๊ธฐ๊ฐ ํด ๊ฒฝ์ฐ ๋คํธ์ํฌ ๋ถํ๊ฐ ์ปค์ง ์ ์์ต๋๋ค.
- ์ธ์ ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ธ์ ์์ด๋์ ํจ๊ป ์๋ฒ์ ์ ์ฅํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ์๊ฒ ์ธ์ ์์ด๋๋ฅผ Set-Cookie ํค๋์ ๋ฃ์ด ์ ์กํฉ๋๋ค.
- ์ธ์ ์์ด๋๋ง ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ๋คํธ์ํฌ ๋ถํ๊ฐ ์ปค์ง์ง ์์ต๋๋ค.
- ์๋ฒ์ ์ ์ฅ๋๋ฏ๋ก ํด๋ผ์ด์ธํธ์ ์น๋ธ๋ผ์ฐ์ ํธํ์ฑ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
- ์๋ฒ์ ๋ฐ์ดํฐ ์ ์ฅ๋์ด ๋ง์์ ธ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ๋ด์ด ๊ฐ ์ ์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๋ด๋ถ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ MySQL์ ์ ์ฅํ์ต๋๋ค.
- ์ธ๋ฉ๋ชจ๋ฆฌ ์์ ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ต์ฒด(MySQL)
- JDBC Template ๊ตฌํ
- prepared statement ์ฌ์ฉํด์ SQL ์ฃผ์ ๋ฐฉ์ง
์คํ๋ง ์๋ฒ๋ฅผ ์ง์ ๊ตฌํํ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ๋ฐฉ์์์ JDBC API๋ฅผ ์ด์ฉํด์ ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟจ์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ ์ ์๊ฒ ๋์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผ ์, ๋ณ๊ฒฝ๋๋ ๋ถ๋ถ๊ณผ ๋ณ๊ฒฝ๋์ง ์๋ ๋ถ๋ถ์ ๋ถ๋ฆฌํ ํ์๊ฐ ์์์ต๋๋ค. ์ด๋์ ํ ํ๋ฆฟ ์ฝ๋ฐฑ ํจํด์ ์ ์ฉํ์ฌ ๋ณํ์ง ์๋ ๋ถ๋ถ์ ํ ํ๋ฆฟ์ผ๋ก ๋ง๋ค์๊ณ , SQL๋ฌธ๊ณผ ๊ฐ์ด ๋ณํ๋ ๋ถ๋ถ์ ์ฝ๋ฐฑ์ผ๋ก ๋ง๋ค๊ณ ํ ํ๋ฆฟ์ ์ ๋ฌํ์ฌ์, ์ํ๋ ์์ ์ ์ฝ๋ฐฑ์ ์คํ์ํฌ ์ ์๊ฒ๋ ํ์ต๋๋ค.