Redash 설치 및 연동 가이드

이 가이드는 macOS 환경에서 Docker를 사용하여 Redash를 설치하고, Google BigQuery를 데이터 소스로 연결하는 전체 과정을 안내합니다. 또한, 자동화를 위한 REST API 사용법까지 다룹니다. 각 단계를 순서대로 따라 하면 복잡한 권한 문제 없이 안정적으로 Redash 환경을 구축할 수 있습니다.

macOS에 Redash 설치하기

시스템 폴더(`_`/opt)의 복잡한 권한 문제를 피하기 위해, 사용자 홈 디렉토리(`_`~/redash)에 설치를 진행합니다. 이 방법은 가장 안정적이고 권장되는 방식입니다.

1단계: 완전 초기화

이전 설치 시도에서 남은 파일이나 설정이 있다면 충돌을 일으킬 수 있습니다. 아래 명령어로 깨끗하게 정리합니다.
참고: Redash를 처음 설치하는 경우 이 단계는 건너뛰어도 됩니다.

# 기존 /opt/redash 폴더 삭제 (오류가 나도 괜찮습니다)
sudo rm -rf /opt/redash

# 도커 시스템 정리 (모든 컨테이너, 이미지, 볼륨 등 삭제)
docker system prune -a --volumes -f

2단계: Docker Hub 로그인

Docker Hub의 이미지 다운로드 제한을 피하기 위해 로그인합니다. 터미널에 아래 명령어를 입력하고 계정 정보를 입력하세요.

docker login

3단계: 새로운 설치 폴더 생성

사용자 홈 디렉토리에 Redash 설치를 위한 폴더를 생성합니다. `sudo`가 필요 없습니다.

# 홈 디렉토리로 이동
cd ~

# redash 설치 폴더와 데이터베이스 폴더 생성
mkdir -p ~/redash/postgres-data

4단계: 설정 파일 생성

방금 만든 `~/redash` 폴더로 이동한 뒤, `compose.yaml`과 `env` 파일을 생성합니다.

cd ~/redash

`compose.yaml` 파일 생성:

`vi compose.yaml` 또는 다른 편집기를 사용하여 아래 내용 전체를 복사-붙여넣기 하세요.

services:
  server:
    image: redash/redash:10.1.0.b50633
    platform: linux/amd64
    depends_on:
      - postgres
      - redis
    env_file: ~/redash/env
    restart: always
    ports:
      - "5100:5000"
  worker:
    image: redash/redash:10.1.0.b50633
    platform: linux/amd64
    depends_on:
      - postgres
      - redis
    env_file: ~/redash/env
    restart: always
    command: worker
  redis:
    image: redis:7-alpine
    restart: always
  postgres:
    image: postgres:13-alpine
    env_file: ~/redash/env
    volumes:
      - ~/redash/postgres-data:/var/lib/postgresql/data
    restart: always
  nginx:
    image: redash/nginx:latest
    ports:
      - "80:80"
    depends_on:
      - server
    links:
      - server:redash
    restart: always

`env` 파일 생성:

`vi env` 명령어로 파일을 열고 아래 내용을 붙여넣으세요. 비밀번호와 시크릿 키는 원하는 값으로 변경하는 것을 권장합니다.

PYTHONUNBUFFERED=0
REDASH_LOG_LEVEL=INFO
REDASH_REDIS_URL=redis://redis:6379/0
POSTGRES_PASSWORD=your_postgres_password
REDASH_COOKIE_SECRET=your_super_secret_cookie
REDASH_DATABASE_URL=postgresql://postgres:your_postgres_password@postgres/postgres

5단계: Redash 실행

`~/redash` 폴더 안에서 아래 명령어를 순서대로 실행합니다.

1. 데이터베이스 테이블 생성 (최초 1회만 실행):

docker compose run --rm server create_db

2. 모든 서비스 실행:

docker compose up -d

설치가 완료되면 웹 브라우저에서 http://localhost 또는 http://localhost:5100 으로 접속하여 Redash 초기 설정 화면을 확인하세요.

Redash와 BigQuery 연결하기

Redash가 BigQuery 데이터에 접근하려면 Google Cloud 서비스 계정과 JSON 키 파일이 필요합니다.

A. Google Cloud 서비스 계정 생성

  1. GCP 콘솔 접속: Google Cloud Console에 로그인합니다.
  2. 서비스 계정 페이지 이동: 왼쪽 메뉴에서 IAM 및 관리자 > 서비스 계정으로 이동합니다.
  3. 서비스 계정 만들기: 상단의 [+ 서비스 계정 만들기]를 클릭하고, 계정 이름을 입력합니다 (예: `redash-connector`).
  4. 역할 부여 (중요): Redash에 필요한 권한을 부여합니다. 아래 두 가지 역할을 검색하여 추가하세요.
    • BigQuery 데이터 뷰어 (BigQuery Data Viewer)
    • BigQuery 작업 사용자 (BigQuery Job User)
  5. JSON 키 파일 다운로드:
    • 생성된 서비스 계정 목록에서 방금 만든 계정의 이메일 주소를 클릭합니다.
    • 상단의 키(KEYS) 탭으로 이동합니다.
    • [키 추가] > [새 키 만들기]를 선택하고, 키 유형으로 **JSON**을 선택 후 [만들기]를 클릭합니다.
    • JSON 키 파일이 컴퓨터에 다운로드됩니다. 이 파일은 비밀 정보이므로 안전하게 보관하세요.

B. Redash 데이터 소스 추가

  1. Redash 데이터 소스 메뉴: Redash 로그인 후, 오른쪽 상단 **설정(⚙️) 아이콘** > **Data Sources**를 클릭합니다.
  2. 새 데이터 소스 추가: **[+ New Data Source]** 버튼을 누르고 목록에서 **BigQuery**를 선택합니다.
  3. 연결 정보 입력:
    • Name: 데이터 소스를 식별할 이름을 입력합니다 (예: `GCP BigQuery`).
    • GCP Project ID: 연결할 GCP 프로젝트의 ID를 입력합니다.
    • JSON Key File: 위에서 다운로드한 JSON 키 파일의 전체 내용을 복사하여 이 칸에 붙여넣습니다.
  4. 연결 테스트 및 저장: [Test Connection]을 눌러 'Success'가 나오는지 확인한 후, [Create] 버튼을 눌러 저장을 완료합니다.

REST API 사용하기

Redash의 거의 모든 기능은 REST API를 통해 자동화할 수 있습니다. 특정 쿼리의 최신 결과를 가져오는 예시입니다.

1. API 요청 정보 확인

  • 사용자 API 키: Redash 프로필 페이지(Edit Profile)의 **API Key** 탭에서 확인할 수 있습니다.
  • 쿼리 ID: API로 실행할 쿼리를 저장한 후, 웹 브라우저 주소창의 `.../queries/ID`에서 `ID` 숫자를 확인합니다.

2. API 요청 예시 (cURL)

아래는 특정 쿼리의 최신 결과를 JSON 형식으로 가져오는 API 요청입니다.

# YOUR_API_KEY와 YOUR_REDASH_URL, QUERY_ID를 실제 값으로 변경하세요.
curl -X POST -H "Authorization: Key YOUR_API_KEY" "YOUR_REDASH_URL/api/queries/QUERY_ID/results"

예시:

curl -X POST -H "Authorization: Key supersecret123" "http://localhost:5100/api/queries/5/results"

3. 추가 API 요청 예시 (Shell Script)

아래 스크립트는 새 쿼리를 동적으로 생성하고 즉시 실행하여 결과를 받아오는 전체 과정을 자동화합니다. 스크립트를 파일(예: `run_query.sh`)로 저장하고 실행 권한을 준 뒤(chmod +x run_query.sh) 서버 환경에서 실행하세요.

#!/bin/bash

# Redash API 키와 URL, 데이터 소스 ID를 설정합니다.
# 중요: API 키는 민감한 정보이므로 외부로 노출되지 않도록 주의해야 합니다.
# 이 스크립트는 서버 환경에서 안전하게 실행하는 것을 전제로 합니다.
API_KEY="YOUR_REDASH_API_KEY" # Redash 프로필에서 발급받은 실제 API 키로 교체하세요.
REDASH_URL="http://localhost:5100" # Redash 설치 주소로 변경하세요.
DATA_SOURCE_ID=1 # 쿼리를 실행할 데이터 소스의 ID로 변경하세요.

# 실행할 SQL 쿼리를 변수로 정의합니다.
SQL_QUERY="SELECT * FROM \`your_project_id.your_dataset.your_table\`;" # 실제 프로젝트, 데이터셋, 테이블명으로 변경하세요.

echo "1단계: 새로운 쿼리를 생성하고 ID를 받아옵니다..."

# 1. 새로운 쿼리 생성을 요청하고, 그 응답에서 jq를 사용해 'id' 값만 추출합니다.
#    -s 옵션은 curl의 진행상황 출력을 숨깁니다.
QUERY_ID=$(curl -s -X POST \
  -H "Authorization: Key ${API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "data_source_id": '${DATA_SOURCE_ID}',
    "query": "'"${SQL_QUERY}"'",
    "name": "Dynamic Query from Script"
  }' \
  "${REDASH_URL}/api/queries" | jq '.id')

# 쿼리 ID를 성공적으로 받았는지 확인합니다.
if [ -z "$QUERY_ID" ] || [ "$QUERY_ID" == "null" ]; then
  echo "오류: 쿼리 ID를 받아오지 못했습니다. API 키나 데이터 소스 ID를 확인하세요."
  exit 1
fi

echo "성공! 새로 생성된 쿼리 ID: ${QUERY_ID}"
echo "----------------------------------------"
echo "2단계: 받은 ID로 쿼리 결과를 요청합니다..."

# 2. 위에서 받은 QUERY_ID를 사용하여 쿼리 결과를 요청합니다.
# 이 단계는 쿼리 실행을 '요청'하며, 결과는 비동기적으로 처리될 수 있습니다.
# job.id를 받아 상태를 폴링하거나, 단순 결과를 위해 /api/queries/QUERY_ID/results.json?api_key=... 엔드포인트를 사용할 수 있습니다.
curl -X POST \
  -H "Authorization: Key ${API_KEY}" \
  "${REDASH_URL}/api/queries/${QUERY_ID}/results"

echo "\n\n쿼리 실행 요청 완료."