- Docker 기반 로컬 개발 환경 전체 셋팅 절차 - api, mng, react, docs, hotfix 5개 저장소 설명 - SSL 인증서, hosts, 환경변수, 트러블슈팅 포함 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
794 lines
21 KiB
Markdown
794 lines
21 KiB
Markdown
# SAM 로컬 개발 환경 셋팅 가이드
|
|
|
|
> 최종 업데이트: 2026-03-09
|
|
|
|
---
|
|
|
|
## 1. 사전 준비
|
|
|
|
### 필수 소프트웨어
|
|
|
|
| 소프트웨어 | 버전 | 용도 | 설치 |
|
|
|-----------|------|------|---------------------------------------------------------------|
|
|
| **Docker Desktop** | 최신 | 컨테이너 실행 | [docker.com](https://www.docker.com/products/docker-desktop/) |
|
|
| **Git** | 최신 | 버전 관리 | `brew install git` |
|
|
| **mkcert** | 최신 | 로컬 SSL 인증서 | `brew install mkcert` |
|
|
| **텍스트 에디터** | - | 코드 편집 | JetBrains IDE 권장 |
|
|
|
|
> Docker Desktop이 설치되면 PHP, Node.js, MySQL 등은 **별도 설치 불필요** (Docker 컨테이너 내부에서 실행)
|
|
|
|
### Git 서버 정보
|
|
|
|
| 항목 | 값 |
|
|
|------|-----|
|
|
| Git 서버 | Gitea (자체 호스팅) |
|
|
| 서버 주소 | `http://114.203.209.83:3000` |
|
|
| 조직 | `SamProject` |
|
|
|
|
> Gitea 계정이 필요합니다. 팀장에게 계정 생성을 요청하세요.
|
|
|
|
---
|
|
|
|
## 2. 저장소 클론
|
|
|
|
### 디렉토리 구조
|
|
|
|
```
|
|
Works/@KD_SAM/SAM/ ← 루트 (원하는 경로에 생성)
|
|
├── api/ ← Laravel REST API
|
|
├── mng/ ← Laravel 관리자 패널
|
|
├── react/ ← Next.js 프론트엔드
|
|
├── docs/ ← 기술 문서
|
|
├── hotfix/ ← 테스트/QA 문서
|
|
├── docker/ ← Docker 설정 (api 저장소에 포함되지 않음)
|
|
├── design/ ← 디자인 시스템 (선택)
|
|
└── planning/ ← 기획 문서 (선택)
|
|
```
|
|
|
|
### 클론 명령어
|
|
|
|
```bash
|
|
# 작업 디렉토리 생성
|
|
mkdir -p ~/Works/@KD_SAM/SAM
|
|
cd ~/Works/@KD_SAM/SAM
|
|
|
|
# 5개 저장소 클론
|
|
git clone http://114.203.209.83:3000/SamProject/sam-api.git api
|
|
git clone http://114.203.209.83:3000/SamProject/sam-manage.git mng
|
|
git clone http://114.203.209.83:3000/SamProject/sam-react-prod.git react
|
|
git clone http://114.203.209.83:3000/SamProject/sam-docs.git docs
|
|
git clone http://114.203.209.83:3000/SamProject/sam-hotfix.git hotfix
|
|
```
|
|
|
|
### 기본 브랜치 전환
|
|
|
|
```bash
|
|
# api, react는 develop 브랜치에서 작업
|
|
cd api && git checkout develop && cd ..
|
|
cd react && git checkout develop && cd ..
|
|
```
|
|
|
|
> **중요**: `main` 브랜치에서 직접 작업하지 않습니다. 항상 `develop`에서 작업합니다.
|
|
|
|
---
|
|
|
|
## 3. Docker 환경 구성
|
|
|
|
### 3-1. Docker 설정 파일 확인
|
|
|
|
`docker/` 디렉토리에 모든 Docker 설정이 포함되어 있습니다.
|
|
|
|
```
|
|
docker/
|
|
├── docker-compose.yml ← 메인 Compose 파일
|
|
├── .env ← Compose 환경변수
|
|
├── api/
|
|
│ ├── Dockerfile ← PHP 8.4 + Nginx
|
|
│ ├── nginx.conf
|
|
│ ├── supervisord.conf
|
|
│ └── uploads.ini
|
|
├── mng/
|
|
│ ├── Dockerfile ← PHP 8.4 + Nginx
|
|
│ ├── nginx.conf
|
|
│ ├── supervisord.conf
|
|
│ └── uploads.ini
|
|
├── react/
|
|
│ └── Dockerfile ← Node 20 + Chromium (PDF용)
|
|
├── mysql/
|
|
│ ├── init.sql ← 초기 DB/유저 생성
|
|
│ └── my.cnf ← MySQL 설정
|
|
├── nginx/
|
|
│ ├── nginx.conf ← 리버스 프록시 설정
|
|
│ └── ssl/ ← SSL 인증서
|
|
└── 5130/
|
|
└── Dockerfile ← 레거시 PHP 7.3
|
|
```
|
|
|
|
### 3-2. 서비스 구성
|
|
|
|
| 서비스 | 이미지 | 내부 포트 | 역할 |
|
|
|--------|--------|-----------|------|
|
|
| **nginx** | nginx:latest | 80, 443 | 리버스 프록시, SSL 종료 |
|
|
| **api** | PHP 8.4-fpm | 9000 | REST API 백엔드 |
|
|
| **mng** | PHP 8.4-fpm | 9000 | 관리자 패널 |
|
|
| **react** | node:20-alpine | 3000 | Next.js 프론트엔드 |
|
|
| **mysql** | mysql:8.0 | 3306 | 데이터베이스 |
|
|
| **php73** | PHP 7.3-fpm | 9000 | 레거시 5130 앱 |
|
|
|
|
### 3-3. 네트워크
|
|
|
|
모든 컨테이너는 `samnet` 브릿지 네트워크로 연결됩니다.
|
|
|
|
```
|
|
[브라우저] → [nginx:443] → api / mng / react (내부 라우팅)
|
|
→ mysql (컨테이너명: sam-mysql-1)
|
|
```
|
|
|
|
---
|
|
|
|
## 4. hosts 파일 설정
|
|
|
|
로컬 도메인을 사용하기 위해 hosts 파일을 수정합니다.
|
|
|
|
```bash
|
|
sudo nano /etc/hosts
|
|
```
|
|
|
|
아래 내용을 추가:
|
|
|
|
```
|
|
127.0.0.1 api.sam.kr mng.sam.kr admin.sam.kr dev.sam.kr design.sam.kr plan.sam.kr 5130.sam.kr
|
|
127.0.0.1 sam.kr www.sam.kr sales.sam.kr demo.sam.kr
|
|
```
|
|
|
|
---
|
|
|
|
## 5. SSL 인증서 설정
|
|
|
|
로컬 HTTPS를 위한 자체 서명 인증서를 생성합니다.
|
|
|
|
### 5-1. mkcert 설치 및 초기화
|
|
|
|
```bash
|
|
# mkcert 설치 (처음 한 번)
|
|
brew install mkcert
|
|
mkcert -install # 로컬 CA를 시스템에 등록
|
|
```
|
|
|
|
### 5-2. 와일드카드 인증서 생성
|
|
|
|
```bash
|
|
cd docker/nginx/ssl/
|
|
|
|
# *.sam.kr 와일드카드 인증서 생성
|
|
mkcert "*.sam.kr" localhost 127.0.0.1 ::1
|
|
|
|
# 파일명 변경 (nginx.conf에서 참조하는 이름으로)
|
|
mv _wildcard.sam.kr+3.pem sam.kr.crt
|
|
mv _wildcard.sam.kr+3-key.pem sam.kr.key
|
|
```
|
|
|
|
### 5-3. 포트 포워딩 설정 (macOS)
|
|
|
|
Docker가 443 포트를 4443으로 매핑하므로, 브라우저에서 표준 443 포트로 접속하려면 포트 포워딩이 필요합니다.
|
|
|
|
```bash
|
|
# pfctl 규칙 적용 (443 → 4443 포워딩)
|
|
sudo pfctl -ef docker/nginx/ssl/pf-sam.conf
|
|
```
|
|
|
|
> **참고**: macOS 재부팅 시 이 설정은 초기화되므로 재부팅 후 다시 실행해야 합니다.
|
|
|
|
**포트 포워딩 없이 사용하려면** `https://api.sam.kr:4443` 처럼 포트 번호를 직접 지정합니다.
|
|
|
|
---
|
|
|
|
## 6. 환경변수 (.env) 설정
|
|
|
|
### 6-1. API (.env)
|
|
|
|
```bash
|
|
cd api
|
|
cp .env.example .env
|
|
```
|
|
|
|
`.env` 파일에서 확인/수정할 항목:
|
|
|
|
```env
|
|
# 앱 키 생성은 Docker 실행 후 컨테이너 내에서 수행
|
|
# docker exec sam-api-1 php artisan key:generate
|
|
|
|
APP_NAME="SAM API"
|
|
APP_ENV=local
|
|
APP_DEBUG=true
|
|
APP_URL=https://api.sam.kr/
|
|
|
|
# DB (Docker 환경에서는 docker-compose가 오버라이드)
|
|
DB_HOST=127.0.0.1 # 로컬 직접 접속 시
|
|
# DB_HOST=sam-mysql-1 # Docker 환경 (자동 오버라이드)
|
|
DB_DATABASE=samdb
|
|
DB_USERNAME=samuser
|
|
DB_PASSWORD=sampass
|
|
|
|
# Swagger
|
|
L5_SWAGGER_GENERATE_ALWAYS=true
|
|
L5_SWAGGER_CONST_HOST=https://api.sam.kr/
|
|
|
|
# Sanctum 토큰 (분 단위)
|
|
SANCTUM_ACCESS_TOKEN_EXPIRATION=120
|
|
SANCTUM_REFRESH_TOKEN_EXPIRATION=10080
|
|
|
|
# 내부 통신 키 (MNG ↔ API)
|
|
INTERNAL_EXCHANGE_SECRET= # 팀 내부 문서에서 확인
|
|
```
|
|
|
|
> **API 키, Firebase, AI 서비스 키** 등 민감한 값은 팀 내부 문서(노션)에서 별도 공유합니다.
|
|
|
|
### 6-2. MNG (.env)
|
|
|
|
```bash
|
|
cd mng
|
|
cp .env.example .env
|
|
```
|
|
|
|
```env
|
|
APP_NAME=SAM-MNG
|
|
APP_ENV=local
|
|
APP_DEBUG=true
|
|
APP_URL=https://mng.sam.kr
|
|
|
|
DB_HOST=sam-mysql-1
|
|
DB_DATABASE=samdb
|
|
DB_USERNAME=samuser
|
|
DB_PASSWORD=sampass
|
|
|
|
# API 서버 연동
|
|
API_BASE_URL=https://api.sam.kr
|
|
|
|
# 내부 통신 키 (API와 동일한 값)
|
|
INTERNAL_EXCHANGE_SECRET= # API의 값과 동일하게 설정
|
|
```
|
|
|
|
### 6-3. React (.env.local)
|
|
|
|
```bash
|
|
cd react
|
|
cp .env.example .env.local
|
|
```
|
|
|
|
```env
|
|
NEXT_PUBLIC_APP_ENV=local
|
|
NEXT_PUBLIC_API_URL=https://api.sam.kr
|
|
NEXT_PUBLIC_FRONTEND_URL=https://dev.sam.kr
|
|
NEXT_PUBLIC_AUTH_MODE=sanctum
|
|
|
|
# API Key (서버 사이드 전용 - NEXT_PUBLIC_ 접두사 붙이지 말 것!)
|
|
API_KEY= # 팀 내부 문서에서 확인
|
|
|
|
# 개발 도구
|
|
NEXT_PUBLIC_DEV_TOOLBAR_ENABLED=false
|
|
|
|
# Puppeteer (PDF 생성 - Docker에서는 자동 설정)
|
|
PUPPETEER_EXECUTABLE_PATH=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
|
|
```
|
|
|
|
### 6-4. docs / hotfix
|
|
|
|
별도 환경변수 설정 불필요 (순수 마크다운 문서 저장소)
|
|
|
|
---
|
|
|
|
## 7. Docker 실행
|
|
|
|
### 7-1. 최초 실행
|
|
|
|
```bash
|
|
cd docker
|
|
|
|
# 이미지 빌드 + 컨테이너 시작
|
|
docker compose up -d --build
|
|
```
|
|
|
|
> 첫 실행 시 이미지 빌드에 5~10분 소요될 수 있습니다.
|
|
|
|
### 7-2. 초기 설정 (최초 1회)
|
|
|
|
```bash
|
|
# API: 앱 키 생성 + 의존성 설치 + 마이그레이션
|
|
docker exec sam-api-1 php artisan key:generate
|
|
docker exec sam-api-1 composer install
|
|
docker exec sam-api-1 php artisan migrate
|
|
docker exec sam-api-1 php artisan l5-swagger:generate
|
|
|
|
# MNG: 앱 키 생성 + 의존성 설치
|
|
docker exec sam-mng-1 php artisan key:generate
|
|
docker exec sam-mng-1 composer install
|
|
docker exec sam-mng-1 npm install
|
|
docker exec sam-mng-1 npm run build
|
|
```
|
|
|
|
> React는 Docker 컨테이너 시작 시 자동으로 `npm install` + `npm run dev`가 실행됩니다.
|
|
|
|
### 7-3. 일상적인 시작/종료
|
|
|
|
```bash
|
|
cd docker
|
|
|
|
# 시작
|
|
docker compose up -d
|
|
|
|
# 종료
|
|
docker compose down
|
|
|
|
# 로그 확인
|
|
docker compose logs -f # 전체
|
|
docker compose logs -f api # API만
|
|
docker compose logs -f react # React만
|
|
|
|
# 컨테이너 상태 확인
|
|
docker compose ps
|
|
```
|
|
|
|
---
|
|
|
|
## 8. 접속 확인
|
|
|
|
### 8-1. 로컬 도메인
|
|
|
|
| 서비스 | URL | 설명 |
|
|
|--------|-----|------|
|
|
| **프론트엔드** | `https://dev.sam.kr` | Next.js 사용자 화면 |
|
|
| **API 문서** | `https://api.sam.kr/api-docs/index.html` | Swagger UI |
|
|
| **관리자 패널** | `https://mng.sam.kr` | MNG 관리자 화면 |
|
|
| **관리자 (별칭)** | `https://admin.sam.kr` | MNG와 동일 |
|
|
| **디자인 시스템** | `https://design.sam.kr` | 컴포넌트 스토리북 |
|
|
| **레거시** | `https://5130.sam.kr` | 기존 PHP 시스템 |
|
|
|
|
### 8-2. DB 접속 정보
|
|
|
|
| 항목 | 값 |
|
|
|------|-----|
|
|
| Host | `127.0.0.1` |
|
|
| Port | `3306` |
|
|
| Database | `samdb` |
|
|
| Username | `samuser` |
|
|
| Password | `sampass` |
|
|
| Root Password | `root` |
|
|
| 레거시 DB | `chandj` |
|
|
|
|
> DBeaver, DataGrip, MySQL Workbench 등 원하는 DB 클라이언트로 접속 가능
|
|
|
|
### 8-3. 접속 테스트
|
|
|
|
```bash
|
|
# API 응답 확인
|
|
curl -k https://api.sam.kr/api-docs/index.html
|
|
|
|
# MySQL 접속 확인
|
|
docker exec sam-mysql-1 mysql -u samuser -psampass -e "SHOW DATABASES;"
|
|
```
|
|
|
|
---
|
|
|
|
## 9. 저장소별 상세 정보
|
|
|
|
### 9-1. api/ (REST API 서버)
|
|
|
|
| 항목 | 값 |
|
|
|------|-----|
|
|
| 프레임워크 | Laravel 12 (PHP 8.4) |
|
|
| 인증 | Sanctum (토큰 기반) |
|
|
| API 문서 | Swagger (l5-swagger) |
|
|
| DB | MySQL 8.0 (samdb) |
|
|
| 역할 | 모든 비즈니스 로직의 중심, 프론트/관리자 모두 이 API 사용 |
|
|
|
|
**주요 명령어:**
|
|
|
|
```bash
|
|
# 컨테이너 진입
|
|
docker exec -it sam-api-1 bash
|
|
|
|
# 마이그레이션
|
|
php artisan migrate
|
|
php artisan migrate:status
|
|
|
|
# Swagger 재생성
|
|
php artisan l5-swagger:generate
|
|
|
|
# 코드 포매터
|
|
./vendor/bin/pint
|
|
|
|
# 캐시 초기화
|
|
php artisan cache:clear
|
|
php artisan config:clear
|
|
php artisan route:clear
|
|
```
|
|
|
|
**핵심 디렉토리:**
|
|
|
|
```
|
|
api/
|
|
├── app/
|
|
│ ├── Http/Controllers/Api/V1/ ← API 컨트롤러
|
|
│ ├── Http/Requests/ ← FormRequest (검증)
|
|
│ ├── Models/ ← Eloquent 모델
|
|
│ ├── Services/ ← 비즈니스 로직 (핵심)
|
|
│ ├── Swagger/v1/ ← Swagger 문서 클래스
|
|
│ └── Helpers/ApiResponse.php ← 응답 헬퍼
|
|
├── database/migrations/ ← DB 마이그레이션
|
|
├── routes/api.php ← API 라우트
|
|
└── lang/ko/ ← 한국어 메시지
|
|
```
|
|
|
|
### 9-2. mng/ (관리자 패널)
|
|
|
|
| 항목 | 값 |
|
|
|------|-----|
|
|
| 프레임워크 | Laravel 12 (PHP 8.4) |
|
|
| 프론트엔드 | Blade + Tailwind CSS + HTMX + DaisyUI |
|
|
| 역할 | 시스템 관리, 메뉴/권한 관리, 테넌트 관리 |
|
|
|
|
**주요 명령어:**
|
|
|
|
```bash
|
|
# 컨테이너 진입
|
|
docker exec -it sam-mng-1 bash
|
|
|
|
# 프론트 에셋 빌드
|
|
npm run build # 프로덕션
|
|
npm run dev # 개발 (HMR)
|
|
|
|
# 코드 포매터
|
|
./vendor/bin/pint
|
|
```
|
|
|
|
**핵심 디렉토리:**
|
|
|
|
```
|
|
mng/
|
|
├── app/
|
|
│ ├── Http/Controllers/ ← 웹 컨트롤러
|
|
│ ├── Models/ ← 독립 모델 (API와 별개)
|
|
│ └── Services/ ← 비즈니스 로직
|
|
├── resources/views/ ← Blade 템플릿
|
|
├── routes/web.php ← 웹 라우트
|
|
└── public/ ← 정적 파일
|
|
```
|
|
|
|
> **주의**: MNG에서는 DB 마이그레이션을 생성/실행하지 않습니다. DB 변경은 반드시 API 프로젝트에서 수행합니다.
|
|
|
|
### 9-3. react/ (Next.js 프론트엔드)
|
|
|
|
| 항목 | 값 |
|
|
|------|-----|
|
|
| 프레임워크 | Next.js 15 (React 19, TypeScript) |
|
|
| 스타일링 | Tailwind CSS 4 |
|
|
| UI 라이브러리 | shadcn/ui (Radix UI 기반) |
|
|
| 상태관리 | Zustand |
|
|
| 폼 검증 | Zod + React Hook Form |
|
|
| 역할 | 사용자용 ERP 프론트엔드 |
|
|
|
|
**주요 명령어:**
|
|
|
|
```bash
|
|
# React는 Docker 컨테이너가 자동으로 dev 서버를 실행합니다.
|
|
# 수동 실행이 필요한 경우:
|
|
docker exec -it sam-react-1 sh
|
|
|
|
npm run dev # 개발 서버
|
|
npm run build # 프로덕션 빌드
|
|
npm run lint # ESLint
|
|
```
|
|
|
|
**핵심 디렉토리:**
|
|
|
|
```
|
|
react/
|
|
├── src/
|
|
│ ├── app/ ← Next.js App Router 페이지
|
|
│ ├── components/
|
|
│ │ ├── ui/ ← shadcn/ui 원자 컴포넌트
|
|
│ │ ├── molecules/ ← 조합 컴포넌트
|
|
│ │ ├── organisms/ ← 복합 컴포넌트
|
|
│ │ └── [도메인]/ ← 도메인별 컴포넌트
|
|
│ ├── lib/ ← 유틸리티, API 헬퍼
|
|
│ └── stores/ ← Zustand 스토어
|
|
├── public/ ← 정적 파일
|
|
└── next.config.ts ← Next.js 설정
|
|
```
|
|
|
|
**핵심 규칙:**
|
|
- 모든 페이지는 `'use client'` 선언 필수 (폐쇄형 ERP, SSR 불필요)
|
|
- API 호출은 Server Action을 통해 수행 (HttpOnly 쿠키 프록시)
|
|
- `buildApiUrl()` 유틸리티 필수 사용
|
|
|
|
### 9-4. docs/ (기술 문서)
|
|
|
|
| 항목 | 값 |
|
|
|------|-----|
|
|
| 내용 | 개발 가이드, API 스펙, 기획 문서, 표준 |
|
|
| 형식 | Markdown |
|
|
| 설치 | 없음 (문서만 관리) |
|
|
|
|
```
|
|
docs/
|
|
├── INDEX.md ← 문서 인덱스 (여기부터 시작)
|
|
├── dev/
|
|
│ ├── dev_plans/ ← 개발 계획 문서
|
|
│ ├── standards/ ← 코드/아키텍처 표준
|
|
│ ├── guides/ ← 셋업/사용 가이드
|
|
│ ├── changes/ ← 변경 로그
|
|
│ └── deploys/ ← 배포 문서
|
|
├── features/ ← 기능 스펙
|
|
├── frontend/ ← 프론트엔드 API 스펙
|
|
├── rules/ ← 비즈니스 규칙
|
|
└── system/ ← 시스템 아키텍처
|
|
```
|
|
|
|
### 9-5. hotfix/ (테스트/QA)
|
|
|
|
| 항목 | 값 |
|
|
|------|-----|
|
|
| 내용 | E2E 테스트 결과, 버그 리포트, 테스트 케이스 |
|
|
| 형식 | Markdown + 스크린샷 |
|
|
| 설치 | 없음 (문서만 관리) |
|
|
|
|
```
|
|
hotfix/
|
|
├── e2e/ ← E2E 테스트 정의
|
|
├── testcase/ ← 테스트 케이스 문서
|
|
├── reports/ ← 테스트 실행 결과
|
|
├── screenshots/ ← 시각적 테스트 증거
|
|
├── research/ ← 조사 자료
|
|
├── sam.code-workspace ← VS Code 워크스페이스
|
|
├── *-Test-Report_*.md ← 개별 테스트 보고서
|
|
└── Fail-*_*.md ← 실패 케이스 보고서
|
|
```
|
|
|
|
---
|
|
|
|
## 10. 주요 아키텍처 개념
|
|
|
|
### 10-1. 멀티테넌트
|
|
|
|
- 모든 데이터에 `tenant_id` 컬럼이 존재
|
|
- `BelongsToTenant` 글로벌 스코프가 자동으로 테넌트 필터링
|
|
- 하나의 DB에서 여러 회사(테넌트)의 데이터를 격리
|
|
|
|
### 10-2. 데이터 흐름
|
|
|
|
```
|
|
[사용자 브라우저]
|
|
│
|
|
▼
|
|
[Next.js (react/)] ──Server Action──▶ [Laravel API (api/)] ──▶ [MySQL]
|
|
│
|
|
[관리자 브라우저] │
|
|
│ │
|
|
▼ │
|
|
[Laravel MNG (mng/)] ──내부 API 호출──────────┘
|
|
```
|
|
|
|
### 10-3. 인증 방식
|
|
|
|
| 클라이언트 | 인증 방식 | 설명 |
|
|
|-----------|----------|------|
|
|
| React (웹) | Sanctum Cookie | HttpOnly 쿠키, Server Action 프록시 |
|
|
| MNG (관리자) | 세션 + 내부 HMAC | Laravel 세션 + API 내부 통신 키 |
|
|
| 외부 연동 | API Key + Bearer | Sanctum 토큰 |
|
|
|
|
---
|
|
|
|
## 11. 자주 쓰는 명령어
|
|
|
|
### Docker 관련
|
|
|
|
```bash
|
|
# 전체 시작/종료
|
|
cd docker && docker compose up -d
|
|
cd docker && docker compose down
|
|
|
|
# 컨테이너 재시작
|
|
docker restart sam-api-1
|
|
docker restart sam-react-1
|
|
|
|
# 이미지 재빌드 (Dockerfile 수정 후)
|
|
docker compose build --no-cache api
|
|
docker compose up -d api
|
|
|
|
# 볼륨 포함 완전 초기화 (⚠️ DB 데이터 삭제됨)
|
|
docker compose down -v
|
|
```
|
|
|
|
### API 개발
|
|
|
|
```bash
|
|
docker exec sam-api-1 php artisan migrate # 마이그레이션
|
|
docker exec sam-api-1 php artisan migrate:rollback # 롤백
|
|
docker exec sam-api-1 php artisan l5-swagger:generate # Swagger 재생성
|
|
docker exec sam-api-1 ./vendor/bin/pint # 코드 포매팅
|
|
docker exec sam-api-1 php artisan tinker # REPL
|
|
docker exec sam-api-1 php artisan route:list # 라우트 목록
|
|
```
|
|
|
|
### MNG 개발
|
|
|
|
```bash
|
|
docker exec sam-mng-1 php artisan tinker
|
|
docker exec sam-mng-1 npm run dev # Vite HMR
|
|
docker exec sam-mng-1 npm run build # 에셋 빌드
|
|
docker exec sam-mng-1 ./vendor/bin/pint
|
|
```
|
|
|
|
### MySQL 접속
|
|
|
|
```bash
|
|
# CLI 접속
|
|
docker exec -it sam-mysql-1 mysql -u samuser -psampass samdb
|
|
|
|
# 특정 쿼리 실행
|
|
docker exec sam-mysql-1 mysql -u samuser -psampass samdb -e "SHOW TABLES;"
|
|
```
|
|
|
|
---
|
|
|
|
## 12. 트러블슈팅
|
|
|
|
### SSL 인증서 오류 (브라우저에서 "안전하지 않음")
|
|
|
|
```bash
|
|
# mkcert CA가 설치되지 않은 경우
|
|
mkcert -install
|
|
|
|
# 인증서 재생성
|
|
cd docker/nginx/ssl
|
|
mkcert "*.sam.kr" localhost 127.0.0.1 ::1
|
|
mv _wildcard.sam.kr+3.pem sam.kr.crt
|
|
mv _wildcard.sam.kr+3-key.pem sam.kr.key
|
|
|
|
# Nginx 재시작
|
|
docker restart sam-nginx-1
|
|
```
|
|
|
|
### 도메인 접속이 안 될 때
|
|
|
|
```bash
|
|
# hosts 파일 확인
|
|
cat /etc/hosts | grep sam
|
|
|
|
# DNS 캐시 초기화 (macOS)
|
|
sudo dscacheutil -flushcache
|
|
sudo killall -HUP mDNSResponder
|
|
|
|
# Nginx 설정 유효성 확인
|
|
docker exec sam-nginx-1 nginx -t
|
|
```
|
|
|
|
### 포트 포워딩 확인 (443 → 4443)
|
|
|
|
```bash
|
|
# 현재 규칙 확인
|
|
sudo pfctl -s rules | grep 4443
|
|
|
|
# 규칙 재적용
|
|
sudo pfctl -ef docker/nginx/ssl/pf-sam.conf
|
|
|
|
# 규칙 비활성화 (필요 시)
|
|
sudo pfctl -d
|
|
```
|
|
|
|
### DB 접속 오류
|
|
|
|
```bash
|
|
# MySQL 컨테이너 상태 확인
|
|
docker compose ps mysql
|
|
|
|
# MySQL 로그 확인
|
|
docker compose logs mysql
|
|
|
|
# 수동 접속 테스트
|
|
docker exec sam-mysql-1 mysql -u root -proot -e "SELECT 1;"
|
|
```
|
|
|
|
### React 빌드/HMR 오류
|
|
|
|
```bash
|
|
# node_modules 초기화
|
|
docker exec sam-react-1 rm -rf node_modules .next
|
|
docker exec sam-react-1 npm install
|
|
docker restart sam-react-1
|
|
```
|
|
|
|
### composer/npm 의존성 문제
|
|
|
|
```bash
|
|
# API
|
|
docker exec sam-api-1 composer install --no-cache
|
|
docker exec sam-api-1 composer dump-autoload
|
|
|
|
# MNG
|
|
docker exec sam-mng-1 composer install --no-cache
|
|
docker exec sam-mng-1 npm ci
|
|
```
|
|
|
|
---
|
|
|
|
## 13. Git 워크플로우
|
|
|
|
### 브랜치 전략
|
|
|
|
| 브랜치 | 역할 | 규칙 |
|
|
|--------|------|------|
|
|
| `main` | 배포용 | squash merge로만 올림, 직접 커밋 금지 |
|
|
| `develop` | 일상 작업 | 자유롭게 커밋 |
|
|
| `feature/*` | 대형 기능 | 선택적 사용 (1주일+ 작업) |
|
|
|
|
### 커밋 메시지 형식
|
|
|
|
```
|
|
type: 간결한 설명
|
|
|
|
type 종류:
|
|
feat: 새 기능
|
|
fix: 버그 수정
|
|
refactor: 리팩토링
|
|
docs: 문서
|
|
chore: 설정, 빌드
|
|
style: 코드 포매팅
|
|
```
|
|
|
|
### 일상 워크플로우
|
|
|
|
```bash
|
|
# 1. 작업 시작
|
|
cd api
|
|
git checkout develop
|
|
git pull origin develop
|
|
|
|
# 2. 작업 수행 + 커밋
|
|
git add <파일들>
|
|
git commit -m "feat: 수주관리 삭제 기능 추가"
|
|
|
|
# 3. 푸시
|
|
git push origin develop
|
|
```
|
|
|
|
---
|
|
|
|
## 14. 셋팅 체크리스트
|
|
|
|
아래 항목을 순서대로 확인하며 셋팅을 완료합니다.
|
|
|
|
- [ ] Docker Desktop 설치 및 실행
|
|
- [ ] Git 설치 및 Gitea 계정 발급
|
|
- [ ] 5개 저장소 클론 완료
|
|
- [ ] `/etc/hosts` 파일 수정
|
|
- [ ] mkcert 설치 + SSL 인증서 생성
|
|
- [ ] pfctl 포트 포워딩 설정
|
|
- [ ] api/.env 설정 (`.env.example` → `.env`)
|
|
- [ ] mng/.env 설정
|
|
- [ ] react/.env.local 설정
|
|
- [ ] API Key, HMAC Key 등 민감 값 입력 (팀 공유 문서 참조)
|
|
- [ ] `docker compose up -d --build` 실행
|
|
- [ ] 초기 설정 실행 (key:generate, composer install, migrate)
|
|
- [ ] `https://api.sam.kr/api-docs/index.html` 접속 확인
|
|
- [ ] `https://mng.sam.kr` 접속 확인
|
|
- [ ] `https://dev.sam.kr` 접속 확인
|
|
- [ ] DB 클라이언트로 `127.0.0.1:3306` 접속 확인
|
|
|
|
---
|
|
|
|
## 15. 참고 문서
|
|
|
|
| 문서 | 경로 | 설명 |
|
|
|------|------|------|
|
|
| 문서 인덱스 | `docs/INDEX.md` | 전체 문서 목록 |
|
|
| API 규칙 | `API_RULES.md` | API 개발 규칙 |
|
|
| 개발 명령어 | `DEV_COMMANDS.md` | 자주 쓰는 명령어 모음 |
|
|
| 품질 체크리스트 | `QUALITY_CHECKLIST.md` | 코드 품질 체크 항목 |
|
|
| 빠른 참조 | `SAM_QUICK_REFERENCE.md` | 핵심 규칙 요약 |
|
|
| SSL 가이드 | `docker/nginx/ssl/SSL_SETUP_GUIDE.md` | SSL 상세 설정 |
|
|
|
|
---
|
|
|
|
> 문의사항은 팀 슬랙 채널 또는 팀장에게 문의하세요. |