TIL 23-06-19

level·2023년 6월 19일

TIL

목록 보기
31/95

쿠키와 세션

쿠키

브라우저가 서버로부터 응답으로 Set-Cookie 헤더를 받은 경우 해당 데이터를 저장한 뒤 모든 요청에 포함하여 보냄
데이터를 여러 사이트에 공유할 수 있기 때문에 보안에 취약할 수 있음
쿠키는 userId=user-1321;userName=sparta 와 같이 문자열 형식으로 존재하며 쿠키 간에는 세미콜론(;) 으로 구분됨

세션

쿠키를 기반으로 구성된 기술
단, 클라이언트가 마음대로 데이터를 확인 할 수 있던 쿠키와는 다르게 세션은 데이터를 서버에만 저장하기 때문에 보안이 좋으나, 반대로 사용자가 많은 경우 서버에 저장해야 할 데이터가 많아져서 서버 컴퓨터가 감당하지 못하는 문제가 생기기 쉬움

cookie-parser 미들웨어

요청에 추가된 쿠키를 req.cookies 객체로 만들어 줌
편리하게 쿠키를 관리

JWT

JSON 형태의 데이터를 안전하게 교환하여 사용할 수 있게 해줌
인터넷 표준으로서 자리잡은 규격
여러가지 암호화 알고리즘을 사용할 수 있음
header.payload.signature 의 형식으로 3가지의 데이터를 포함
JWT 형식으로 변환 된 데이터는 항상 2개의 . 이 포함된 데이터

  • header(머리)는 signature(배)에서 어떤 암호화를 사용하여 생성된 데이터인지 표현
  • payload(가슴)는 개발자가 원하는 데이터를 저장
  • signature(배)는 이 토큰이 변조되지 않은 정상적인 토큰인지 확인할 수 있게 도와줌
    JWT는 비밀 키를 모르더라도 복호화(Decode)가 가능
    민감한 정보(개인정보, 비밀번호 등)는 담지 않도록
    데이터를 교환하고 관리하는 방식인 쿠키/세션과 달리, JWT는 단순히 데이터를 표현하는 형식
    Stateless(무상태)와 Stateful(상태 보존)
    Node.js 서버가 언제든 죽었다 살아나도 똑같은 동작을 하면 Stateless
    서버가 죽었다 살아났을때 조금이라도 동작이 다른 경우 Stateful
    JWT로 만든 데이터를 브라우저로 보내도 쿠키처럼 자동으로 저장되지는 않지만, 변조가 거의 불가능하고 서버에 데이터를 저장하지 않기 때문에 서버를 Stateless(무상태)로 관리
    jsonwebtoken 라이브러리를 사용

미들웨어 (Middleware)

웹 서버의 요청/응답에 대해 공통적으로 관리
승인된 사용자만 API를 접근 허용

app.use((req, res, next) => {
    console.log('Request URL:', req.originalUrl, ' - ', new Date());
    next();
});
  • req: 요청(Request)에 대한 정보가 담겨있는 객체
    • HTTP Headers, Query Parameters, URL 등 브라우저가 서버로 보내는 정보
  • res: 응답(Response)을 위한 기능이 제공
    • 어떤 HTTP Status Code로 응답 할지, 어떤 데이터 형식으로 응답 할지, 헤더는 어떤 값을 넣어 응답 할지 다양한 기능을 제공
  • next: 다음 스택으로 정의된 미들웨어를 호출

0개의 댓글