나의 개발일지(김지헌)
항해 99 20일차 10/08 본문
오늘은 쿠키와 세션 그리고 관계형 데이터베이스와 비관계형 데이터 베이스를 공부를 하고 api구현을 했다.
쿠키와 세션
쿠키와 세션이란?
쿠키(Cookie): 브라우저가 서버로부터 응답으로 Set-Cookie 헤더를 받은 경우
해당 데이터를 저장한 뒤 모든 요청에 포함하여 보냅니다.
데이터를 여러 사이트에 공유할 수 있기 때문에 보안에 취약할 수 있습니다.
쿠키는 `userId=user-1321;userName=sparta` 와 같이 문자열 형식으로 존재하며
쿠키 간에는 세미콜론`(;)` 으로 구분됩니다
세션(Session): 쿠키를 기반으로 구성된 기술입니다.
단, 클라이언트가 마음대로 데이터를 확인 할 수 있던 쿠키와는 다르게 세션은
데이터를 서버에만 저장하기 때문에 보안이 좋으나,
반대로 사용자가 많은 경우 서버에 저장해야 할 데이터가 많아져서
서버 컴퓨터가 감당하지 못하는 문제가 생기기 쉽습니다.
관계형 비관계형
- 1) 관계형 데이터베이스(SQL)와 비관계형 데이터베이스(NoSQL)의 개념
그 동안 우리가 사용했던 MongoDB는 비관계형 데이터베이스에 해당합니다.
그리고 이번 수업에서 사용해 볼 MySQL라는게 바로 관계형 데이터베이스예요!
데이터 형식이 자유로웠던 MongoDB와 달리 관계형 데이터베이스는 "스키마" 라는 개념이 존재하는데요,
MySQL에서는 "스키마"가 MySQL 서버의 가상 개념인 "데이터베이스"와 동일합니다.
그리고 제일 언급이 많이 되는 "테이블"이라는 개념은 쉽게 말해서 스키마 하위의 개념입니다.
- 2) sequelize라는 라이브러리를 사용해 MySQL에 데이터 읽고 쓰기
비관계형 데이터베이스인 MongoDB를 이용할때는 ODM 도구중 하나인 mongoose라는 라이브러리를 사용했었죠?
관계형 데이터베이스인 MySQL를 이용할때는 ODM 대신 ORM(Object Relational Mapper)를 사용할 수 있습니다!
그리고 우리는 ORM중 가장 유명한 Sequlize라는 라이브러리를 사용해볼 예정입니다.
jwt
/*- 1) 간략한 정리!
- JSON 형태의 데이터를 안전하게 교환하여 사용할 수 있게 해줍니다.
- 인터넷 표준으로서 자리잡은 규격입니다.
- 여러가지 암호화 알고리즘을 사용할 수 있습니다.
- `header.payload.signature` 의 형식으로 3가지의 데이터를 포함합니다.
(개미처럼 머리, 가슴, 배)
때문에 JWT 형식으로 변환 된 데이터는 항상 2개의 `.` 이 포함된 데이터여야 합니다
로그인을 했다면 토큰이 존재 한다
- header(머리)는 signature(배)에서 어떤 암호화를 사용하여 생성된 데이터인지 표현합니다.
- payload(가슴)는 개발자가 원하는 데이터를 저장합니다.
- signature(배)는 이 토큰이 변조되지 않은 정상적인 토큰인지 확인할 수 있게 도와줍니다
JWT라이브러리
npm init
npm i jsonwebtoken -S */
// json 라이브러리 불러와서 토큰 넣어주기
//복호화 하기
// const jwt = require("jsonwebtoken");
//시크릿 키가 들어감(매우 중요함 노출 X)
// const token = jwt.sign({ myPayloadData: 1234 }, "dddd");
// console.log(token);
복호화 확인 myPayloadData :1234
const jwt = require("jsonwebtoken");
const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJteVBheWxvYWREYXRhIjoxMjM0fQ.6XFgtNglH9hIzz5y8jAcI0g5kDnlAvnTTbxKIcL2CHY";
const decodedValue = jwt.decode(token);
디코드
const jwt = require("jsonwebtoken");
/*const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJteVBheWxvYWREYXRhIjoxMjM0fQ.6XFgtNglH9hIzz5y8jAcI0g5kDnlAvnTTbxKIcL2CHY";
const decodedValue = jwt.verify(token, "dddd");
- 보통 암호화 된 데이터는 클라이언트(브라우저)가 전달받아 다양한 수단(쿠키, 로컬스토리지 등)을 통해 저장하여 API 서버에 요청을 할 때 서버가 요구하는 HTTP 인증 양식에 맞게 보내주어 인증을 시도합니다!
- 비유하자면, 놀이공원의 자유이용권과 비슷한거죠!
회원가입: 회원권 구매
로그인: 회원권으로 놀이공원 입장
로그인 확인: 놀이기구 탑승 전마다 유효한 회원권인지 확인
내 정보 조회: 내 회원권이 목에 잘 걸려 있는지 확인하고, 내 이름과 사진, 바코드 확인*/
/*
1.Refresh Token
Refresh Token은 Access Token 처럼 해당하는 사용자의 모든 인증 정보를 관리하는 것이 아닌,
특정한 사용자가 Access Token을 발급받을 수 있게 하기 위한 용도로만 사용됩니다.
2.Access Token
Access Token은 사용자의 권한이
확인(ex: 로그인) 되었을 경우 해당 사용자를 인증하는 용도로 발급하게됩니다*/
항해에서 받은 강의 자료를 토대로 썻습니다!
'항해 99' 카테고리의 다른 글
항해 99 22일차 10/10 (0) | 2022.10.11 |
---|---|
항해 99 21일차 10/09 (0) | 2022.10.09 |
항해 99 19일차 10/07 (0) | 2022.10.07 |
항해 99 18일 10/06 (0) | 2022.10.06 |
항해 99 17일차 10/05 (0) | 2022.10.06 |