Log in to leave a comment
No posts yet
유료 BI 도구 결제 승인을 기다리다 지쳐 직접 대시보드를 파이프라인에 올리기로 한 1인 엔지니어라면 Redash가 가장 현실적인 대안입니다. 하지만 단순히 쿼리 결과를 시각화하는 데 그치면 안 됩니다. 무거운 집계 쿼리가 운영 DB를 마비시키거나, 마케팅 팀에 공유한 대시보드에서 민감한 고객 정보가 노출되는 순간 지옥문이 열립니다. 인프라 예산은 아끼면서도 엔터프라이즈급 안정성을 확보하는 구체적인 설정법을 정리했습니다.
분석용 쿼리가 서비스 장애의 원인이 되는 상황은 초기 스타트업에서 흔한 일입니다. 복잡한 조인이 걸린 쿼리를 매번 운영 DB에서 실행하는 건 위험합니다. Redash의 Query Results Data Source(QRDS)를 사용하면 운영 서버에 가해지는 부하를 물리적으로 떼어낼 수 있습니다. QRDS는 원본 데이터를 Redash 내부의 SQLite 엔진으로 옮겨와 처리하는 방식입니다.
실제로 AWS t3.medium 수준의 사양에서도 QRDS를 쓰면 DB 부하를 80% 이상 덜어낼 수 있습니다. 먼저 데이터 소스 설정에서 QRDS를 활성화하십시오. 무거운 집계 쿼리를 하나 작성한 뒤, 해당 쿼리의 ID 번호를 기억했다가 다른 쿼리창에서 SELECT * FROM cached_query_123 형태로 호출하면 됩니다. 운영 DB는 딱 한 번만 조회하고, 대시보드 사용자는 캐싱된 결과물만 보게 만드는 구조입니다.
여기서 주의할 점은 백그라운드 워커 관리입니다. Celery 워커 하나가 쿼리 결과를 처리할 때 보통 200MB에서 400MB 정도 메모리를 잡아먹습니다. /status.json 경로에서 대기 중인 쿼리 숫자가 계속 늘어난다면 WORKERS_COUNT를 조정해야 합니다. 메모리가 부족한데 워커만 늘리면 인스턴스가 뻗어버리니 주의가 필요합니다.
데이터 공유는 양날의 검입니다. 마케팅이나 기획 팀에 권한을 줄 때는 반드시 View Only 그룹을 따로 만들어 할당해야 합니다. 이들이 실수로 쿼리를 수정하거나 테이블 구조를 훑고 다니지 못하게 막는 게 우선입니다.
보안 사고를 원천 봉쇄하려면 DB 엔진 레벨에서 SELECT 권한만 가진 Read-only 계정을 새로 만드십시오. 그다음 이메일이나 전화번호 같은 민감 정보는 SQL의 CONCAT 함수를 써서 jo**@gm****.com처럼 마스킹 처리한 뷰(View)를 정의합니다. Redash는 이 뷰에만 연결합니다. 분석가는 필요한 통계 수치는 얻되, 원본 데이터는 절대 볼 수 없는 상태가 됩니다.
외부 공격은 Nginx 설정으로 방어합니다. 사내 고정 IP와 내부 VPN 대역 외의 모든 접근은 deny all 지시어로 차단하는 게 기본입니다. 추가로 REDASH_DISABLE_PUBLIC_URLS 환경 변수를 켜두면 관리자 모르게 공용 URL이 생성되어 데이터가 밖으로 새 나가는 상황을 막을 수 있습니다.
대시보드는 쳐다보고 있을 때만 의미가 있는 게 아닙니다. 특정 지표가 임계치를 넘으면 시스템이 먼저 말을 걸어줘야 합니다. Redash Alert 기능을 Slack Webhook과 연결하면 결제 실패율이나 서버 에러 발생 시 개발자가 즉시 개입할 수 있습니다.
알림 메시지 템플릿에 {{ALERT_NAME}}과 {{QUERY_RESULT_VALUE}}를 포함하면 슬랙 메시지만 보고도 상황의 심각성을 바로 알 수 있습니다. 이 체계를 갖추면 장애 인지 후 디버깅을 시작하기까지 걸리는 시간이 절반 이하로 줄어듭니다.
다만 모든 변동 사항에 알림을 보내면 '알람 피로도' 때문에 결국 메시지를 무시하게 됩니다. Just Once 설정을 써서 지표가 처음 선을 넘었을 때와 다시 정상으로 돌아왔을 때만 알림이 오도록 조절하십시오. 쿼리문 안에 절대 수치 대신 전 시간 대비 증가율을 계산하는 로직을 넣어두면 서비스가 성장해도 임계치를 매번 수정할 필요가 없어 편합니다.
단순한 데이터 추출 요청에 매일 한두 시간을 뺏기고 있다면 쿼리 파라미터를 제대로 안 쓰고 있다는 증거입니다. {{ date_range }} 같은 구문을 쿼리에 넣으면 대시보드 상단에 날짜 선택 위젯이 생깁니다. 비기술 직군이 직접 기간을 바꿔가며 데이터를 뽑게 만드십시오.
오타로 인한 쿼리 오류를 막으려면 드롭다운 리스트(Dropdown List) 타입을 권장합니다. 상품 목록처럼 자주 변하는 데이터는 Query Based Dropdown List를 연결해두면 자동으로 최신 목록이 유지됩니다.
보안상 텍스트 입력 타입은 지양하는 게 좋습니다. SQL 인젝션 공격 통로가 될 수 있어 Redash에서도 관리자 권한자에게만 제한적으로 허용합니다. 일반 사용자용 대시보드에는 검증된 값만 고를 수 있는 날짜 선택기나 드롭다운만 배치하는 것이 안전합니다. 이렇게 환경을 만들어두면 개발자는 핵심 로직 구현에만 집중할 시간을 벌 수 있습니다.