PostHog는 Mixpanel, Amplitude, Heap을 대체하는 올인원 제품 분석 플랫폼입니다. 웹 분석을 넘어 사용자 행동 심층 분석, 세션 녹화, 기능 플래그, A/B 테스트, 퍼널 분석까지 하나의 플랫폼에서 제공합니다. 제품 개발팀이 데이터 기반 의사결정을 하기 위한 모든 도구를 갖추고 있습니다. GitHub Stars 25K+로 빠르게 성장 중입니다.
PostHog 주요 특징
PostHog는 제품 팀을 위한 완전한 분석 스택입니다.
제품 분석
- 이벤트 추적: 자동 & 커스텀 이벤트
- 퍼널 분석: 전환 경로 분석
- 리텐션: 사용자 유지율 분석
- 경로 분석: 사용자 여정 시각화
- 코호트: 사용자 세그먼트 분석
- 트렌드: 시계열 분석
사용자 행동 분석
- 세션 녹화: 사용자 화면 녹화
- 히트맵: 클릭/스크롤 히트맵
- 에러 추적: 버그 모니터링
실험 & 기능 관리
- 기능 플래그: 기능 토글
- A/B 테스트: 실험 설계 및 분석
- 점진적 롤아웃: 단계별 기능 배포
데이터 플랫폼
- Data Warehouse: SQL 쿼리
- CDP: 고객 데이터 플랫폼
- API & Webhooks: 통합
사전 요구 사항
PostHog는 리소스를 많이 사용합니다:
- Docker 및 Docker Compose 설치
- 최소 4 vCPU, 8GB RAM (16GB 권장)
- 50GB 이상 저장 공간
- 도메인 (Let’s Encrypt 자동 인증)
Docker Compose로 PostHog 설치
방법 1: 공식 Hobby 배포 (권장)
# 공식 설치 스크립트 실행
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/PostHog/posthog/HEAD/bin/deploy-hobby)"
설치 중 입력 항목:
- Release tag (예: release-1.43.0 또는 latest)
- 도메인 (예: posthog.yourdomain.com)
방법 2: 수동 Docker Compose
# 저장소 클론
git clone https://github.com/posthog/posthog.git
cd posthog
# 환경 변수 설정
cp .env.example .env
# .env 파일 편집
nano .env
환경 변수 (.env)
# .env
POSTHOG_SECRET=your_very_long_secret_key_here
SITE_URL=https://posthog.yourdomain.com
# 데이터베이스 (자동 설정)
DATABASE_URL=postgres://posthog:posthog@db:5432/posthog
# ClickHouse (분석 데이터)
CLICKHOUSE_HOST=clickhouse
CLICKHOUSE_DATABASE=posthog
# Redis
REDIS_URL=redis://redis:6379/
시크릿 키 생성:
openssl rand -hex 32
Docker Compose 실행
# 컨테이너 실행
docker compose -f docker-compose.hobby.yml up -d
# 로그 확인 (마이그레이션에 5-10분 소요)
docker compose logs -f
# 브라우저에서 접속
# http://localhost:8000 또는 https://posthog.yourdomain.com
# 첫 계정 생성
초기 설정
1. 관리자 계정 생성
https://posthog.yourdomain.com접속- 이름, 이메일, 비밀번호 입력
- 조직 이름 설정
- 첫 프로젝트 생성
2. 추적 코드 설치
JavaScript SDK:
<script>
!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
posthog.init('YOUR_PROJECT_API_KEY',{api_host:'https://posthog.yourdomain.com'})
</script>
3. 이벤트 자동 캡처 활성화
PostHog는 기본적으로 클릭, 페이지뷰 등을 자동 캡처합니다.
고급 기능 설정
세션 녹화 활성화
posthog.init('YOUR_PROJECT_API_KEY', {
api_host: 'https://posthog.yourdomain.com',
session_recording: {
recordCrossOriginIframes: true,
}
})
기능 플래그 사용
// 기능 플래그 확인
if (posthog.isFeatureEnabled('new-checkout')) {
// 새 체크아웃 UI 표시
}
// 기능 플래그 값 가져오기
const variant = posthog.getFeatureFlag('experiment-name')
커스텀 이벤트 추적
// 이벤트 캡처
posthog.capture('purchase', {
product_name: 'T-Shirt',
price: 29.99,
currency: 'USD'
})
// 사용자 식별
posthog.identify('user_123', {
email: 'user@example.com',
plan: 'premium'
})
프로덕션 설정
Traefik과 함께 사용
# docker-compose.override.yml
services:
web:
labels:
- "traefik.enable=true"
- "traefik.http.routers.posthog.rule=Host(`posthog.yourdomain.com`)"
- "traefik.http.routers.posthog.entrypoints=websecure"
- "traefik.http.routers.posthog.tls.certresolver=letsencrypt"
- "traefik.http.services.posthog.loadbalancer.server.port=8000"
SSL/TLS 설정 (Caddy 내장)
PostHog Hobby 배포는 Caddy가 포함되어 자동으로 Let’s Encrypt 인증서를 발급합니다.
# .env에 도메인 설정
SITE_URL=https://posthog.yourdomain.com
관리 명령어
# 로그 확인
docker compose logs -f web
# 서비스 상태 확인
docker compose ps
# Django 관리 명령어
docker compose exec web python manage.py migrate
docker compose exec web python manage.py createsuperuser
# 데이터베이스 백업
docker compose exec db pg_dump -U posthog posthog > backup_$(date +%Y%m%d).sql
# ClickHouse 백업
docker compose exec clickhouse clickhouse-client --query "BACKUP DATABASE posthog TO Disk('backups', 'backup.zip')"
# 업데이트
docker compose pull
docker compose up -d
# 재시작
docker compose restart web worker
주요 환경 변수
| 변수 | 설명 | 필수 |
|---|---|---|
| POSTHOG_SECRET | Django 시크릿 키 | ✅ |
| SITE_URL | 외부 접근 URL | ✅ |
| DATABASE_URL | PostgreSQL 연결 | ✅ |
| CLICKHOUSE_HOST | ClickHouse 호스트 | ✅ |
| REDIS_URL | Redis 연결 | ✅ |
| DISABLE_SECURE_SSL_REDIRECT | SSL 리디렉션 비활성화 | ❌ |
문제 해결
메모리 부족 (Exit Code 137)
PostHog는 최소 8GB RAM이 필요합니다:
# 메모리 확인
free -h
# Docker 메모리 제한 확인
docker stats
ClickHouse 연결 오류
# ClickHouse 상태 확인
docker compose exec clickhouse clickhouse-client --query "SELECT 1"
마이그레이션 오류
# 마이그레이션 재실행
docker compose exec web python manage.py migrate
로컬 PostgreSQL 충돌
호스트의 PostgreSQL 서비스 중지:
sudo service postgresql stop
PostHog Cloud vs Self-Hosted
| 항목 | Cloud | Self-Hosted |
|---|---|---|
| 설정 | 즉시 | 30분+ |
| 유지보수 | 자동 | 직접 |
| 비용 | 사용량 기반 | 인프라 비용만 |
| 데이터 위치 | PostHog 서버 | 내 서버 |
| 기능 | 전체 | 전체 (MIT) |
마무리
PostHog는 제품 분석, 세션 녹화, 기능 플래그, A/B 테스트를 하나의 플랫폼에서 제공하는 올인원 솔루션입니다. Mixpanel, Amplitude, LaunchDarkly를 각각 사용하는 대신 PostHog 하나로 통합할 수 있습니다. 리소스 요구사항이 높지만, 제품 팀에게 필요한 모든 도구를 제공합니다.
참고 링크
- 공식 사이트: https://posthog.com
- GitHub: https://github.com/PostHog/posthog
- Docker: https://hub.docker.com/r/posthog/posthog
- 문서: https://posthog.com/docs