본문 바로가기

Programming/Node.js

5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [1]

node js logo image

 

 

 

 

너무나도 당연한 이야기이지만, 다소 어려울 수 있는 이야기를 해보겠습니다.

 

우리가 어떤 사이트에 '로그인'을 했다고 가정해 보겠습니다. 그런데 그 사이트에서 새로고침을 실행합니다. 자, 그럼 여기서 로그인은 어떻게 될까요? 당연히 로그인이 되어있는 상태로 유지가 되어 있습니다. 이는 너무나도 당연한 이야기라고 생각하실 것입니다. 

 

하지만, 이 상황은 전혀 '당연한' 것이 아니라고 보셔야 합니다. 새로고침을 했다는 것은 곧 '새로운 req'를 보냈다는 의미가 되는 것이기 때문이죠. 새로운 req가 갔다는 것은, 서버에서 res가 갔다는 것을 의미합니다. 하지만 사용자가 로그인 된 상태를 유지하고 있다는 의미가 되는 것이죠. 이는 곧 클라이언트가 서버에 '사용자가 누구인지를 계속 알려주고 있기 때문에' 가능한 것입니다. 

 

 


 

 

쿠키는 사용자에 대한 정보를 기억하기 위해, 헤더에 기록되는 'K-V' 값 형태로 전송됩니다. 쿠키가 생성되고 작동하게 되는 순서는 기본적으로 (1) 클라이언트 req (2) 서버가 res 보내면서 쿠키를 함께 보낸다 (3) 브라우저는 해당 쿠키를 저장한다 (4) 다음 req 발생 시 받아둔 쿠키를 포함해 서버에 보낸다 (5) 서버는 쿠키와 함께 들어온 req를 통해 사용자를 파악한다, 이렇게 작동합니다. 

 

브라우저 레벨에서는 받아놓은 쿠키가 있을 경우, 자동으로 쿠키를 서버에 포함해서 보내게 됩니다. 그래서 별다른 처리가 없죠. req를 받아서 서버에서 res를 보낼 때 코드로 처리하게 됩니다. 이 때 서버에서 클라이언트에 요청한 사용자를 추정할 수 있을 만한 정보로 쿠키를 만들어 보내는 것입니다. K-V 형태의 값이라고 했는데, name=johndoe와 같은 형식이 되는 것이죠.

 

결국 이런식으로 사용자를 식별할 수 있는 정보가 req와 res 사이에 오고가는 것입니다. 자, 이제 원리를 알았으니 최근 몇년간 지속적으로 쿠키사용 금지와 관련된 기사가 많았던 것이 이해가 가기 시작합니다. 쿠키를 정기적으로 삭제하는 것도 이러한 값으로 인한 개인정보 유출이 되지 않도록 하는 방법인 것이죠.