SpringFramework/BASIC

쿠키와세션,인터셉터를 활용한 자동로그인 개념 설명

유혁스쿨 2020. 9. 10. 05:00
728x90
반응형

자동로그인

브라우저창을 종료 하거나 세션의 유효시간이 만료가 된다면 세션내부의 로그인 데이터가 사라지게됩니다.
세션에는 고유 ID가 있는데 그것이 사라지고 새로 브라우저를 킨다면 새로운 고유 ID를 가진 세션객체가 생성됩니다.
이 상태로는 로그인 한 데이터가 없기 때문에 사용자가 재로그인 할 수밖에 없습니다.
네이버같은 경우 자동로그인 하지 않고 로그인했다가 브라우저를 껐다 키면 재로그인 해야하는 경험과 같습니다.

 


자동로그인 구현

 자동로그인을 체크 했을때 클라이언트 측에서 서버로 자동로그인이 체크 되었다는 증거를 추가로 넘겨줍니다.
서버에서 해당 증거를 확인하게되면 자동로그인에 관한 처리를 수행합니다.
체크값에 대해서 체크가 되었다 안되었다 정도로 판단하면 되므로 논리값으로 처리하면 될것입니다.
체크가 되었다면 서버쪽에서는 그 내용을 세션에 담으면 브라우저 종료후 재방문시 세션데이터 유지가 안되므로 쿠키라는곳에 자동로그인에 대한 증거를 남깁니다.
쿠키에 들어갈 자동 로그인에 관한 증거는 회원마다 유니크한 값이 들어가야합니다.
보통 세션의 아이디값, 세션의 아이디값은 아주 유니크한 값이기 때문에 절대 중복될 일이 없습니다.
세션아이디값을 쿠키에 담아줍니다.
response할 때 쿠키를 실어보내서 client 로컬저장소(HDD어딘가)에 쿠키를 저장합니다.
이 쿠키는 세션아이디값이 들어있는 상태입니다.

그렇다면 브라우저를 종료해도 HDD를 삭제하지 않는이상은 이 정보가 유효기간 만큼 남아있게됩니다.
쿠키의 수명을 3개월이라고 해놨다면 3개월동안 사용자의 로컬에 쿠키가 남아있게 됩니다.
자동로그인 같은 경우엔 컴퓨터에서 프로그램으로 정기적으로 쿠키를 제거하지 않는이상 유효시간만큼 살아있게됩니다
서버에 저장되어 브라우저 객체가 사라지면 같이 사라지는 세션과는 다릅니다.


다시 브라우저를 열고 홈페이지에 들어왔을때 어떻게하면 로그인이 유지 될수 있을까?

지속적으로 모든 페이지에서 쿠키값을 확인 한 다음 이 회원이 정말로 쿠키를 가지고있는 회원인지 지속적으로 판단해야합니다.
하지만 모든 페이지에서 지속적으로 판단해야하는 로직을 작성하게되면 너무 코드가 길어지게됩니다.
그래서 인터셉터를 여기서도 사용해줍니다.
인터셉터로 모든페이지에서 계속 지속적으로 쿠키를 확인해줍니다.

 


그렇다면 지금 들어온사람이 대체 어떤회원인지는 어떻게 판별할까요?

쿠키를 클라이언트에 저장하는것 뿐만아니라 추가로 DB에도 저장해줍니다.
aaa111라는 사람이 자동로그인을 시도한다면 쿠키에 이사람의 브라우저의 세션 아이디를 저장해서 로컬로 보냅니다.
쿠키 안에 저장된 세션아이디가 xxx111이라면, 해당 세션아이디를 DB 회원 테이블에 로그인을 성공한 회원의 세션아이디 컬럼에 저장해줍니다.
그 후 이 사람이 동일한 페이지에 재방문 재접속 했을 때, 서버는 로컬에서 쿠키값을 읽어들입니다.
xxx111이라는 쿠키에 저장된 세션값을 읽어들인 후 DB에서 xxx111이라는 세션아이디를 기준으로 회원 정보를 얻어옵니다.
그리고 반환된 회원 정보 객체를 세션에 다시 담아줍니다.
세션에 정보가 담겨있으므로 자동으로 로그인 처리가되고 브라우저가 켜져있는 동안 세션을 건드리지 않는이상은 로그인이 유지가 됩니다.


만약 자동로그인이 풀렸다면 즉, 로그아웃을 수행했다면

 로그아웃 한 회원 정보에서 session ID를 삭제 합니다.
이후 같은 컴퓨터에 다른사람이 새로운 계정으로 로그인한다면 해당 sessionID를 해당 페이지정보와 함께 다시 로컬에 저장해 줌과 동시에
DB에도 로그인을 성공한 또 다른 새로운 회원의 세션아이디 컬럼에 sessionID를 저장해주게됩니다.
아마 로그인이 성공한다면 아이디혹은 회원번호값 primaryKey를 기준으로 sessionID를 저장하게 되겠죠.
그후 그 컴퓨터로 사이트를 재 방문하게되면 서버에서는 로컬로부터 또 쿠키값을 읽어들입니다.
읽어들인 쿠키값을 기준으로 select문을 돌려서 회원정보를 가져온 후 session에 회원정보객체를 담아놓는다는것 입니다.

 

 


이러한 처리를 하다보면 인터셉터에서는 지속적으로 쿠키값을 읽고 세션을 확인하는 작업을 하게되어 다시 재로그인을 하지 않아도 되는것입니다.
이때, 로그아웃을 시도한다면 자동로그인을 풀어줘야합니다.
로그아웃을 했을때에는 사용자의 로컬에서 쿠키를 날려주는 로직과 DB에서 sessionID를 지워주는 로직까지 추가 해야합니다.
또 자동로그인을 언제까지 유지할지 유효기간까지 저장해주는것이 좋습니다.

728x90
반응형