# Part 9: 프로덕션 레벨 API와 Docker 용어집 ## 핵심 용어 | 용어 (Term) | 설명 (Description) | | --- | --- | | **프로젝트 구조화 (Project Structuring)** | 소프트웨어 프로젝트의 코드와 파일들을 기능, 역할, 또는 모듈별로 논리적인 폴더 및 파일 구조로 정리하는 작업입니다. 코드의 가독성, 유지보수성, 재사용성을 높이고 팀 협업을 용이하게 합니다. | | **관심사 분리 (Separation of Concerns, SoC)** | 컴퓨터 프로그램을 서로 다른 역할을 수행하는 독립적인 부분(모듈, 계층 등)으로 나누는 설계 원칙입니다. 각 부분은 자신만의 책임(관심사)에 집중하여, 시스템 전체의 복잡도를 낮추고 유연성과 확장성을 향상시킵니다. FastAPI 프로젝트에서는 라우터, 스키마, 설정 파일 등으로 분리할 수 있습니다. | | **`APIRouter` (FastAPI)** | FastAPI에서 API 엔드포인트들을 그룹화하고 모듈화하는 데 사용되는 클래스입니다. 대규모 애플리케이션에서 특정 기능 또는 리소스와 관련된 경로들을 별도의 파일로 분리하여 관리할 수 있게 해줍니다. `main.py`에서는 `app.include_router()`를 통해 이러한 라우터들을 통합합니다. (비유: 레스토랑의 '한식 코너', '중식 코너') | | **의존성 주입 (Dependency Injection, DI)** | 객체(클래스 인스턴스)가 내부에서 직접 다른 객체(의존성)를 생성하는 대신, 외부에서 생성된 객체를 전달받아 사용하는 디자인 패턴입니다. 코드 간의 결합도를 낮추고, 유연성, 테스트 용이성을 높입니다. FastAPI는 경로 연산 함수 매개변수에 타입 힌트를 통해 의존성을 선언하면 자동으로 주입해주는 강력한 DI 시스템을 갖추고 있습니다. | | **Docker** | 애플리케이션과 그 실행에 필요한 모든 환경(코드, 라이브러리, 시스템 도구, 설정 등)을 '컨테이너'라는 격리된 공간에 패키징하여, 어떤 환경에서든 동일하게 실행될 수 있도록 하는 오픈소스 플랫폼입니다. "제 컴퓨터에서는 되는데요..." 문제를 해결하고, 개발, 배포, 운영의 효율성을 크게 향상시킵니다. (비유: 어디서든 똑같은 맛을 내는 밀키트) | | **컨테이너 (Container)** | Docker의 핵심 개념으로, 애플리케이션과 그 종속성들을 격리된 환경에서 실행할 수 있도록 패키징한 단위입니다. 호스트 OS의 커널을 공유하면서도 독립적인 파일 시스템, 프로세스 공간 등을 가집니다. 이미지로부터 생성되며, 가볍고 빠릅니다. | | **이미지 (Image)** | Docker 컨테이너를 생성하기 위한 읽기 전용 템플릿입니다. 애플리케이션 코드, 런타임, 시스템 도구, 라이브러리 및 설정 등 컨테이너 실행에 필요한 모든 것을 포함합니다. `Dockerfile`이라는 스크립트에 정의된 지침에 따라 빌드됩니다. (비유: 밀키트의 레시피와 재료가 담긴 포장) | | **`Dockerfile`** | Docker 이미지를 빌드하기 위한 지침(명령어)들을 순서대로 기술한 텍스트 파일입니다. 베이스 이미지 선택, 작업 디렉토리 설정, 파일 복사, 의존성 설치, 실행 명령어 지정 등의 작업을 정의합니다. 이 파일을 통해 이미지를 재현 가능하고 자동화된 방식으로 생성할 수 있습니다. (비유: 밀키트 제조 레시피) | | **Docker Compose** | 여러 개의 Docker 컨테이너로 구성된 애플리케이션을 정의하고 실행하기 위한 도구입니다. `docker-compose.yml`이라는 YAML 파일에 각 서비스(컨테이너)의 설정(이미지, 포트, 볼륨, 네트워크 등)을 기술하고, 단일 명령(`docker-compose up`)으로 모든 서비스를 한 번에 시작, 중지, 관리할 수 있습니다. (비유: 프랜차이즈 매장 동시 오픈 계획서) | --- *이 용어집은 `geumdo_docs/ai lecture/part_9_production_ready_api.md` 파일 내용을 기반으로 작성되었습니다.*