개발언어 VPS 호스팅 — 시작하기
신청 후 첫 SSH 접속까지, 그리고 운영 가이드로 진입하기 전에 알아야 할 모든 것입니다. 이 문서를 끝까지 따라가시면 약 10~20분 안에 자신의 코드가 도메인으로 응답합니다.
💡 요약 정리
- 개발언어 VPS 호스팅은 프레임워크와 DB를 선택하면 약 10분 안에 nginx · 런타임 · DB · 무료 SSL까지 자동 구성되는 단독 서버입니다.
- 일반 PaaS와 달리 root SSH 권한이 함께 제공되어 서버 안에서 자유롭게 변경·확장하실 수 있습니다.
- 한 줄 요약: "자동 구성은 PaaS처럼, 서버 권한은 VPS답게."
| 섹션 | 내용 | 대상 |
|---|---|---|
| §1 | 개발언어 VPS 호스팅이란? | 처음 접하시는 분 |
| §2 | 신청·결제 후 자동 구성 흐름 (~10분) | 공통 |
| §3 | SSH 첫 접속 · 환경 확인 | 공통 |
| §4 | 언어 / 프레임워크 / DB 선택 가이드 | 프레임워크 결정 단계 |
| §5 | 첫 배포까지의 표준 흐름 | 코드 업로드 단계 |
| §6 | 도메인 · SSL 연결 | 운영 도메인 보유 시 |
| §7 | 다음 단계 · 핵심 정책 다시 확인 | 공통 |
1. 개발언어 VPS 호스팅이란?
1-1. 어떤 분께 추천드리는 상품인가요?
- 사이드 프로젝트나 MVP를 빠르게 띄우고 싶은 개발자
- nginx · cron · 데몬을 자유롭게 다루고 싶은 분 (PaaS의 한계가 답답한 분)
- 30~120분의 수동 세팅이 매번 부담스러운 분 (수동 VPS의 한계가 부담인 분)
- 월정액 고정·사용량 추가 과금 없는 단독 서버를 원하시는 팀
1-2. 무엇이 자동으로 설치되어 도착합니까?
| 항목 | 자동 설치 내용 |
|---|---|
| OS | Ubuntu 24.04 LTS |
| 리버스 프록시 | nginx 1.24 (:80/:443, 보안 헤더 3종, Let's Encrypt 자동) |
| 런타임 | Python 3.12 / Node.js 24 / OpenJDK 21 (선택한 프레임워크 기준) |
| 프레임워크 | FastAPI / Django / Spring Boot / NestJS / Express / Next.js (택1) |
| DB | PostgreSQL 17 또는 MariaDB 11.4 (택1) |
| 프로세스 매니저 | systemd 또는 PM2 (프레임워크별) |
| 보안 | fail2ban (SSH 5회 실패 → 30분 차단), 보안 헤더 |
| SSL | 무료 도메인 SSL 자동 |
2. 신청·결제 후 자동 구성 흐름 (~10분)
2-1. 시점별 흐름
- 결제 완료
- 0~10분: 서버 프로비저닝 + 자동 구성 진행 (이 시간엔 SSH 접속 불가)
- 자동 구성 완료
- SSH 접속 가능 — 나의 서비스 관리 > 서버호스팅 관리에서 접속 정보 활성화 확인
2-2. 결제 시 입력하시는 정보
| 항목 | 설명 |
|---|---|
| 프로젝트명 | 서버 내부에서 디렉토리·서비스 이름 등에 사용 (예: myapp). 변경 불가 |
| 프레임워크 · DB 선택 | 6 프레임워크 × 2 DB = 12개 조합 중 1개 선택. 변경 불가 |
| 요금제 | DEV A / B / C / D 중 1개. 상위 변경(업그레이드) 가능, 하위 변경 불가 |
| root 비밀번호 | 고객님이 직접 설정. 카페24에서 보관하지 않으니 안전한 곳에 별도 보관 필수 |
| 무료 도메인 | 아이디.mycafe24.com 자동 발급 (SSL 포함) |
프레임워크나 프로젝트명은 한번 결정되면 재설치 없이는 변경 불가합니다. 신중하게 선택해 주세요.
3. SSH 첫 접속 · 환경 확인
3-1. SSH 접속
자동 구성 완료 후, 나의 서비스 관리 > 서버호스팅 관리에서 IP/호스트명을 확인하세요. root 비밀번호는 서비스 신청 시 직접 설정하신 값을 사용하시면 됩니다.
ssh root@아이디.mycafe24.com
root 비밀번호는 보안상 카페24에서 보관하지 않습니다. 분실 시 카페24 측에서 확인·재발급이 불가하며, OS 재설치(데이터 초기화)를 통해서만 재설정 가능합니다. 신청 시 입력하신 비밀번호를 안전한 곳에 별도 보관해 주세요.
3-2. 방화벽 허용 IP 확인
처음 접속 시 Connection timeout이 발생하면, 카페24 나의 서비스 관리 > 방화벽관리에서 22번 포트(SSH)에 현재 본인 IP가 허용되어 있는지 확인해 주세요.
서버 내부에서 iptables나 ufw로 방화벽을 직접 조작하지 마세요. 카페24 방화벽과 충돌하여 SSH 끊김이 발생할 수 있습니다.
3-3. 환경 확인 명령어 (모든 프레임워크 공통)
SSH 접속 후 자동 구성 결과를 확인하는 명령어입니다. 자기 환경에 맞춰 프로젝트명만 바꿔 사용하세요.
| 확인 항목 | 명령어 |
|---|---|
| 서비스 상태 (Python · Java (systemd)) | sudo systemctl status [프로젝트] |
| 서비스 상태 (Node.js (PM2)) | sudo -u appuser pm2 status |
| nginx 상태 | sudo systemctl is-active nginx |
| 앱 포트 확인 (127.0.0.1만 보여야 정상) | `ss -tlnp |
| 웹 응답 확인 (서버 내부) | curl -sf http://127.0.0.1:8000/ |
| 외부 도메인 응답 | curl -sI https://아이디.mycafe24.com/ |
| 환경변수 파일 (DB 비밀번호 등) | sudo cat /etc/[프로젝트]/env |
| DB 접속 (PostgreSQL) | sudo -u postgres psql |
| DB 접속 (MariaDB) | sudo mariadb |
| 디스크 / 메모리 | df -h · free -h |
3-4. 시스템 사용자
서버에는 root와 appuser 두 개의 시스템 사용자가 있습니다.
| 사용자 | 역할 | 비밀번호 |
|---|---|---|
| root | 시스템 관리자 (apt, systemctl, nginx 등) | 신청 시 직접 설정 (카페24 미보관 — 분실 시 OS 재설치 필요) |
| appuser | 앱 실행 사용자 (코드 배포·의존성 관리) | 없음 (SSH 키 미설정) |
코드 배포·의존성 추가 등은 sudo -u appuser ... 또는 su - appuser로 위임하여 실행하시면 됩니다.
4. 언어 / 프레임워크 / DB 선택 가이드
4-1. 언어 선택
| 언어 | 적합한 경우 | 비추천인 경우 |
|---|---|---|
| Python 3.12 | API 서버, ML/AI, 데이터 처리, 빠른 프로토타입, 어드민 풀스택 | 동시성 극대화 필요 (대신 FastAPI async) |
| Node.js 24 | 풀스택 JS/TS, 실시간(웹소켓), SSR React, 프론트와 백 통합 | CPU 집약적 작업 |
| OpenJDK 21 | 엔터프라이즈 백엔드, 트랜잭션 중심, 대규모 팀, 타입 안정성 | 가벼운 사이드 프로젝트 (메모리 부담) |
4-2. 프레임워크 선택
| 프레임워크 | 언어 | 적합 용도 | 메모리 부담 |
|---|---|---|---|
| FastAPI | Python | API 서버, ML 추론 백엔드, async 워크로드 | 낮음 (DEV A OK) |
| Django | Python | 어드민 포함 풀스택, 콘텐츠 관리, 회원·인증 기본 제공 | 중간 (DEV A·B OK) |
| NestJS | Node.js | 타입스크립트 풀스택, 마이크로서비스, OOP 친숙한 팀 | 중간 (DEV B 권장) |
| Express | Node.js | 가벼운 API, 미들웨어 자유도, 학습 곡선 낮음 | 낮음 (DEV A OK) |
| Next.js | Node.js | SSR 웹앱, 풀스택 React, Vercel 외 자체 호스팅 | 높음 (DEV B 이상 권장) |
| Spring Boot | OpenJDK | 엔터프라이즈, 트랜잭션, 대규모 팀 | 높음 (DEV B 이상 권장, 빌드 OOM 주의) |
4-3. DB 선택
| DB | 적합 |
|---|---|
| PostgreSQL 17 | JSON·지리정보·복잡 쿼리·확장 기능에 강함. 개발자 다수 선호. 잘 모르겠으면 이쪽 |
| MariaDB 11.4 | MySQL 호환, LAMP 친숙, 운영 단순. 기존 MySQL 자산 마이그레이션 시 |
4-4. 요금제(DEV A/B/C/D) 선택
| 요금제 | 월정액 | RAM | SSD | 트래픽 | 추천 |
|---|---|---|---|---|---|
| DEV A | 33,000원 | 2GB | 50GB | 1.0TB | 사이드 프로젝트, MVP, 학습 |
| DEV B (권장) | 66,000원 | 4GB | 100GB | 2.0TB | 스타트업 첫 배포 |
| DEV C | 132,000원 | 8GB | 200GB | 4.0TB | 사용자 늘어난 운영 서비스 |
| DEV D | 220,000원 | 16GB | 400GB | 6.0TB | 본격 운영, 트래픽 4TB+ |
요금제는 상위 변경만 가능, 하위 변경 불가합니다. 처음에는 DEV A 또는 B로 시작하시고 필요할 때 올리시는 것을 권장드립니다.
4-5. 의사결정 한 줄 가이드
| 상황 | 추천 |
|---|---|
| 사이드 프로젝트 + 가벼운 API | FastAPI + PostgreSQL + DEV A |
| 스타트업 첫 백엔드, 어드민 필요 | Django + PostgreSQL + DEV B |
| 타입스크립트 풀스택 | NestJS + PostgreSQL + DEV B |
| React SSR | Next.js + PostgreSQL + DEV B |
| 엔터프라이즈 트랜잭션 중심 | Spring Boot + PostgreSQL + DEV B 또는 C |
| 기존 MySQL 자산 이전 | (프레임워크 자유) + MariaDB |
5. 첫 배포까지의 표준 흐름
자동 구성 완료 후 자신의 코드가 도메인으로 응답할 때까지의 표준 흐름입니다.
5-1. 표준 시퀀스 (8 스텝)
| STEP | 작업 | 참고 명령 |
|---|---|---|
| 1 | SSH 접속 | ssh root@아이디.mycafe24.com |
| 2 | 프로젝트명 셸 변수 설정 | PROJECT_NAME=myapp; export PROJECT_NAME |
| 3 | 자동 구성 결과 확인 | Python · Java (systemd): sudo systemctl is-active $PROJECT_NAMENode.js (PM2): sudo -u appuser pm2 status |
| 4 | 자기 코드 업로드 | git clone / rsync / scp / sftp 클라이언트 중 택1 |
| 5 | 의존성 동기화 | Python: sudo -u appuser uv syncNode.js: sudo -u appuser pnpm installJava: sudo -u appuser ./gradlew clean build -x test |
| 6 | 서비스 재시작 | Python · Java (systemd): sudo systemctl restart $PROJECT_NAMENode.js (PM2): sudo -u appuser pm2 restart all |
| 7 | 헬스 체크 (서버 내부) | FastAPI/Django: curl -sf http://127.0.0.1:8000/Spring Boot: curl -sf http://127.0.0.1:8080/actuator/healthNestJS/Express/Next.js: curl -sf http://127.0.0.1:3000/ |
| 8 | 외부 도메인 응답 확인 | curl -sI https://아이디.mycafe24.com/ |
5-2. 첫 배포 전 반드시 알아야 할 위험 5가지
| # | 위험 | 안전 패턴 |
|---|---|---|
| 1 | DB 환경변수 참조 깨짐 | 코드에서 os.environ["DATABASE_URL"] (Python) / process.env.DATABASE_URL (Node) / ${DB_URL} (Spring) 패턴 유지 |
| 2 | 외부 IP에 listen | 항상 127.0.0.1만 바인딩 |
| 3 | 엔트리 포인트 경로/이름 변경 | /opt/[프로젝트]/main.py 등 표준 위치 유지 |
| 4 | 의존성 동기화 누락 | 업로드 후 uv sync / pnpm install / gradle build 필수 |
| 5 | systemd unit / PM2 ecosystem / env 파일 덮어씀 | 이 세 파일은 절대 업로드 대상 포함 금지 |
절대 업로드 금지 파일
/etc/systemd/system/[프로젝트].service/opt/[프로젝트]/ecosystem.config.js/etc/[프로젝트]/env
자세한 위험 회피 패턴과 3가지 안전 배포 방법은 각 프레임워크 페이지의 §5-A를 참고해 주세요.
5-3. 환영 페이지 → 내 코드로 전환 (필독)
첫 접속 시 표시되는 "서버가 정상 동작 중입니다" 환영 페이지는 Nginx가 /var/www/cafe24-welcome/index.html을 우선 서빙하기 때문입니다. 본인 앱의 / 라우트가 노출되도록 환영 파일 1개만 정리하시면 됩니다.
| 방법 | 명령 |
|---|---|
| 방법 A — 삭제 | sudo rm /var/www/cafe24-welcome/index.html |
| 방법 B — 백업 후 비활성 (원복 가능) | sudo mv /var/www/cafe24-welcome/index.html /var/www/cafe24-welcome/index.html.bak |
| 현재 상태 확인 | ls /var/www/cafe24-welcome/ |
상세 운영 안내는 사용 중인 프레임워크별 운영 가이드의 5-C 항목을 참조해 주세요.
6. 도메인 · SSL 연결
6-1. 무료 도메인 (자동)
신청 즉시 아이디.mycafe24.com 자동 발급. SSL이 자동 적용되어 별도 작업 없이 HTTPS 접속이 가능합니다.
https://아이디.mycafe24.com/
6-2. 보유 도메인 연결
| STEP | 작업 |
|---|---|
| 1 | 도메인 DNS에서 A 레코드를 본인 공인 IP로 설정 (예: example.com → [공인 IP]) |
| 2 | nginx에 도메인 추가 — /etc/nginx/sites-available/[프로젝트] 편집 (server_name 추가) |
| 3 | 보유 도메인의 HTTPS 적용은 SSL 별도 구매 필요. 카페24 SSL 인증서 구매 후 나의 서비스 관리에서 설치하시면 됩니다. |
보유 도메인은 최대 20개까지 연결 가능합니다.
7. 다음 단계
자동 구성 결과 확인 + 첫 배포까지 완료하셨으면, 사용 중인 프레임워크별 운영 가이드로 이동해 주세요.
| 사용 중인 프레임워크 | 다음 페이지 |
|---|---|
| FastAPI | Python > FastAPI 운영 가이드 |
| Django | Python > Django 운영 가이드 |
| NestJS | Node.js > NestJS 운영 가이드 |
| Express | Node.js > Express 운영 가이드 |
| Next.js | Node.js > Next.js 운영 가이드 |
| Spring Boot | Java > Spring Boot 운영 가이드 |
운영 중 nginx 변경, DB 백업, 보안 강화 등은 공통 운영·커스터마이징 페이지를 참조해 주세요. 요금제·SSL·도메인·트래픽 등 일반 문의는 FAQ · 트러블슈팅 페이지를 확인하세요.
핵심 정책 (다시 한 번 확인)
| 정책 | 한 줄 |
|---|---|
| 자동 구성 시간 | 결제 직후 약 10분 후 SSH 접속 가능 |
| 설치비 | 설치비 0원 |
| 요금제 변경 | 상위만 가능, 하위 불가 |
| 무료 SSL | 무료 도메인 한정 SSL 자동 / 보유 도메인은 SSL 별도 구매 필요 |
| 방화벽 | 카페24 [방화벽관리] 메뉴 사용 |
| 백업 | 고객 책임 (자동 백업 미제공) / 만료 후 7일 경과 시 데이터 삭제 |
| root 권한 | 제공. 변경은 100% 고객 책임 |
| root 비밀번호 | 신청 시 직접 설정 / 카페24 미보관 / 분실 시 OS 재설치(데이터 초기화)만이 재설정 수단 |
| SSH 끊김 예방 | 별도 SSH 세션 동시 유지 + 변경 전 백업 + 새 세션 재접속 확인 3원칙 |