NestJS - 로그인 (1)

박건태·2023년 7월 20일
0

nestjs

목록 보기
5/11

그러면 traffic이 증가할때는?
1.scale-up : 백엔드 컴퓨터 사양을 높인다.
2.scale-out : 백엔드 컴퓨터 개수를 늘린다.

2번이 많이 사용되는데, 근데 1번백엔드에 api요청한후에 다음에는 2번백엔드에 api요청을 하면 내 session값이 저장되어있지 않으니까 나는 비 로그인 상태가 되네?

그러면 session테이블을 만들어서 DB에 저장하자.

백엔드를 stateful(어떠한 상태가 지정된) 하게 만들지 말고 stateless하게 유지!!
-> 여기까지 2단계

그런데! 그러면.. 어차피 DB 로 traffic이 몰리는건 문제가 되지않나요?
(bottle-neck현상이 생긴다)

그래서 샤딩(수평 파티셔닝 : db테이블을 위아래로 나눈것)을 적용해서 db를 나누었다. 예를 들면 철수가 1번 백엔드로 진입해서 로그인을 할때 철수는 1001번 유저이므로 2번 DB에서 정보를 받아온다. 그리고 영희는 3번백엔드로 진입해서 로그인을 하면 영희는 2020번 유저이므로 3번 DB에서 정보를 받는다.

그런데 이 방식의 문제점은 느리다는 것이다.

DB는 DISK에 저장되는데, DISK I/O가 많아지면 속도가 느려질 수 밖에 없다.

그러면 DB의 종류를 늘리자. -> Redis를 사용해보자.
Redis는 메모리에 저장되는 방식이다. (물론 껐다 키면 사라진다.)

그래서 Session데이터를 Redis에 저장해서 DISK I/O를 줄인다.

좋아 근데! fetchUser를 하면 인가과정에서 redis랑 DB(Mysql) 2번 요청보내고 응답받아야되는데, 인가과정을 좀 없앨 수는 없을까?

백엔드에서 임의의 세션객체를 암호화하여 만들어주고, 다음 요청시에는 그 객체를 확인해서 로그인 인가를 해준다. (JWT (json web token) )

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

정말 유익한 글이었습니다.

답글 달기