2024/10 3

[Spring Cache] 좋아요 기능 설계 & 성능 개선 (feat. Redis)

현재 Untitled의 유저 쇼츠 테이블을 보면, 특정 쇼츠를 조회를 위해 '쇼츠 좋아요 수'가 필요하기 때문에 매번 count 쿼리를 날려야 한다. 또한 단순 쇼츠 조회뿐만 아니라 인기순으로 정렬을 할 때도 '쇼츠 좋아요 수' 가 필요했는데, 이 기능은 '쇼츠 좋아요 수'를 count 하여 정렬하고 page size만큼 shorts를 가져오는 로직이다.  따라서 이러한 구조는 유저가 늘어나면 분명히 성능에 악영향을 끼치리라 판단하여 리팩토링을 시작하게 됐다         Count Query   먼저 가장 큰 영향을 주는 건 count 쿼리라고 생각해서, 이 부분을 없애기로 했다. 그래서 구조 자체를 수정해야 했고, 테이블에 '좋아요 수'를 컬럼으로 저장하기로 했다. 이런 구조에서는 곧바로 '좋아요 수..

[CS지식을 Spring에 접목해보자] JWT는 어디에 저장해야할까? (feat. Cookie, Local Storage)

Spring에서 JWT를 사용한 인증/인가를 진행할 때, Server에서 Client로 AccessToken과 RefreshToken을 발행해줄 것이다. 이때 Cookie에 저장하는 방법과 로컬 스토리지에 저장하는 방법이 있는데, 이번 시간에는 두 방법의 장/단점을 알아보고 어떻게 사용하면 좋을지 고민해보자      Web Browser에 토큰을 저장할 때의 취약점   우리는 성능 향상과 확장성을 위해 세션 대신 JWT를 사용한다. 성능 향상은 메모리 사용량과 DB Connection을 줄일 수 있어서 그렇다 치지만, 확장성은 어떻게 보장해줄까? 그건 바로 서버에서 보내주는 토큰을 브라우저에 저장함으로써 서버에서 사용자의 인증 정보를 기억하지 않아도 되기 때문이다. 그러나 이러한 확장성 때문에 브라우저에..

[Network] Cookie

쿠키(cookie)는 서버가 사용자의 웹 브라우저에 'Key:Value' 형태로 전송하는 작은 데이터 조각으로, 브라우저는 이런 문자열 데이터 조각들을 저장해두었다가 동일한 서버로의 request마다 쿠키 데이터를 전송한다. 따라서 HTTP 서버는 기본적으로 무상태(stateless)이기 때문에 상태를 보존할 수 없지만, 쿠키를 통해서 기존의 정보를 그대로 이용할 수 있다는 뜻이다.      Cookie의 목적   HTTP 서버는 무상태를 통해 서버 설계를 간편하게 하고 동시에 수천 개의 TCP 연결을 다룰 수 있는 고성능의 웹 서버를 개발할 수 있다. 그런데 우리는 종종 웹 사이트가 사용자를 확인하는 것이 바람직할 때가 존재하기 때문에 쿠키를 사용해야만 할 때가 있다. 그중 가장 많이 사용하는 목적은 ..

Network 2024.10.07