[Java]Session & Cookie
by EastGlow
1. 서론
일반적으로 웹 서비스를 구현할 때, 클라이언트마다 구분값을 주기 위해 고유의 아이디나 계정을 부여하곤 한다. 하지만 이러한 클라이언트 고유값은 파라미터로 일일이 URL마다 들고다니지 않으면(www.github.com?id=eastglow 와 같이) 일반적으로 지금 페이지에 머물고 있는 클라이언트가 어떤 클라이언트인지 알 수가 없다.
때문에 어떠한 곳에 이러한 클라이언트 정보를 담아놓고 필요할 때마다(로그인 여부 체크라든가, 권한 체크라든가…) 꺼내쓸 수 있는 방법이 있는데 그것이 바로 쿠키와 세션이다.
2. 본론
1) 쿠키 (Cookie)
쿠키란 클라이언트가 어떠한 웹 사이트를 방문할 경우 그 사이트의 서버로부터 클라이언트의 컴퓨터에 발행되는 일종의 기록 정보 파일을 일컫는다. 보통 이름, 값, 만료날짜, 경로 정보 등이 들어있다.
서버가 쿠키를 클라이언트에 저장해 두면 쿠키에 대한 정보를 필요로 하는 페이지가 서버에 요청될 때 저장해 놓은 쿠키에 대한 정보를 서버에 다시 건내준다. 쿠키는 클라이언트 측에 대한 정보를 보관해두었다가 서버의 요청에 의해 정보를 원하는 순간 사용할 수 있도록 하는 것이다.
장점
- 서버가 아닌 클라이언트에게 정보를 저장하기 때문에 서버의 부하를 줄일 수 있다.
- 서버에 요청 시 빠른 속도로 응답할 수 있다.
단점
- 한 클라이언트에 300개까지만 저장 가능.
- 하나의 도메인 당 20개의 값만 가질 수 있다. 20개를 초과하면 그 중 제일 참조하는 값이 적은 것이 사라진다.
- 쿠키 하나당 4KB까지 저장 가능.
2) 세션 (Session)
세션은 쿠키랑 비슷하면서도 조금은 다른 점을 가지고 있다. 세션은 일반적으로 클라이언트와 서버 간 네트워크 연결이 지속 유지되고 있는 상태를 뜻한다.
즉, 클라이언트 쪽에서 브라우저를 통해 서버에 접속하고 있는 동안만 유지되며 종료하면 사라지게 된다. 그래서 클라이언트가 Request를 보내면 해당 서버에서 클라이언트에게 유일한 ID를 부여하는데 이것이 바로 세션 ID다.
이 세션 ID를 통해서 페이지 이동 시 이용하거나, 클라이언트가 재접속했을 때 구분하는 수단으로 이용할 수 있다.
장점
- 각 클라이언트마다 고유 ID를 부여하기 때문에 유일성이 보장된다.
- 클라이언트가 아닌, 서버에 정보들을 저장하기 때문에 보안 면에서 쿠키보다 우수하다.
- 쿠키는 파일로 저장되고 만료날짜가 지나더라도 남아있기 때문에 위험할 수 있지만 세션은 브라우저 종료와 동시에 삭제되기 때문에 역시나 보안 측면에서 더 유리하다.
단점
- 서버에 정보가 있기 때문에 그에 필요한 처리를 서버가 하여 쿠키와 비교하면 속도가 느리다.
- 서버 자원을 이용하여 만들기 때문에 무분별하게 만들게 되면 서버의 메모리나 자원, 속도 등 전반적으로 악영향을 끼칠 수 있다.
3.결론
예전에는 쿠키를 이용한 로그인 체크 방식이나 쿠키를 이용한 기능들이 많았지만 보안에 대한 중요성이 높아지면서 세션을 더 선호하는 느낌이다.
나 또한 고객사 프로젝트 중 로그인 구현을 쿠키를 이용한 방식으로 한 것이 있었는데 시큐어 코딩과 관련하여 작업을 할 때 세션을 이용하라는 지침을 받기도 하였다. 쿠키는 보안에 취약하기 때문이다.
그렇다고 무조건 세션을 이용하라는 것은 아니며 두 가지 방식의 차이점과 적절한 용도를 알고 쓰면 좋지 않을까 생각된다.
Subscribe via RSS