์ธ์ ๋ฐฉ์ ๋ก๊ทธ์ธ
์ธ์ ์ ์ธ์ฆ๋ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ SESSION ID์ ๋งคํํ์ฌ ์๋ฒ์ ์ ์ฅํ๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ณ์์ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ง SESSION ID๋ฅผ ์๋ตํค๋์ ๋ฃ์ด ์ ์กํ๋ค. ๋งค ์๋ต๋ง๋ค SESSION ID ๋ง ๋ณด๋ด๊ธฐ๋๋ฌธ์ ๋คํธ์ํฌ ๋ถํ๊ฐ ์ปค์ง์ง ์๊ณ ์๋ฒ์ ์ ์ฅ๋๋ฏ๋ก ํด๋ผ์ด์ธํธ์ ์น๋ธ๋ผ์ฐ์ ์ ํธํ์ฑ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ ์ ๋ณด์๋ฅผ ์ ์งํ ์ ์๊ฒ ๋๋ค. ํ์ง๋ง ์๋ฒ์ ๋ฐ์ดํฐ ์ ์ฅ๋์ด ๋ง์์ง๋ฏ๋ก ์๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ๋ด์ด ๊ฐ ์ ์๋ค.
๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ๋ก๊ทธ์ธ ๊ตฌํ์ ํ์๋ผ๊ณ ํด๋ ๊ณผ์ธ์ด ์๋๋ค. ์ง๊ธ๊น์ง ์งํํ๋ ์ฌ๋ฌ ํ๋ก์ ํธ์์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ด ์์๋ ํ๋ก์ ํธ๋ ๊ฑฐ์ ์๋ ๊ฒ ๊ฐ๋ค.
์ด๋ ๊ฒ ์๋ฌด๋ ์ง ์๊ฒ ์ฌ์ฉํ๋ ์ธ์ ์ ๋ํด ์๋ฌธ์ ์ด ์๊ฒผ๋ค.
session.getAttribute("user")
์ด๋ ๊ฒ ์ฌ์ฉ์ A๊ฐ ์ ์ํด๋ user๋ฅผ Key๊ฐ์ผ๋ก ๊ฐ์ ๊ฐ์ ธ์ค๊ณ ,
์ฌ์ฉ์ B๊ฐ ์ ์ํด๋ user๋ฅผ Key๊ฐ์ผ๋ก ๊ฐ์ ธ์จ๋ค.
๊ฐ์ Key๊ฐ์ ์ฐ๋๋ฐ ์ด๋ป๊ฒ ์ด๋ค์ ๊ตฌ๋ณํด์ ๊ฐ์ ธ์ฌ ์ ์๋๊ฑธ๊น??
์๋ ์ฝ๋๋ HttpSession์ ์ฌ์ฉํ ๊ฐ๋จํ ๋ก๊ทธ์ธ ์์ ์ฝ๋์ด๋ค.
์ฝ๋๋ฅผ ๋ณด๋ฉด ์๋ค์ถ์ด A๊ฐ ์์ฒญํ HTTP ์์ฒญ์ธ์ง B๊ฐ ์์ฒญํ HTTP ์์ฒญ์ธ์ง ๊ตฌ๋ถํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ๋ณด์ด์ง ์๋๋ค. ์ฌ๊ธฐ์ session tracking ์ด๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๋ค.
@Controller
public class LoginController {
@PostMapping("/login")
public String login(MemberLoginDto memberLoginDto, HttpSession session , Model model){
Member loginMember = loginService.login(memberLoginDto.getUserId(), memberLoginDto.getPassword());
if (loginMember == null) {
result.reject("loginFail", "์์ด๋ ๋๋ ๋น๋ฐ๋ฒํธ๊ฐ ๋ง์ง ์์ต๋๋ค.");
return "member/loginForm";
}
//๋ก๊ทธ์ธ ์ฑ๊ณต ์ฒ๋ฆฌ
//์ธ์
์ด ์์ผ๋ฉด ์๋ ์ธ์
๋ฐํ, ์์ผ๋ฉด ์ ๊ท ์ธ์
์ ์์ฑ
HttpSession session = request.getSession();
//์ธ์
์ ๋ก๊ทธ์ธ ํ์ ์ ๋ณด ๋ณด๊ด
session.setAttribute("loginMember", loginMember);
model.addAttribute("member",loginMember);
return "/member/memberInfo";
}
}
Session Tracking
์ผ๋ฐ์ ์ธ HTTP ์์ฒญ์๋ ๋ด๊ฐ ๋๊ตฌ์ธ์ง์ ๋ํ ์ ๋ณด๊ฐ ์๋ค. ๋ฐ๊ณ ์ถ์ด ํ๋ ๋ฆฌ์์ค ์ฃผ์, ํ๋ผ๋ฏธํฐ ์ ๋ ์์ ๋ฟ์ด๋ค. ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์์ ํ ์์ฒญ์ ๋๊ฐ ๋ณด๋ธ ์์ฒญ์ธ์ง์ ๋ํ ์ ๋ณด, ์ฆ ์๋ณ์๊ฐ ์์ด์ผ ๋ด๋ถ์ ์ ์ฅํ๊ณ ์๋ Session๊ฐ์ฒด๋ฅผ ์ฝ์ด์ ์ฐธ์กฐํ ๊ฒ์ด๋ค.
๋ค์ ๋งํ๋ฉด, ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ๋๊ตฌ์ธ์ง ์ด๋ป๊ฒ ์๋ณํ๊ฒ ํ๋๋์ ๋ํ ์ด์ผ๊ธฐ๊ฐ Session Tracking Mechanism ์ด๋ค.
Session์ ์ถ์ ํ๊ธฐ ์ํด์ Cookie๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๋ค. ์ปจํ ์ด๋์์ ์์ฒญ์ ๋ํ ์๋ต์ ๋ด๋ฆด ๋ Session์ ๋ง๋ค๊ณ ๊ทธ SessionID๋ฅผ Cookie๋ก ๋ด๋ ค๋ณด๋ด๋ ๊ฒ์ด๋ค. ํด๋ผ์ด์ธํธ์ ๋ด๋ ค๊ฐ Cookie๋ ๊ทธ ๋ค์ ์ด์ด์ค๋ ์์ฒญ์ ๋ง๋ถ์ฌ์ ธ์ ์ค๊ธฐ ๋๋ฌธ์ ์ปจํ ์ด๋๊ฐ ์์ฒญ์ ๋ฐ์์ ๋ Cookie์ ์๋ Session ์ ๋ณด๋ฅผ ์ด์ฉํด์ ์์ฒญ์๋ฅผ ์๋ณํ ์ ์๋ค. ๊ทธ๋์ ์น๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ก ํ์ฌ ํ์ด์ง์ ์ฟ ํค๋ชฉ๋ก์ ๋ณด๋ฉด JSESSIONID ๊ฐ ์๋ ๊ฒ์ด๋ค.
์๋ ์ฌ์ง์ ์ค์ ๋ก ์ฟ ํค์ ์ธ์ ์ด ๋ด๊ธฐ๋ ๋ชจ์ต์ด๋ค.
๋ก๊ทธ์ธ ์์ฒญ์ ๋ณด๋ด๋ฉด Response Header๋ก JSESSIONID๋ฅผ ๊ฐ์ง ์ฟ ํค๋ฅผ ์ ๋ฌ ๋ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ฆ, ์ธ์ ํค๋ฅผ ๋ด์ ์ฟ ํค๋ฅผ ์์ฒญ์ ๋ด์ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ์คํ๋ง ์๋ฒ์์ ์ฌ์ฉ์ ๋ง๋ค์ ์ธ์ ์ ๊ตฌ๋ถํ ์ ์๋ ๊ฒ์ด๋ค.