코드캠프

코드캠프 22일차

Grace 2022. 10. 2. 21:00

로그인 이미지업로드 배포는 내용의 흐름이 있기 때문에 정말 중요하다!!!

로그인 프로세스

프론트엔드에서 html,css,js를 가져와 브라우저에 그려준 후 사용자가 데이터를 입력하면 백엔드로 데이터가 이동하고 데이터베이스에 데이터가 저장되며 저장된 데이터는 이후에 사용자가 데이터를 요청하면 백엔드가 데이터베이스에 데이터를 요청하여 가져와 브라우저에 그 내용을 그려준다.

scale up

메모리세션을 사용해서 데이터를 저장 그러나 세션이 달라지기 때문에 한계가 발생, 트래픽이 점점 커짐

RoundRobin

한명씩 접속하게하는 방법

Redis

인증테이블 파티셔닝

수직파티셔닝

수평파티셔닝(샤딩)

JWT 토큰 JSON WEB TOKEN


데이터베이스에서 데이터를 긁어오지 않아도 되게끔 해주는 것
아이디와 비밀번호를 입력해서 로그인을 하면 백엔드에서 데이터베이스로 이동하여 id(token)을 받아온다.

받아온 토큰을 저장하는 곳은
localStorage
sessionStorage
cookie
state
.
.
.
여러가지가 있는데 예를 들어 state에 id를 저장해놓고 게시글을 작성한다면 데이터를 전달하고 받아온 토큰도 함께 연결한다.

JWT토큰은 이것과는 다르게 받아온 데이터를 암호화하여 받아올 때는 복호화하는 방식이다. 여기에는 로그인 기한이 함께 들어있기때문에 백엔드나 데이터베이스까지 가서 데이터를 찾아올 필요가 없다.

브라우저에서 아이디 비밀번호를 백엔드로 전달해주면 백엔드에서 JWT토큰을 만들어서 브라우저에 전달하고 전달된 토큰은 하나의 변수 안에 저장된다.

이렇게 저장된 토큰은 데이터베이스에서 찾아올 필요 없이 데이터의 이동과 함께 이동한다. 하지만 데이터 등록은 데이터베이스에 저장되므로 헷갈리지말자

데이터베이스와는 상관없는 JWT의 사용으로 한가지 문제가 발생한다.

토큰이 다른 사람에 의해서 탈취된 토큰인지 검증되지 않기 때문이다. 그래서 보통 jwt토큰 사용시에는 만료 시한을 30분~1시간 정도로 줄인다.

토큰의 만료 시한을 연장해주기 위해서는 자동연장을 사용해준다.
서비스를 운영하다가 특정 나라 혹은 IP의 로그인을 막고자 하는 경우는 막아줄 수 없는 단점이 있어 이것을 보완하고자 최초 1회는 JWT토큰을 사용하여 로그인 사람이 언제 어디서 로그인을 하였는지 기록해준다. 그 이후에는 토큰이 만료되므로 자동 연장을 할 때 언제 재발급하였는지 등록하여준다.

보안이 중요할 경우 Redis방식을 사용해주는 것이 좋고 데이터가 많아서 트래픽이 클 경우 (높을 경우) JWT토큰(accessToken)을 사용하고 refreshToken을 주는 것이 좋다.

jwt은 복호화 시 정보가 보이므로 중요한 개인정보는 보이지 않도록 설정해준다.
토큰 생성시 key를 입력하여 생성하며 backend에서 key를 검증하므로 누구든지 토큰 내용을 열어볼 수는 있지만 조작이 불가능하다.

로그인과 Context-API

브라우저에서 createUser를 하여 입력된 데이터를 backend에 User라는 table을 하나 만들어서 그 표에 데이터를 저장해준다. 이 표에는 개인정보는 암호화하여 저장하여야하며 user가 입력한 데이터를 암호화 알고리즘을 작동시켜 backend에서 검증한다.

하지만 이러한 암호화한 데이터를 복호화하는 테이블까지 만들어서 개인정보를 유출하는 해커들이 발생하면서 단방향 암호화가 생겨났다.(password hash)

http request header 에 authorization이라는 이름으로 accessToken을 전달해줄 것이다.

일반적으로는 token 앞에 bearer라는 이름을 붙여준다.(관례적)

'코드캠프' 카테고리의 다른 글

코드캠프 25일차  (0) 2022.10.04
코드캠프 24일차  (0) 2022.10.02
코드캠프 21일차  (0) 2022.10.02
코드캠프 20일차  (0) 2022.10.02
코드캠프 19일차  (0) 2022.10.02