-mysql5.5ver+Spring 사용중 Mysql의 시간과 Spring 시간이 불일치하는 문제 발생-
원인예측 : Mysql에서 나의 특정 테이블의 특정 시간컬럼의 속성은 TIMESTAMP이다 . TIMESTAMP의 특성상 기본적인 TIME_ZONE을 설정해주면 저장될때는 당연히 UTC 기반으로 저장되고 , 출력 될때는 TIME_ZONE에 맞게 변형되어서 출력된다. 다만, 나의 경우에는 TIME_ZONE을 설정해주지 않아서 이상한 문제가 발생함.
9~16 : 인자로 들어오는 THE_CATEGORY가 BOARD_SEQUENCES테이블의 CATEGORY에 할당되며,
BOARD_SEQUENCES테이블의 CURRVAL을 0으로 초기화 한다.
프로시져의 구성.
MODIFIES SQL DATA : MODIFIES SQL DATA 는 함수혹은 프로시져가 db에 저장된 data를 수정할수있는 명령문을 포함한다는 것을 의미한다. 이것은 함수혹은 프로시저에 DELETE, UPDATE, INSERT, REPLACE 또는 DDL과 같은 명령문이 포함 된 경우 넣어준다. DETERMINISTIC : 요약하면 함수혹은 프로시져의 인자값이 바뀌지 않는 이상 함수혹은프로시저의 호출은 한번만 한다는 것이다.
서버가 최초로 jsp 페이지에 접근할때 , 마땅한 설정이 없다면 톰켓이 JSESSIONID 쿠키를 자동으로 생성해서 client로 전달한다.
JSESSIONID : 톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키
2 : client->server 로 JSESSIONID 쿠키를 가져오기 위해서 HttpServletRequest 객체를 선언하였다.
7 : 세션획득. JSESSIONID 쿠키가없다면 새 사용자라는 것으로 인식하여 새로운 Session을 만들고 반환,
JSESSIONID 쿠키가 있으면 존재하는 Session을 반환함.
8 : 세션 key-value를 한번 설정해두면 프로젝트내 모든 파일에서 "Session_userID" 에 접근이 가능하다.
프로젝트내 모든 파일에서 "Session_userID" 에 접근이 가능하다는 소리는 무슨 원리냐면은 ...
SSR원리에 의해 모든 view파일을 서버에서 만들어주고 client로 보내준다.
즉 , 서버 메모리에서 뷰단내에 있는 세션 key에 value를 붙여넣는 원리이다.
보조설명으로, 브라우저의 쿠키중 JSESSIONID 의 value는 특정사용자에 대한 값으로 , 서버가 특정 유저를 추적하는데 이용한다. 클라이언트가 Session key인 "Session_userID"의 value를 이용하려 할때, 우리가 외관적으로 보기에 모든 클라이언트에 동일한 session key ("Session_userID") - value 를 가지는 것 처럼 보이지만 실제로는 JSESSIONID를 통해 session들을 구분하고 , 구분된 세션에서 session key ("Session_userID")에 대한 값을 얻는것이다. 즉, 클라이언트마다 JSESSIONID가 다르므로 다른 Session value를 얻게된다.
추가로) JSESSION value와 request를 통해 얻게되는 Httpsession객체.getId() 값은 동일하다.
하단의 결과 이미지들로 , 우리는 다른 브라우저마다 다른 세션 value를 얻은 것을 확인 할 수 있고,
JSESSIONID도 각각 다른 것을 확인 할 수 있다.
( view 단에서는 단순히 Session : ${Session_userID} 을 이용하였다. )
chrome에서 teamproject/test url로 접속
Internet Explorer 에서 teamproject/test url로 접속
- 세션 value 얻기 -
메소드에서 HttpServletRequest 파라미터를 가지는 대신 HttpSession 파라미터를 넣고
HttpSession객체변수.getAttribute("key값"); 을 통하여 컨트롤러에서 데이터를 얻어 올 수도 있다.