100만 LOC 모노리식 시스템, 성능과 안정성을 잡는 113가지 비법 공개!
대규모 데이터베이스(Database) 환경 에서 페이지 카운트(Page Count)와 같은 기본적인 기능이 성능 병목(Bottleneck)을 유발할 수 있음을 지적
장기 실행 크론 작업(Cron Job) 이 시스템 성능 저하의 주요 원인이 되며, 데이터베이스(Database) 부하를 줄이기 위한 전략 제시
프런트엔드(Frontend) 성능 문제 의 주요 원인으로 복잡한 폼 요소(Form Element), DOM 요소 과다, 잦은 렌더링(Rendering) 등을 언급
캐싱(Caching) 전략 수립 시, 개인화된 데이터(Personalized Data) 캐싱의 어려움과 뇌우 현상(Thundering Herd Problem)을 방지하기 위한 방법 제시
데이터베이스(Database) 성능 최적화 전략
게시글에서는 대규모 데이터베이스(Database) 환경에서 페이지 카운트(Page Count)와 같은 기본적인 기능이 성능 저하의 주요 원인이 될 수 있다고 지적한다. 특히, 정확한 전체 페이지 수를 계산하기 위해 데이터베이스(Database)가 모든 일치하는 행을 계산해야 하므로, 데이터베이스(Database) 쿼리 최적화(Query Optimization)가 필수적이라고 강조한다. 해결책으로, 불필요한 주석 제거, 추정된 카운트 사용, 캐싱(Caching) 전략 등을 제시하며, 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 장기 실행 쿼리의 영향을 최소화하는 방법을 제안한다.
장기 실행 작업(Long-Running Tasks) 관리
게시글은 장기 실행 크론 작업(Cron Job)이 시스템 성능에 미치는 부정적인 영향에 주목하며, 특히 데이터베이스(Database)를 공유하는 경우 성능 저하를 심화시킬 수 있다고 경고한다. 해결책으로, 이러한 쿼리의 성능을 최적화하거나, 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 웹 트래픽(Web Traffic)과 분리된 읽기 전용 데이터베이스(Database)를 사용하는 방법을 제시한다. 또한, APM(Application Performance Monitoring) 도구를 사용하여 이러한 작업의 성능을 추적하는 것이 중요하다고 강조하며, 데이터 미저장 정책(Zero-Retention Policy)을 통해 불필요한 데이터 보관을 최소화하는 전략을 제시한다.
프런트엔드(Frontend) 성능 문제 해결
게시글은 프런트엔드(Frontend) 성능 저하의 주요 원인으로 복잡한 폼 요소(Form Element)의 불필요한 작업, DOM 요소 과다, 잦은 렌더링(Rendering), 그리고 백엔드(Backend)에 대한 불필요한 요청 등을 지적한다. 특히, React 기반 애플리케이션에서 이러한 문제들이 빈번하게 발생하며, 불필요한 렌더링을 방지하기 위해 useEffect의 효율적인 사용을 강조한다. 또한, 페이지 로드 시 불필요한 작업을 최소화하고, 코드 분할(Code Splitting)을 통해 초기 로딩 시간을 단축하는 전략을 제시한다.
캐싱(Caching) 전략 및 주의사항
게시글은 캐싱(Caching)이 성능 향상에 효과적이지만, 신중하게 접근해야 한다고 강조한다. 특히, 개인화된 데이터(Personalized Data)를 캐싱하는 것은 복잡하며, 뇌우 현상(Thundering Herd Problem)과 같은 문제를 야기할 수 있다고 지적한다. 해결책으로, 사용자별 데이터를 캐싱하기 전에 공통 데이터를 먼저 캐싱하고, 캐시 키(Cache Key)를 효율적으로 관리하는 방법을 제시한다. 또한, 캐시 만료 시간(TTL, Time To Live)을 적절하게 설정하고, 데이터 미저장 정책(Zero-Retention Policy)을 통해 캐시 관련 문제를 최소화하는 것이 중요하다고 강조한다.
모니터링(Monitoring) 및 디버깅(Debugging) 전략
게시글은 시스템의 안정성을 확보하기 위해 모니터링(Monitoring)과 디버깅(Debugging)의 중요성을 강조한다. 특히, 예외 보고(Exception Reporting) 시스템을 통해 오류를 신속하게 파악하고, 사용자에게 명확한 오류 메시지를 제공하는 것이 중요하다고 강조한다. 또한, 성능 저하를 감지하기 위해 주요 엔드포인트(Endpoint)에 대한 경고를 설정하고, 로그(Logs)를 효율적으로 관리하여 문제 해결 시간을 단축하는 방법을 제시한다. AI 기반의 CLI 툴링(CLI Tooling)을 활용하여 로그 분석 및 문제 해결을 자동화하는 방안도 제시한다.