2022.01.10 TIL

서승원·2022년 1월 10일
0

TIL

목록 보기
50/68

쿠키,세션

쿠키
쿠키는 요청해온 클라이언트 브라우저에 저장되는 기억공간이다. 작은 크기의 텍스트 파일로 서버에 요청을 할 때 쿠키에 적힌 내용을 동반한다.

위와같이, url에 QueryString이 입력되지 않으면, apple을 출력 후 , request로부터 cookie를 얻어 그에대한 배열을 출력하고, 입력되면 key,value 값을 갖는 cookie를 생성하는 코드를 짜고 , /abcd /abcd?~~ /abcd 로 번갈아가며 접속한 결과다. 쿠키가 생성되기 전인 첫 접속에는 쿠키가 생성되지 않아 null 값이 출력되고, 두 번째 입력에 banana가 출력되며 쿠키가 생성되고, 세번째 입력에cks 가 출력되는 모습이다. 이 때 확실히 구별해야 하는 것이 쿠키가 서버가 아닌 브라우저에 생성된다는 것이다. Chrome 을 통해 해당 페이지에서 위와같은 시행을 하면 같은 결과가 나오는데, Edge를 통해 apple을 출력하면 null값이 다시 출력된다. 서버에 저장됐다면, 해당 서블렛의 인스턴스는 재사용되기 때문에 이전에 생성한 cks가 출력되는 것이 정상이지만, 출력되지 않는다. 이로부터 쿠키는 브라우저에 저장된다는 것을 알아야 한다.

세션

세션은 서버쪽의 기억공간으로 Serverside Cookie 라고도 한다. 세션이 생성되는 방식을 알아보면, 요청이 들어오면 JSESSIONID 라는 이름을 가진 쿠키의 값이 있는지 확인한다, 없을 경우 request.getSession(true); 가 호출됐을 때 TOMCAT이 고유 번호를 생성해 해당 고유번호로 서버에 기억공간을 생성하고, 해당 고유번호를 Cookie 에 기록하는 응답을 생성한다. 그 다음부터는 쿠키가 해당 기억공간에 대한 정보를 동반해서 서블렛을 호출하고, 해당 세션이 return 되는 것이다.

쿠키와 세션은 브라우저 개별적으로 존재하는 기억장소이지만 쿠키의 정보는 브라우저에서 직접적으로 접근할 수 있어 조작이 가능하기 때문에 적절한 암호화가 필요하고, 세션은 브라우저에서는 세션에 접근할 수 있는 고유번호만을 가지고 있어서 조작의 여지가 적다. 하지만 실제 로그인,회원가입 등의 회원 시스템에는 쿠키가 더 많이 사용된다. 그것은 서버의 증설과 관련이 있다.

위와 같은 CRUD 시스템에서, 두 명의 사람이 이용한다면, 게시판 db에 INSERT를 할 때 , 각 ID에 대한 정보가 필요하고, 이는 각 브라우저마다 개별적으로 접근해야 게시글의 작성자에 대한 구분이 가능하다.

이런 시스템에서 서버가 여럿이라면, Switch를 통해 서버의 분배가 이뤄지는데, 만약 세션을 사용한다면, 로그인을 통해 서버에 요청하는 ID의 정보가 서버에 저장되고, 요청을 하는 브라우저에서는 세션에 접근하는 고유번호 밖에 없다. 서버를 구별해서 접속하기 떄문에, 자신의 ID가 등록된 서버에 분배되지 않는다면, 이용할 수 없는 상황이 생긴다.
쿠키를 이용할 경우, 어느 서버에 분배되더라도 브라우저에 암호화된 ID에 대한 정보가 있기 때문에 해당 쿠키를 이용해서 시스템을 이용할 수 있게 된다.

profile
2년차 백엔드 개발자, crimy

0개의 댓글