더핑크퐁컴퍼니가 로그 시각화 도구를 Kibana에서 Retool로 옮기며 얻은 지식을 정리한 글이다. Tableau와 Retool을 비교해 선택한 이유부터 리소스 연결, 모듈화, 쿼리 최적화, 자바스크립트 변환기까지 기능별로 짚는다. 로그가 Snowflake로 통합되면서 시각화 도구를 다시 골라야 했던 상황이 배경이다.
핵심 포인트- Kibana에서는 앱 목록 드롭다운에 아이디와 이름과 이미지를 함께 보여주는 것 같은 요구를 구현하기 어려웠다.
- Tableau는 시각화 다양성과 대화형 UI가 강점이지만 비용과 러닝 커브가 높고 커스텀 기능은 결국 프런트엔드 개발이 필요하다.
- Retool은 로우코드로 빠르게 만들면서 JavaScript로 커스텀 로직을 붙일 수 있어 그 중간 지점에 있다고 본다.
- Retool은 작성한 쿼리를 기본적으로 Prepared Statements로 처리해 SQL injection을 막는다.
- 모든 JavaScript는 별도 iframe의 다른 도메인에서 실행돼 스크립트 주입을 방지한다.
- 쿼리 캐싱은 최대 하루까지 설정할 수 있어 자주 바뀌지 않는 데이터의 요청을 줄인다.
상세 정리- 이전 구조: 앱 로그를 Elasticsearch에 적재해 Kibana로 시각화하고, 추가 분석 요구는 JavaScript로 웹페이지를 만들어 대응하고 있었다.
- 전환 계기: 모든 로그를 Snowflake로 옮기면서 통합된 데이터를 한 도구로 시각화할 필요가 생겼고 호환성을 고려해 Tableau와 Retool로 후보를 좁혔다.
- Tableau의 강점: 시각화 옵션이 다양하고 상호작용 가능한 대시보드를 만들 수 있으며 여러 데이터 원본과 실시간으로 연결되고 커뮤니티가 활발하다.
- Tableau의 약점: 라이선스와 구독 비용이 상대적으로 높고 복잡한 작업에는 학습 시간이 든다.
- Retool의 강점: 로우코드라 개발이 빠르고 다양한 데이터 원본과 통합되며 JavaScript로 커스텀 로직과 UI를 붙일 수 있다.
- Retool의 약점: Tableau만큼 고급 시각화 옵션이 많지 않고 비교적 새로운 도구라 커뮤니티가 작다.
- 선택 근거: 분석가가 직접 지표를 다루는 이점은 Tableau가 크지만 러닝 커브가 높고 커스텀 요구는 결국 프런트엔드 개발 공수를 부른다고 봤다.
- 리소스 연결: Snowflake 데이터베이스와 GraphQL API를 함께 붙여 시각화했다.
- 보안 1: 외부에서 SQL을 직접 전달하는 구조는 injection 위험이 있는데, Retool은 쿼리를 미리 컴파일하고 입력을 파라미터로 넘기는 방식을 기본 적용한다. 동적 SQL 생성을 켜면 이 보호가 함께 꺼진다는 점도 짚는다.
- 보안 2: 중괄호 두 개 안의 JavaScript는 별도 iframe에서 다른 도메인으로 실행돼 스크립트 주입을 막는다.
- 모듈화: 네비게이션바나 필터는 모듈로 만들어 페이지마다 재사용하고, 모듈 값을 밖에서 쓰려면 설정에서 export해야 한다. 무료 계정은 모듈 5개까지다.
- 모듈 활용례: 테스트 서버와 실서버 로그를 구분하는 토글을 모듈에 두고 각 페이지에서 그 값을 참조하도록 했다.
- 쿼리 라이브러리: 여러 페이지에서 공통으로 쓰는 쿼리를 저장해두고 페이지별 리소스에 연결해 쓰며 버전 선택도 지원한다.
- 쿼리 트리거: 입력값이 바뀔 때 자동 실행하거나 수동으로 실행할 수 있고, Custom rule을 걸어 조건을 만족하지 않으면 요청 자체를 막을 수 있다. 수동 방식이어도 Watched inputs에 필드를 넣으면 변경을 감지해 자동 요청한다.
- 캐싱: 최대 86,400초까지 저장할 수 있어 실시간성이 낮은 데이터는 페이지 로딩 시 한 번만 요청하도록 줄인다.
- JavaScript Transformer: 데이터 예외 처리나 값 변환을 쿼리 대신 자바스크립트로 처리한다. Snowflake의 ID와 GraphQL API의 제목을 매핑해 그래프 x축 값을 만든 사례를 든다.
- Variable: useState처럼 상태를 관리한다. 그래프 선택 이벤트에서 x축 값으로 ID를 저장해두고 다음 쿼리 요청에 활용했다.
- 테이블 기능: 툴바를 켜면 필터링과 다운로드와 재요청이 붙고, 필터링은 별도 쿼리 없이 테이블 소스로 처리된다. 기존 컬럼으로 새 컬럼을 만들어 플랫폼별 조회수를 합산한 통합 값을 넣기도 했다.
- 운영 기능: 릴리즈로 배포 버전을 관리하고 문제 시 이전 버전으로 되돌릴 수 있는데 유료 버전 전용이다. 디버그 콘솔과 히스토리 되돌리기는 여럿이 함께 작업할 때 쓸 만하다고 밝힌다.
왜 읽나Kibana나 Tableau로는 커스텀 요구를 못 맞추고 직접 만들자니 공수가 부담이라면, 그 중간 지점의 도구가 실제로 어디까지 되는지 기능 단위로 확인할 수 있다.