feat: [academy] Docker 환경이해 교육 페이지 추가

- AcademyController에 dockerEnvironment() 메서드 추가
- academy 라우트 그룹에 docker-environment 라우트 추가
- 6개 섹션 Blade 뷰 작성 (Docker 소개, 아키텍처, 서비스 상세, 볼륨, .env, 명령어)
- academy-glossary에 docker-environment 도메인 용어 25개 추가
This commit is contained in:
김보곤
2026-02-23 10:49:23 +09:00
parent f652017688
commit 72d699ea18
4 changed files with 1182 additions and 1 deletions

View File

@@ -43,4 +43,13 @@ public function frontendDev(Request $request): View|Response
return view('academy.frontend-dev');
}
public function dockerEnvironment(Request $request): View|Response
{
if ($request->header('HX-Request')) {
return response('', 200)->header('HX-Redirect', route('academy.docker-environment'));
}
return view('academy.docker-environment');
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{{--
Academy Glossary Tooltip Component
@include('components.academy-glossary', ['domain' => 'fire-shutter'])
도메인: fire-shutter | it-planning | server-knowledge | frontend-dev
도메인: fire-shutter | it-planning | server-knowledge | frontend-dev | docker-environment
--}}
@push('styles')
@@ -198,6 +198,34 @@
"Promise": "비동기 작업의 완료 또는 실패를 나타내는 객체. then/catch로 결과를 처리한다.",
"가상 DOM": "실제 DOM의 가벼운 복사본. React가 변경 사항을 비교하여 최소한의 실제 DOM만 업데이트한다."
};
@elseif($domain === 'docker-environment')
window.__GLOSSARY_DATA['docker-environment'] = {
"Docker": "애플리케이션을 컨테이너로 패키징하여 어디서나 동일하게 실행할 수 있게 하는 플랫폼.",
"컨테이너": "앱과 실행 환경을 격리하여 패키징한 가상화 단위. VM보다 가볍고 빠르다.",
"이미지": "컨테이너를 만들기 위한 읽기 전용 템플릿. Dockerfile로 정의하며 레이어 구조로 되어 있다.",
"Docker Compose": "여러 컨테이너를 하나의 YAML 파일로 정의하고 함께 실행하는 도구.",
"Dockerfile": "Docker 이미지를 빌드하기 위한 명령어 모음 파일. FROM, RUN, COPY 등의 명령으로 구성된다.",
"볼륨": "컨테이너 데이터를 영구적으로 저장하는 Docker 관리 저장소. 컨테이너 삭제 후에도 데이터가 유지된다.",
"바인드 마운트": "호스트의 특정 경로를 컨테이너에 직접 연결하는 방식. 소스 코드 실시간 동기화에 사용한다.",
"브리지 네트워크": "같은 Docker 네트워크에 속한 컨테이너끼리 이름으로 통신할 수 있게 하는 기본 네트워크 드라이버.",
"Supervisor": "여러 프로세스를 동시에 관리·감시하는 도구. 프로세스 비정상 종료 시 자동 재시작한다.",
"PHP-FPM": "PHP FastCGI Process Manager. PHP 스크립트를 처리하는 프로세스 관리자.",
"Nginx": "고성능 웹 서버. 리버스 프록시로 도메인별 요청을 적절한 서비스로 라우팅한다.",
"리버스 프록시": "클라이언트 요청을 받아 내부 서비스로 전달하는 중간 서버. Nginx가 대표적이다.",
".env": "환경 변수를 저장하는 설정 파일. DB 접속 정보, API 키 등 환경마다 달라지는 값을 관리한다.",
"환경 변수": "운영체제나 앱에 전달되는 설정값. 코드 변경 없이 동작을 바꿀 수 있다.",
"Queue Worker": "백그라운드에서 비동기 작업(메일 발송, 파일 처리 등)을 순차적으로 처리하는 프로세스.",
"Scheduler": "정해진 시간에 자동으로 명령을 실행하는 Laravel의 크론 작업 관리자.",
"마이그레이션": "데이터베이스 테이블 구조를 코드로 관리하고 버전별로 적용·롤백하는 Laravel 기능.",
"OOM": "Out of Memory. 메모리 부족으로 프로세스가 강제 종료되는 현상.",
"포트": "네트워크 통신에서 서비스를 구분하는 번호. HTTP는 80, MySQL은 3306을 사용한다.",
"config:clear": "Laravel이 캐시한 설정을 초기화하는 명령. .env 변경 후 반드시 실행해야 한다.",
"docker exec": "실행 중인 컨테이너 안에서 명령을 실행하는 Docker 명령어.",
"WSL": "Windows Subsystem for Linux. Windows에서 리눅스 환경을 실행하는 호환 계층.",
"samnet": "SAM 프로젝트의 Docker 브리지 네트워크. 모든 컨테이너가 이 네트워크로 통신한다.",
"Next.js": "React 기반의 풀스택 프레임워크. 서버 사이드 렌더링(SSR)을 지원한다.",
"SSR": "Server-Side Rendering. 서버에서 HTML을 생성하여 브라우저에 전달하는 방식."
};
@elseif($domain === 'server-knowledge')
window.__GLOSSARY_DATA['server-knowledge'] = {
"Nginx": "고성능 웹 서버 소프트웨어. 리버스 프록시, 로드 밸런싱 등을 처리한다.",

View File

@@ -1465,6 +1465,7 @@
Route::get('/it-planning', [\App\Http\Controllers\AcademyController::class, 'itPlanning'])->name('it-planning');
Route::get('/server-knowledge', [\App\Http\Controllers\AcademyController::class, 'serverKnowledge'])->name('server-knowledge');
Route::get('/frontend-dev', [\App\Http\Controllers\AcademyController::class, 'frontendDev'])->name('frontend-dev');
Route::get('/docker-environment', [\App\Http\Controllers\AcademyController::class, 'dockerEnvironment'])->name('docker-environment');
});
// SAM E-Sign - 인증 필요