백엔드 21일차

이동현·2023년 4월 11일
0

코드캠프 백엔드

목록 보기
18/29

로그인

1. 로그인의 역사

session 테이블에 로그인 sessionid를 만들어서 로그인증표로 인증과 인과를 함
인증- 이메일과 비밀번호를 통해 로그인증표를 받아오는 작업
인가- 로그인증표를 통해 원하는 API를 실행하는 작업

scale-up : 본체를 뜯어 메모리를 업그레이드 하는 방법
scale-out : 컴퓨터를 여러개 두고 나누는 작업
stateful : 상태를 가지고 있는 것
scale-out이 편하지만 이지 stateful한 자료가 있어서 db에 session테이블을 만들어 관리 하자
병목현상 - bottleneck이 나타나게 된다. 그러므로 완벽한 분산이 아니였다.

2. 첫번째 방식(테이블 파티셔닝)

수평, 수직으로 자른다. - 수평파티셔닝, 수직파티셔닝

파티셔닝과 정규화의 차이
파티셔닝은 성능 때문에 한다.
데이터베이스 샤딩 기술을 사용하여 분리해서 데이터를 담는다.

  • Redis를 만들어 특정 Redis와 DB병목현상이 일어나는 것을 막는다.
  • 두번씩 왔다갔다해서 인가 인증을 함

3. 두번째 방식(JWT 방식! - Jason Web Token)

백엔드에서 객체에 데이터를 저장해서 이 객체를 암호화하여 이것을 로그인 증표로 쓴다.
브라우저에서 그 암호화된 로그인 증표를 사용한다. 그 증표를 백엔드에서는 복호화를 통해 디비로 접근한다.
인가르 위한 Redis접속이 필요 없어지게 됨(이론상으로)

2. jwt.io


jwt => 안이 다 보이는 토큰(중요한 데이터 저장 금지!!), id와 만료시간 정도만 넣어주는게 적당하다.

대신에 조작은 불가능하다.(signature 있어야 가능)

그래서 만료시간을 짧게 준다.

만료가 완료 되면 로그인을 다시해서 토큰을 재발급 받아야한다.
플레이그라운드에서 토큰을 헤더에 넣어주어 조회할 수 있다.

3. 회원가입 만들기

1) 암호화

단방향 암호화는 해시라고도 부르며 다대일 관계로 복호화를 불가능하게 만든다.
그이후 해시로도 부족해 해쉬결과에 salt를 붙혀 해쉬를 계속 만들어 원본을 찾지 못하게 끔 만들었다. => 무차별 대입공격(Brute Force attack), 키 스트레칭

이것을 bcrypt라는 라이브 모듈을 다운받이 이용할 수 있게 된다.2에 10승번 키스트레칭한 결과이다!

yarn add bcrypt yarn add --dev @types/bcrypt

0개의 댓글