일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- dfs
- typeORM
- Bull
- 게임
- 정렬
- AWS
- Express
- MySQL
- cookie
- jest
- 자료구조
- GIT
- class
- Dinosaur
- react
- OCR
- JavaScript
- game
- Python
- nodejs
- flask
- nestjs
- TypeScript
- MongoDB
- Nest.js
- Sequelize
- mongoose
- Queue
- 공룡게임
- Today
- Total
포시코딩
12월23일 본문
Refresh Token 도입기
이번 개인 프로젝트 과제의 로그인 시스템에 jwt을 통해 쿠키 - 토큰 시스템으로 인증 관리를 하는게 있었는데
나는 같이 배웠던 방법중 accessToken, refreshToken을 사용하는 방법을 채택했다.
이유는 세가지다.
- 제일 최신 기법으로 보임
- 제일 안전해보임
- 제일 어려워보임
아래는 적용한 코드 중 일부이다.
models/User.js
if (await this.#checkPassword(userInfo.password, user.password)) {
// 로그인 토큰 처리
const accessToken = await TokenManager.createAccessToken(user.userId);
const refreshToken = await TokenManager.createRefreshToken();
// refreshToken 저장
await TokenStorage.save(refreshToken, user.userId);
TokenManager.js
static createAccessToken(userId) {
return new Promise((resolve, reject) => {
const expiresIn = process.env.JWT_ACCESS_EXPIRES;
const accessToken = jwt.sign(
{ userId },
SECRET_KEY,
{ expiresIn }
)
resolve(accessToken);
});
};
static createRefreshToken() {
return new Promise((resolve, reject) => {
const expiresIn = process.env.JWT_REFRESH_EXPIRES;
const refreshToken = jwt.sign(
{},
SECRET_KEY,
{ expiresIn }
)
resolve(refreshToken);
});
};
피드백에서 위 TokenManager.js의 코드는 파라미터를 통해 access, refresh인지 구분해서
하나의 함수로 만드는 것을 추천받았다.
이와 관련한 여러 코드 리팩토링에 대해 지적 받았는데 그 부분 모두 이 글 작성을 마치는대로 수정할 계획이다.
그리고 refreshToken을 현재는 다른 데이터들과 같이 MySQL에 저장하고 있는데
배포까지 마친 프로젝트가 사용자 수가 적음에도 refresh token의 만료기간을 짧게 설정한 탓인지
무서운 속도로 Tokens 테이블에 데이터가 쌓이고 있다.
임시로 만료기간을 일주일로 설정해뒀지만 근본적인 해결책은 되지 않기에
redis 같이 refreshToken을 위한 인 메모리 저장소를 사용하면 더 효율이 좋다고 들어
시간이 나는대로 바로 적용해볼 예정이다.
코딩테스트 연습 리뷰
없는 숫자 더하기
단순히 for문 돌며 if in 문법으로 없는 숫자를 체크하여 결과값에 더했는데
알고리즘 친화적으로 생각하면
총 더한 값에 문제에서 제공해준 이미 있는 값을 빼면 없는 숫자들을 더한 정답이 되는거였다.
거기에 내가 예전에 배운 a부터 b까지의 값을 더하는 공식을 외우고 있었다면
이 문제와 비슷한 성격인 문제가 아무리 나와도 1분안에 바로 풀 수 있지 않았을까
a부터 b까지의 합
((a+b)*(b-a+1))/2
n씩 커지는 a부터 b까지의 합
((a+b)*(((b-a)/n)+1))/2
정리한 곳: [내 깃허브]