프로젝트 배경
사용자에게 주요 비즈니스 현황을 제공하는 웹 대시보드가 있었습니다. 그러나 대시보드에 필요한 통계 데이터를 생성하는 쿼리가 매우 복잡하고, 원본 데이터 테이블의 크기가 16GB에 달해 페이지를 로드하는 데 평균 1분 30초가 소요되었습니다. 인덱스 최적화와 쿼리 튜닝을 시도했으나 데이터의 양과 계산의 복잡성으로 인해 유의미한 성능 개선을 이루지 못했습니다. 이로 인해 사용자의 서비스 이탈률이 증가하고 만족도가 저하되는 심각한 문제가 발생했습니다.
이 문제를 해결하기 위해, 사용자가 요청할 때마다 쿼리를 실행하는 대신 미리 결과를 계산하여 별도의 캐시 테이블에 저장하고, 대시보드는 이 캐시 테이블의 데이터만 빠르게 읽어오도록 하는 캐싱 시스템을 구축하기로 결정했습니다.
담당 역할 및 기여
본 프로젝트는 기획, 설계, 개발 전 과정을 100% 단독으로 진행했습니다.
이 문제를 해결하기 위해, 사용자가 요청할 때마다 쿼리를 실행하는 대신 미리 결과를 계산하여 별도의 캐시 테이블에 저장하고, 대시보드는 이 캐시 테이블의 데이터만 빠르게 읽어오도록 하는 캐싱 시스템을 구축하기로 결정했습니다.
담당 역할 및 기여
본 프로젝트는 기획, 설계, 개발 전 과정을 100% 단독으로 진행했습니다.
프로젝트 성과
성능 최적화
웹 대시보드 페이지 로딩 시간을 90초에서 1초 이내로 99% 단축하여 사용자에게 거의 실시간에 가까운 데이터 조회 경험을 제공했습니다.
안정적인 서비스 운영
기존 DB의 부하를 최소화하고, 인덱스 튜닝 등 전통적인 방식으로 해결이 어려웠던 성능 병목 현상을 근본적으로 해결했습니다.
운영 효율성 확보
캐싱 프로세스를 제어할 수 있는 관리 프로그램을 개발하여, 캐시 데이터의 수동 생성, 주기적 자동 갱신, 설정 초기화 등 운영 편의성을 높였습니다.
독자적인 문제 해결 능력 입증
문제 정의부터 시작하여 아키텍처 설계, 기술 스택 선정, 개발 및 안정화까지 모든 과정을 주도적으로 수행하며 End-to-End 프로젝트 수행 역량을 증명했습니다.
핵심 기능
주기적 자동 캐싱
지정된 시간 간격마다 시스템이 자동으로 무거운 통계 쿼리를 실행합니다. 그 후, 최신 결과 데이터를 별도의 캐시 테이블에 덮어쓰거나 갱신하여 데이터의 정합성을 유지합니다.
수동 캐싱 실행
관리자가 즉시 데이터를 갱신해야 할 경우(예: 원본 데이터의 대규모 변경 직후), UI의 'Caching_Manually' 버튼을 통해 원하는 시점에 캐싱 프로세스를 직접 실행할 수 있습니다.
서비스 제어
'Checking_Start', 'Checking_Stop', 'TurnOff' 메뉴를 통해 캐싱 서비스의 시작, 중지, 완전 종료 등 전체 라이프사이클을 손쉽게 제어할 수 있어 서버 점검이나 업데이트 시 설정가능
설정 관리
'init_Setting' 기능을 통해 데이터베이스 연결 정보, 대상 쿼리, 캐싱 주기 등 프로그램의 주요 설정을 외부 파일이나 초기화 로직을 통해 관리하여 코드 변경 없이 운영 환경에 맞게 조정할 수 있습니다.
진행 단계
기획 (Planning)
2023.12.
대시보드 로딩 속도 저하의 근본 원인(대용량 데이터 기반의 복합 쿼리)을 분석하고 정의했습니다.
기존 DB 최적화 방식의 한계를 파악하고, '결과 캐싱'을 핵심 해결 전략으로 수립했습니다.
기존 DB 최적화 방식의 한계를 파악하고, '결과 캐싱'을 핵심 해결 전략으로 수립했습니다.
설계 (Design)
2023.12.
시스템 아키텍처 설계: 원본 DB와 웹 대시보드 사이에 위치하여 비동기적으로 데이터를 처리하는 캐싱 프로그램의 전체 구조를 설계했습니다.
개발 (Development)
2023.12.
C# .NET Framework 환경에서 MySQL DB에 연결하여 지정된 쿼리를 실행하고, 그 결과를 캐시 테이블에 저장하는 핵심 로직을 구현했습니다.
프로젝트 상세
1. 프로젝트 개요
프로젝트명: 실시간 대시보드 로딩 속도 99% 개선: C# 기반 DB 캐싱 시스템
한 줄 요약: 대용량 데이터베이스의 복잡한 통계 쿼리 결과를 별도의 테이블에 미리 저장(캐싱)하여, 웹 대시보드의 조회 속도를 90초에서 1초 이내로 단축시킨 C# 기반 백그라운드 애플리케이션입니다.
2. 문제 정의 (Problem)
주요 비즈니스 지표를 시각화하는 웹 대시보드가 약 16GB 크기의 원본 테이블에서 데이터를 조회하는 데 평균 1분 30초가 소요되는 심각한 성능 저하 문제가 있었습니다. 이로 인해 사용자의 서비스 만족도가 급감하고 데이터 기반의 빠른 의사결정이 어려웠습니다. 인덱스 튜닝 등 일반적인 DB 최적화 방법으로는 해결이 불가능한 상황이었습니다.
3. 해결 방안 및 시스템 아키텍처 (Solution & Architecture)
느린 쿼리를 실시간으로 실행하는 대신, 미리 결과를 계산하여 가벼운 '캐시 테이블'에 저장하고, 대시보드는 이 캐시 테이블만 조회하게 하는 방식을 고안했습니다. 이를 위해 독립적으로 동작하는 C# 캐싱 프로그램을 개발했습니다.
동작 흐름:
[쿼리 실행] C# 캐싱 프로그램이 정해진 스케줄 또는 수동 명령에 따라 원본 DB에 대해 무거운 통계 쿼리(1분 30초 소요)를 실행합니다.
[결과 저장] 쿼리 실행으로 얻은 결과 데이터셋을 가공하여, 대시보드 조회를 위해 최적화된 '캐시 테이블'에 저장(INSERT/UPDATE)합니다.
[빠른 조회] 사용자가 웹 대시보드에 접근하면, 대시보드는 무거운 원본 테이블이 아닌 가벼운 '캐시 테이블'을 직접 조회하여 1초 이내에 결과를 화면에 렌더링합니다.
[반복] 캐싱 프로그램은 백그라운드에서 주기적으로 1~2번 과정을 반복하며 데이터의 최신성을 유지합니다.
[원본 DB (16GB)] <---(1. 무거운 쿼리 실행)--- [C# 캐싱 프로그램] ---(2. 결과 저장)--- [캐시 테이블]
|
| (3. 빠른 조회)
V
[웹 대시보드]
4. 핵심 기능 및 특징
스케줄링 기반 자동 갱신: 설정된 시간마다 자동으로 데이터 캐시를 업데이트하여 항상 최신 데이터를 유지합니다.
유연한 수동 제어: 관리자가 필요할 때 즉시 캐시를 갱신할 수 있는 수동 실행 기능을 제공합니다.
서비스 안정성: Windows 시스템 트레이에서 백그라운드 프로세스로 동작하여 시스템 리소스를 최소한으로 사용하며, 다른 서비스에 영향을 주지 않고 안정적으로 운영됩니다.
직관적인 관리: 간단한 컨텍스트 메뉴 UI를 통해 서비스의 시작, 중지 등 모든 기능을 손쉽게 제어할 수 있습니다.
5. 결과 및 기대효과 (Result & Impact)
정량적 성과:
페이지 로딩 시간 99% 단축 (90초 → 1초 이내)
원본 DB의 부하를 현저히 감소시켜 전체 시스템 안정성 증대
정성적 성과:
사용자 경험(UX)의 획기적인 개선 및 서비스 만족도 상승
데이터 접근성 향상을 통한 신속하고 정확한 비즈니스 의사결정 지원
프로젝트명: 실시간 대시보드 로딩 속도 99% 개선: C# 기반 DB 캐싱 시스템
한 줄 요약: 대용량 데이터베이스의 복잡한 통계 쿼리 결과를 별도의 테이블에 미리 저장(캐싱)하여, 웹 대시보드의 조회 속도를 90초에서 1초 이내로 단축시킨 C# 기반 백그라운드 애플리케이션입니다.
2. 문제 정의 (Problem)
주요 비즈니스 지표를 시각화하는 웹 대시보드가 약 16GB 크기의 원본 테이블에서 데이터를 조회하는 데 평균 1분 30초가 소요되는 심각한 성능 저하 문제가 있었습니다. 이로 인해 사용자의 서비스 만족도가 급감하고 데이터 기반의 빠른 의사결정이 어려웠습니다. 인덱스 튜닝 등 일반적인 DB 최적화 방법으로는 해결이 불가능한 상황이었습니다.
3. 해결 방안 및 시스템 아키텍처 (Solution & Architecture)
느린 쿼리를 실시간으로 실행하는 대신, 미리 결과를 계산하여 가벼운 '캐시 테이블'에 저장하고, 대시보드는 이 캐시 테이블만 조회하게 하는 방식을 고안했습니다. 이를 위해 독립적으로 동작하는 C# 캐싱 프로그램을 개발했습니다.
동작 흐름:
[쿼리 실행] C# 캐싱 프로그램이 정해진 스케줄 또는 수동 명령에 따라 원본 DB에 대해 무거운 통계 쿼리(1분 30초 소요)를 실행합니다.
[결과 저장] 쿼리 실행으로 얻은 결과 데이터셋을 가공하여, 대시보드 조회를 위해 최적화된 '캐시 테이블'에 저장(INSERT/UPDATE)합니다.
[빠른 조회] 사용자가 웹 대시보드에 접근하면, 대시보드는 무거운 원본 테이블이 아닌 가벼운 '캐시 테이블'을 직접 조회하여 1초 이내에 결과를 화면에 렌더링합니다.
[반복] 캐싱 프로그램은 백그라운드에서 주기적으로 1~2번 과정을 반복하며 데이터의 최신성을 유지합니다.
[원본 DB (16GB)] <---(1. 무거운 쿼리 실행)--- [C# 캐싱 프로그램] ---(2. 결과 저장)--- [캐시 테이블]
|
| (3. 빠른 조회)
V
[웹 대시보드]
4. 핵심 기능 및 특징
스케줄링 기반 자동 갱신: 설정된 시간마다 자동으로 데이터 캐시를 업데이트하여 항상 최신 데이터를 유지합니다.
유연한 수동 제어: 관리자가 필요할 때 즉시 캐시를 갱신할 수 있는 수동 실행 기능을 제공합니다.
서비스 안정성: Windows 시스템 트레이에서 백그라운드 프로세스로 동작하여 시스템 리소스를 최소한으로 사용하며, 다른 서비스에 영향을 주지 않고 안정적으로 운영됩니다.
직관적인 관리: 간단한 컨텍스트 메뉴 UI를 통해 서비스의 시작, 중지 등 모든 기능을 손쉽게 제어할 수 있습니다.
5. 결과 및 기대효과 (Result & Impact)
정량적 성과:
페이지 로딩 시간 99% 단축 (90초 → 1초 이내)
원본 DB의 부하를 현저히 감소시켜 전체 시스템 안정성 증대
정성적 성과:
사용자 경험(UX)의 획기적인 개선 및 서비스 만족도 상승
데이터 접근성 향상을 통한 신속하고 정확한 비즈니스 의사결정 지원
