Skip to content

mirea70/Toy-Article-Project

Repository files navigation

프로젝트 개요

일을 하면서 항상 같은 기능이라도 대규모 트래픽이 발생 하거나 동시성 이슈가 발생하는 등 복잡한 상황에서는 어떻게 처리해야할 지 고민하고 싶은 니즈가 있었습니다. 이에 따라 순전히 학습만을 위한 Toy 게시판 프로젝트를 진행하면서 평소 하고싶었던 고민들을 하며 기술적으로 성장해보고 싶어 프로젝트를 시작하게 되었습니다. 약 1,200만 건의 게시글 데이터를 기준으로 분산시스템 환경에서 최대한 효율성을 고려해 기능을 구현해보려고 노력했습니다.


주요 기능

백엔드 학습이 목표이므로 화면 개발은 과감히 배제하였으며, 로그인 기능도 배제하여 아래 핵심 기능만 개발 진행하였습니다.

  • 게시글 CRUD
  • 댓글 CRUD
  • 좋아요
  • 조회수
  • 인기글

시스템 아키텍처

image

게시판 서비스 특성 상, 읽기 트래픽이 쓰기 트래픽에 비해 상당히 높은 경향이 있습니다. 따라서 CQRS 패턴을 서비스, DB레벨에 적용하여 부하를 분산시켰습니다. 이 때 Kafka를 활용하여 쓰기 영역 서비스들과 읽기 영역 서비스들의 결합도를 낮추어, 각 영역에 장애가 발생했을 때 전파되지 않도록 하였습니다.

성능이 중요한 기능들은 Redis에 비정규화하여 저장해놓고 캐싱을 적극 활용하고자 했습니다. 각 서비스마다 서버를 할당하면 비용이 만만치 않으므로, 서비스마다 별도의 애플리케이션 및 DB를 할당하여 진행하였습니다.


경험한 주요 이슈사항

  • 각 도메인의 특성에 따른 DB 및 비즈니스 로직 설계
  • 캐싱한 게시글 조회 데이터의 캐시 만료 타이밍에 대한 동시성 이슈
  • Covering Index를 활용해 게시판 목록 조회 쿼리 효율 20배 개선
  • 분산 Lock을 활용한 조회수 어뷰징 문제
  • 분산 시스템 간 트랜잭션 통합 문제

About

1,200만건의 테스트 데이터를 기반으로 대규모 분산 시스템 설계 및 환경에서의 개발, 동시성 고려 등 순전히 기술적 성장 및 학습만을 위한 전형적인 게시판 프로젝트입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages