무상태 구조 + 캐시 레이어 + 메시지 큐 비동기 분리 + 병목 예측 설계 경험
졸업 프로젝트에서 사용자가 늘어날 때 서버를 어떻게 확장할 수 있을지 처음으로 설계에 반영해봤습니다. 수평 확장 측면에서는 서버를 여러 개 추가해도 동작하려면 상태를 서버에 직접 저장하지 않는 구조가 필요하다는 걸 배웠습니다. 캐시 측면에서는 자주 조회되는 데이터를 DB 대신 캐시에서 읽도록 하면 트래픽이 늘어도 DB 부하가 선형으로 증가하지 않는다는 걸 경험했습니다. 비동기 측면에서는 무거운 작업을 메시지 큐로 분리하면 응답 시간에 영향을 주지 않고 처리할 수 있다는 방식을 배웠습니다. 샤딩 측면에서는 데이터가 특정 테이블에 집중될 때 파티셔닝을 고려하는 시점을 언제로 잡을지를 고민했습니다. 확장성 설계에서 중요한 건 처음부터 분산 구조로 만들기보다 어떤 지점이 병목이 될지를 먼저 예측하는 것이라는 걸 배웠습니다.
백엔드 확장성은 코드보다 데이터와 상태를 어떻게 분리하느냐가 결정하는 자리라는 걸 그때 느꼈습니다.