기술적 의사결정 목록
아키텍처 설계
- 실시간 채팅 시스템에서 HTTP Long Polling, Server-Sent Events, WebSocket 중 어떤 프로토콜이 최적의 선택일까?
- 다중 서버 환경에서 WebSocket 세션을 안정적으로 유지하면서 어떻게 시스템 확장성을 확보할 수 있을까?
- 채팅 애플리케이션의 특성을 고려했을 때, 전통적인 RDB와 NoSQL 중 어떤 데이터베이스 아키텍처가 더 적합할까?
- 메시지의 발신자 정보를 임베딩할지 참조할지 결정하는데 있어서, 실시간 업데이트와 조회 성능 중 어떤 것을 우선시해야 할까?
이벤트 시스템
- 이벤트 핸들러를 어떻게 설계해야 새로운 기능 추가시 기존 코드 변경없이 확장 가능할까?
- Spring WebFlux와 Kotlin Coroutine을 어떻게 조합하여 효과적인 비동기 처리를 구현할 수 있을까?
- 분산 환경에서 실시간 메시지를 어떻게 효율적으로 라우팅할 수 있을까?
채팅 기능
- 분산 환경을 고려했을 때, 채팅 메시지 식별자로 Long type과 UUID 중 어떤 것이 더 적합할까?
- 대규모 채팅방에서 실시간 읽음 처리를 어떻게 구현하는 것이 효율적일까?
- 채팅 애플리케이션에서 HTTP API와 WebSocket 이벤트를 구분하는 명확한 기준은 무엇일까?
리소스 관리
- WebSocket 연결과 관련된 메모리 누수를 어떻게 효과적으로 방지할 수 있을까?
- 대규모 사용자의 동시 접속을 어떻게 효율적으로 관리할 수 있을까?
파일 관리
- 채팅 애플리케이션의 파일 업로드에서 클라이언트 직접 업로드 방식과 서버 중계 업로드 방식 중 어떤 것이 효율적일까?
- S3 Pre-signed URL을 활용한 파일 업로드와 일반적인 서버 중계 방식 중 어떤 것이 시스템 리소스 관리에 유리할까?
- 대용량 파일 업로드 시 청크 기반 업로드와 일괄 업 로드 중 어떤 방식이 더 안정적일까?
- 이미지 리사이징과 썸네일 생성을 어느 시점에 처리하는 것이 사용자 경험과 시스템 부하 측면에서 효과적일까?
- 채팅방 삭제 시 관련 미디어 파일들의 효율적인 정리 방안은 무엇일까? (S3 스토리지 최적화)
모니터링 및 운영
- CloudWatch를 활용한 효과적인 에러 모니터링과 알림 체계를 어떻게 구축할까?
- 마이크로서비스 환경에서 분산된 로그를 어떻게 효율적으로 통합하고 분석할 수 있을까?
CI/CD
- Gradle 멀티 모듈 프로젝트에서 어떻게 효율적인 자동화 테스트 파이프라인을 구축할 수 있을까?
AWS 인프라
- 개발, 스테이징, 운영 환경의 AWS 리소스를 어떻게 효율적으로 자동화하여 관리할 수 있을까?
- 마이크로서비스 아키텍처에서 CloudFormation 스택을 어떻게 구조화하는 것이 효과적일까?
클라우드 비용 최적화
- 개발/스테이징 환경의 서버를 업무 시간에만 가동하도록 EventBridge 스케줄링을 어떻게 구성할까?
- ECS 클러스터의 Auto Scaling 정책을 어떻게 설정해야 비용 효율적일까?
- DocumentDB 비용 최적화를 위한 인스턴스 클래스 및 스토리지 설정은 어떻게 해야 할까?
- S3 수명 주기 정책을 통해 스토리지 비용을 어떻게 효율적으로 관리할 수 있을까?
- CloudFormation 스택 관리 자동화를 통해 불필요한 리소스 비용을 어떻게 줄일 수 있을까?