You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
현재는 사용자가 댓글을 남기거나 게시물을 종료하는 등의 작업을 수행하면 해당 이벤트가 데이터베이스에 기록됩니다. 그런 다음 클라이언트는 쿼리를 통해 직접 알림을 검색합니다. 이제 수많은 대상에게 실시간 알림을 제공하는 대체 방법에 대해 고민해본 결과는 다음과 같습니다.
게시물에 댓글을 달거나 게시물을 삭제하는 등의 이벤트가 발생할 때마다 메시지 큐에 기록됩니다.
메시지 큐를 사용하면 SSE 또는 WebSocket과 같은 방법을 통해 수많은 사용자에게 즉시 알림을 보낼 수 있다는 점에서 유리합니다. 그러나 단일 서버에서 모든 클라이언트에 대한 알림을 관리하는 것은 불가능합니다. 이로 인해 서버 멀티플렉싱이 중요해졌습니다. 여러 서버가 큐에서 메시지를 검색하여 사용자에게 전달하는 방법으로 개선하고 간소화 해볼 수 있습니다.
2. 기능별 장애 분리
현재 모든 기능이 한 프로젝트에 집중되어 있어, 일부 기능의 문제가 다른 기능에 영향을 미칠 수 있습니다. 각 기능을 독립된 프로젝트로 분리하면, 한 기능의 장애가 다른 기능을 방해하지 않게 할 수 있습니다. 예를 들어, 투표 기능에 문제가 생겼을 때에도, 게시글 조회는 문제없이 작동해야 합니다.
3. DB 다중화
현재 1개의 DB 서버로 모든 요청(읽기, 쓰기)을 처리하여 요청 간 영향이 발생합니다. Master와 Slave DB로 분리하여 쓰기 요청은 Master DB에서, 읽기 요청은 Slave DB에서 처리하면 요청 부하가 줄어들고 성능이 개선될 수 있습니다.
4. Redis 도입
캐시
게시글 조회와 같은 동작은 모든 사용자가 빠르게 정보를 전달받아야 하는 작업인데, 현재의 게시글 조회는 현재 DB 요청을 통해 이루어지는 것 보단, Redis를 사용하여 데이터를 메모리에 저장함으로써 읽기 성능을 빠르게 개선할 수 있습니다.
Redis는 인메모리 데이터베이스로 동작하기 때문에 디스크 I/O에 의존하지 않아 빠른 읽기 및 쓰기 성능을 제공합니다.
부하 감소
주요 데이터베이스의 요청 부하를 줄일 수 있어, 사용자 요청에 빠르게 응답할 수 있습니다.
탄력적 확장성
Redis 클러스터를 사용하여 데이터 및 쿼리 부하를 여러 서버에 분산시킬 수 있습니다.
5. 검색 엔진 도입
현재 시스템은 사용자가 입력한 키워드를 기반으로 DB 쿼리를 사용하여 정보를 검색합니다. 이후에 데이터가 증가함에 따라 검색 성능도 향상되어야 합니다. ELK와 같은 검색 엔진을 도입하면 키워드 형태소 분석을 통해 검색 정확도와 성능을 향상시킬 수 있습니다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
여러가지 방법의 개선 방법이 있을 것 같습니다.
1. 알림 기능 고도화
현재는 사용자가 댓글을 남기거나 게시물을 종료하는 등의 작업을 수행하면 해당 이벤트가 데이터베이스에 기록됩니다. 그런 다음 클라이언트는 쿼리를 통해 직접 알림을 검색합니다. 이제 수많은 대상에게 실시간 알림을 제공하는 대체 방법에 대해 고민해본 결과는 다음과 같습니다.
2. 기능별 장애 분리
현재 모든 기능이 한 프로젝트에 집중되어 있어, 일부 기능의 문제가 다른 기능에 영향을 미칠 수 있습니다. 각 기능을 독립된 프로젝트로 분리하면, 한 기능의 장애가 다른 기능을 방해하지 않게 할 수 있습니다. 예를 들어, 투표 기능에 문제가 생겼을 때에도, 게시글 조회는 문제없이 작동해야 합니다.
3. DB 다중화
현재 1개의 DB 서버로 모든 요청(읽기, 쓰기)을 처리하여 요청 간 영향이 발생합니다. Master와 Slave DB로 분리하여 쓰기 요청은 Master DB에서, 읽기 요청은 Slave DB에서 처리하면 요청 부하가 줄어들고 성능이 개선될 수 있습니다.
4. Redis 도입
5. 검색 엔진 도입
현재 시스템은 사용자가 입력한 키워드를 기반으로 DB 쿼리를 사용하여 정보를 검색합니다. 이후에 데이터가 증가함에 따라 검색 성능도 향상되어야 합니다. ELK와 같은 검색 엔진을 도입하면 키워드 형태소 분석을 통해 검색 정확도와 성능을 향상시킬 수 있습니다.
Beta Was this translation helpful? Give feedback.
All reactions