흔히 BackEnd라고 불리는 Server 단과 FrontEnd라고 불리는 Browser 단은 지극히 독립적이다. Server는 특정 요청에 따라 특정 응답을 해주는 머신에 불과하고, Browser는 유저와 구체적으로 상호작용하는 부분이다.
이 때, http protocol은 Stateless 를 특징으로 한다. 다시 말해, 특정 상태를 기억하거나 하지 않는다. 이것이 의미하는 바는 크다. Browser에서 유저가 한 동작을 Server는 기억하지 못할 뿐만 아니라, 그 유저가 누구인지도 알 수 없다.
따라서 우리는 매 요청마다 유저가 누구인지에 관한 정보를 담아서 Server로 전송해야하고, Server는 그 정보를 통해 누구인지를 식별할 수 있어야한다.
이를 위해 일반적으로 우리는 express-session 라이브러리를 사용하게 된다.
express-session을 인스톨 한 후, 패키지를 import한 뒤 미들웨어와 같이 사용하면 된다.
app.use(session({
genid: function(req) {
return genuuid() // use UUIDs for session IDs
},
secret: 'keyboard cat'
}))
옵션은 여러가지가 있으니 위 링크를 참조하길 바란다.
어쨌거나, 핵심은 express-session 패키지를 통해 미들웨어로서 session을 사용하면, 매 라우팅 과정에서 session이 발급된다는 점이다.(따라서, 라우터 위에 코드를 작성해야 한다.)
그러면 session을 어디서 확인할 수 있는가? 바로 개발자툴의 쿠키에서 확인 가능하다.
cookie란 session안에 담겨있는 data의 묶음으로, 여러가지 상태정보를 담을 수 있는 Object에 불과하다. 그냥 이름이 cookie일 뿐..
또한, 브라우저는 매 요청에 있어 세션이 있는 경우 세션을 req의 header에 담아서 보낸다. 이는 자동으로 이루어진다.
그리고 이를 통해 비로소 server와 브라우저간 통신이 가능해진다.
다시 말하지만 쿠키는 그저 Object이다. 따라서 우리는 session을 통해 cookie에 여러가지 정보를 담아둘 수 있다. 로그인 유지나 브라우저 마지막 설정상태, 다크모드 설정 여부 등의 '상태'정보를 cookie를 통해 저장해둘 수 있다는 점.
이는 stateless인 http 통신을 보완하기 위한 기술적 몸부림이다.
참고로 stateful한 연결을 만들고 싶다면 http protocol이 아닌 websocket protocol 등을 써야 한다.
웹소캣은 다음에 기회가 되면 다뤄보겠다.. 흔히 생각하는 채팅 앱 등을 만들때 유용하다.
'Learning-Log > Computer Science' 카테고리의 다른 글
[Solidity] CryptoZombies : Lesson 2 정리 (0) | 2023.03.31 |
---|---|
[Ethereum] 이더리움 입문자를 위한 사이트, CryptoZombies (0) | 2023.03.25 |
[Express] res.sendFile(path.join(__dirname, '~~'));에 대하여 (0) | 2023.01.12 |
[WSL] WSL 강제 종료하기 (2) | 2022.10.04 |
Authentication(인증)과 Authorization(인가,권한 부여)에 대하여 (0) | 2022.08.24 |