์คํ๋ง MVC 2ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค.
๋ก๊ทธ์ธ ์๊ตฌ์ฌํญ
๋ก๊ทธ์ธ ์ฒ๋ฆฌ ํํธ ํ์ต์ ์๋ ์๊ตฌ์ฌํญ์ ๊ตฌํํ๋ ๊ณผ์ ์ ํตํด ์ด๋ฃจ์ด์ง๋ค.
1. ๋ก๊ทธ์ธ ์ ํ ํ๋ฉด์๋ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ ๋ฒํผ์ด ์กด์ฌํ๋ค.
2. ๋ก๊ทธ์ธ ํ ํ ํ๋ฉด์๋ ํ์ ์ด๋ฆ, ์ํ ๊ด๋ฆฌ ๋ฒํผ, ๋ก๊ทธ์์ ๋ฒํผ์ด ์กด์ฌํ๋ค.
3. ๋ก๊ทธ์ธ ์ฌ์ฉ์๋ง ์ํ์ ์ ๊ทผํ๊ณ , ๊ด๋ฆฌํ ์ ์๋ค. ๋ง์ฝ ๋ก๊ทธ์ธํ์ง ์์ ์ฌ์ฉ์๊ฐ ์ํ ๊ด๋ฆฌ์ ์ ๊ทผํ ๊ฒฝ์ฐ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋ํ๋ค.
๊ธฐ๋ณธ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ
๋ก๊ทธ์ธ ์ปจํธ๋กค๋ฌ๋ ์๋น์ค ๋ก์ง์ ํธ์ถํ์ฌ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด ํ ํ๋ฉด์ผ๋ก ์ด๋ํ๊ณ , ๋ก๊ทธ์ธ์ ์คํจํ๋ฉด BindingResult์ reject()
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ObjectError๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ณด๋ฅผ ๋ค์ ์
๋ ฅํ๋๋ก ๋ก๊ทธ์ธ ํผ์ ๋ทฐ ํ
ํ๋ฆฟ์ผ๋ก ์ฌ์ฉํ๋๋ก ํ๋ฉด ๊ธฐ๋ณธ์ ์ธ ๋ก๊ทธ์ธ ๊ตฌํ์ด ์๋ฃ๋๋ค.
ํ์ง๋ง ๋ก๊ทธ์ธ ์ดํ ํ ํ๋ฉด์ ํ์ ์ด๋ฆ์ด ๋ณด์ฌ์ผ ํ๋ค๋ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ์ง๋ ๋ชปํ๋๋ฐ, ์ด๋ ๋ก๊ทธ์ธ์ ์ํ๊ฐ ์ ์ง๋์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ก๊ทธ์ธ์ ์ํ๋ฅผ ์ ์งํ๋ฉด์ ํ ํ๋ฉด์์ ํ์ ์ ๋ณด๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ ์ฟ ํค ๋๋ ์ธ์ ์ ์ด์ฉํ ์ ์๋ค.
์ฟ ํค๋ฅผ ์ด์ฉํ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ
์๋ฒ์์ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด HTTP ์๋ต(HttpServletResponse)์ ํ์ ์์ด๋๋ฅผ ๊ฐ์ง ์ฟ ํค๋ฅผ ๋ด์ ๋ธ๋ผ์ฐ์ ์ ์ ๋ฌํ๋ค. ๊ทธ๋ฌ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์์ผ๋ก ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋๋ง๋ค ํด๋น ์ฟ ํค๋ฅผ ๋ด์ ๋ณด๋ด์ค๋ค.
ํน์ ๋ง๋ฃ ๋ ์ง๊น์ง ์ ์งํ๋ ์์ ์ฟ ํค์ ๋ธ๋ผ์ฐ์ ์ข ๋ฃ ์ ๊น์ง๋ง ์ ์งํ๋ ์ธ์ ์ฟ ํค๊ฐ ์๋๋ฐ, ํด๋น ์์์ ๊ฒฝ์ฐ ์ธ์ ์ฟ ํค๋ฅผ ์ด์ฉํ๋ค.
์ฟ ํค๋ฅผ ์ด์ฉํจ์ผ๋ก์จ ๋ก๊ทธ์ธ ์ฟ ํค๊ฐ ์๊ฑฐ๋ ์์ด๋ ํ์์ด ์๋ ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ ์ ํ ํ๋ฉด์ผ๋ก ๋ณด๋ด๊ณ , ๋ก๊ทธ์ธ ์ฟ ํค๊ฐ ์์ผ๋ฉด์ ํ์์ธ ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ ํ ํ ํ๋ฉด์ผ๋ก ๋ณด๋ธ๋ค. ํ ํ๋ฉด์ ํ์ ์ ๋ณด ์ค ํ๋์ธ ํ์ ์ด๋ฆ์ ์ถ๋ ฅํด์ผ ํ๋ฏ๋ก ํ์ ๊ฐ์ฒด์ ๋ํ ๋ฐ์ดํฐ๋ ๋ชจ๋ธ์ ๋ด์ ์ ๋ฌํ๋ค.
๋ก๊ทธ์์์ ๊ฒฝ์ฐ ์ธ์
์ฟ ํค๋ฅผ ์ด์ฉํ๋ฏ๋ก ์น ๋ธ๋ผ์ฐ์ ์ข
๋ฃ ์ ์๋์ผ๋ก ๋ก๊ทธ์์์ด ๋๋ค. ๋ฐ๋ผ์ ๋ก๊ทธ์ธ ํ ํ ํ๋ฉด์ ์กด์ฌํ๋ ๋ก๊ทธ์์ ๋ฒํผ์ ๋๋ ์ ๋ ์ฟ ํค๋ฅผ ๋ง๋ฃ์ํค๋๋ก ๋ก์ง์ ๊ตฌ์ฑํ๋ฉด ๋๋ค. ์ด๋ Cookie ํด๋์ค์ setMaxAge(0)
์ ํตํด ๊ตฌํํ ์ ์๋ค.
์ธ์
์ฟ ํค์ ๋ณด์๋ฌธ์
์ฟ ํค๋ฅผ ์ฌ์ฉํด ํ์ ์์ด๋๋ฅผ ์ ๋ฌํจ์ผ๋ก์จ ๋ก๊ทธ์ธ์ ์ ์งํ ์ ์์๋๋ฐ, ์ฌ๊ฐํ ๋ณด์ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ฐ์ ์ฟ ํค ๊ฐ์ ์์๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ฟ ํค ๊ฐ(ํ์ ์์ด๋)์ ๊ฐ์ ๋ก ๋ณ๊ฒฝํ๋ฉด ๋ค๋ฅธ ์ฌ์ฉ์๋ก ๋๊ฐํ์ฌ ์ ์์ด ๊ฐ๋ฅํ๋ค.
๋ค์์ผ๋ก ์ฟ ํค์ ๋ณด๊ด๋ ์ ๋ณด๋ ํ์ณ๊ฐ ์ ์๋ค๋ ์ ์ด๋ค. ๋ง์ฝ ์ฟ ํค์ ๊ฐ์ธ์ ๋ณด๊ฐ ์๋ค๋ฉด ํด๋น ์ ๋ณด๊ฐ ์น ๋ธ๋ผ์ฐ์ ์๋ ๋ณด๊ด๋๊ณ , ๋คํธ์ํฌ ์์ฒญ ์๋ง๋ค ๊ณ์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ ๋ฌ๋๋ค. ๊ทธ ๊ณผ์ ์์ ์ฟ ํค์ ์ ๋ณด๊ฐ ํ์ทจ๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
์ฟ ํค๋ฅผ ํตํด ๋ณด์ํด์ผ ํ ์ง์ ์ ๋ํด ์์๋ณด์๋๋ฐ, ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ฟ ํค์ ์ค์ํ ๊ฐ์ ๋ด์ง ์๊ณ , ์ฟ ํค์ ๋ด์ฉ์ ์์ธก ๋ถ๊ฐ๋ฅํ ์์์ ๋๋ค ๊ฐ(ํ ํฐ)์ ๋ฃ์ด ์๋ฒ์์ ํ ํฐ๊ณผ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋งตํํจ์ผ๋ก์จ ์ธ์ํ๋๋ก ํ๋ค. ํน์ฌ ์ 3์๊ฐ ์ฟ ํค๋ฅผ ํ์ทจํ์ฌ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์๋ฒ์์ ํด๋น ํ ํฐ์ ๋ง๋ฃ์๊ฐ์ ์งง๊ฒ ์ ์งํ๊ณ , ํดํน์ด ์์ฌ๋๋ ๊ฒฝ์ฐ ์๋ฒ์์ ํ ํฐ์ ๊ฐ์ ๋ก ์ ๊ฑฐํ๋๋ก ํ๋ฉด ๋๋ค.
๊ฒฐ๊ตญ ์ฟ ํค์ ๋ํ ๋ณด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์ค์ํ ์ ๋ณด๋ฅผ ๋ชจ๋ ์๋ฒ์ ์ ์ฅํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์์ธก ๋ถ๊ฐ๋ฅํ ์์์ ์๋ณ์ ๊ฐ์ผ๋ก ์ฐ๊ฒฐํด์ผ ํ๋ค. ์ด๋ ๊ฒ ์๋ฒ์ ์ค์ํ ์ ๋ณด๋ฅผ ๋ณด๊ดํ๊ณ ์ฐ๊ฒฐ์ ์ ์งํ๋ ๋ฐฉ๋ฒ์ ์ธ์ ์ด๋ผ๊ณ ํ๋ค.
์ธ์ - ๋ก๊ทธ์ธ
์ธ์ ์ ์ด์ฉํ ๋ก๊ทธ์ธ์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
1. ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ์์ด๋์ ๋น๋ฐ๋ฒํธ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ฉด ์๋ฒ์์ ํด๋น ์ฌ์ฉ์๊ฐ ๋ง๋์ง ํ์ธํ๋ค. ๋ง์ฝ ์ผ์นํ ๊ฒฝ์ฐ ์ธ์ ์์ด๋๋ฅผ ์์ฑํ๋๋ฐ, ์ด๋ ๊ฐ์ ์์ธก ๋ถ๊ฐ๋ฅํด์ผ ํ๋ค.(๊ฐ์ผ๋ก UUID๋ฅผ ์ด์ฉํ ์ ์์)
2. ์ด๋ ๊ฒ ์์ฑ๋ ์ธ์ ์์ด๋์ ๋ณด๊ดํ ๊ฐ(ํน์ ํ์ ๊ฐ์ฒด์ ๊ฐ)์ ์๋ฒ์ ์ธ์ ์ ์ฅ์์ ๋ณด๊ดํ๋ค.
3. ์๋ฒ๋ ์ธ์ ์์ด๋๋ง ์ฟ ํค์ ๋ด์์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๊ณ , ํด๋ผ์ด์ธํธ๋ ์ฟ ํค ์ ์ฅ์์ ์ธ์ ์์ด๋ ๊ฐ์ ๊ฐ์ง ์ฟ ํค๋ฅผ ๋ณด๊ดํ๋ค.
์ฌ๊ธฐ์ ์ค์ํ ์ ์ ํ์๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค. ์ค์ง ์์ธก ๋ถ๊ฐ๋ฅํ ์ธ์ ์์ด๋๋ง ์ฟ ํค๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๋ค.
4. ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์์ฒญ์ ์ ์กํ ๋ ์ธ์ ์์ด๋๋ฅผ ๋ด์ ์ฟ ํค๋ฅผ ์ ๋ฌํ๋ค.
5. ์๋ฒ์์๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ฌํ ์ธ์ ์์ด๋ ๊ฐ์ ํตํด ์ธ์ ์ ์ฅ์๋ฅผ ์กฐํํ์ฌ ๋ก๊ทธ์ธ ์ ๋ณด๊ดํ ์ธ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ฟ ํค์๋ ์ค์ํ ์ ๋ณด๊ฐ ๋ด๊ฒจ์์ง ์๊ณ ์๋ฒ์์ ์ค์ ์ ๋ณด๋ฅผ ๋ชจ๋ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฟ ํค๊ฐ ๊ฐ์ง ๋ณด์๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
์ง์ ๋ง๋ ์ธ์ ์ ์ด์ฉํ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ
ํฌ๊ฒ ์ธ ๊ฐ์ง ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด ๋๋ค.
1. ์ธ์ ์์ฑ - ์ธ์ ์ ์ฅ์์ ์๋ก ์์ฑํ ์ธ์ ์์ด๋์ ๋ณด๊ดํ ๊ฐ์ ์ ์ฅํ๊ณ ์๋ต ์ฟ ํค๋ฅผ ์์ฑํด์ ํด๋ผ์ด์ธํธ์ ์ ๋ฌ
2. ์ธ์ ์กฐํ - ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ์ธ์ ์์ด๋ ์ฟ ํค ๊ฐ์ผ๋ก ์ธ์ ์ ์ฅ์์ ๋ณด๊ดํ ๊ฐ ์กฐํ
3. ์ธ์ ๋ง๋ฃ - ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ์ธ์ ์์ด๋ ์ฟ ํค ๊ฐ์ผ๋ก ์ธ์ ์ ์ฅ์์ ๋ณด๊ดํ ์ ๋ณด ์ ๊ฑฐ
class SessionManagerTest {
SessionManager sessionManager = new SessionManager();
@Test
void sessionTest() {
//์ธ์
์์ฑ
MockHttpServletResponse response = new MockHttpServletResponse();
Member member = new Member();
sessionManger.createSession(member, response);
//์์ฒญ์ ์๋ต ์ฟ ํค ์ ์ฅ
MockHttpServletRequest request = new MockHttpServletRequest();
request.setCookies(response.getCookies());
//์ธ์
์กฐํ
Object result = sessionManager.getSession(request);
assertThat(result).isEqualTo(member);
//์ธ์
๋ง๋ฃ
sessionManager.expire(request);
Object expired = sessionManager.getSession(request);
assertThat(expired).isNull();
}
}
์๋ธ๋ฆฟ HTTP ์ธ์ ์ ์ด์ฉํ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ
HttpSession
์ธ์ ์ ์ง์ ๋ง๋ค์ด ์ ์ฉํ ์๋ ์์ง๋ง, ๊ฝค๋ ๋ฒ๊ฑฐ๋ก์ด ์์ ์ด๋ค. ๋ฐ๋ผ์ ์๋ธ๋ฆฟ๋ HttpSession์ด๋ผ๋ ์ธ์ ๊ฐ๋ ์ ์ง์ํ๋ค.
์๋ธ๋ฆฟ์ ํตํด HttpSession์ ์์ฑํ๋ฉด JSESSIONID
๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง๋ฉด์ ์ถ์ ๋ถ๊ฐ๋ฅํ ๋๋ค ๊ฐ์ ๊ฐ์ง๋ ์ฟ ํค๋ฅผ ์์ฑํ๋ค.
//์์๋ฅผ ์ ์ํ๋ ํด๋์ค์ด๋ฏ๋ก ๊ฐ์ฒด๊ฐ ์์ฑ๋์ง ์์, ๋ฐ๋ผ์ public class๋ก ์ ์ธํ๊ธฐ๋ณด๋ค๋ interface๋ abstract๋ก ์ ์ธํ ์ ์์
public abstract class SessionConst {
public static final String LOGIN_MEMBER = "loginMember";
}
@PostMapping("/login")
public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletRequest request) {
if (bindingResult.hasErrors()) {
return "login/loginForm";
}
Member loginMember = loginService.login(form.getLoginId(), form.getPassword());
if (loginMember == null) {
bindingResult.reject("loginFail", "์์ด๋ ๋๋ ๋น๋ฐ๋ฒํธ๊ฐ ๋ง์ง ์์ต๋๋ค.");
return "login/loginForm";
}
//๋ก๊ทธ์ธ ์ฑ๊ณต ์ฒ๋ฆฌ; ์ธ์
์ด ์์ผ๋ฉด ์ธ์
๋ฐํ, ์์ผ๋ฉด ์ ๊ท ์ธ์
์์ฑ
HttpSession session = request.getSession();
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember); //์ธ์
์ ๋ก๊ทธ์ธ ํ์ ์ ๋ณด ๋ณด๊ด
return "redirect:/";
}
@GetMapping("/")
public String homeLogin(HttpServletRequest request, Model model) {
HttpSession session = request.getSession(false); //true์ผ ๊ฒฝ์ฐ ๋ก๊ทธ์ธ ํ์ง ์์ ์ฌ์ฉ์์๊ฒ๋ ์๋ฏธ ์๋ ์ธ์
์ด ์์ฑ๋จ
if (session == null) {
return "home";
}
Member member = (Member) session.getAttribute(SessionConst.LOGIN_MEMBER);
if (member == null) {
return "home";
}
model.addAttribute("member", member);
return "loginHome";
}
1. ์ธ์ ์์ฑ๊ณผ ์กฐํ
์ธ์
์ ์์ฑํ๋ ค๋ฉด request.getSession()
๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋๋ฐ, ํด๋น ๋ฉ์๋์๋ create
์ต์
์ด ์กด์ฌํ๋ค.
request.getSession(true)
์ธ ๊ฒฝ์ฐ ์ธ์
์ด ์์ผ๋ฉด ๊ธฐ์กด ์ธ์
์ ๋ฐํํ๊ณ , ์์ผ๋ฉด ์๋ก์ด ์ธ์
์ ์์ฑํด ๋ฐํํ๋ค.(๊ธฐ๋ณธ ๊ฐ์ด true)
request.getSession(false)
์ธ ๊ฒฝ์ฐ ์ธ์
์ด ์์ผ๋ฉด ๊ธฐ์กด ์ธ์
์ ๋ฐํํ๊ณ , ์์ผ๋ฉด ์๋ก์ด ์ธ์
์ ์์ฑํ์ง ์๊ณ null์ ๋ฐํํ๋ค.
2. ์ธ์ ์ ๋ก๊ทธ์ธ ํ์ ์ ๋ณด ๋ณด๊ด
์๋ธ๋ฆฟ์ ํต์ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ๋ฏ๋ก ์ธ์
์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ ๋ฐฉ๋ฒ์ request.setAttrubute()
์ ์ ์ฌํ๋ค. ํ๋์ ์ธ์
์ ์ฌ๋ฌ ๊ฐ์ ์ ์ฅํ ์๋ ์๋ค.
@SessionAttribute
์คํ๋ง์ ์ธ์
์ ๋ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก @SessionAttribute
๋ฅผ ์ง์ํ๋๋ฐ, ์ธ์
์ ์ฐพ๊ณ , ์ธ์
์ ๋ค์ด์๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๋ฒ๊ฑฐ๋ก์ด ๊ณผ์ ์ ์คํ๋ง์ด ํ ๋ฒ์ ์ฒ๋ฆฌํด ์ค๋ค.
@GetMapping("/")
public String homeLoginSpring(@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member member, Model model) {
if (member == null) {
return "home";
}
model.addAttribute("member", member);
return "loginHome";
}
์ด๋ฏธ ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์๋ฅผ ์ฐพ์ ๋๋ ์์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋๋ฉฐ, ํด๋น ๊ธฐ๋ฅ์ ์ธ์ ์ ์์ฑํ์ง๋ ์๋๋ค.
์ธ์ ์ ๋ณด์ ํ์์์ ์ค์
์ธ์ ์ ๋ณด
๋ค์๊ณผ ๊ฐ์ด ์ธ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
@GetMapping("/session-info")
public String sessionInfo(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session == null) {
return "no session";
}
session.getAttributeNames().asIterator()
.forEachRemaining(name -> log.info("session name={}, value={}", name, session.getAttribute(name)));
log.info("sessionId={}", session.getId()); //JSESSIONID์ ๊ฐ
log.info("getMaxInactiveInterval={}", session.getMaxInactiveInterval()); //์ธ์
์ ์ ํจ ์๊ฐ
log.info("getCreationTime={}", session.getCreationTime()); //์ธ์
์์ฑ์ผ์
log.info("getLastAccessedTime={}", session.getLastAccessedTime()); //์ธ์
๊ณผ ์ฐ๊ฒฐ๋ ์ฌ์ฉ์๊ฐ ์๋ฒ์ ์ ๊ทผํ ์ต๊ทผ ์๊ฐ
log.info("isNew={}", session.isNew()); //์๋ก ์์ฑ๋ ์ธ์
์ธ์ง ์ฌ๋ถ
return "print session";
}
ํ์์์ ์ค์
HttpSession์ invalidate()
๋ฉ์๋๋ฅผ ํธ์ถํจ์ผ๋ก์จ ์ง์ ์ธ์
์ ์ญ์ ํ ์ ์์ง๋ง, ํด๋น ๊ธฐ๋ฅ๋ง ์กด์ฌํ ๊ฒฝ์ฐ ๋ก๊ทธ์์์ ์ ํํ์ง ์๊ณ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข
๋ฃํ์ ๋ ์๋ฒ ์
์ฅ์์ ์ธ์
๋ฐ์ดํฐ ์ญ์ ์์ ์ ํ๋จํ๊ธฐ๊ฐ ์ด๋ ต๋ค. HTTP๊ฐ ๋น์ฐ๊ฒฐ์ฑ์ด๊ธฐ ๋๋ฌธ์ ์๋ฒ ์
์ฅ์์๋ ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข
๋ฃํ๋์ง ์ธ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ HttpSession์ ์ฌ์ฉ์๊ฐ ์๋ฒ์ ์์ฒญํ ์ต๊ทผ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก 30๋ถ ๊ฐ ์ธ์
์ ์ ์งํ๊ณ , ํด๋น ์๊ฐ ๋์ ์์ฒญ์ด ์์ ๊ฒฝ์ฐ ํ์์์์ผ๋ก WAS๋ ํด๋น ์ธ์
์ ์ ๊ฑฐํ๋ค. ์๊ฐ์ application.properties์ server.servlet.session.timeout
๊ฐ์ ์ถ๊ฐํด ์ฃผ๋ฉด ๋ณ๊ฒฝํ ์ ์๋ค.
'Language & Framework > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํ๋ง MVC] ์์ธ ์ฒ๋ฆฌ์ ์ค๋ฅ ํ์ด์ง (0) | 2023.03.03 |
---|---|
[์คํ๋ง MVC] ๋ก๊ทธ์ธ ์ฒ๋ฆฌ(2) - ํํฐ, ์ธํฐ์ ํฐ (0) | 2023.03.03 |
[์คํ๋ง MVC] ๊ฒ์ฆ(2) - Bean Validation (0) | 2023.02.21 |
[์คํ๋ง MVC] ๊ฒ์ฆ(1) - Validation (0) | 2023.02.12 |
[์คํ๋ง MVC] ๋ฉ์์ง, ๊ตญ์ ํ (0) | 2023.02.11 |