일단 수준이 낮아서 질문 자체도 부족하고, 고려한 방법에 대한 생각도 짧은점 미리 사과드립니다

팀 프로젝트에서 SNS 관련 서비스고, 구현하고 싶었던 기능은 아래와 같습니다
1. 접속한 회원의 관련 데이터(친구, 즐겨찾기한 회사, 좋아요한 게시글, 좋아하는 태그)를 DB에서 조회하고, 각 게시물이 가지고 있는 관심도 점수(댓글 갯수와 좋아요 받은 수)를 합산하여 가장 높은 점수 순으로 보여줍니다.

2. 비회원은 게시물의 관심도 점수 순으로 보여줍니다.

이러한 기능을 만들었을 때 처음에는 DB에 쿼리문을 보내 모든 데이터를 조회하였습니다. 특별히 데이터가 많지않았을땐 문제가 없었으나 각 데이터 1000만건을 생성하고 1000TPS 요청을 보내니 아래와 같은 문제가 발생했습니다.

- 가장 치명적으로 타임아웃이 발생하였습니다.. 정확히 어떤 문제때문이라고는 자세히 알 능력이 부족하여 확답을 드리긴 어렵지만, 거의 모든테이블에 JOIN 연산때문에 커넥션 풀 고갈로 새로운 커넥션 생성에서 발생하는 지연과 리소스 사용으로 인한 문제라고 생각했습니다(제 미천한 추측입니다..)

해결 방안은 고민 중인데 고수님들의 의견을 듣고 싶습니다.. 제가 생각한 문제 해결방법은 이렇습니다

1. 가장 데이터를 많이 탐색하는 게시물 데이터를 Redis에 저장하려합니다. Write-behind 방식으로 처음 데이터는 DB에서 가져오고, 이후로는 레디스에 먼저 작성 및 수정, 특정 시간마다 DB에 쓰기작업을 실행하려합니다.

2. 추천 기능 시 조회는 역인덱스를 지원하는 툴을 사용하려 합니다. 어떤 것을 사용할지 확정은 안했습니다! 해당 기능을 통해 특정 키워드가 담겨있는 ID를 레디스에서 찾아 특정 조건(회원 개인 선호도에 맞춰)에 게시물 관심도 점수를 추가로 더하려합니다.

서버단에서의 해결을 해보려했으나, 서버 자체에서는 연산이 크지않아 수정하여도 속도 개선이나 에러 처리엔 부족하다고 생각했습니다. 단순히 커넥션풀을 늘리기에는 CPU 점유율이 너무 높아져서 포기했고(이것도 제가 잘 몰라서 그런걸수도..) 이미 테이블을 손대기에는 너무 멀리와서 고민중입니다.  미천한 백붕이에게 가르침을 주세요