GitHub Repository
최소한의 Go + Dodo Payments 보일러플레이트
개요
Go boilerplate는 pricing page에서 Dodo Payments 제품을 판매하는 최소한의 Go 서버입니다. checkout session을 생성하고, 웹훅을 검증 및 처리하며, Customer Portal을 엽니다. 자체 Go backend의 시작점으로 복제하세요.boilerplate에는
go.mod에 설정된 버전인 Go 1.24.4 이상이 필요합니다. cmd, internal, templates 레이아웃을 사용하고, Go HTML templates로 pricing page를 렌더링하며, dodopayments-go SDK를 통해 Dodo Payments API를 호출합니다.기능
- 빠른 설정: repository를 복제하고,
.env에 API keys를 추가한 다음make run로 서버를 시작합니다. - 결제 통합:
dodopayments-goSDK로 checkout session을 생성하는 checkout flow입니다. - Modern UI: Go HTML templates와 Tailwind CSS로 구축된 dark-themed pricing page입니다.
- Webhook 처리: 이벤트를 처리하기 전에 각 웹훅의 signature를 검증합니다.
- Customer Portal: Customer Portal을 통한 셀프 서비스 subscription 관리입니다.
- Go 모범 사례:
cmd,internal,templates를 사용하는 깔끔한 project layout입니다. - Pre-filled Checkout: 고객의 이름과 이메일을 checkout에 전달하므로 고객이 다시 입력할 필요가 없습니다.
전제 조건
시작하기 전에 다음이 필요합니다:- Go 1.24.4 이상.
go version로 버전을 확인합니다. - Dodo Payments account. dashboard에서 API key와 webhook signing key를 생성해야 합니다.
- 최소 하나의 product. dashboard의 Products에서 생성합니다.
빠른 시작
1
Clone the Repository
2
Install Dependencies
make install는 go mod download를 실행한 다음 go mod tidy를 실행합니다. make 없이 modules를 다운로드하려면 다음을 실행합니다:3
Get API Credentials
Dodo Payments에 가입한 다음 dashboard에서 두 key를 모두 복사합니다:
- API Key: Developer → API Keys
- Webhook Key: Developer → Webhooks. 각 webhook endpoint에는 고유한 signing key가 있습니다. 로컬 서버에 연결되는 endpoint를 생성하려면 Testing Webhooks Locally를 참조하세요.
4
Configure Environment Variables
template에서 project root에 서버는 시작 시 다음 variables를 읽습니다:
.env 파일을 생성합니다:.env에 다음 값을 설정합니다:.env
필수 key 중 하나라도 없으면 서버는 시작 시 종료됩니다.
.env.example는 PORT와 DODO_PAYMENTS_RETURN_URL를 port 8080로 설정합니다. 이 page는 port 8000를 사용하므로, 표시된 대로 둘 다 8000로 설정하거나 이 page의 commands에서 8000를 8080로 바꿉니다.5
Add Your Products
internal/lib/products.go의 sample product를 자신의 products로 바꿉니다. dashboard의 Products에서 각 product ID를 복사합니다:Price는 pricing page에 표시되는 price만 smallest currency unit으로 설정합니다. 9999는 $99.99로 표시됩니다. Checkout은 Dodo Payments에서 product의 price를 청구합니다.6
Run the Development Server
make run는 서버를 bin/server로 build한 후 시작합니다. 먼저 binary를 build하지 않고 서버를 실행하려면 다음을 실행합니다:제품이 나열되고 구매할 수 있는 dark-themed pricing page가 표시됩니다.
Project Structure
repository의 layout은 다음과 같습니다:API Endpoints
boilerplate에는 다음과 같이 미리 구성된 endpoints가 포함되어 있습니다:Customization
Product Information 업데이트
internal/lib/products.go를 편집하여 다음을 변경합니다:
- Product IDs(Dodo Payments dashboard의 Products에서 가져옴)
- Names
- pricing page에 표시되는 Pricing
- Features
- Descriptions
/mo suffix를 추가하며, Price가 100000 이상이면 price 대신 Custom을 표시합니다. 이를 변경하려면 templates/index.html를 편집합니다.
Customer Data 미리 입력
.env에서 handleCheckout function은 hardcoded customer data를 /api/checkout로 전송합니다. 이를 로그인한 사용자의 data로 바꿉니다:
handlePortal function은 이 customer data를 재사용하고, 동일한 sample name과 email로 fallback합니다. production app에서는 두 function 모두 authentication system에서 이 values를 주입합니다.
Webhook Events
internal/api/webhook.go는 client.Webhooks.Unwrap와 DODO_PAYMENTS_WEBHOOK_KEY의 key를 사용해 각 request를 검증한 다음, type에 따라 event를 route합니다. 다음 event에는 handler가 있으며, 각 handler가 event data를 log합니다:
handler는
subscription.on_hold, subscription.failed, subscription.expired, subscription.plan_changed도 아무 action 없이 허용하며, 그 밖의 모든 event type은 unhandled로 log합니다. 검증된 모든 event에 200로 응답합니다. 모든 event type은 Webhook Event Guide를 참조하세요.
handler functions에 다음을 수행하는 business logic을 추가합니다:
- database의 user permissions 업데이트
- confirmation email 전송
- digital products에 대한 access provisioning
- analytics와 metrics 추적
Testing Webhooks Locally
Dodo Payments는localhost에 연결할 수 없습니다. 개발 중 웹훅을 수신하려면 ngrok과 같은 tunnel을 사용해 local server를 외부에 노출합니다:
/api/webhook를 붙인 URL로 endpoint를 추가합니다:
DODO_PAYMENTS_WEBHOOK_KEY에 복사한 다음 서버를 재시작합니다.
Deployment
Production용 Build
make build는 서버를 bin/server로 compile합니다:
make 없이 binary를 build하고 시작하려면 다음을 실행합니다:
Vercel에 Deploy
[.env 파일의 variables를 Vercel project settings에 추가합니다. .env는 repository에 포함되지 않기 때문입니다. 그런 다음 dashboard에서 webhook endpoint를 https://yourdomain.com/api/webhook로 설정합니다.
Docker
project root에Dockerfile를 생성합니다. build stage는 go.mod와 일치하도록 Go 1.24.4 이상을 사용해야 합니다:
templates/를 binary 옆에 복사합니다. image를 build하고 실행합니다:
.env의 PORT 값을 수신 대기하므로, port mapping과 일치하도록 PORT=8000를 유지합니다.
Production 고려 사항
Troubleshooting
Build errors or missing dependencies
Build errors or missing dependencies
go version가 Go 1.24.4 이상을 보고하는지 확인한 다음 modules를 다시 다운로드합니다:Checkout session creation fails
Checkout session creation fails
일반적인 원인:
- product ID가 유효하지 않습니다. API key와 동일한 mode의 Products에 존재하는지 확인합니다.
.env의 API key 또는DODO_PAYMENTS_ENVIRONMENT가 잘못되었습니다. test mode key에는test_mode가 필요합니다.- 정확한 error는 server logs를 확인합니다. handler는
500를 반환하기 전에 실패한 모든 request를 log합니다.
Webhooks not receiving events
Webhooks not receiving events
local testing을 위해 ngrok으로 server를 노출합니다:Dodo Payments dashboard에서 webhook URL을 ngrok URL로 설정합니다. 그런 다음
.env의 DODO_PAYMENTS_WEBHOOK_KEY를 해당 endpoint의 signing key로 설정합니다. server logs에 webhook verification failed가 기록되면 key가 endpoint와 일치하지 않는 것입니다.Templates not loading
Templates not loading
server는 working directory에서
templates/base.html와 templates/index.html를 로드합니다. project root에서 server를 시작하거나 cmd/server/main.go의 template paths를 변경합니다.Learn More
Go SDK
Complete Go SDK documentation
Webhooks Documentation
모든 webhook events와 모범 사례 알아보기
Checkout Sessions
checkout session configuration 자세히 알아보기
API Reference
Complete Dodo Payments API documentation
Support
boilerplate에 대한 도움이 필요하면 다음을 수행하세요:- Discord community에서 질문합니다.
- 문제와 업데이트는 GitHub repository를 확인합니다.
- support team에 문의합니다.