[TIL] 엘리스 SW 엔지니어 트랙 Day 034
글 작성자: 망고좋아
반응형
📖 오늘 배운 내용 - 2021.12.09
- OAuth
- JWT
- passport
- Session
- Cookie
📝 OAuth
- 접근 권한 위임(delegation)을 위한 공개 표준
- 간단히 말하면 인증서 같은 거다.
- 유저가 쉽게 사용할 수 있다. (원 클릭 로그인) ⇒ 비밀번호를 기억할 필요가 없다.
- 유저 허용 여부에 따라 이메일, 프로필 사진, 닉네임 등의 기본 정보를 얻을 수 있다.
📝 JWT와 쿠키
📕 Session의 단점
- 서버에 따라 검증 가능 여부가 달라진다. → 세션을 위한 서버를 따로 분리하지 않는 이상은 분산된 서버를 사용하기 애매함
- 특정 서버의 과부하 현상에 대한 위험 증가
- 세션 테이블을 만들어 서버에 저장함으로 서버 공간 및 자원 낭비
📕 JWT의 장점
- SECRET key가 공유된 서버라면 서버단에서 검증 가능
- 분산된 데이터베이스를 사용해도 문제없다. -> 데이터베이스 유지, 보수, 확장 편리
- 디비의 자원 절약, 효율적
- 즉, 서버의 부하를 줄일 수 있다.
📕 JWT의 단점
- 외부 공격자가 접근하기 쉬운 위치, 노출 가능한 정보
- 노출 가능성으로 저장할 수 있는 정보가 제한적이다.
- 암호화가 풀릴 가능성 존재
해결 방법
- 토근 만료 시간을 짧게 설정(3~5분)
- 리프레시 토큰을 이용한다. -> 이중 토근을 사용하여 토큰 암호화 강화
📝 Session-Cookie 방식
- 서버는 컴퓨터 한 대가 아니다. 실제로 서버스를 돌리면 컴퓨터를 1대 이상 돌리게 된다.
- 그러나 사용자의 요청은 한 군대로 들어오지만 컴퓨터는 여러 대라서 이 요청을 분배해주는 것을 로드 밸런싱(load balancinge라고 한다. 어느 곳으로 분배해주는지는 우리도 모른다! 무튼 스마트하게 넘겨준다.
- 쿠키-세션일 때는 로드 밸런싱이 사용자의 id, pwd를 1번 컴퓨터로 넘겨주면 1번 컴퓨터는 그것을 검증하고 1번 컴퓨터에 세션을 저장하고 사용자에게 쿠키를 돌려준다.
- 그 후 사용자가 로그인한 후 마이페이지를 보기 원해서 요청을 날렸을 때 이번엔 로드 밸런싱이 2번 컴퓨터로 준다면 어떻게 될까?
- 2번 컴퓨터에는 사용자 쿠키에 해당하는 세션이 없다. (해당 쿠키에 맞는 세션을 1번 컴퓨터가 가지고 있기 때문에) 그래서 2번 컴퓨터가 사용자에게 "너 로그인 해!" 이렇게 말할 수 있다/
- 그래서 이러한 문제를 해결하는 방법으로 뒷단에 redis를 놓는다. 모든 컴퓨터들은 자신이 세션을 가지고 있는 것이 아니라 redis에다 저장해 놓는다.
- 그래서 로드 밸런싱이 어떠한 컴퓨터로 요청을 던져도 컴퓨터는 redis에서 해당 쿠키에 맞는 세션을 확인하고 응답을 반환해준다.
📝 JWT
- 하지만 JWT를 사용하면 redis를 사용하지 않아도 된다.
- jwt는 토근이라서 위조가 상당히 어렵지만 탈취당하면 큰일 난다.
- jwt는 여권, 신분증이라고 생각하면 된다. 그냥 내 자체이다. 그래서 만료기간을 정해놓는다.
- 짧으면 5분에서 30분, 길면 1주일
- 1번 컴퓨터에서 로그인 요청을 받으면 id, pwd를 검증받고 jwt를 사용자에게 준다.
- 그 뒤 사용자가 요청을 날리면 그 토큰이 위조되었는지만 확인하면 된다.
📝 passport 객체의 메소드
serializeUser()
: 메소드를 호출하면서 등록한 콜백 함수는 사용자 인증이 성공적으로 진행되었을 때 호출됨 ⇒ 로그인됐을 때 딱 한 번만 실행(login)deserializeUser()
: 사용자 인증 이후 사용자 요청이 들어올 때마다 호출 ⇒ 로그인 한 뒤 요청이 들어올 때마다 실행된다. (req)passport.authenticate()
: username과 password를 찾아보도록 설정
📝 Passport
- OAuth를 쉽게 도와주는 모듈이다.
💡 오늘 깨달은 것
- 보통 프론트, 백엔드 따로 작업을 진행하는 작업형태를 가지고 있는데, 팀원들끼리 기능별로 나눠서 프론트와 백 모두 짜는 것도 괜찮은 방법이다.
- 초반엔 프론트가 빠르고 백엔드가 느릴 수 있겠지만 후반으로 갈수록 프론트는 반응형 작업에서 시간이 오래 걸린다.
📌 참고
반응형
'프로그래밍 > Today I Learned' 카테고리의 다른 글
[TIL] 엘리스 SW 엔지니어 트랙 Day 036 (0) | 2021.12.15 |
---|---|
[TIL] 엘리스 SW 엔지니어 트랙 Day 035 (0) | 2021.12.13 |
[TIL] 엘리스 SW 엔지니어 트랙 Day 033 (0) | 2021.12.09 |
[TIL] 엘리스 SW 엔지니어 트랙 Day 032 (0) | 2021.12.08 |
[TIL] 엘리스 SW 엔지니어 트랙 Day 031 (0) | 2021.12.07 |
댓글
이 글 공유하기
다른 글
-
[TIL] 엘리스 SW 엔지니어 트랙 Day 036
[TIL] 엘리스 SW 엔지니어 트랙 Day 036
2021.12.15 -
[TIL] 엘리스 SW 엔지니어 트랙 Day 035
[TIL] 엘리스 SW 엔지니어 트랙 Day 035
2021.12.13 -
[TIL] 엘리스 SW 엔지니어 트랙 Day 033
[TIL] 엘리스 SW 엔지니어 트랙 Day 033
2021.12.09 -
[TIL] 엘리스 SW 엔지니어 트랙 Day 032
[TIL] 엘리스 SW 엔지니어 트랙 Day 032
2021.12.08