항해

항해 1주차 회고록

ho-bolt 2022. 3. 13. 22:45

 

항해 1주차

 

항해 첫 주차에는 4일 동안 팀원들끼리 미니 프로젝트를 만드는 것이었다. 

우리 조는 주식을 가상으로 매수, 매도하는 프로젝트를 만들기로 정하였고 기능을 중심으로 분담을 하였다. 

프로젝트 이름은 Gazuaaa로 주식이 올라가기를 바라는 마음으로 이렇게 이름을 지었다. 

거기서 나는 회원가입 기능을 담당했다. 

회원가입 기능을 구현할 때 많이 사용되는 것이 쿠키/세션방식이다. 하지만 여기서는 JWT 방식으로 로그인과 회원가입을 구현하였다. 

세션방식과 JWT 방식의 차이!

Stateless

stateless란 이전 요청들과 독립적으로 다루어 진다는 뜻이다. 즉 요청끼리 연결이 없다. 그래서 요청이 끝나면 내가 누군지 잊어버린다. 이러한 문제를 해결하기 위한 방법이 세션과 토큰이다. 

 

쿠키: (세션id를 전달하기 위한 매개체)

토큰 : 서버가 기억하는 텍스트(id카드처럼 서버에게 보여줘야 함) 

JWT: 정보를 갖고 있는 토큰 (DB없이 검증 가능 )

 

로그인 프로세스

 

세션 

 

-> id와 pw를 입력해서 서버로 요청 

-> 일치하다면 서버는 session DB에 유저 생성 (고유의 Session ID)가 존재 

-> 이 Session ID는 쿠키를 통해 브라우저로 돌아오고 저장됨 

 

: 같은 웹사이트의 다른 페이지 요청하면 브라우저는 Session ID 갖고 있는 쿠키를 서버로 보냄

-> 서버는 Session ID와 같이 오는 쿠키를 확인 -

> 이 Session ID를 가지고 Session DB 확인

-> 이때 서버는 유저가 누군지 앎!! -> 유저 환영! 

 :: 유저 정보는 서버에 존재 

 

# 쿠키는 Session ID를 전달하기 위한 매개체 !!

현재 로그인한 유저들의 모든 세션 ID를 DB에 저장해야 한다==요청이 들어올 때마다 DB 뒤짐 ==유저가 많아질 수록 리소스 필요! 

ex) 넷플릭스 계정 로그인 수 제한

 

토큰 

토큰을 서버로 보냄 -> 세션 DB에서 해당 토큰과 일치하는 유저 찾음

 

JWT

 

id와 pw를 입력해서 서버로 요청

-> 서버는 유저의 id를 가져가 사인 알고리즘을 이용해 사인

-> 사인된 정보를 string 형태로 보냄 

 

:: db를 건드리지 않고 정보를 사인하고 전달!! 끝!!

::유저를 인증하는 데 필요한 정보를 토큰에 저장

->  해당 토큰을 브라우저에게 전달 

따라서 페이지를 요청하면 서버는 해당 토큰이 유효한지만 검증 

db 노필요 하지만 강제 로그아웃 같은 거 못함 설정한 토큰이 만료전까지는 유효하기 때문 

ex) qr코드 

 

이번 미니 프로젝트에서는 세션 ID를 구축할 필요없이 간단하게 회원가입한 유저를 인증하기만 하면 되기 때문에 JWT방식으로 회원가입과 로그인을 구현할 것이다. 

 

Gazuaaa에서 회원가입 코드

 

회원가입 app.py

 

95~97:  유저 정보를 input 에서 받고

98: 비밀번호는 sha256알고리즘을 통해 암호화를 한다. 

100~106: 그걸 이제 딕셔너리로 만든 다음 유저라는 db에 넣어준다. 

그럼 result가 response로 가고 회원가입을 축하드립니다 문구가 뜬다!

 

로그인 코드 

app.py

 

 

 

75~77 : 로그인 페이지에서 입력된 id와 pw의 값을 가져오고 pw는 암호화를 해준다. 

78 : 그걸 이제 회원가입때 넣었던 users라는 콜렉션에서 찾는다. 

79: 만약 db를 찾은 결과가 있다면 페이로드에 로그인한 유저임을 증명할 수 있는 정보를 넣는다. 

이때 로그인 유효시간을 정해서 넣어준다. 

84 : 이 페이로드와 위에서 정했던 SECERT_KEY 그리고 HS256 알고리즘으로 해독한 다음 토큰에 유저의 정보를 넣어주고 전달한다. 

 

로그인 ajax

 

33: result가 제대로 전달되었다면 받은 토큰을 쿠키에 넣어서 브라우저에 전달해준다.

그러면 로그인이 된다!

 

회원가입 구현 영상 

회원가입 페이지

 

로그인 페이지 

 

 

JWT 구조 

자료출처: https://devjem.tistory.com/13

 

JWT와 session 기반 인증의 차이점

jwt를 통한 로그인을 구현하면서 조금 더 자세히 정리를 해보고 싶어졌다. JWT? JWT는 JSON Web Token의 약자로써 세션에 사용자 데이터를 저장하는 전통적인 쿠키 세션 방식과 다르게 json 객체에 사용

devjem.tistory.com

 

 

728x90