스케일러블 시스템 수평 확장 설계 결
스케일러블한 시스템을 설계할 때 핵심은 상태를 공유하는 컴포넌트를 최소화하는 것이라고 생각합니다. 서버가 상태를 내부에 보유하면 수평 확장 시 동기화 문제가 생기기 때문에, 세션은 Redis에, 파일은 오브젝트 스토리지에 외부화하는 구조가 중요합니다. 사이드 프로젝트에서 애플리케이션 서버를 Stateless로 설계한 뒤 로드 밸런서를 추가하니 인스턴스를 늘리는 데 별다른 코드 변경이 필요 없었습니다.
비동기 작업 큐를 도입해 응답 시간이 긴 작업을 분리하자 API 응답 속도가 일정해졌고, 사용자 경험이 개선됐습니다. DB 병목도 스케일링에서 빠지지 않는 과제인데, 읽기 전용 레플리카를 분리하고 자주 조회하는 데이터를 캐시하는 것이 기본 접근입니다. 시스템은 처음부터 완전히 스케일 아웃하기보다 병목을 찾고 순서대로 개선하는 것이 현실적인 결임을 배웠습니다.