안녕하세요 2팀 관웅입니다. 저희 팀 주제는 덕후감입니다. 발표 시작하겠습니다.
(다음 페이지)
발표 순서는 팀 구성 및 역할, 프로젝트 개요, 아키텍쳐 명세, ERD, 협업 방식, 구현 내용, 트러블 슈팅, 자체 평가 순으로 진행하겠습니다.
(다음 페이지)
팀 구성 및 역할입니다. 제가 도서 기능, 재준님이 리뷰, 웅제님이 댓글, 준영님이 사용자 및 알림, 승원님이 대시보드 기능을 맡아주셨습니다. 오른쪽의 기능들은 추가로 더 작업한 기능 목록입니다.
(다음 페이지)
저희 팀에서 사용한 기술 스택은 다음과 같습니다. CodeCov 기준 테스트 커버리지를 93% 달성했습니다.
(다음 페이지)
다음은 애플리케이션 아키텍처입니다. API 서버와 무거운 작업을 처리하는 배치 스케줄러를 분리해서 부하를 분산시켰습니다. 성능 최적화를 위해 읽기 트래픽은 Redis와 ElasticSearch로 분산시켰고, DB 데이터는 Logstash를 통해 검색 엔진으로 동기화됩니다. 리뷰, 좋아요, 알림 등의 이벤트 처리는 Kafka를 통해 비동기 파이프라인으로 빼서 메인 서버의 응답 지연을 최소화 하도록 설계했습니다.
(다음 페이지)
인프라 아키텍처입니다. 외부 트래픽은 퍼블릭 서브넷과 로드밸런서가 받고, 실제 애플리케이션이 도는 EC2와 RDS는 프라이빗 서브넷으로 격리해서 보안성을 높였습니다. 그리고 Github Actions와 ECR을 연동해 Docker 기반의 배포 파이프라인을 구축했습니다.
(다음 페이지)
ERD는 이렇게 구성했습니다.
대시보드는 실시간 트랜잭션이 아닌 배치 작업으로 미리 집계된 랭킹 데이터를 담습니다. 그래서 도메인 테이블과의 FK 결합을 끊어 조회 성능을 올리고, 시스템 의존성을 낮춰 성능 최적화를 위해 분리 설계를 했습니다
(다음 페이지)
저희 팀은 최대한 관심사의 분리를 지키며 개발하자는 원칙을 두고 개발했습니다. 각 계층에서 담당해야하는 부분만 작성해서 코드의 품질을 올리고자 했습니다. 리뷰어는 각 기능의 연관관계에 있는 사람을 지정하여 진행했습니다.
(다음 페이지)
형상 관리는 Github Flow를 채택해서 Main, Dev, Feature 브랜치로 분리하여 진행했습니다. 그리고 Dev 브랜치에서는 CI를, Main 브랜치에는 CD를 적용했습니다.
(다음 페이지)
기능 구현에 대한 내용 시작하겠습니다.