반응형
Work with session 😉 session config priority
💡포스팅을 작성하게 된 배경
레거시 환경 중 하나를 푹 떠서 현행 스탠다드 환경으로 구성하는 미니 프로젝트가 있는데
단일서버로만 구성되어있는 걸 이중화 구성으로 옮기다 보니까 개발단에 가이드 드려야할 게 좀 있었다.
요 과정에서, 나도 개발할 때 뭉뚱그려서 이렇겠거니 하던 걸로 바로 답변하지 않고
더 정확하게 안내드리기 위해 인프라실 내 다른 분들과 우리 운영환경 구성에 대해 이야기 나누면서 정리해 보았다.
세션 설정의 우선순위에 대한 것도 그 중 한 부분이라, 까먹지 않기 위해 포스팅!
- session timeout이 필요한 이유
- 특수한 경우가 아닌 이상 커넥션을 불필요하게 계속 살려 둘 필요 XXX
- session을 invalidate 할 수도 있지만, 보통은 기본적으로 timeout을 깔고 있어 일정시간 inactive 인 경우 세션 만료시킴
- session timeout은 톰캣 기준으로 30분 디폴트로 설정되어 있으며,
꼭 필요한 경우가 아니라면 길게 잡아서 좋을 건 없음 LB 입장에서도 불필요한 로드를 오래 잡음 - Java web application에서 session timeout은 어떻게 설정하나?
- 소스코드에서 정의하기:
> ServeletContext에서는 setSessionTimeout()메서드를 제공함 아래와 같은 방식으로도 session timeout 설정 가능
@WebListener public class MyWebListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { ServletContextListener.super.contextInitialized(sce); sce.getServletContext().setSessionTimeout(60); // timeout 값은 "분" 단위로 설정합니다. } }
> 특정 세션에 대해 컨트롤하기 위해서는 HttpSession 인터페이스에서 제공하는
setMaxInactiveInterval() 메서드를 사용할 수 있음
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
session.setMaxInactiveInterval(3600);
// 이 경우에는 timeout이 "초" 단위로 설정됩니다.
}
- 어플리케이션의 /WEB-INF/web.xml 에서 설정하기:
> 어플리케이션 내 web.xml에서도 아래와 같이 설정을 넣어줄 수 있다. was 단 설정과 동일
<session-config> <session-timeout>60</session-timeout> <- 분단위 설정 </session-config>
- (잘 알려진) WAS configuration에서 설정하기:
> tomcat 기준으로는 ../conf/web.xml 에서 아래의 값을 변경하여 적용할 수 있음
<session-config> <session-timeout>60</session-timeout> <- 분 단위 설정이고 default 는 30 </session-config>
- 세션 타임아웃 설정 적용의 우선순위
- 대부분의 우선순위들이 그러하듯 target specific 할수록 더 높은 우선순위를 가짐
- 1순위: 소스코드상에서 설정한 세션 타임아웃값(모든 다른 설정값을 override함)
- 2순위: 어플리케이션 레벨의 설정값 (/WEB-INF/web.xml)
- 3순위: WAS(이 경우 tomcat) config 내 web.xml 설정값
대부분의 경우에는 저 3순위를 상속해서 사용하겠지만, 부득이하게 특정 도메인에서 값을 더 길게 가져가야 하는 경우
1,2 순위 중에서 영향 범위를 고려하여 적용하시면 되겠습니다 ~!
- 그러면, LB(loadbalancer)가 개입하는 경우엔 어떻게 되나요?
- 엔터프라이즈 환경에서 운영서버가 단일 구성되어 있는 경우는 많지 않은데,
다중 구성인 경우의 세션 유지 방식에 대해서는 사내 인프라 담당자의 가이드를 받으시면 됩니다.
우리회사는 ... 팀즈로 연락주세요 😂 - 우리 환경에 대해서는 깔 수 없겠지만, 1,2순위에서 설정하는 것이 best practice 인 상황이었다.
- 사실 3순위를 수정할 수도 있었지만, 프로비저닝 로직이 해당 서비스 유형에 대해서는 동일한 global config 값으로 엎어치도록 짜여 있어 3순위를 손대 주기 위해서는 조건 분기를 넣어줘야 했는데, 아주 소수의 서비스를 위해 글로벌로 작동하는 프로비저닝 로직에 자꾸 조건분기를 추가하는 건 효율 면에서 되게 별로... 같다.
- 이 부분은 이야기가 생각보다 길어질 것 같아서 다음 포스팅에서 적기로 한다.
이어지는 포스팅 >> 이중화 환경에서의 로드밸런싱(윗 줄의 '다음 포스팅'을 누르셔도 동일한 링크로 연결됩니다.)
https://contradicto-lee.tistory.com/58
이중화(혹은 다중화) 환경에서의 로드밸런싱: 왜 새로고침할 때마다 로그인을 하지 않아도 될까?
티스토리 에디터 진짜 한숨만 나옴 에디터를 잘 만들어 줄 수 없다면 노션에서 붙여넣기라도 예쁘게 갖다넣게 해주세요ㅠ 좀 전에 올렸던 세션 타임아웃의 연장선 ! 개발자 분께 세션 관련해서
contradicto-lee.tistory.com
반응형
'Developments' 카테고리의 다른 글
Python - 특정 타입 영화 예매 오픈시 알림 받기(ex. 용아맥 티켓팅 등) : Beautifulsoup, bs4 파이썬 크롤링 (0) | 2021.08.01 |
---|---|
200828 TIL: Python - SMTP를 이용한 메일 발송 (0) | 2020.08.28 |
Hibernate ddl-auto 설정 (0) | 2020.08.18 |
[이럴땐이렇게] Spring boot application.yml 파일 mapping value 에러발생 시 (yaml syntax) (1) | 2020.08.18 |
200814 Spring Security 구현 (0) | 2020.08.14 |