1. 요구사항 분석
- 목표 정의:
- 예: 초당 1만 요청 처리, 평균 응답 시간 200ms 이하 유지.
- 시나리오 작성:
- 어떤 유형의 트래픽이 들어오는지, 동시 사용자 수는 얼마나 되는지 등을 명확히 정의.
- 기술 스택 선택:
- 언어: Java(Spring Boot), Python(FastAPI), Node.js 등.
- 데이터베이스: MySQL, PostgreSQL, Redis 등.
- 부하 분산: Nginx, AWS ELB.
2. 기본 시스템 설계
- 아키텍처 정의:
- 3계층 아키텍처: 프론트엔드 → 백엔드 서버 → 데이터베이스.
- 마이크로서비스 아키텍처: 필요한 경우 기능별로 서비스를 분리.
- 데이터베이스 설계:
- 적절한 인덱싱, 정규화/비정규화 고려.
- 읽기/쓰기 부하를 분산하기 위해 레플리케이션 또는 샤딩 도입.
3. 캐싱 도입
- 캐싱 레이어 설계:
- Redis 또는 Memcached를 사용해 자주 조회되는 데이터를 캐싱.
- 예: 사용자 프로필 정보, 조회수 많은 게시글 등.
- TTL(Time-To-Live) 설정:
4. 비동기 처리
- 메시징 시스템 도입:
- RabbitMQ, Kafka와 같은 메시지 큐를 사용해 비동기적으로 요청 처리.
- 예: 사용자 요청 데이터를 대기열에 저장 후 비동기 작업으로 처리.
- 사용 사례:
- 이메일 알림 전송, 로그 저장, 데이터 분석.
5. 로드 밸런싱 및 스케일링