🎯 실전 프로젝트 실습 랩: 라라벨 기반 도커 웹사이트 완성하기
“이 과정을 마치면 나만의 4-Tier 클라우드 웹사이트가 실제로 동작합니다!”
“Hello World만 찍어보는 실습은 이제 그만!”
본 실전 랩에서는 학생들이 직접 한 줄씩 코드를 작성하며, 현대 웹 개발의 표준인 PHP 8.5 & 라라벨(Laravel), Nginx 웹서버, PostgreSQL 데이터베이스, Redis 캐시/큐를 결합하여 실제 동작하는 웹사이트(‘도커 원정대 커뮤니티 보드’)를 구축하고, 대규모 트래픽을 처리하는 수평 스케일아웃 및 MSA 분산 구조까지 완성합니다.
🌟 우리가 함께 만들 완성작 미리보기: “도커 원정대 커뮤니티 보드”
학생들이 본 실습 과정을 완주하면 로컬 브라우저(http://localhost:8080) 및 클라우드 서버에서 다음과 같은 실제 서비스가 동작하게 됩니다.
┌────────────────────────────────────────────────────────────────────────┐
│ 🧭 도커 원정대 커뮤니티 (Docker Expedition Board) │
│ [호스트 노드: was-container-02 | 처리 응답 시간: 12ms | DB: pgsql-01] │
├────────────────────────────────────────────────────────────────────────┤
│ 📝 [새 탐험일지 작성하기] │
│ 작성자: [ 도로시 ] │
│ 메시지: [ 드디어 Nginx와 PHP-FPM, PostgreSQL 컨테이너를 연결했어요! ] │
│ [ 🚀 탐험일지 등록 ] │
├────────────────────────────────────────────────────────────────────────┤
│ 📋 실시간 탐험일지 피드 (PostgreSQL 영속 저장 & Redis 비동기 알림) │
│ • #3 도로시: "FPM 5대로 스케일아웃하니 1,000명 동시 접속도 거뜬해요!" │
│ • #2 지니: "PostgreSQL 볼륨 덕분에 컨테이너를 재시작해도 글이 남아요!"│
│ • #1 이호진 교수님: "도커 원정대에 오신 모든 학생 여러분을 환영합니다!"│
└────────────────────────────────────────────────────────────────────────┘
- 주요 기능:
- 실시간 방명록 / 게시판 CRUD: PostgreSQL 데이터베이스에 영구 보존되는 게시글 등록, 조회, 삭제.
- 서빙 인스턴스 호스트네임 실시간 표시 (
gethostname()): 새로고침할 때마다 Nginx가 다수의 WAS 인스턴스(was-1,was-2,was-3…)로 요청을 균등 분산하는 모습을 화면에서 직접 육안 확인. - 비동기 큐 작업 처리: 게시글 등록 시 Redis를 통해 백그라운드 Worker 컨테이너가 이메일 알림 시뮬레이션 및 데이터 집계를 비동기 처리.
- 무중단 핫리로드 개발 환경: 내 PC의 소스코드를 고치고 브라우저를 새로고침하면 컨테이너 재빌드 없이 1초 만에 반영.
📚 실습 랩 6단계 커리큘럼 구성
각 랩은 복사해서 바로 실행할 수 있는 완성형 코드(Dockerfile, compose.yaml, nginx.conf, web.php 등)와 함께, 왜 그렇게 작성해야 하는지에 대한 친절한 엔지니어링 원리 해설을 담고 있습니다.
flowchart LR
L1["Lab 01<br>보안 Dockerfile"] --> L2["Lab 02<br>3-Tier 컴포즈"]
L2 --> L3["Lab 03<br>PostgreSQL CRUD"]
L3 --> L4["Lab 04<br>Redis 큐 워커"]
L4 --> L5["Lab 05<br>WAS 스케일아웃"]
L5 --> L6["Lab 06<br>MSA & 프로덕션"]
| 실습 랩 | 실습 주제 | 핵심 학습 내용 및 구현 산출물 | 바로가기 |
|---|---|---|---|
| Lab 01 | PHP 8.5 라라벨 보안 Dockerfile 제작 | • 최신 PHP 8.5 알파인 베이스 & non-root 격리 • 멀티스테이지 빌드로 800MB ➔ 50MB 초경량화 • pdo_pgsql, redis, OPcache 필수 모듈 컴파일 |
Lab 01 시작하기 |
| Lab 02 | Nginx + PHP-FPM + PostgreSQL 3-Tier 컴포즈 | • Nginx FastCGI 프록시 설정 (fastcgi_pass was:9000)• compose.yaml 단 한 줄로 전체 인프라 기동• 로컬 소스코드 바인드 마운트 핫리로드 구축 |
Lab 02 시작하기 |
| Lab 03 | PostgreSQL 연동 CRUD 웹앱 완성 | • PostgreSQL 컨테이너 데이터 볼륨 영속화 • php artisan migrate 데이터베이스 스키마 생성• 블레이드 템플릿과 Eloquent ORM 방명록 완성 |
Lab 03 시작하기 |
| Lab 04 | Redis 캐시 & 비동기 큐 워커 분리 | • 동일 이미지 기반 웹 WAS vs 큐 워커 컨테이너 분리 • Redis 세션 클러스터링 및 비동기 작업 큐 연동 • 게시글 등록 시 백그라운드 이벤트 비동기 처리 |
Lab 04 시작하기 |
| Lab 05 | Nginx 부하분산 & WAS 5대 수평 스케일아웃 | • docker compose up -d --scale was=5 수평 증설• Nginx Upstream 로드밸런싱 & 호스트네임 시각화 • ApacheBench 동시 1,000명 부하 테스트 성능 입증 |
Lab 05 시작하기 |
| Lab 06 | 모놀리스에서 MSA 분리 & 프로덕션 배포 | • Nginx Gateway ↔ Auth 서비스 ↔ Post 서비스 분리 • 서비스별 독립 PostgreSQL 데이터베이스(Database per Service) • 실제 리눅스 클라우드 서버에 도메인 및 HTTPS 배포 |
Lab 06 시작하기 |
🛠️ 실습 전 준비사항
- Docker Desktop 또는 Docker Engine 24.0+ 설치 완료
- Docker Compose V2 (
docker compose version확인) - 텍스트 에디터 (VS Code 권장)
- 본 실습은 호스트 PC에 PHP, Composer, PostgreSQL을 일절 설치할 필요가 없습니다. 모든 도구와 런타임은 오직 도커 컨테이너 내부에서 완벽하게 구동됩니다!
👉 준비되셨다면 Lab 01. PHP 8.5 라라벨 보안 Dockerfile 제작부터 본격적으로 시작해 보겠습니다!
서브목차