A Developing Developer
DAY.87 최종 프로젝트 15일차 본문
- 문제발생
최종 프로젝트 중간 결과물 관련 튜터님 예상 기술 면접 질문 타임
- 시도
-
- 해결방안
-
- 알게 된 것
Q1. refresh token을 레디스에 저장함으로서 얻을수 있는 장점은 무엇인가?
rt 을 저장하는 장소가 FE 냐 BE 냐로 구분 할 수 있는데, 우선 BE 에 저장할 경우 mySQL과 NoSQL 을 나눠서 저장 할 수 있다. mySQL 에 비해서 NoSQL 인 Redis 에 저장하는 것이 비교적 빠른 엑세스 속도를 제공한다.
Q1-1 그렇다면 refresh token 을 왜 레디스 (BE) 에 저장하는가?
rt 을 백엔드에 저장하는 이유는 특정인물을 강제로그아웃 시키기 위해서 필요하다.
강제로그아웃 기능이 필요 없을 경우 굳이 rt 을 백엔드에 저장할 필요는 없다.
[※ 강제로그아웃 시키기 위해 rt 을 DB 에 저장할 경우 1개의 계정을 여러개 기기에서 로그인 할 수 있을 경우에는 rt 을 따로 보관할 테이블이 필요하지만, 1계정 1기기 로그인 구조라면 굳이 따로 테이블을 생성할 필요없이 user 테이블에 컬럼을 추가해도 된다. 이 처럼 서비스의 구조에 따라 테이블의 구조나 구성 방법을 신경써야 한다.]
[※ 최종 프로젝트에는 FE 에 localStorage 에 at, rt 을 둘다 저장한다.]
Q2. bulk save (여러개의 파일이나 데이터를 한번에 다운하거나 저장하는 것) 를 할 때는 왜 save 보다 insert 가 좋을까?
save 는 document 를 select 하고 저장하기 때문에 select 하지 않는 insert 에 비해서 검증처리 과정이 있어서 처리 속도가 느리다. 이 차이는 대용량 저장을 할 수록 차이가 커진다.
Q3. ElasticSearch 를 사용함으로 검색속도를 개선시킬 수 있는 이유가 뭘까?
ElasticSearch 는 역색인 (inverted index)라는 자료구조를 사용하는데, 이는 책의 부록에 단어별 페이지 표시와 비슷하다고 볼수 있다. NoSQL 특성으로 데이터를 나눠서, 예를들면 천만건의 데이터를 백만건씩 나눠서 10개로 나눠져서 동시에 검색을 실시한다. 반면에 mySQL 은 관계형 데이터베이스 이기때문에 천만건을 한번에 체크하게 된다. 그래서 mySQL 에서 LIKE 문을 사용해서 전체를 확인하기때문에 비교적 오래걸리고, ElasticSearch 가 비교적 빠른 검색을 가능하게 한다.
Q4. JWT 를 쓰는 이유는 무엇인가?
JWT 란 JSON Web Token 의 약자로 인증에 필요한 정보를 JSON 형식으로 암호화한 토큰이다. 서버와 클라이언트 간에 토큰을 주고 받으면서 인증을 수행할 수 있으며, 세션과는 달리 서버가 아닌 클라이언트에 저장되므로 서버의 부하를 줄일 수 있다.
JWT 의 장점으로는 payload 에 데이터를 저장하고 db 를 통하지 않고 데이터를 쓸수 있다는 점이다.
단점은 토큰의 크기가 클수록 데이터 전송에 있어서 비용이 커진다는 점이 있다.
[결론]
JWT 는 여러번 질문 받고 여러번 공부했는데, 왜 이렇게 물어보면 바로 답이 안나오는지...
공부해라
'내일배움캠프 4기 > TIL' 카테고리의 다른 글
DAY90. 최종 프로젝트 18일차 (0) | 2023.03.24 |
---|---|
DAY 82. 최종 프로젝트 10일차 (0) | 2023.03.13 |
DAY 77. 최종 프로젝트 5일차 (0) | 2023.03.06 |
DAY 76. 최종 프로젝트 4일차 (0) | 2023.03.03 |
DAY 75. 최종 프로젝트 3일차 (0) | 2023.03.02 |