예제: demo-idp-app 배포
실제로 IDP에 배포된 demo-idp-app 프로젝트를 예시로, 프로젝트 설정부터 배포 완료까지의 과정을 설명합니다.
프로젝트 개요
Section titled “프로젝트 개요”| 항목 | 값 |
|---|---|
| 저장소 | letsur-dev/demo-idp-app |
| 브랜치 | main |
| 슬러그 | idp-demo |
| 퍼블릭 도메인 | https://idp-demo.letsur.dev |
| 컨테이너 포트 | 8080 |
프로젝트 설정
Section titled “프로젝트 설정”슬러그 설정
Section titled “슬러그 설정”프로젝트 생성 시 슬러그를 idp-demo로 지정했습니다. 이에 따라 배포된 서비스는 https://idp-demo.letsur.dev로 접근할 수 있습니다.
프로젝트 설정에서 default 프로필에 다음 환경변수를 추가했습니다.
| Key | Value | 설명 |
|---|---|---|
test | 1 | 테스트용 변수 |
test2 | 2 | 테스트용 변수 |
컨테이너 포트
Section titled “컨테이너 포트”이 서비스는 포트 8080에서 HTTP 요청을 수신합니다. 프로젝트 설정에서 컨테이너 포트를 올바르게 지정해야 합니다. 포트를 설정하지 않거나 잘못 지정하면 503 Service Unavailable 오류가 발생할 수 있습니다.
- 프로젝트 생성 —
letsur-dev/demo-idp-app저장소를 선택하고, 슬러그를idp-demo로 설정한 뒤 프로젝트를 생성했습니다. - 환경변수 설정 — 프로젝트 설정 페이지에서
default프로필에 필요한 환경변수를 추가했습니다. - 수동 배포 — 프로젝트 헤더의 Deploy 버튼을 클릭하여 배포를 트리거했습니다.
- 빌드 — Railpack이 소스 코드를 감지하여 컨테이너 이미지를 자동으로 빌드했습니다. 약 1분 30초 소요.
- 배포 완료 — Kubernetes에 Rolling Update로 배포가 진행되어 서비스가 정상 동작합니다.
배포 완료 후 퍼블릭 도메인에 요청하면 서비스가 응답합니다.
$ curl https://idp-demo.letsur.dev/{"status":"ok","message":"demo-idp-app is running"}자동 배포 (Git Push)
Section titled “자동 배포 (Git Push)”이후 demo-idp-app에 /test-idp 엔드포인트를 추가하고 main 브랜치에 push했습니다.
// index.js — 추가된 코드if (req.url === "/test-idp") { const testEnvVars = {}; for (const [key, value] of Object.entries(process.env)) { if (key.toLowerCase().startsWith("test")) { testEnvVars[key] = value; } } res.writeHead(200, { "Content-Type": "application/json" }); res.end(JSON.stringify(testEnvVars)); return;}IDP는 GitHub webhook을 통해 push 이벤트를 감지하고, 자동으로 새로운 배포를 트리거했습니다.
| 항목 | 값 |
|---|---|
| 트리거 | git_push (자동) |
| 커밋 | a8125d9 |
| 소요 시간 | 약 1분 40초 |
| 결과 | 성공 |
배포 완료 후, 새로 추가한 엔드포인트에서 환경변수가 정상적으로 주입된 것을 확인할 수 있습니다.
$ curl https://idp-demo.letsur.dev/test-idp{"test":"1","test2":"2"}프로젝트 설정에서 지정한 환경변수 test=1, test2=2가 컨테이너에 주입되어 응답에 포함됩니다.
이 예제에서 핵심적인 설정은 다음 세 가지입니다.
- 슬러그 — 퍼블릭 도메인을 결정합니다.
idp-demo→idp-demo.letsur.dev - 환경변수 — 배포 시 컨테이너에 주입됩니다. 변경 후 재배포 필수.
- 컨테이너 포트 — 서비스가 수신하는 포트입니다. 올바르게 지정하지 않으면
503오류가 발생합니다.
또한 main 브랜치에 push하면 자동으로 배포가 트리거되므로, 별도의 수동 작업 없이 코드 변경이 반영됩니다.