A Developing Developer

DAY.87 최종 프로젝트 15일차 본문

내일배움캠프 4기/TIL

DAY.87 최종 프로젝트 15일차

H-JJOO 2023. 3. 20. 21:59
  • 문제발생

최종 프로젝트 중간 결과물 관련 튜터님 예상 기술 면접 질문 타임

  • 시도

-

  • 해결방안

-

  • 알게 된 것

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 는 여러번 질문 받고 여러번 공부했는데, 왜 이렇게 물어보면 바로 답이 안나오는지...

 

공부해라