프로젝트 내용
•
스프링부트로 직접 코드를 작성하며 서버 애플리케이션 개발
•
대규모 데이터와 트래픽을 고려할 때, 어떻게 고민하고 어떤 방법과 도구로 해결하는지를 알아봄
대규모 시스템의 정의
•
절대적인 기준을 명확하게 정의할 수는 없지만, 다음과 같은 특성 고려
◦
복잡한 시스템을 다루는 방법
◦
병렬 처리
◦
병목 지점 최소화
◦
확장성 있는 구조
프로젝트 요구사항
•
게시글 조회, 생성, 수정, 삭제, 목록 조회
•
댓글 조회, 생성, 삭제, 목록 조회
◦
계층형
▪
최대 2 depth
▪
무한 depth
•
게시글 좋아요
◦
좋아요 수
•
게시글 조회수
◦
사용자별 10분에 1회 집계
프로젝트 요구사항
•
인기글
◦
일 단위 상위 10건 인기글 선정
▪
매일 오전 1시 업데이트
▪
댓글수/좋아요 수/조회수 기반 점수
◦
최근 N일 인기글 내역 조회
•
게시글 조회 최적화 전략
◦
게시글 단건 조회 최적화 전략
◦
게시글 목록 조회 최적화 전략
◦
캐시 최적화 전략
•
대규모 데이터와 트래픽을 지탱할 수 있는 시스템을 고려
배울 수 있는 것
•
대규모 시스템에 적용할 수 있는 방법론 및 개발 전략
◦
서버 애플리케이션을 개발하며 적절한 도구를 활용하는 것이 주 목적
•
Relational Database의 이해 및 활용
◦
MySQL 테이블 및 인덱스 설계, 쿼리 최적화, 데이터베이스 이론
•
In-memory Database의 이해 및 활용
◦
Redis에서 지원하는 다양한 연산과 자료구조
•
Message Broker의 이해 및 활용
◦
Kafka의 동작 원리
◦
분산 이벤트 스트리밍 및 비동기 처리 애플리케이션 구축
•
어떻게 고민하면서 어떤 코드를 만드는가?
시스템 가정
•
MySQL, Redis, Kafka 도구에 대해선
◦
고성능, 안정성, 고가용성을 위한 분산 시스템이 구성되어 있다고 가정
◦
각 도구가 무엇이고, 어떻게 대규모 시스템을 지탱할 수 있는지 학습