다대다 관계

상품 태그는 상품을 만들 때 생성
forEach문은 앞 코드를 기다리지 않고 수행하므로
외부에서 가져오는 api는 forEach를 사용한다. (for문 보다 빠름)

로그인

기존에는 session에다가
로그인한 유저의 이름, 아이디, 접속시간 등을 backend서버의 메모리 속에 저장함

그런데 이런 식으로 데이터를 받다보면 메모리 사용량이 너무 높아져서 서버가 꺼지는 경우가 발생함.

해결책 1

똑같은 소스코드를 복사해서 다른 컴퓨터에서 실행시켜 접속을 분산 시킨다. DB 메모리가 더욱 필요해짐.
로그인시 1번 서버 속 세션에 데이터를 저장했는데 메모리 과부하로 인해 다른 서버에 접속하게 되면 세션을 찾을 수가 없어 로그인이 불가능해진다.

백엔드 서버 컴퓨터끼리는 stateless방식으로 데이터를 분산시키고, db에 데이터를 이전시킴. 부하의 방향성만 달라짐.

해결책 2
그럼 DB도 데이터 집중을 분산시키자.
수직파티셔닝을 통해 분산

수평 파티셔닝을 통해 분산(1대1관계와 비슷함)
파티셔닝은 정규화하지 않아도 되는 데이터들의 사이즈를 줄이기 위해 사용!

근데 이런 식으로 사용하다보면 db에서 데이터를 긁어오는게 많이 느리다.

그래서 redis와 같은 메모리기반 db를 사용해서 디스크 기반의 db와 연결해서 빠른 속도를 사용하기도 한다.
이외에도 db에 로그인 세션을 저장하지 않고 암호화한 토큰을 백엔드 서버나 클라이언트 저장하여 속도를 높힌다. 즉, 세션-> 토큰을 사용하는 방식으로 변경되었다.

JWT(Json Web Token)

토큰을 암호화/복호화하며 데이터를 작게 줄여 송수신함!굳이 db에 저장하지 않아도 된다는 장점!

대신 누구든지 토큰을 복호화 할 수 있으므로 중요한 정보는 저장하면 안 된다.

또한 VERIFY SIGNATURE를 통해 토큰의 값이 변경되는 것을 감지할 수 있다.

profile
백엔드 주니어 개발자

0개의 댓글