Docker - Market habom 설치
update: 2025.12.16 참고사항
- 상단의 git repositories 에서 다운 받을 수 있습니다.
- habom-template을 사용하면 아래 설명과 같이 수정 후 사용 가능합니다.
- habom-localhost는 아래의 설명에 대한 최종적용된 버전으로 'docker-compose up -d" 를 실행하여 바로 수행 가능합니다.
docker-compose.yaml 설정파일 받기
github, https://github.com/kmelonLab/kmelon-market
목차
Step 01: Docker 환경 변수(~/.env) 수정하기
Step 02: backend-market 의 환경 변수(.env.production) 수정
Step 03: backend-pay 의 환경 변수(.env.production) 수정
Step 04: frontend-market 의 환경 변수(.env.production) 수정
Step 05: docker-compose.yaml 설정
Step 06: docker 설치/실행
Step 01: Docker 환경 변수(~/.env) 수정하기
- 참고: docker-compose.yaml을 이용하여 최초 컨테이너 생성시 필요한 환경 변수 입니다.
- DB 정보 업데이트
MYSQL_ROOT_PASSWORD=YOUR_MYSQL_ROOT_PASSWORD
MYSQL_USER=YOUR_MYSQL_USER
MYSQL_PASSWORD=YOUR_MYSQL_PASSWORD
- generated-keys 폴더에 생성된 MySQL 공통 설정의 정보를 입력하시면 됩니다
- 결제를 위한 보안때문에 직접 입력하기보다 생성된 key를 이용해서 관리하시는거 추천드립니다
# ------------------------------------------------------------------------------
# MySQL 공통 설정
# [필수 수정] 보안을 위해 강력한 비밀번호로 변경하세요
# ------------------------------------------------------------------------------
MYSQL_ROOT_PASSWORD=uq&Qi%RMpDjNff%B^ut4SmWk
MYSQL_USER=marketuser
MYSQL_PASSWORD=$CAf@McTY&9OczrcT5RInCYD
# ------------------------------------------------------------------------------
# MySQL for Backend-Market
# [선택 수정] 필요시 데이터베이스명과 포트 변경
# ------------------------------------------------------------------------------
MYSQL_MARKET_DATABASE=market_db
MYSQL_MARKET_PORT=12057
# ------------------------------------------------------------------------------
# MySQL for Backend-Pay
# [선택 수정] 필요시 데이터베이스명과 포트 변경
# ------------------------------------------------------------------------------
MYSQL_PAY_DATABASE=pay_db
MYSQL_PAY_PORT=12058
# ------------------------------------------------------------------------------
# Backend-Pay (NestJS)
# [선택 수정] 필요시 포트 변경
# ------------------------------------------------------------------------------
BACKEND_PAY_PORT=12051
# ------------------------------------------------------------------------------
# Backend-Market (NestJS)
# [선택 수정] 필요시 포트 변경
# ------------------------------------------------------------------------------
BACKEND_MARKET_PORT=12053
# ------------------------------------------------------------------------------
# Frontend-Market (Static Files)
# [선택 수정] 필요시 포트 변경
# ------------------------------------------------------------------------------
FRONTEND_MARKET_PORT=12055
- 현재 프로젝트의 database 가되는 DB의 이름 및 포트 번호는 원하시는걸로 수정하시면 됩니다!
- backend-market: 결제를 제외한 모든 기능을 수행하는 backend API
- backend-api: 결제관련 메일 송신, 토스페이결제 연동 기능
- market_db: backend-market 의 데이터베이스
- pay_db: backend-api의 데이터베이스
- frontend-market: 상위 background 기반과 연동하여 돌아가는 실제 마켓 페이지
toss payments API Key
- 토스페이 key 정리를 먼저 하도록 하겠습니다
| 키 종류 | backend-pay | backend-market | frontend-market | 노출 가능 여부 |
| Client Key (TOSS_CLIENT_KEY) | ✅ 사용 | ✅ 사용 | ✅ 사용 | 🟢 공개 가능 (프론트엔드에서 사용) |
| Secret Key (TOSS_SECRET_KEY) | ✅ 사용 | ❌ 미사용 | ❌ 미사용 | 🔴 절대 비공개 (백엔드 전용) |
| Security Key (WEBHOOK_SIGNATURE_SECRET) | ✅ 사용 | ❌ 미사용 | ❌ 미사용 | 🔴 절대 비공개 (Webhook 검증용) |
각 키 용도 정리
| 키 이름 | 용도 | 더미 사용 가능 여부 |
| TOSS_CLIENT_KEY | 프론트 결제 위젯 초기화 | ✅ UI 개발용 |
| TOSS_SECRET_KEY | 서버 결제 승인/취소 API | ⚠️ API 호출 시 실패 |
| WEBHOOK_SIGNATURE_SECRET | 웹훅 서명 검증 | ⚠️ 실제 웹훅 검증 불가 |
test Key키를 생성하는 방법은 GPT를 이용하여 키 생성 요청을 하시면 됩니다
prompt
토스페이먼츠에서 테스트를 하기위한 아래 3개의 키를 생성해줘
1. base64를 이용하여 생성되도록 해야한다.
2. TOSS_SECRET_KEY는 test_sk_ 으로 시작되어야 한다
3. TOSS_CLIENT_KEY는 test_ck_ 으로 시작 되어야 한다
TOSS_CLIENT_KEY, TOSS_SECRET_KEY, WEBHOOK_SIGNATURE_SECRET
테스트용 키 생성 결과
TOSS_CLIENT_KEY=test_ck_Q0xJRU5UX1RFU1RfQkFTRTY0XzAx
TOSS_SECRET_KEY=test_sk_U0VDUkVUX1RFU1RfQkFTRTY0XzAy
WEBHOOK_SIGNATURE_SECRET=V0VCSE9PS19TSUdOQVRVUkVfQkFTRTY0XzAz
테스트 키는 각 프로젝트에 설정되어야합니다!
Step 02: backend-market 의 환경 변수(.env.production) 수정
2.1 backend-market 도메인 설정
# [필수 수정] Backend-Market API가 서비스될 도메인 URL
API_BASE_URL=YOUR_BACKEND_MARKET_URL
# 실제 입력 값
API_BASE_URL=http://localhost:12053
설명
- docker-compose.yaml 의 backend-market에 설정되는 내부포트번호
- docker-compose.yaml 내부통신을 하기때문에 상위 예시로 입력하시면됩니다
- 도메인 연동 시 아래와 같이 backend-market API 주소를 입력하시면 됩니다
https://yourdomain-api.com
2.2 backend-market DB 설정
# ------------------------------------------------------------------------------
# Database (MySQL)
# [필수 수정] Docker .env 파일의 MySQL 설정과 일치해야 합니다
# ------------------------------------------------------------------------------
DB_HOST=mysql-market
DB_PORT=3306
DB_USERNAME=YOUR_MYSQL_USER
DB_PASSWORD=YOUR_MYSQL_PASSWORD
DB_DATABASE=market_db
DB_CHARSET=utf8mb4
DB_POOL_MAX=20
DB_SYNCHRONIZE=true
DB_LOGGING=false
DB_TIMEZONE=Z
- 상단에 있는 docker 환경변수(.env) 파일의 MySQL 정보 입력
- DB_HOST: docker-compose.yaml의 참조하고자 하는 DB 컨테이너 이름
- DB_PORT: docker-compose.yaml의 참조하고자 하는 DB 컨테이터의 포트번호
- 기본 설정은 미리 해두었기때문에 아래 값만 docker 환경변수(.env) 값으로 교체하시면 됩니다.
# 예제에 포함 된 값
DB_USERNAME=marketuser
DB_PASSWORD=$CAf@McTY&9OczrcT5RInCYD
2.3 JWT_SECRET 설정
# ------------------------------------------------------------------------------
# JWT Authentication
# [필수 수정] 반드시 새로운 시크릿 키를 생성하세요
# 생성 명령어: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
# 주의: backend-pay와 동일한 JWT_SECRET을 사용해야 합니다 (토큰 공유)
# ------------------------------------------------------------------------------
JWT_SECRET=YOUR_JWT_SECRET_64_BYTES_HEX
JWT_EXPIRES_IN=1h
- JWT_SECRET: ✅ “인증 정보를 담은 토큰을 검증하기 위한 서버 비밀키
- generated-keys/backend-market.env.production 파일에서 검색 후 아래의 정보를 입력합니다
JWT_SECRET=5875383480bdb38d8f3ce9df9c64dc0139499da967f5e2f2491ff5141577adab60d5d1f55f6f77f246d71bc7bcd8c65619cd261530760d6e1fab12f74b664a68
2.4 CORS_ORIGIN 설정
# ------------------------------------------------------------------------------
# CORS
# [필수 수정] Frontend 도메인 URL
# ------------------------------------------------------------------------------
CORS_ORIGIN=<YOUR_FRONTEND_URL>
# 예시: https://yourdomain.com
- frontend-market 의 도메인 입력
- localhost:12055 포트로 입력하시면 됩니다. (generated-keys로 생성된 PORT번호 입력)
- 도메인 사용시, 실제 사용자들이 보는 market의 URL 주소를 입력하시면 됩니다. (http, https 주의)
예시
CORS_ORIGIN=http://localhost:12055
2.5 swagger 설정
# ------------------------------------------------------------------------------
# Swagger
# [선택 수정] 운영 환경에서는 false 권장
# ------------------------------------------------------------------------------
SWAGGER_ENABLED=false
- Swagger는 REST API의 구조를 시각화하고 바로 테스트할 수 있는 API 문서화 도구입니다.
- 실제 운영단계에서는 false로 하시면 됩니다. (backend-pay는 cros설정되어있음)
2.6 FRONTEND_URL 설정
# ------------------------------------------------------------------------------
# Frontend URL
# [필수 수정] OAuth 콜백 등에 사용되는 Frontend URL
# ------------------------------------------------------------------------------
FRONTEND_URL=<YOUR_FRONTEND_URL>
# 예시: https://yourdomain.com
- 소셜 로그인(google, kakao, naver, apple)을 위해서 필요한 정보
# 실제 입력 값
FRONTEND_URL=http://localhost:12055
# 도메인 사용시
FRONTEND_URL=https://yourdomain.com
Step 03: backend-pay 의 환경 변수(.env.production) 수정
3.0 시작 전 준비
- 파일명 수정 해주세요! (.env.production.example → .env.production)
3.1 Toss Payments API 설정
# Toss Payments API
TOSS_SECRET_KEY=<YOUR_TOSS_SECRET_KEY>
TOSS_CLIENT_KEY=<YOUR_TOSS_CLIENT_KEY>
# 실제 입력 값 (테스트 생성)
TOSS_SECRET_KEY=test_sk_U0VDUkVUX1RFU1RfQkFTRTY0XzAy
TOSS_CLIENT_KEY=test_ck_Q0xJRU5UX1RFU1RfQkFTRTY0XzAx
- TOSS_CLIENT_KEY, TOSS_CLIENT_KEY 위에 생성된 키를 그대로 입력하시면 됩니다.
3.2 DB 정보 입력
# Database (MySQL)
DATABASE_URL=mysql://<YOUR_MYSQL_USER>:<YOUR_MYSQL_PASSWORD>@mysql-pay:3306/pay_db?charset=utf8mb4
# 실제 입력 값
DATABASE_URL=mysql://marketuser:$CAf@McTY&9OczrcT5RInCYD@mysql-pay:3306/pay_db?charset=utf8mb4
- docker 환경변수(.env)의 ID:PW 정보를 입력하시면됩니다.
- 특수문자 중 일부 인식 못하는 경우가 있습니다. 대부분 실행되지만 안되는 경우 특수 문자 제거해주세요!
3.3 JWT_SECRET 설정
# ------------------------------------------------------------------------------
# JWT Authentication
# [필수 수정] backend-market과 동일한 JWT_SECRET 사용 (토큰 공유)
# 생성: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
# ------------------------------------------------------------------------------
JWT_SECRET=<YOUR_JWT_SECRET_64_BYTES_HEX>
JWT_EXPIRES_IN=1h
- JWT_SECRET: ✅ “인증 정보를 담은 토큰을 검증하기 위한 서버 비밀키
- generated-keys/backend-pay.env.production 파일에서 검색 후 아래의 정보를 입력합니다
3.4 API_KEY 설정
# 기존
API_KEY=<YOUR_API_KEY_32_BYTES_HEX>
# 수정
API_KEY=161652421a9d0b991b1868d74b96f50cd71e36c1b81f8aac0c80fdd8760073b9
- 내부 API 인증 키 정보도 복사!
3.5 CORS_ORIGIN 설정
# ------------------------------------------------------------------------------
# CORS
# [필수 수정] Frontend 도메인 URL
# ------------------------------------------------------------------------------
CORS_ORIGIN=<YOUR_FRONTEND_URL>
# 예시: https://yourdomain.com
# 실제 입력 값
CORS_ORIGIN=http://localhost:12055
- backend-apy api를 호출 할 수 있는 곳을 지정할 수 있습니다. (필수 설정 값)
3.6 Swagger 접근 제어 설정
# ------------------------------------------------------------------------------
# Swagger
# [필수 수정] Swagger UI 접근 제어
# 운영 환경에서는 비활성화 또는 강력한 비밀번호 사용 권장
# ------------------------------------------------------------------------------
SWAGGER_USER=admin
SWAGGER_PASSWORD=<YOUR_SWAGGER_PASSWORD>
# [필수 수정] 허용할 IP 주소 목록 (쉼표로 구분)
SWAGGER_IP_WHITELIST=<YOUR_ADMIN_IP_1>,<YOUR_ADMIN_IP_2>
# 실제 입력 값
SWAGGER_USER=admin
SWAGGER_PASSWORD=4090b930926564eef809bcf9f6bb1027
SWAGGER_IP_WHITELIST=127.0.0.1,::1
- swagger에 접속할 수 있는 ID/PW 및 화이트리스트(접근 가능한 IP) 설정
- 서버와 같은 망으로 설정도 가능합니다! 하지만 localhost에서만 작업하는 것 권장
::1 이란?::1은 IPv6에서의 localhost 주소입니다.
| 주소 | 의미 |
| 127.0.0.1 | IPv4 localhost |
| ::1 | IPv6 localhost |
즉 둘 다 “내 컴퓨터 자기 자신”을 가리키지만 👉 IP 버전만 다른 것입니다.
3.7 WEBHOOK_SIGNATURE_SECRET 설정 값
# ------------------------------------------------------------------------------
# Webhook Configuration
# [필수 수정] TossPayments 웹훅 설정
# WEBHOOK_SIGNATURE_SECRET: TossPayments 대시보드에서 제공하는 Secret 또는 직접 생성
# 생성: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# ------------------------------------------------------------------------------
WEBHOOK_SIGNATURE_SECRET=<YOUR_WEBHOOK_SIGNATURE_SECRET_64_CHARS>
# TossPayments 웹훅 IP 화이트리스트 (변경하지 마세요 - TossPayments 공식 IP)
WEBHOOK_IP_WHITELIST=13.124.18.147,13.124.108.35,3.36.173.151,3.38.81.32,115.92.221.121,115.92.221.122,115.92.221.123,115.92.221.125,115.92.221.126,115.92.221.127
WEBHOOK_IP_WHITELIST_ENABLED=true
WEBHOOK_MAX_RETRIES=3
WEBHOOK_BASE_DELAY_MS=60000
WEBHOOK_MAX_DELAY_MS=3600000
# 실제 입력 값
WEBHOOK_SIGNATURE_SECRET=V0VCSE9PS19TSUdOQVRVUkVfQkFTRTY0XzAz
- 실제 마켓 사용시 토스페이먼츠에서 제공되는 값을 사용해야 합니다
- 테스트용 (상위 생성된 정보 이용) 임의로 생성된 key 사용토스페이먼츠에서 제공하는 key 사용시 web에서 api 호출 연동 확인가능
3.8 SMTP 설정
# ------------------------------------------------------------------------------
# Email/SMTP Configuration
# [필수 수정] 이메일 발송 설정
# ------------------------------------------------------------------------------
SMTP_HOST=<YOUR_SMTP_HOST>
SMTP_PORT=465
SMTP_SECURE=true
SMTP_USER=<YOUR_SMTP_USER>
SMTP_PASSWORD=<YOUR_SMTP_PASSWORD>
SMTP_TLS_REJECT_UNAUTHORIZED=true
EMAIL_FROM=<YOUR_EMAIL_FROM>
EMAIL_FROM_NAME=<YOUR_SERVICE_NAME>
# 예시:
# SMTP_HOST=smtp.gmail.com
# [email protected]
# [email protected]
# EMAIL_FROM_NAME=Your Service Name
- 현재 mail 서버를 운영하거나 SMTP 등의 정보를 가지고 계시면 입력 하시면됩니다!
- 마켓 내부에서 결제가 진행되면, backend-pay가 smtp를 이용하여 결제완료 메일 발송 됩니다
- 토스페이먼츠가 보내는 건 자동으로 발송되는 겁니다! (참고: 테스트 키 사용시 URL만 생성되고 아무런 내용이 없습니다)
3.9 토스페이먼츠 결제 금액 설정
# ------------------------------------------------------------------------------
# Payment Validation (결제 금액 검증)
# [선택 수정] 서비스에 맞게 조정
# ------------------------------------------------------------------------------
PAYMENT_MIN_AMOUNT=100
PAYMENT_MAX_AMOUNT=10000000
PAYMENT_DAILY_LIMIT=50000000
PAYMENT_DAILY_TRANSACTION_LIMIT=100
PAYMENT_ANOMALY_THRESHOLD=3
PAYMENT_AVERAGE_AMOUNT=100000
- 결제 금액의 최하/최고 금액을 설정할 수 있도록 하였습니다.
- 100원부터 결제 가능합니다
3.10 Encryption 암호화 설정
# ------------------------------------------------------------------------------
# Encryption (민감 데이터 암호화)
# [필수 수정] 암호화 마스터 키 생성
# ENCRYPTION_KEY_PROVIDER: local, aws_kms, azure_key_vault
# ENCRYPTION_MASTER_KEY 생성: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
# ------------------------------------------------------------------------------
ENCRYPTION_KEY_PROVIDER=local
ENCRYPTION_MASTER_KEY=<YOUR_ENCRYPTION_MASTER_KEY_BASE64>
ENCRYPTION_KEY_VERSION=1
ENCRYPTION_PREVIOUS_KEYS=
- generated-keys/backend-pay.env.production 파일에서 검색 후 아래의 정보를 입력합니다
- ENCRYPTION_MASTER_KEY는 데이터베이스에 저장되는 민감한 개인정보를 암호화하기 위한 마스터 암호화 키입니다.
- AES-256-GCM 암호화 알고리즘을 사용하며, 결제 시스템에서 고객 정보를 보호하는 핵심 보안 요소입니다.
- 쉽게 말해서, 결제 정보 암호화 설정입니다!
3.11 기타
# ------------------------------------------------------------------------------
# Elasticsearch (로그 중앙화, 선택사항)
# [선택] 설정하지 않으면 ES 연동 비활성화
# ------------------------------------------------------------------------------
ELASTICSEARCH_URL=
ELASTICSEARCH_USERNAME=
ELASTICSEARCH_PASSWORD=
ELASTICSEARCH_INDEX_PREFIX=tosspayments-logs
ELASTICSEARCH_TLS_REJECT_UNAUTHORIZED=true
# ------------------------------------------------------------------------------
# Sentry APM (선택사항)
# [선택] 에러 모니터링 서비스
# ------------------------------------------------------------------------------
SENTRY_DSN=
- 상위 정보는 현재 미구현된 기능입니다.
- pay의 공격(?) 모니터링을 위한 대시보드 연동을 위해 미리 만들어두었고 향후 “천천히” 업데이트 예정입니다.
- self-hosting기반으로 대시보드 구성이 가능하여 테스트 먼저 할 예정입니다.
Step 04: frontend-market 의 환경 변수(.env.production) 수정
4.0 시작 전 준비
- 파일명 수정 해주세요! (.env.production.example → .env.production)
4.1 URL 설정
# API URLs
# [필수 수정] Backend API 서버 URL
VITE_API_URL=YOUR_BACKEND_MARKET_URL/api
VITE_PAYMENT_API_URL=YOUR_BACKEND_PAY_URL
# 예시:
# VITE_API_URL=https://api.yourdomain.com/api
# VITE_PAYMENT_API_URL=https://pay.yourdomain.com
실제 입력값
VITE_API_URL=http://localhost:12053/api
VITE_PAYMENT_API_URL=http://localhost:12051
- backend-api (market, pay) 정보를 입력 하는 곳입니다.
- 실제 도메인 이용시 상위 예시를 참고하시면 됩니다
4.2 TossPayments 설정
# TossPayments Client Key
# [필수 수정] TossPayments에서 발급받은 Client Key
# 테스트: test_ck_xxxxxxxx
# 운영: live_ck_xxxxxxxx
VITE_TOSS_CLIENT_KEY=<YOUR_TOSS_CLIENT_KEY>
# 실제 입력 값
VITE_TOSS_CLIENT_KEY=test_ck_Q0xJRU5UX1RFU1RfQkFTRTY0XzAx
앞서 GPT로 생성한 토스페이먼츠 key를 입력 하시면됩니다.
4.3 언어/시간대 설정
# Display Settings
# [선택 수정] 표시 설정
VITE_DISPLAY_TIMEZONE=Asia/Seoul
VITE_DISPLAY_LOCALE=ko-KR
- 현재 다국어를 기반으로 생각하고 마켓을 개발하였는데, 시간대 및 언어 설정 가능합니다.
- 관리자 플랫폼 메뉴에서 설정하면 전체 설정변경되기때문에 참고만 하시면 됩니다.
Step 05: docker-compose.yaml 설정
5.0 docker-compose.yaml 설정
- 마지막 설정 작업이네요!
version: '3.8'
services:
# ============================================
# MySQL for Backend-Market
# ============================================
mysql-market:
image: mysql:8.4.2
container_name: habom-market-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_MARKET_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
TZ: ${TZ}
ports:
- "${MYSQL_MARKET_PORT}:3306"
volumes:
- ./mysql-market/data:/var/lib/mysql
- ./mysql-market/init:/docker-entrypoint-initdb.d
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
networks:
- market-network
# ============================================
# MySQL for Backend-Pay
# ============================================
mysql-pay:
image: mysql:8.4.2
container_name: habom-pay-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_PAY_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
TZ: ${TZ}
ports:
- "${MYSQL_PAY_PORT}:3306"
volumes:
- ./mysql-pay/data:/var/lib/mysql
- ./mysql-pay/init:/docker-entrypoint-initdb.d
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
networks:
- market-network
# ============================================
# Backend-Pay (NestJS)
# ============================================
backend-pay:
image: habom/backend-pay:1.0.7
container_name: habom-market-pay
restart: always
env_file:
- ./backend-pay/.env.production
ports:
- "${BACKEND_PAY_PORT}:8080"
depends_on:
mysql-pay:
condition: service_healthy
networks:
- market-network
# ============================================
# Backend-Market (NestJS)
# ============================================
backend-market:
image: habom/backend-market:1.0.7
container_name: habom-market-backend
restart: always
env_file:
- ./backend-market/.env.production
ports:
- "${BACKEND_MARKET_PORT}:8081"
volumes:
- ./backend-market/uploads:/app/uploads
depends_on:
mysql-market:
condition: service_healthy
networks:
- market-network
# ============================================
# Frontend-Market (Static Files)
# ============================================
frontend-market:
image: habom/frontend-market:1.0.7
container_name: habom-market-frontend
restart: always
env_file:
- ./frontend-market/.env.production
ports:
- "${FRONTEND_MARKET_PORT}:3000"
depends_on:
- backend-market
- backend-pay
networks:
- market-network
networks:
market-network:
driver: bridge
현재 버전을 그대로 사용해도 상관 없지만, 추후 docker hub의 이미지가 업데이트가 될 경우, 수정할 부분 먼저 이야기 드리도록 하겠습니다.
docker hub의 이미지 업데이트 시
image: habom/backend-pay:1.0.7
image: habom/backend-market:1.0.7
image: habom/frontend-market:1.0.7
- 각 줄마다 검색하면 docker container를 구성하는 이미지가 3개가 있습니다.
- 2025.12.16일 기준으로 1.0.7 version으로 업로드를 해두었고, 향후 업데이트가 될 경우 버전 교체 후 사용하시면 됩니다.
주의사항
- DB마이그레이션은 테스트를 하고 업데이트를 진행할 예정이지만, latest를 사용하실 경우 꼭 hyper Backup을 통해 사전에 백업 후 진행해주세요!
- DB는 mysql 8.4.2 를 고정으로 사용하고 있습니다.
나머지 설정은 docker 환경변수(.env) 와 각각의 컨테이너 환경변수(.env.production)에 의해서 자동으로 값을 불러오도록 해두었습니다. 그리고 내부 networks 구성으로 인해 내부통신은 가능한 형태이구요!
docker container name 변경 시
container_name: habom-market-mysql
container_name: habom-pay-mysql
container_name: habom-market-pay
container_name: habom-market-backend
container_name: habom-market-frontend
상위 이름을 변경하게 되면 아래 각각 depends on항목의 값을 변경해야 합니다.
# backend-pay:
backend-pay:
depends_on:
mysql-pay:
condition: service_healthy
# backend-market:
backend-market:
depends_on:
mysql-market:
condition: service_healthy
# frontend-market:
depends_on:
- backend-market
- backend-pay
Step 06: docker 설치/실행
6.0 필요한 도구/재료
- docker 구동 가능한 환경이라고 가정하겠습니다.- 필수: docker desktop, nas, aws 등 - 있으면 좋은 것1) 개인 도메인 : 개인도메인 사용시 역방향프록시(https) 등 설정 필요 함2) 메일 서버 (self-hosting, google SMTP, 기타 SMTP 정보)
6.1 docker desktop 설치/실행
- docker-compose.yaml 파일이 있는 경로에 terminal 실행
# 모든 서비스 시작
docker-compose up -d
# 로그 확인
docker-compose logs -f
# 특정 서비스 로그 확인
docker-compose logs -f backend-pay
console 결과
(base) \habom-localhost2> docker-compose up -d
time="2025-12-16T11:02:11+09:00" level=warning msg="The \"CAf\" variable is not set. Defaulting to a blank string."
time="2025-12-16T11:02:11+09:00" level=warning msg="The \"CAf\" variable is not set. Defaulting to a blank string."
time="2025-12-16T11:02:11+09:00" level=warning msg="The \"CAf\" variable is not set. Defaulting to a blank string."
time="2025-12-16T11:02:11+09:00" level=warning msg="The \"CAf\" variable is not set. Defaulting to a blank string."
time="2025-12-16T11:02:11+09:00" level=warning msg="D:\\KmelonGitLab25\\Proj-tosspayments\\tosspaymentsapi\\Proj-docker\\habom-localhost2\\docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
time="2025-12-16T11:02:11+09:00" level=warning msg="The \"CAf\" variable is not set. Defaulting to a blank string."
time="2025-12-16T11:02:11+09:00" level=warning msg="The \"CAf\" variable is not set. Defaulting to a blank string."
[+] Running 32/32
✔ mysql-pay Pulled 21.6s
✔ backend-market Pulled 4.0s
✔ frontend-market Pulled 3.9s
✔ backend-pay Pulled 3.9s
✔ mysql-market Pulled 21.6s
[+] Running 6/6
✔ Network habom-localhost2_market-network Created 0.0s
✔ Container habom-market-mysql Healthy 21.3s
✔ Container habom-pay-mysql Healthy 21.4s
✔ Container habom-market-backend Started 21.2s
✔ Container habom-market-pay Started 21.3s
✔ Container habom-market-frontend Started
http://localhost:12055/ 접속하시면 마켓 초기 페이지 접속 가능합니다.
관리자 계정 생성이 필요합니다!
2부에서 계속!!
habom 님의 최근 댓글
댓글 테스트입니다 2025 11.06