JSP๋ฅผ ์ด์ฉํ์ฌ ๊ตฌ์ฑํ ์ ์๋ Web Application Architecture๋ ํฌ๊ฒ model1๊ณผ model2 ๋ก ๋๋๋ค.
Model1 : client์ ์์ฒญ์ ๋ํ Logic์ฒ๋ฆฌ์ response page(view)์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ชจ๋ ํจ
Model2 : ํ๋ฉด์ ๋ณด์ด๋ ๋ถ๋ถ๋ง ์ฒ๋ฆฌ (= MVCํจํด์ ์น ๊ฐ๋ฐ์ ๋์ ํ ๊ตฌ์กฐ )
Model1
- view์ logic์ JSPํ์ด์ง ํ๋์์ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ
- ์ฅ์
- ๊ตฌ์กฐ๊ฐ ๋จ์ํ๊ณ ์ง๊ด์ , ๋ฐฐ์ฐ๊ธฐ ์ฝ๋ค
- ๊ฐ๋ฐ ์๊ฐ์ด ๋น๊ต์ ์งง๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ๋น์ฉ์ด ๊ฐ์
- ๋จ์
- view์ฝ๋์ ๋ก์ง์ฒ๋ฆฌ๋ฅผ ์ํ java์ฝ๋๊ฐ ์์ฌ ์์ด์ JSP์ฝ๋ ์์ฒด๊ฐ ๋ณต์กํด์ง๋ค
- JSP์ฝ๋์ BE์ FE๊ฐ ํผ์ฌ๋์ด ๋ถ์ ์ด ํ๋ค์ด์ง
- ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง๊ฒ ๋๋ฉด ์ฝ๋๊ฐ ๋ณต์กํด์ ธ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์
- ํ์ฅ์ฑ(์ ๊ธฐ์ ๋์ , framework)์ด ๋์๋ค
Model2
- client ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๋ servlet
- logic์ฒ๋ฆฌ๋ java class(Service, Dao)
- response page๋ JSP๊ฐ ๋ด๋น
- Model
- Logic(Business & DB Logic)์ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ฒ
- Service, Dao, Java Beans, DTO
- controller๋ก ๋ถํฐ ๋์ด์จ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฅผ ์ํํ๊ณ ๊ทธ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ controller์๊ฒ return ํ๋ค.
- View
- ๋ชจ๋ ํ๋ฉด์ฒ๋ฆฌ ๋ด๋น.
- Client์ ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ ๋ฟ ์๋๋ผ controller์ ์์ฒญ์ ๋ณด๋ด๋ ํ๋ฉด๋จ๋ jsp์์ ์ฒ๋ฆฌํ๋ค.
- Logic์ฒ๋ฆฌ๋ฅผ ์ํ ์๋ฐ ์ฝ๋๋ ์ฌ๋ผ์ง๊ณ ๊ฒฐ๊ณผ ์ถ๋ ฅ์ ์ํ ์๋ฐ ์ฝ๋๋ง ์กด์ฌ
- JSP
- Controller
- Servlet
- Client์ ์์ฒญ์ ๋ถ์ํ์ฌ Logic์ฒ๋ฆฌ๋ฅผ ์ํ model๋จ์ ํธ์ถํ๋ค.
- return ๋ฐ์ ๊ฒฐ๊ณผ data๋ฅผ ํ์์ ๋ฐ๋ผ request, session๋ฑ์ ์ ์ฅํ๊ณ ,
- redirect ๋๋ forward ๋ฐฉ์์ผ๋ก jsp(view) page ๋ฅผ ์ด์ฉํ์ฌ ์ถ๋ ฅํ๋ค.
controller๐service ๐dao ์์๋ฅผ ์ง์ผ์ค์ผ ํจ
controller๋ ํญ์service๋ง ํธ์ถ!
- ์ฅ์
- ์ถ๋ ฅ์ ์ํ view(html) ์ฝ๋์ ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ์ํ java์ฝ๋๊ฐ ๋ถ๋ฆฌ ๋์๊ธฐ ๋๋ฌธ์ jsp๋ model1์ ๋นํด ์ฝ๋๊ฐ ๋ณต์กํ์ง ์๋ค.
- ํ๋ฉด๋จ๊ณผ Logic๋จ์ด ๋ถ๋ฆฌ ๋์๊ธฐ์ ๋ถ์ ์ด ์ฉ์ดํด ์ก๋ค.
- ๊ธฐ๋ฅ์ ๋ฐ๋ผ code๊ฐ ๋ถ๋ฆฌ ๋์๊ธฐ ๋๋ฌธ์ ์ ์ง ๋ณด์๊ฐ ์ฌ์์ก๋ค.
- ํ์ฅ์ฑ์ด ๋ฐ์ด๋๋ค
- ๋จ์
- ๊ตฌ์กฐ๊ฐ ๋ณต์กํ์ฌ ์ด๊ธฐ ์ง์ ์ด ์ด๋ ต๋ค
- ๊ฐ๋ฐ ์๊ฐ์ ์ฆ๊ฐ๋ก ๊ฐ๋ฐ ๋น์ฉ ์ฆ๊ฐ
Model2๊ฐ Model1๋ณด๋ค ํญ์ ์ข์๊ฐ?
๐ ์ ์ง๋ณด์๊ฐ ๋ณ๋ก ํ์์๋ ๊ฒฝ์ฐ Model1์ด ์ ๋ฆฌํ๋ค
http protocol์ ํน์ง
์๋ต ํ ์ฐ๊ฒฐ์ ํด์ ํ๋ค (stateless)
์ง์์ ์ธ ์ฐ๊ฒฐ๋ก ์ธํ ์์๋ญ๋น๋ฅผ ์ค์ด๊ธฐ ์ํด ์ฐ๊ฒฐ์ ํด์ ํจ.
client์ server๊ฐ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฐ์(๋ก๊ทธ์ธ ์ ๋ณด ๋ฑ)
client๋จ์๋ก ์ํ ์ ๋ณด๋ฅผ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ Cookie์ Session์ด ์ฌ์ฉ๋จ
HTTP protocol์ ํน์ง(์ฝ์ )์ ๋ณด์ํ๊ธฐ ์ํด Cookie์ Session์ ์ฌ์ฉ
Cookie
- 100% ํด๋ผ์ด์ธํธ ๊ธฐ์
- ์๋ฒ์์ ์ฌ์ฉ์์ ์ปดํจํฐ์ ์ ์ฅํ๋ ์ ๋ณดํ์ผ
- ์ฌ์ฉ์๊ฐ ๋ณ๋์ ์์ฒญ์ ํ์ง ์์๋ ๋ธ๋ผ์ฐ์ ๋ request์ Request Header๋ฅผ ๋ฃ์ด ์๋์ผ๋ก ์๋ฒ์ ์ ์กํ๋ค.
- Browser๋ง๋ค ์ ์ฅ๋๋ ์ฟ ํค๊ฐ ๋ค๋ฆ(์๋ฒ์์ Browser๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ์ฌ์ฉ์๋ก ์ธ์)
- Browser๊ฐ ์ข ๋ฃ๋์ด๋ Cookie์ ๋ง๋ฃ ๊ธฐ๊ฐ์ด ๋จ์์๋ค๋ฉด Client๋ ๊ณ์ ๋ณด๊ด
- Cookie์ key์ value๋ ๋ ๋ค String์ด์ด์ ํจ!
- ์ญ์ ๋ฉ์๋(delete์ ๊ฐ์)๊ฐ ์๋ค ๐ setMaxAge ๋ก ๊ด๋ฆฌ
cookie.setMaxAge(0); // cookie ์ญ์
- ์์ฑ๋ cookie๋ฅผ client๋ก ์ ์ก
response.addCookie(cookie);
- Cookie๋ฅผ ์์ ํ๋ ๋ฐฉ๋ฒ
- ๋ฐ๊พธ๊ณ ์ ํ๋ ์ฟ ํค์ key๊ฐ์ ๊ฐ์ง๋ ์ฟ ํค๋ฅผ ์๋ก ๋ง๋ค์ด ์ฃผ๋ฉด ๋จ. (๋จ, setMaxAge๋ ํด์ค์ผ ํจ. ์ค์ ํด์ฃผ์ง ์์ผ๋ฉด Browser ์ข ๋ฃ ์ ๋ง๋ฃ๋)
Session
- ๋ฐฉ๋ฌธ์๊ฐ ์น ์๋ฒ์ ์ ์ํด ์๋ ์ํ๋ฅผ ํ๋์ ๋จ์๋ก ๋ณด๊ณ ๊ทธ๊ฒ์ ์ธ์ ์ด๋ผ ํจ.
- WAS์ memory์ Object ํํ๋ก ์ ์ฅ (ํ๋์ ์ ์ฅ๋์ง ์์)
- memory๊ฐ ํ์ฉํ๋ ์ฉ๋๊น์ง ์ ํ ์์ด ์ ์ฅ ๊ฐ๋ฅ
- ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ๊ฑฐ๋, ์๋ฒ์์ ์ธ์ ์ ์ญ์ ํ์ ๋๋ง ์ญ์ ๊ฐ ๋๋ฏ๋ก, ์ฟ ํค๋ณด๋ค ๋น๊ต์ ๋ณด์์ด ์ข๋ค.
- ์ ์ฅ ๋ฐ์ดํฐ์ ์ ํ์ด ์๋ค.
- Browser๋น ํ๋์ JSESSIONID๋ฅผ ํ ๋น ๋ฐ
๋์์์
1. ํด๋ผ์ด์ธํธ๊ฐ ํ์ด์ง๋ฅผ ์์ฒญ.
2. ์๋ฒ๋ ์ ๊ทผํ ํด๋ผ์ด์ธํธ์ request headerํ๋์ธ Cookie๋ฅผ ํ์ธํ์ฌ, ํด๋ผ์ด์ธํธ๊ฐ ํด๋น session-id๋ฅผ ๋ณด๋๋์ง ํ์ธ.
3. session-id๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, ์๋ฒ๋ session-id๋ฅผ ์์ฑํด ํด๋ผ์ด์ธํธ์๊ฒ ๋๋ ค์ค๋ค.
4. ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋๋ ค์ค session-id๋ ์ฟ ํค๋ฅผ ์ฌ์ฉํด ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ. ์ฟ ํค์ด๋ฆ : JSESSIONID
5. ํด๋ผ์ด์ธ๋ ์ฌ์ ์ ์, JSESSIONID(์ฟ ํค)๋ฅผ ์ด์ฉํด์ session-id ๊ฐ์ ์๋ฒ์ ์ ๋ฌ.
๐ session์ ์๋ฒ๊ธฐ์ ์ด์ง๋ง ํด๋ผ์ด์ธํธ์ ์์กด์ ์ด๋ค.
- session ์์ฑ (new๊ฐ ์๋๋ค!)
HttpSession session = request.getSession(); // ์์ผ๋ฉด ๋ง๋ค์ด์ ๋ฐํ (default๊ฐ true)
HttpSession session = request.getSession(false); // ์์ผ๋ฉด null ๋ฐํ
- ๊ฐ ์ ์ฅ
session.setAttribute(String name, Object value);
- ๊ฐ ์ป๊ธฐ
Object obj = session.getAttribute(String name);
- ๊ฐ ์ ๊ฑฐ
session.removeAttribute(String name); // ํน์ ์ด๋ฆ์ ์์ฑ์ ๊ฑฐ
session.invalidate(); // binding๋์ด ์๋ ๋ชจ๋ ์์ฑ ์ ๊ฑฐ
- ์์ฑ์๊ฐ
long ct = session.getCreationTime();
- ๋ง์ง๋ง ์ ๊ทผ ์๊ฐ
long lat = session.getLastAccessedTime();
โญ ์ธ์ ํ์์์(์ ํจ์๊ฐ)์ ๋ง์ง๋ง connection์ดํ ์นด์ดํ ๋๋ค. (์์ฑ๋ ์ดํ ์นด์ดํ ์ด ์๋)
โญ ๋ง๋ฃ์๊ฐ์ web.xml์์ ์ค์ ํจ.
'๐๋ฐฑ์๋ : BackEnd' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring AOP (1) | 2024.01.02 |
---|---|
SpringFramework - DI (2) | 2024.01.01 |
[JSP] (0) | 2023.12.28 |
[Servlet] (0) | 2023.12.27 |
[SpringBoot ํ๋ฉฐ ๋ง์ฃผ์น ์ค๋ฅ] Transaction silently rolled back because it has been marked as rollback-only (0) | 2023.10.09 |