koax 배포 사용설명서

코드를 push하면 <이름>.koax.site 로 자동 배포됩니다 — 사내에서 운영하는 Git · 자동배포 플랫폼.

한 줄 요약. ① 회사 이메일로 가입 → ② PowerShell에 irm https://setup.koax.site/koax-git-setup.ps1 | iex 붙여넣기(1회) → ③ 프로젝트에 deploy.json 넣고 git push. 끝나면 https://<저장소명>.koax.site 로 사이트가 뜹니다. SSH 키도, 서버 설정도, 배포 명령도 필요 없습니다.
목차
  1. 처음 한 번만 — 준비 (가입 · Git 설치 · 로그인 설정)
  2. 배포하기 — 프로젝트 올리기
  3. deploy.json 옵션
  4. 수정하고 다시 배포하기
  5. 데이터베이스(PostgreSQL) 쓰기
  6. 자주 겪는 문제
  7. 규칙과 한계 (꼭 읽어주세요)

1. 처음 한 번만 — 준비

1-1. 계정 만들기

1
브라우저에서 https://git.koces.com 접속 → 회원가입(Register)
2
회사 이메일로 가입합니다. 허용 도메인: @koces.com, @nhnpayco.com, @kcp.co.kr
(그 외 도메인은 가입이 거부됩니다.)
3
가입 직후 확인 메일이 옵니다. 메일의 링크를 클릭하면 계정이 활성화됩니다.
확인 메일이 스팸함으로 갈 수 있습니다(발신 주소가 @gmail.com). 받은편지함에 없으면 스팸함을 확인하세요. 관리자 승인은 필요 없습니다 — 메일만 확인하면 바로 로그인됩니다.

1-2. Git 설치

1
이미 Git이 있으면 건너뛰세요. 없으면 git-scm.com/download/win 에서 설치. (설치 시 기본 옵션 그대로 두면 됩니다 — 로그인에 필요한 Git Credential Manager가 함께 설치됩니다.)

1-3. 브라우저 로그인 설정 (핵심)

이걸 해두면 git push 할 때 GitHub처럼 브라우저 창이 떠서 로그인하고, 이후로는 다시 묻지 않습니다.

1
PowerShell을 열고 아래 한 줄을 붙여넣습니다. (파일을 받을 필요 없습니다.)
irm https://setup.koax.site/koax-git-setup.ps1 | iex
"설정 완료" 메시지가 나오면 끝입니다. 한 번만 하면 됩니다.
이 스크립트는 SSH 키를 만들거나 비밀번호를 저장하지 않습니다. 다음 git push 때 브라우저 로그인이 뜨도록 준비만 합니다. 실행 전에 내용을 보고 싶으면 브라우저에서 setup.koax.site/koax-git-setup.ps1 을 그대로 열어보세요.
macOS · Linux 를 쓴다면 터미널에서:
curl -fsSL https://setup.koax.site/koax-git-setup.sh | bash
Windows와 달리 mac/Linux는 Git Credential Manager가 git에 포함돼 있지 않습니다. 없으면 스크립트가 설치 방법을 안내하고 멈추니, 안내대로 설치한 뒤 다시 실행하세요.
사내망 정책 등으로 위 한 줄이 막히면, 스크립트 파일 받기를 눌러 아무 폴더에 두고 그 폴더에서 실행해도 됩니다:
powershell -ExecutionPolicy Bypass -File .\koax-git-setup.ps1
(내용만 확인하려면 이쪽에서 브라우저로 바로 볼 수 있습니다.)

2. 배포하기 — 프로젝트 올리기

예시로 정적 웹사이트 하나를 올려봅니다. PowerShell에서:

1
프로젝트 폴더 만들기
mkdir my-site
cd my-site
git init -b main
2
배포 표시 파일(deploy.json)과 내용 만들기 — deploy.json이 있어야 배포됩니다.
'{ "buildPack": "static" }' | Out-File -Encoding utf8 deploy.json
'<h1>안녕하세요 koax</h1>' | Out-File -Encoding utf8 index.html
3
커밋
git add -A
git commit -m "첫 배포"
4
업로드(push) — 저장소를 미리 안 만들어도 push하면 자동으로 만들어집니다.
<본인계정>은 git.koces.com 로그인 아이디로, <저장소>는 원하는 이름으로 바꾸세요.
git remote add origin https://git.koces.com/<본인계정>/my-site.git
git push -u origin main
반드시 https:// 주소로 하세요 (git@... 형태 아님). 브라우저 로그인은 https에서만 작동합니다.
5
push하면 브라우저가 떠서 git.koces.com 로그인을 요청합니다. 로그인·승인하면 업로드가 끝납니다. (다음부터는 안 뜹니다.)
6
약 1분 뒤 https://my-site.koax.site 로 사이트가 뜹니다. 인증서(https)는 자동입니다.
GitLab에서 방금 커밋 옆에 deploy/koax 상태(성공/실패)가 표시됩니다.
됐습니다. 이후 이 저장소는 계속 당신 것이고, 코드를 고쳐 다시 올리면 사이트가 갱신됩니다(→ 4번 항목).

3. deploy.json 옵션

deploy.json은 저장소 루트에 두는 작은 설정 파일입니다. 전부 선택 항목이며, 없는 값은 자동 판단됩니다.

{
  "buildPack": "static",
  "port": 3000,
  "subdomain": "myblog",
  "autoDeploy": false,
  "resources": { "memory": "1g", "cpu": "1" }
}
키설명기본값
buildPackstatic(정적 HTML) · nixpacks(Node/Python 등 자동) · dockerfile(Dockerfile 사용)static
port앱이 여는 포트. Node는 보통 3000빌드팩별 자동
subdomain원하는 주소. "myblog" → myblog.koax.site. 비워두면 저장소 이름 사용저장소 이름
autoDeployfalse=최초 1회만 배포(이후 [deploy]로 갱신) · true=push마다 자동 갱신false
resources메모리·CPU. 상한: 2g / 2. 넘으면 자동으로 줄여집니다512m / 0.5
database"postgresql" 이라고 적으면 PostgreSQL DB가 자동으로 만들어져 연결됩니다 (→ 5번)없음
dataClass앱이 다루는 데이터 등급. public · internal · confidential · personal 중 해당하는 것 전부(배열). database를 쓸 때는 필수입니다없음
buildPack을 적지 않으면 Dockerfile이 있어도 static으로 처리됩니다. Docker로 빌드하려면 "buildPack": "dockerfile"을 꼭 적으세요.

4. 수정하고 다시 배포하기

기본 설정(autoDeploy: false)에서는 push한다고 자동으로 다시 배포되지 않습니다. 실수 배포·데이터 초기화를 막기 위해서입니다.

방법 A — 필요할 때만 배포 (기본)

커밋 메시지에 [deploy] 를 넣어 push하면 그때 한 번 배포됩니다.

git add -A
git commit -m "내용 수정 [deploy]"
git push

웹 UI로 편집할 때도 커밋 메시지 칸에 [deploy] 를 포함하면 됩니다.

방법 B — push할 때마다 자동 배포

deploy.json에 "autoDeploy": true를 넣으면, 이후 push마다 자동 갱신됩니다. (이 설정을 바꾼 다음 push부터 적용됩니다.)

5. 데이터베이스(PostgreSQL) 쓰기

데이터를 저장해야 하는 앱이면 deploy.json에 두 줄만 추가하세요. 관리자에게 요청할 필요 없이 push하면 DB가 만들어지고 앱에 연결됩니다.

{
  "buildPack": "nixpacks",
  "port": 3000,
  "dataClass": ["internal"],
  "database": "postgresql"
}

5-1. 무엇이 만들어지나요

무엇설명
내 전용 PostgreSQL 서버계정(또는 그룹)마다 1개. 처음 DB를 요청할 때 만들어지고, 같은 계정의 다음 앱들이 같이 씁니다
앱 전용 데이터베이스앱마다 따로 만들어집니다 (이름 app_<주소이름>). 다른 앱은 이 데이터베이스에 접속할 수 없습니다 — 같은 계정의 앱이라도 마찬가지입니다
환경변수 DATABASE_URL접속 주소가 앱에 자동으로 들어갑니다. 비밀번호를 알 필요도, 코드에 적을 필요도 없습니다
자동 백업매일 새벽 2시(한국시간), 서버 안에 7일 보관 (→ 5-5)

결과는 GitLab 커밋 옆에 코멘트로 남습니다: 🗄️ PostgreSQL 연결 준비됨

5-2. dataClass — 데이터 등급을 먼저 정하세요

DB를 쓰려면 앱이 어떤 데이터를 저장하는지 적어야 합니다. 애매하면 한 단계 높게 적으세요.

등급뜻예자동 DB
public누구에게 보여도 무방공지, 공개 자료✅ 가능
internal사내 한정업무 대시보드, 내부 도구, 통계✅ 가능
confidential유출 시 사업·계약상 손해매출·원가, 계약 정보❌ 불가
personal개인을 식별할 수 있는 정보회원 정보, 연락처, 주문 내역❌ 불가
confidential · personal 데이터는 지금 자동 DB로 받지 않습니다. 이 플랫폼의 백업이 아직 암호화되지 않기 때문입니다. 이런 데이터를 다뤄야 하면 배포 전에 보안 담당자와 먼저 협의하세요. 개인정보는 다른 등급과 함께 적습니다 — 예: ["internal", "personal"].

5-3. 앱 코드에서 쓰기

환경변수 DATABASE_URL을 읽으면 됩니다.

// Node.js (pg)
const { Pool } = require('pg');
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
# Python
import os, psycopg
conn = psycopg.connect(os.environ["DATABASE_URL"])
// Prisma — schema.prisma
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}
빌드 중에는 DATABASE_URL이 없습니다. 접속 정보가 빌드 로그·이미지에 남지 않게 하려고 앱이 실행될 때만 넣습니다.
그래서 테이블 생성(마이그레이션)은 빌드가 아니라 앱 시작 명령에서 하세요. 예 (package.json):
"scripts": {
  "build": "prisma generate && next build",
  "start": "prisma migrate deploy && next start"
}
빌드 도중 DB를 조회하는 코드(예: Next.js 정적 생성에서 DB 읽기)도 실패하니, 실행 시점에 읽도록 바꾸세요.

5-4. 이미 배포한 앱에 DB 추가하기

deploy.json에 dataClass와 database를 추가해 push하세요.

관리자가 이미 DATABASE_URL을 연결해 둔 앱은 건드리지 않습니다. 변수 이름을 바꾸고 싶으면 "database": { "type": "postgresql", "envVar": "PG_URL" } 처럼 적습니다.

5-5. 백업·삭제·로컬 개발

항목내용
백업매일 새벽 2시(한국시간)에 자동으로 전체 백업되어 서버 안에 7일 보관됩니다. 서버 밖 사본은 없습니다 — 잃으면 안 되는 데이터는 따로 내보내 두세요. 복구가 필요하면 관리자에게 요청하세요
삭제deploy.json에서 database를 지워도, 저장소를 지워도 DB는 삭제되지 않습니다(실수로 데이터를 잃지 않도록). 지우려면 관리자에게 요청하세요
외부 접속DB는 서버 내부에만 열려 있어 내 PC에서 직접 접속할 수 없습니다
로컬 개발내 PC에 PostgreSQL을 따로 띄우고, 로컬 .env 파일에 DATABASE_URL=postgresql://...localhost...를 적어 쓰세요. .env는 커밋하지 마세요
SQLite앱 안의 SQLite 파일은 재배포 때 초기화될 수 있습니다. 데이터를 남겨야 하면 이 PostgreSQL을 쓰세요

6. 자주 겪는 문제

증상해결
push할 때 HTTP Basic: Access denied / 브라우저가 안 뜸 설치 한 줄을 다시 실행하세요 — irm https://setup.koax.site/koax-git-setup.ps1 | iex
예전에 저장된 로그인 정보가 남아 방해하는 경우로, 스크립트가 그걸 정리하고 브라우저 로그인을 새로 띄웁니다.
사이트가 빈 페이지 / 404 정적 사이트인데 index.html이 없는 경우입니다. index.html을 추가해 다시 배포하세요.
주소에 -이름이 붙음 (blog-hong.koax.site) 같은 이름을 다른 사람이 먼저 썼습니다(선착순). deploy.json의 subdomain으로 다른 이름을 지정하세요.
예약된 서브도메인 이라고 거부됨 api·www·admin·git·koces 등 예약어는 쓸 수 없습니다. 다른 이름으로.
고쳤는데 사이트가 그대로 기본은 [deploy]가 있어야 갱신됩니다(→ 4번). 커밋 메시지에 [deploy]를 넣으세요.
확인 메일이 안 옴 스팸함을 확인하세요. 그래도 없으면 관리자에게 문의.
DB 코멘트: dataClass 를 적어 주세요 deploy.json에 "dataClass": ["internal"] 처럼 등급을 추가해 다시 push하세요 (→ 5-2).
DB 코멘트: 등급 데이터는 … 자동 제공하지 않습니다 confidential·personal 데이터입니다. 보안 담당자와 먼저 협의하세요.
DB 코멘트: 아직 이 플랫폼에서 켜져 있지 않아 무시되었습니다 DB 자동 생성이 꺼져 있는 상태입니다. 관리자에게 문의하세요.
DB 코멘트: 데이터베이스 app_… 가 이미 있어 같은 이름의 DB가 이미 있어 안전을 위해 멈췄습니다. 관리자에게 문의하세요.
DB 코멘트: DB 준비에 실패했습니다 일시적인 문제일 수 있습니다. 다음 push 때 자동으로 다시 시도합니다. 반복되면 관리자에게 문의.
앱 로그에 DATABASE_URL이 없다는 오류 (빌드 중) 빌드 단계에는 이 변수가 없습니다. 마이그레이션·DB 조회를 시작 명령으로 옮기세요 (→ 5-3).

7. 규칙과 한계

데이터 주의. 앱 안에 저장한 파일이나 DB(예: SQLite)는 다시 배포하면 초기화될 수 있습니다. 데이터베이스가 필요하면 "database": "postgresql"을 쓰세요 (→ 5번). 업로드 파일처럼 파일로 남겨야 하는 데이터는 관리자와 상의해 영속 볼륨을 붙이세요.
이 플랫폼은 사내 서버 한 대에서 여러분의 코드를 직접 빌드·실행합니다. 그래서 사용 권한을 회사 이메일 가입으로 제한합니다. 외부에 공개되는 사이트를 올릴 때는 민감정보·비밀키가 코드에 들어가지 않도록 주의하세요.

문의: 시스템 관리자 · 이 문서는 koax 배포 플랫폼 운영 기준으로 작성되었습니다.
이 문서의 최신본은 항상 setup.koax.site/manual.html 에 있습니다.
관련: git.koces.com(코드) · <이름>.koax.site(배포 주소) · setup.koax.site(설치·설명서)