[사이드 프로젝트] HOT-BOARD-1. 요구사항 분석 및 기획

게으른 개발자·2025년 7월 29일

hot-board

목록 보기
1/2

현재 재직중인 회사에서는 B2B 솔루션이 대부분이다 보니 대용량 트래픽 프로젝트를 경험해볼 기회가 부족하여, 이전에 사용해보고 싶었던 기술 스택들도 사용하면서 공부하고자 해당 프로젝트를 진행하고자 한다.

1. 프로젝트 배경 및 개요

뉴스 포털, 커뮤니티, 쇼핑몰 등 다양한 온라인 서비스에서는 "실시간 인기 콘텐츠" 기능이 핵심 UX 요소로 자리잡고 있습니다.
예를 들어, 다음과 같은 사례에서 이 기능이 유용하게 사용됩니다:

  • 네이버 뉴스 실시간 랭킹
  • 디시인사이드 갤러리 인기글
  • 브런치·티스토리 인기 게시글
  • 쇼핑몰의 실시간 인기 상품 목록

이처럼 사용자의 행동(조회, 클릭 등)을 수집하고, 실시간으로 인기 콘텐츠를 집계하여 제공하는 서비스는 트래픽이 많을수록 구조적 설계가 중요해집니다.

hot-board는 이러한 실시간 콘텐츠 집계 시스템을 직접 만들어보는 프로젝트입니다.
기술적 목표는 단순한 구현을 넘어 확장성, 실시간성, 안정성을 고려한 구조를 설계하고, 실무에 가까운 경험을 쌓는 데 있습니다.


2. 시스템 요구사항 정의

시스템이 가져야 할 주요 요구사항은 다음과 같습니다:

분류요구사항설명
기능콘텐츠 조회 기록 수집사용자가 콘텐츠를 조회할 때 이벤트를 수집
기능실시간 집계 처리짧은 주기로 인기 콘텐츠를 재계산
기능인기 콘텐츠 제공 API시간대별 인기 콘텐츠를 REST API로 제공
기능콘텐츠 메타데이터 관리콘텐츠 ID, 제목, URL 등의 정보 관리
비기능확장성트래픽 증가에 따라 수평 확장이 가능해야 함
비기능고가용성일부 컴포넌트 장애 시에도 서비스 유지
비기능실시간성수집부터 API 응답까지 1분 이내 지연 목표
비기능모니터링시스템 지표 수집 및 대시보드 구성

3. 기술 스택 선정 이유 및 비교

기술선정 이유
Java 21 + Spring Boot최신 LTS 버전으로 성능 개선 (가비지 컬렉션, 레코드 등) + 안정성과 생태계 지원
Redis빠른 읽기/쓰기, TTL 기반 캐싱, 실시간 순위 계산에 적합 (ZSET 활용)
Kafka비동기 이벤트 스트리밍 처리, 조회 이벤트 분산 처리에 유리
PostgreSQL복잡한 집계, JSONB, CTE 등 고급 쿼리 지원에 유리
MySQL단순한 트랜잭션 처리나 운영 경험이 많은 환경에 적합
→ 선택 기준PostgreSQL은 복합 집계 쿼리에 강하고, MySQL은 간단한 구조에 강점. 이 프로젝트에서는 PostgreSQL 위주로 진행 예정
Docker개발-운영 환경 일관성 확보
GitHub Actions테스트/빌드/배포 자동화
Prometheus + Grafana메트릭 수집 및 시각화, 알람 설정
k6실제 트래픽 시뮬레이션을 통한 부하 테스트
Testcontainers, RestAssured통합 테스트 및 API 테스트 자동화

✏️ PostgreSQL vs MySQL은 직접 성능 비교 후 일부 기능에 대해 선택적으로 병행할 계획입니다.


4. 개발 로드맵 및 단계별 학습 포인트

단계주요 목표학습 포인트
1단계요구사항 정의 및 기술 설계- 요구사항 도출 과정 정리
- 기술 스택 및 아키텍처 결정
2단계모놀리식 구조 MVP 개발- API 설계 및 이벤트 수집 로직 구현
- Redis를 활용한 실시간 집계 구조 구성
3단계Kafka 도입 및 이벤트 구조 전환- Kafka 토픽 설계 및 컨슈머 구현
- 조회 로그 스트리밍 처리 학습
4단계성능 개선 및 관측 시스템 구축- Prometheus + Grafana 대시보드 구성
- 부하 테스트(k6) 및 병목 지점 분석
5단계MSA 구조로 리팩토링- 서비스 모듈 분리 및 컨테이너화
- 데이터 공유 구조 고민 (DB 분리 여부 등)
6단계문서화 및 회고- 블로그 기록 정리
- 학습 내용 아카이빙 및 발표 자료화

5. 초기 아키텍처 개요

초기에는 모놀리식 기반으로 MVP를 구성하고, 점차 이벤트 기반 구조 및 MSA로 확장할 예정입니다.

아키텍처 구성 초안:

  • API 서버 (Spring Boot)
    → 인기 콘텐츠 조회 API 제공, Redis 캐시 연동

  • 이벤트 수집기 (Kafka Producer)
    → 사용자 조회 로그 전송

  • 집계 배치 서버 (Spring Batch)
    → Kafka에서 이벤트를 수신하여 점수 계산 및 DB 업데이트

  • DB 계층

    • PostgreSQL: 콘텐츠 메타데이터 및 API 데이터 저장
    • Redis: 인기 콘텐츠 순위 캐싱 (ZSET)
  • 모니터링 및 로깅
    → Prometheus + Grafana로 실시간 모니터링

🧩 전체 시스템 아키텍처 다이어그램은 개발 후 [draw.io / Whimsical] 기반 시각 자료로 별도 정리할 예정입니다.


6. 기대 학습 포인트

이 프로젝트를 통해 다음과 같은 실무형 학습을 경험하고자 합니다:

  • Kafka 기반 이벤트 아키텍처 설계 및 장애 상황 처리
  • Redis의 Sorted Set을 활용한 실시간 집계 로직
  • 실서비스 수준의 TPS 환경에서의 테스트와 병목 분석
  • Docker 및 CI/CD로 운영 환경과 유사한 개발 경험 구축
  • MSA 전환 과정에서의 도메인 경계와 데이터 공유 전략 이해

마치며

1단계에서는 전체 구조와 방향성을 고민하며 요구사항과 시스템 구성을 설계해보았습니다.
다음 글에서는 실제로 MVP 구조에서 Redis와 Kafka를 활용한 실시간 집계 구조를 구현해보고, 성능 및 구조적 고려사항을 중심으로 정리해보겠습니다.

읽어주셔서 감사합니다 🙌
다음 글에서 뵙겠습니다!

profile
6년차 백엔드 엔지니어로 일하고 있습니다~!

0개의 댓글