์ค๋์ ์ฟ ํค์ ์ธ์ ์ ๊ฐ๋ , ๋์ ๋ฐฉ์์ ๋ํด ๊ฐ๋จํ ์ ๋ฆฌํ๋ค.
๐ ์ฟ ํค์ ์ธ์
์ฟ ํค์ ์ธ์ ์ HTTP protocol์ ์ฝ์ ๋ณด์์ ์ํด ์ฌ์ฉํ๋ค.
HTTP protocol์ ํน์ง
- Connectionless ํ๋กํ ์ฝ
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญํ์ ๋, ๊ทธ ์์ฒญ์ ๋ง๋ ์๋ต์ ๋ณด๋ธ ํ ์ฐ๊ฒฐ์ ๋๋ ์ฒ๋ฆฌ๋ฐฉ์ - Stateless ํ๋กํ ์ฝ
์ปค๋ฅ์ ์ ๋๋ ์๊ฐ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ํต์ ์ด ๋๋๋ฉฐ, ์ํ ์ ๋ณด๋ฅผ ์ ์งํ์ง ์์
๐ client์ server๊ฐ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฐ์ (๋ก๊ทธ์ธ ์ ๋ณด ๋ฑ)
๐ client ๋จ์๋ก ์ํ ์ ๋ณด๋ฅผ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ ์ฟ ํค์ ์ธ์ ์ด ํ์ํจ
๐ ์ฟ ํค
์ฟ ํค์ ๊ฐ๋ ๊ณผ ํน์ง
- ํด๋ผ์ด์ธํธ ๋ก์ปฌ์ ์ ์ฅ๋๋ Key-Value ์์ ๋ฐ์ดํฐ ํ์ผ (String ํํ)
- ์ฌ์ฉ์๊ฐ ๋ณ๋๋ก ์์ฒญํ์ง ์์๋ ๋ธ๋ผ์ฐ์ ๋ request ์ Request Header๋ฅผ ๋ฃ์ด ์๋์ผ๋ก ์ ์ก
- ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ ์ฅ๋๋ ์ฟ ํค๋ ๋ค๋ฆ (์๋ฒ์์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ์ฌ์ฉ์๋ก ์ธ์)
์ฟ ํค์ ์ฌ์ฉ ๋ชฉ์
- ์ธ์ ๊ด๋ฆฌ : ์ฌ์ฉ์ ์์ด๋, ์ ์ ์๊ฐ, ์ฅ๋ฐ๊ตฌ๋ ๋ฑ ์๋ฒ๊ฐ ์์์ผ ํ ์ ๋ณด ์ ์ฅ
- ๊ฐ์ธํ : ์ฌ์ฉ์๋ง๋ค ๋ค๋ฅด๊ฒ ๊ทธ ์ฌ๋์ ์ ์ ํ ํ์ด์ง ๋ณด์ฌ์ค ์ ์์
- ํธ๋ํน : ์์ฉ์์ ํ๋๊ณผ ํจํด์ ๋ถ์ํ๊ณ ๊ธฐ๋ก
์ฟ ํค ์ฌ์ฉ ์์
- ID ์ ์ฅ (์๋ ๋ก๊ทธ์ธ)
- ์ผ์ฃผ์ผ๊ฐ ๋ค์ ๋ณด์ง ์๊ธฐ
- ์ต๊ทผ ๊ฒ์ํ ์ํ๋ค์ ๊ด๊ณ ์ ์ถ์ฒ
- ์ผํ๋ชฐ ์ฅ๋ฐ๊ตฌ๋
์ฟ ํค์ ๊ตฌ์ฑ ์์
- ์ด๋ฆ : ์ฌ๋ฌ ๊ฐ์ ์ฟ ํค๊ฐ client ์ปดํจํฐ์ ์ ์ฅ๋๋ฏ๋ก, ๊ฐ ์ฟ ํค๋ฅผ ๊ตฌ๋ณํ๋๋ฐ ์ฌ์ฉ
- ๊ฐ : ์ฟ ํค์ ์ด๋ฆ๊ณผ ๋งคํ๋๋ ๊ฐ
- ์ ํจ ๊ธฐ๊ฐ : ์ฟ ํค์ ์ ํจ ๊ธฐ๊ฐ
- ๋๋ฉ์ธ : ์ฟ ํค๋ฅผ ์ ์กํ ๋๋ฉ์ธ
- ๊ฒฝ๋ก : ์ฟ ํค๋ฅผ ์ ์กํ ์์ฒญ ๊ฒฝ๋ก
์ฟ ํค์ ๋์ ๋ฐฉ์
- Client๊ฐ Server์ ํ์ด์ง ์์ฒญ
- Server๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ ํจ์ฑ ๊ฒ์ฌ (id, password ๊ฒ์ฌ ๋ฑ) ํ Cookie๋ฅผ ์์ฑ
- HTTP Header์ Cookie๋ฅผ ๋ฃ์ด ์๋ต
- Browser๋ ๋ฐ์ Cookie๋ฅผ PC์ ์ ์ฅ, ๋ค์ Server์ ์์ฒญํ ๋ ์์ฒญ๊ณผ ํจ๊ป Cookie ์ ์ก
- Browser๊ฐ ์ข ๋ฃ๋์ด๋ Cookie์ ์ ํจ ๊ธฐ๊ฐ์ด ๋จ์์๋ค๋ฉด Client๋ ๊ณ์ ๋ณด๊ด
- ๋์ผ ์ฌ์ดํธ ์ฌ๋ฐฉ๋ฌธ ์ Client์ PC์ ํด๋น Cookie๊ฐ ์๋ ๊ฒฝ์ฐ, ์์ฒญ ํ์ด์ง์ ํจ๊ป Cookie ์ ์ก
Cookie ์ฃผ์ ๊ธฐ๋ฅ
๊ธฐ๋ฅ | method |
์์ฑ | Cookie cookie = new Cookie(String name, String value); |
๊ฐ ๋ณ๊ฒฝ / ์ป๊ธฐ | cookie.setValue(String value); String value = cookie.getValue(); |
์ฌ์ฉ์ ๋๋ฉ์ธ ์ง์ / ์ป๊ธฐ | cookie.setDomain(String domain); String value = cookie.getDomain(); |
๊ฐ ๋ฒ์ ์ง์ / ์ป๊ธฐ | cookie.setPath(String path); String path = cookie.getPath(); |
cookie ์ ํจ ๊ธฐ๊ฐ ์ง์ / ์ป๊ธฐ | cookie.setMaxAge(int expiry); Int expiry = cookie.getMaxAge(); cookie.setMaxAge(0); // ์ ํจ ๊ธฐ๊ฐ์ 0์ผ๋ก ์ค์ ํ๋ฉด ์ฟ ํค ์ญ์ ๊ฐ๋ฅ |
์์ฑ๋ cookie๋ฅผ client์ ์ ์ก | response.addCookie(cookie); |
client์ ์ ์ฅ๋ cookie ์ป๊ธฐ | Cookie cookies[] = request.getCookies(); |
๐ ์ธ์
์ธ์ ์ ๊ฐ๋ ๊ณผ ํน์ง
- ๋ฐฉ๋ฌธ์๊ฐ ์น ์๋ฒ์ ์ ์ํด ์๋ ์ํ๋ฅผ ํ๋์ ๋จ์๋ก ๋ณด๊ณ , ๊ทธ๊ฒ์ ์ธ์ ์ด๋ผ๊ณ ํจ
- WAS์ memory์ Object ํํ๋ก ์ ์ฅ๋จ
- memory๊ฐ ํ์ฉํ๋ ์ฉ๋๊น์ง ์ ํ ์์ด ์ ์ฅ ๊ฐ๋ฅ
- ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ๊ฑฐ๋ ์๋ฒ์์ ์ธ์ ์ ์ญ์ ํ์ ๋๋ง ์ญ์ ๋๋ฏ๋ก, ์ฟ ํค๋ณด๋ค ๋ณด์์ด ์ข๋ค.
- ๊ฐ ํด๋ผ์ด์ธํธ์ ๊ณ ์ session-id๋ฅผ ๋ถ์ฌํ๊ณ , ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ๋ถํ์ฌ ์๊ตฌ์ ๋ง๋ ์๋น์ค๋ฅผ ์ ๊ณตํจ
์ธ์ ์ฌ์ฉ ์์
- site ๋ด์์ ํ๋ฉด์ ์ด๋ํด๋ ๋ก๊ทธ์ธ(์ฌ์ฉ์ ์ ๋ณด)์ด ์ ์ง
- ์ฅ๋ฐ๊ตฌ๋
์ธ์ ๋์ ๋ฐฉ์
- Client๊ฐ Server์ ํ์ด์ง ์์ฒญ
- Server๋ ์ ๊ทผํ Client์ Request Header ํ๋์ธ Cookie๋ฅผ ํ์ธํ๊ณ ,
Client๊ฐ ํด๋น session-id๋ฅผ ๋ณด๋๋์ง ํ์ธ - session-id๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, Server๋ session-id๋ฅผ ์์ฑํด Client์๊ฒ ์ค
- Server์์ Client๋ก ์ค session-id๋ฅผ ์ฟ ํค๋ฅผ ์ฌ์ฉํด ์๋ฒ์ ์ ์ฅํจ (์ฟ ํค ์ด๋ฆ: JSESSIONID)
- Client๋ ์ฌ์ ์ ์, ์ด JSESSIONID๋ฅผ ์ด์ฉํด์ session-id ๊ฐ์ Server์ ์ ๋ฌํจ
HttpSession ์ฃผ์ ๊ธฐ๋ฅ
๊ธฐ๋ฅ | method |
์์ฑ | HttpSession session = request.getSession(); HttpSession session = request.getSession(false); |
๊ฐ ์ ์ฅ | session.serAttribute(String name, Object value); |
๊ฐ ์ป๊ธฐ | Object obj = session.getAttribute(String name); |
๊ฐ ์ ๊ฑฐ | session.removeAttribute(String name); // ํน์ ์ด๋ฆ์ ์์ฑ ์ ๊ฑฐ session.invalidate(); // ๋ฐ์ธ๋ฉ๋์ด์๋ ๋ชจ๋ ์์ฑ ์ ๊ฑฐ |
์์ฑ ์๊ฐ | long ct = session.getCreationTime(); |
๋ง์ง๋ง ์ ๊ทผ ์๊ฐ | long lat = session.getLastAccessedTime(); |
๐ ์ฟ ํค์ ์ธ์ ์ ๋ฆฌ
Cookie | Session | |
type | javax.servlet.http.Cookie (Class) | javax.servlet.http.HttpSession (Interface) |
์ ์ฅ ์์น | Client ์ปดํจํฐ์ file๋ก ์ ์ฅ | Server์ memory์ Object๋ก ์ ์ฅ |
์ ์ฅ ํ์ | file์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ String ํํ๋ง ๊ฐ๋ฅ | Object๋ ๋ชจ๋ ๊ฐ๋ฅ (์ผ๋ฐ์ ์ผ๋ก Dto, List ๋ฑ) |
์ฌ์ฉ ์์ | ์ต๊ทผ ๋ณธ ์ํ ๋ชฉ๋ก, ์์ด๋ ์ ์ฅ, ๊ทธ๋ง ๋ณด๊ธฐ ๋ฑ | ๋ก๊ทธ์ธ ์ ์ฌ์ฉ์ ์ ๋ณด, ์ฅ๋ฐ๊ตฌ๋ ๋ฑ |
์ฉ๋ ์ ํ | ๋๋ฉ์ธ๋น 20๊ฐ, 1์ฟ ํค๋น 4KB | ์ ํ ์์ (WAS memory ํ์ฉ๊น์ง) |
๋ง๋ฃ ์์ | ์ฟ ํค ์ ์ฅ ์ ์ค์ (์ค์ ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ์ข ๋ฃ ์ ๋ง๋ฃ) |
์ ์ ์์ (Client๊ฐ ๋ก๊ทธ์์ ํ๊ฑฐ๋, ์ผ์ ์๊ฐ ๋์ session์ ์ ๊ทผํ์ง ์์ ๊ฒฝ์ฐ ๋ง๋ฃ) ๐ ์ฟ ํค์๋ ๋ค๋ฅด๊ฒ, ์ฒ์ ๋ง๋ ์๊ฐ๋ถํฐ ์ ํจ ๊ธฐ๊ฐ์ ์ ํ์ง ์๊ณ , ์ฌ์ฉ์์ ๋ง์ง๋ง ์ ๊ทผ ์๊ฐ์ผ๋ก๋ถํฐ ์๊ฐ์ ์ธก์ ํจ (web.xml์์ ์ค์ ) |
๊ณตํต์ | ์ ์ญ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ project ๋ด์ ๋ชจ๋ JSP์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํจ Map ํ์์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ key ๊ฐ์ ์ค๋ณต์ ํ์ฉํ์ง ์์ |
์ฟ ํค๊ณผ ์ธ์ ์ ์ ์ ํ ์ฌ์ฉ ๋ฐฉ๋ฒ
์ธ์ ์ด ์ฟ ํค์ ๋นํด ๋ณด์์ด ๋์ ํธ์ด๋, ์ธ์ ์ ์๋ฒ์ ์ ์ฅ๋๋ฉฐ ์๋ฒ์ ์์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
์๋ฒ ์์์ ํ๊ณ๊ฐ ์๊ณ , ์๋๊ฐ ๋๋ ค์ง ์ ์๋ค.
๐ ์์ ๊ด๋ฆฌ ์ฐจ์์์ ์ฟ ํค์ ์ธ์ ์ ์ ์ ํ ์์ ๋ฐ ๊ธฐ๋ฅ์ ๋ณํ ์ฌ์ฉํ์ฌ ์๋ฒ ์์์ ๋ญ๋น๋ฅผ ์ค์ผ ์ ์๋ค.
'5๏ธโฃ CS > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Web] SSR๊ณผ CSR (feat. MPA์ SPA) (2) | 2022.09.29 |
---|---|
[Web] CSV, XML, JSON (0) | 2022.09.18 |
๋๊ธ