초보 개발자 쿠키와 세션의 차이
우리는 브라우저를 이용하면서 혹은 인터넷을 이용하면서
필연적으로 쿠키 혹은 세션에 관해 들어보았을 것입니다.
그렇다면 도대체 이 쿠키와 세션은 무엇이길래
이토록 자주 언급되는 것일까요? 이 둘의 차이는 무엇일까요?
오늘도 역시 전혀 비전문적이고 알기 쉽게 알아보겠습니다.
목차.
- 쿠키란?
- 세션이란?
- 마치며.
1. 쿠키란?
클라이언트는 자신의 브라우저에 key와 value값으로 이루어진
쿠키를 생성 혹은 저장할 수 있습니다.
처음 보는 홈페이지를 방문한다면 우리는 자주
홈페이지에서 무언가 수락하거나 동의하라는 창을 자주 봤을 것입니다.
이는 쿠키의 저장을 허용하라는 창인데요. 과연 쿠키는 어떻게 사용될까요?
쿠키가 없다면 어떨지 한번 상상해 봅시다.
저는 오늘 온라인 마켓에서 새로운 물건을 구매하기 위해
홈페이지에 접속했습니다.
여러 제개 어울리거나 마음에 드는 옷, 가구 등을 구매하기 전
제 장바구니에 넣어 두었습니다.
하지만 어째서인지 오늘은 사고 싶지 않아 그대로 사이트를 닫아 버렸죠.
그렇게 다음날 저는 다시 사고 싶다는 생각이 들어 홈페이지에 들어가니
제가 구매하려고 장바구니에 담아놓은 물건들이 다 없어졌습니다.
그렇게 저는 제가 장바구니에 넣어 둔 모든 물건들을 다시 하나하나
찾아 구매를 해야 했습니다.
유저의 입장에서 이러한 일이 발생한다면 아주 불편할 것이고
회사의 입장에서는 유저의 편의성을 고려하지 않아 유저의 지속적인
사용률을 높이지 못할 것입니다.
쿠키는 쉽게 말하자면 내가 들고 다니는 개인 수첩이라고 생각하시면 됩니다.
그곳에 key와 value를 적어놓고 필요할 때마다 꺼내서 찾아보는 것입니다.
하지만 이러한 쿠키는 큰 단점이 하나 있습니다.
그것은 바로 상대적으로 보안에 취약하다는 점입니다.
내가 들고 다니는 수첩이기에 보안이 강할 것 같지만 전혀 그렇지 않습니다.
더군다나 회사 혹은 서비스를 제공하는 자의 입장에서는 더욱 그럴 것입니다.
그 이유는 쿠키의 key와 value를 유저가 각각 들고 있으며, 이는 유저가 원한다면
언제든지 key와 value를 바꿀 수 있기 때문입니다.
회사 혹은 서비스를 제공하는 입장에서는 개개인이 들고 다니는 개인수첩보다
회사 혹은 서비스를 제공하는 입장 측에 커다란 장부가 필요할 것입니다.
그래야지 모든 유저들을 한 장부에 몰아넣고 관리할 수 있을 테니까요.
그래서 세션이라는 것이 필요합니다.
아직!! 세션으로 넘어가기 전에 조금 더 필요한 정보를 리스트로 알려드리겠습니다.
쿠키는
1. 유저 즉 클라이언트 쪽에 저장됩니다.
2. key와 value로 나누어져 있습니다.
3. 사용 시간을 설정할 수 있습니다. 혹은 브라우저 자체를 종료 시 만료되게도 할 수 있습니다.
4. 쿠키는 유저 즉 클라이언트 쪽에 저장되기에 유저가 원한다면 언제든지 key와 value를
손쉽게 바꿀 수 있습니다.
5. 세션에 비해 상대적으로 보안에 취약합니다.
2. 세션이란?
자 이번에는 세션입니다.
과연 세션이란 무엇일까요?
사실 세션 또한 쿠키의 형태로 저장이 됩니다.
그런데 왜 같은 쿠키의 형태인데 일반 쿠키는 보안에 취약하고
세션은 그에 비해 더 안전하다는 것일까요??
그리고 또 도대체 어디에 어떻게 사용될까요?
세션이 없다면 어떤 일이 생길까요?
자 이번에도 우리는 같이 상상해 볼 수 있습니다.
오늘도 여전히 저는 물건을 구매하기 위해 온라인 쇼핑몰 사이트를
방문하였습니다. 접속하니 로그인을 하라고 하는군요.
로그인을 시도했습니다. 로그인이 성공적으로 이루어지고
제가 구매하고 싶은 물건도 차곡차곡 장바구니에 담았습니다.
그렇게 쇼핑을 하다가 실수로 다른 탭의 홈페이지를 닫으려다가
쇼핑몰 홈페이지 탭을 닫아버렸습니다.
당황하지 않고 다시 홈페이지에 들어가니, 로그인이 된 상태가 아니라
로그인을 다시 하라고 하는군요. 로그인을 시도하고 성공적으로 접속했습니다.
그렇게 다시 쇼핑을 이어가던 도중 홈페이지가 왠지 느린 것 같아 F5번을 눌러
홈페이지를 새로고침 했습니다. 그러니 또다시 로그인을 하라고 뜹니다.
저는 짜증이 나서 홈페이지를 닫아버렸습니다.
자 우리는 구글, 네이버, 유튜브 등등 한번 로그인을 하면 다음에 다시 홈페이지에
접속하여도 그대로 로그인이 남아있는 것을 확인할 수 있습니다.
왜 그런 것일까요?
이는 세션 덕분에 가능한 일입니다. 즉 세션이 없다면 유저는 서버에게
내가 알맞은 유저라는 것을 인증하지 못합니다.
서버는 인증이 안된 유저에게 유저의 정보를 줄 수 없겠지요.
그렇다면 세션으로 어떻게 인증을 할까요?
쉽게 쉽게 알아봅시다.
1. 당신은 홈페이지에 들어갑니다.
2. 그 후 당신은 쿠키에 저장된 세션에 대한 값을 서버에게 보냅니다.
3. 서버는 세션을 받은 뒤 과연 세션이 유요한 세션인지 확인합니다.
4. 세션이 유요 하다면 서버는 유저에 관한 정보를 브라우저에 보냅니다.
5. 브라우저는 서버로부터 유저에 관한 정보를 받아 로그인이 되어있음을 보여줍니다.
6. 이때 세션이 유요 하지 않다면 서버는 브라우저에게 세션이 없음을 알리고
브라우저는 로그인된 유저가 없다는 것을 표시합니다.
자 쉽게 생각한다면 유저를 인증하는 과정은 이렇게 이루어집니다.
당연히 좀 더 자세히 알아본다면 더 복잡합니다.
세션은 또한 일반적인 값이 아닌 이상한 값을 제공받습니다.
그리고 서버 또한 이러한 값을 저장하고 유저로부터 요청이 올 때마다
세션의 정보를 서버에 저장하고 있는 정보와 대조 한 뒤 알맞다면
유저의 정보를 보내주는 것입니다. 그렇기에 유저가 세션의 값을 변경한다면
유저의 정보가 노출되는 것이 아닌 단지 서버에서 유요 하지 않다고 판단하고
그 어떠한 유저에 관한 정보도 주지 않는 것이지요.
그렇기에 아까 앞서 말한 회사 혹은 서비스를 제공하는 자가 가져야 할 장부입니다.
이러한 세션이 저장된 장부를 서버에 저장하지 않는다면, 누구나 쉽게 유저 정보를
가져가고 이용하게 될 것이며, 그렇다면 세션을 쓰는 이유가 없겠지요.
자 그럼 조금 더 IT 스럽게 알아보겠습니다.
세션이란?
1. 쿠키의 형태로 저장된다.
2. 안의 값은 랜덤 하거나 읽기 어렵거나 불가능한 값이 저장된다.
3. 유저가 서버에 요청을 하면 유저는 세션의 값을 같이 서버에게 보내고
서버는 이 값을 자신의 장부와 대조해 유저가 유요 하거나 올바르다면
유저의 정보를 그렇지 않다면 유저에 관한 정보를 전혀 주지 않는다.
4. 그렇기에 세션은 쿠키보다 보안면에서 우수하다.
5. 세션 또한 사용 시간을 설정 가능하고, 또한 브라우저를 닫을 때 만료되게 만들 수 있다.
3. 마치며.
쿠키와 세션은 사용되는 위치가 다를 뿐 두 개 다 아주 자주 사용되고
유용합니다. 하지만 여전히 주의해야 할 것은, 분명 유저의 중요한 정보를
필요로 하는 요청이라면 세션을 이용해야 할 것입니다.
초보 개발자 카테고리는 항상 초보 개발자 혹은 개발을 막 시작하시는 분들께
최대한 이해하기 쉽고 흥미롭게 알려드리려 노력하고 있습니다.
무언가를 배울 때 흥미를 유발하는 게 배우기도 쉽고 머리에 남기도 좋습니다.
무작정 전문 기술 혹은 특징들을 주야장천 외워 사용하려면 머리만 아프고
기억에도 잘 남지 않죠. 그러니 제 글을 통해 조금이나마 쉽게 개념을 정리하시고
그 뒤 더욱 전문적인 지식이 필요하다면 한 단계 더 나아가 찾아보시는 것을 추천드립니다.
요즘은 독일에서 햇빛을 볼 일이 잘 없습니다.
벌써 1주일 넘게 비 혹은 눈만 오고 하늘이 항상 회색입니다.
그래서 그런지 기운이 잘 안 나네요.
하지만 그렇다고 축 쳐져있을 수는 없습니다.
여러분들도 오늘 하루 혹은 1주일이 힘들었더라도 항상 밝고
활기차셨으면 좋겠습니다.
항상 건강하고 도전하시기 바랍니다.
완벽한 준비란 없다, 완벽한 준비란 영원히 시작하지 않는 것과 같다.
Es gibt keine perfekte Vorbereitung.
Perfekte Vorbereitung ist das Gleiche, wie nie anzufangen.
'[Developer] 초보 개발자' 카테고리의 다른 글
타입스크립트란? Typescript란? 타입스크립트 배우기. (16) | 2021.02.28 |
---|---|
프로그래밍 실력을 한층 높여 줄 개발 3대 원칙! KISS 란? DRY란? YAGNI 란? (13) | 2021.02.21 |
내가 사용하는 VScode extention 추천. 비쥬얼 스튜디오 코드 익스텐션 추천. (10) | 2021.01.27 |
Progressive Web App이란? PWA란? 프로그레시브 웹 앱이란? (14) | 2021.01.24 |
프론트엔드란? 프론트엔드 공부방법. (22) | 2021.01.18 |