diff --git a/public/images/academy/docker-environment/10.svg b/public/images/academy/docker-environment/10.svg
new file mode 100644
index 00000000..4cbd4069
--- /dev/null
+++ b/public/images/academy/docker-environment/10.svg
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Docker 명령어 치트시트
+
+
+
+
+ 안전
+
+ 주의
+
+ 위험
+
+
+
+
+
+ 안전
+ 상태 확인
+
+ docker ps
+ 실행 중인 컨테이너 목록 확인
+ 포트, 상태, 이름 표시
+
+
+
+
+ 안전
+ 로그 확인
+
+ docker logs sam-api-1
+ 컨테이너 출력 로그 확인
+ -f 옵션으로 실시간 모니터링
+
+
+
+
+ 안전
+ 명령어 실행
+
+ docker exec sam-api-1 php artisan ...
+ 컨테이너 내부에서 명령 실행
+ artisan, composer 등
+
+
+
+
+
+ 안전
+ 캐시 클리어
+
+ docker exec sam-api-1 php artisan cache:clear
+ 설정/라우트/뷰 캐시 초기화
+ config:clear, route:clear 도 가능
+
+
+
+
+ 주의
+ 재시작
+
+ docker compose restart
+ 모든 컨테이너 재시작
+ 서비스 일시 중단 발생
+
+
+
+
+ 주의
+ 마이그레이션
+
+ docker exec sam-api-1 php artisan migrate
+ DB 스키마 변경 적용
+ 반드시 API 컨테이너에서 실행!
+
+
+
+
+
+ 주의
+ 의존성 설치
+
+ docker exec sam-api-1 composer install
+ PHP 패키지 설치/업데이트
+ pull 후 composer.json 변경 시 실행
+
+
+
+
+ 위험
+ 컨테이너 삭제
+
+ docker compose down -v
+ 컨테이너 + 볼륨 완전 삭제
+ -v 옵션: DB 데이터도 삭제됨!
+
+
+
+
+ 금지
+ 서버 빌드
+
+ npm run build (서버에서)
+ 서버 메모리 부족으로 실패 위험
+ 반드시 로컬에서 빌드 후 배포!
+
+
+
+ 자주 사용하는 조합:
+
+
+ docker exec sam-api-1 php artisan config:clear
+ 설정 변경 후
+
+
+ docker exec sam-api-1 php artisan queue:restart
+ 큐 워커 갱신
+
+
+ docker exec sam-mng-1 php artisan view:clear
+
+
+
+ docker logs -f --tail=50 sam-api-1
+
+
+ 뷰 캐시 초기화
+ 최근 50줄 실시간 로그
+
\ No newline at end of file
diff --git a/public/images/academy/docker-environment/6.svg b/public/images/academy/docker-environment/6.svg
new file mode 100644
index 00000000..d21fb1df
--- /dev/null
+++ b/public/images/academy/docker-environment/6.svg
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Nginx 도메인 → 서비스 라우팅 맵
+
+
+
+ 도메인 (외부 요청)
+ Nginx 리버스 프록시
+ 서비스 컨테이너
+
+
+
+
+ Nginx
+ :80 / :443
+
+
+
+
+ mng.sam.kr
+
+
+
+ api.sam.kr
+
+
+
+ app.sam.kr
+
+
+
+ admin.sam.kr
+
+
+
+
+
+ mng:8080
+
+
+
+
+ api:8080
+
+
+
+
+ react:3000
+
+
+
+
+ admin:8080
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 추가 서비스
+
+
+
+ phpmyadmin.sam.kr
+
+
+
+ Nginx
+
+
+
+
+ phpmyadmin:80
+
+
+
+
+
+
+
+ 범례:
+
+
+ 도메인 (외부)
+
+
+ Nginx 라우터
+
+
+ 서비스 컨테이너
+
+
+ 요청 흐름
+
+ server_name 기반 가상 호스트 라우팅 | 모든 트래픽은 Nginx를 통해 내부 컨테이너로 전달됨
+
\ No newline at end of file
diff --git a/public/images/academy/docker-environment/7.svg b/public/images/academy/docker-environment/7.svg
new file mode 100644
index 00000000..86b9b897
--- /dev/null
+++ b/public/images/academy/docker-environment/7.svg
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 볼륨 마운트 구조
+
+
+
+
+
+ 호스트 (WSL)
+
+
+
+ 소스코드
+ /home/aweso/sam/mng
+
+
+
+ 소스코드
+ /home/aweso/sam/api
+
+
+
+
+ Docker 컨테이너
+
+
+
+ sam-mng-1
+ /var/www/mng
+
+
+
+ sam-api-1
+ /var/www/api
+
+
+
+
+
+ 바인드 마운트
+
+
+
+
+ 바인드 마운트
+
+
+
+ 실시간 동기화
+
+
+
+
+ Docker 볼륨 (격리)
+
+
+
+ 잠금
+
+
+
+
+ mng_vendor
+ PHP 의존성 (vendor/)
+ 컨테이너 재시작 시 유지
+
+
+
+ api_vendor
+ PHP 의존성 (vendor/)
+ 컨테이너 재시작 시 유지
+
+
+
+ db_data
+ MySQL 데이터 파일
+ 데이터 영속성 보장
+
+
+
+ 바인드 마운트 vs Docker 볼륨:
+ 바인드 마운트: 호스트 파일 직접 연결 (소스코드 수정 즉시 반영) | 호스트에서 파일 편집 가능
+ Docker 볼륨: Docker가 관리하는 격리된 스토리지 | 성능 우수 | 컨테이너 삭제해도 데이터 유지
+
\ No newline at end of file
diff --git a/public/images/academy/docker-environment/8.svg b/public/images/academy/docker-environment/8.svg
new file mode 100644
index 00000000..a7948af1
--- /dev/null
+++ b/public/images/academy/docker-environment/8.svg
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .env 로드 흐름 다이어그램
+
+
+
+
+
+
+
+
+
+
+ .env
+ 환경 변수 정의 파일
+
+
+
+
+
+
+
+
+
+ config:cache
+ config/*.php 로 컴파일
+
+
+
+
+
+
+ env()
+ 헬퍼 함수
+ config() 통해 캐시된 값 반환
+
+
+
+
+
+
+ 애플리케이션 코드
+ config('app.name'), config('database.host')
+
+
+
+ docker-compose.yml
+ environment:
+ APP_ENV: production
+ DB_HOST: mysql
+
+
+
+
+ override
+
+
+
+ 우선순위 (높음 → 낮음)
+
+
+
+
+ 1
+ docker environment
+ 컨테이너 환경변수
+
+
+
+ 2
+ .env
+ 프로젝트 환경변수
+
+
+
+ 3
+ .env.example
+ 기본값 (fallback)
+
+
+
+ config:cache 후 .env 변경 시 cache:clear 필요!
+
+
+
+ 핵심 포인트:
+ 1. .env 파일은 Laravel 부팅 시 로드되어 config/*.php 값에 바인딩됨
+ 2. config:cache 실행 시 .env 직접 읽기 불가 → 반드시 config() 헬퍼 사용
+ 3. Docker 환경에서는 docker-compose.yml의 environment 값이 .env보다 우선 적용됨
+
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ 4
+
\ No newline at end of file
diff --git a/public/images/academy/docker-environment/9.svg b/public/images/academy/docker-environment/9.svg
new file mode 100644
index 00000000..d3cc3350
--- /dev/null
+++ b/public/images/academy/docker-environment/9.svg
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 로컬 vs 서버 환경 비교
+
+
+
+
+
+ 로컬 (Docker)
+
+
+
+ Windows WSL2 (Ubuntu)
+
+
+
+ Docker Compose
+
+
+
+ sam-nginx-1
+ :80, :443
+
+
+ sam-api-1
+ :8080
+
+
+ sam-mng-1
+ :8080
+
+
+ sam-mysql-1
+ :3306
+
+
+
+ 명령어 실행 방법:
+ docker exec sam-api-1 php artisan ...
+
+
+ 소스 경로: /home/aweso/sam/
+ 컨테이너 내부: /var/www/
+ 접속: mng.sam.kr (hosts 설정)
+
+
+
+
+ 서버 (직접 설치)
+
+
+
+ Ubuntu 22.04 LTS
+
+
+
+ 직접 설치 (apt, pecl 등)
+
+
+
+ Nginx
+ :80, :443
+
+
+ PHP 8.3-FPM
+ unix socket
+
+
+ MySQL 8.0
+ :3306
+
+
+ Node.js 20
+ PM2 관리
+
+
+
+ 명령어 실행 방법:
+ php artisan ...
+
+
+ 소스 경로: /home/webservice/
+ 직접 실행 (컨테이너 없음)
+ 접속: mng.sam.kr (DNS/공인IP)
+
+
+
+
+ 공통점
+
+ 동일한 소스 코드 (Git으로 동기화)
+ 동일한 DB 스키마 (마이그레이션 공유)
+ 동일한 .env 구조 (값만 다름)
+ 동일한 Laravel 11 + PHP 8.3
+ 동일한 Composer 의존성
+
+
+
+ 로컬 차이점
+
+ docker exec 접두사 필요
+ 바인드 마운트로 코드 공유
+ hosts 파일로 도메인 매핑
+ DB_HOST=mysql (컨테이너명)
+ npm run build 로컬 실행
+
+
+
+ 서버 차이점
+
+ 직접 명령어 실행
+ 디스크에 직접 설치
+ DNS로 도메인 연결
+ DB_HOST=127.0.0.1
+ 빌드 금지 (메모리 부족)
+
\ No newline at end of file