섹션 7-2: Packaging the AI/ LLM Application (28~31)

쌀과자AI·2025년 8월 26일

📚 강의 요약 (섹션 7-2: Docker를 활용한 LLMOps)

1. Docker 개요

  • Docker: 애플리케이션을 컨테이너로 패키징, 배포, 실행할 수 있는 오픈소스 플랫폼 .
  • 컨테이너(Container): 코드, 런타임, 라이브러리, 시스템 설정 등 실행에 필요한 모든 것을 포함하는 독립적이고 경량 실행 단위.
  • 핵심 장점:
    • 환경 간 일관성 확보 (개발 → 테스트 → 운영)
    • 이식성확장성 향상
    • 리소스 효율적 활용 및 반복 가능한 배포 가능

2. 주요 개념

  • Image: 읽기 전용 템플릿, 앱과 의존성 포함 → 컨테이너 생성의 기반
  • Container: 이미지의 실행 인스턴스, 다른 프로세스와 격리 실행
  • Dockerfile: 이미지 빌드 지침을 담은 텍스트 파일 (베이스 이미지, 의존성 설치, 실행 단계 포함)
  • Docker Compose: 다중 컨테이너 애플리케이션 정의/실행 도구 (YAML 기반)
  • Docker Hub: Docker 이미지 공유·배포를 위한 클라우드 레지스트리

3. 기본 명령어

  • docker build : Dockerfile 기반 이미지 빌드
  • docker run : 이미지 기반 컨테이너 실행
  • docker ps : 실행 중인 컨테이너 확인
  • docker stop / start : 컨테이너 중지·재시작
  • docker rm / rmi : 컨테이너 / 이미지 삭제
  • docker pull / push : 이미지 다운로드 / 업로드
  • docker exec : 실행 중 컨테이너 안에서 명령 실행

4. 개발 워크플로우와 통합

  • Docker는 CI/CD 파이프라인에 쉽게 통합 가능
  • GitHub 등 소스 저장소에서 자동 빌드 → Docker Hub 업로드 → Kubernetes, Docker Swarm 등으로 오케스트레이션

5. 실습 내용

(1) Docker 설치

  • docker.com에서 OS에 맞는 Docker Desktop 설치
  • Windows: WSL2 필요, Mac은 칩셋(인텔/ARM)에 맞게 다운로드

(2) Docker Quickstart

  • 예제: nginx 이미지 Pull & Run
    • docker pull nginx → 이미지 가져오기
    • docker run -d -p 8080:80 nginx → 컨테이너 실행 및 포트 매핑
    • localhost:8080 접속 시 Nginx Welcome 페이지 확인
  • Dockerfile 작성 및 커스텀 빌드 실습:
    • Base Image: nginx
    • index.html 파일 복사 → 커스텀 웹 페이지 표시
    • docker build -t custom-nginx . → 이미지 빌드
    • docker run -d -p 8080:80 custom-nginx → 실행

(3) LLM 애플리케이션 패키징

  • 실습 프로젝트 (Project_1_Open_AI_Assistant)
    • Base Image: python:3.10
    • 소스코드(main.py, config.py), 라이브러리(requirements.txt) 복사
    • pip install -r requirements.txt 실행
    • CMD ["python", "main.py"] 지정
    • FastAPI 서버를 포트 80에서 실행 → 호스트와 포트 매핑 (8080:80)
  • 실행 확인:
    • localhost:8080 → “Welcome to ChatGPT AI Application” 확인
    • /docs → FastAPI 문서 UI 접근
    • POST 요청 테스트 시 OpenAI API를 호출하여 응답 반환

⚠️ 주의사항: config.py에 API Key가 직접 포함되어 있어 보안 위험 → Docker Hub에 업로드는 권장하지 않음


✅ 핵심 포인트 정리

  1. Docker는 LLMOps에서 애플리케이션 배포의 핵심 도구 → 환경 일관성과 반복 가능성 보장
  2. Dockerfile 작성 → 이미지 빌드 → 컨테이너 실행 → Hub 공유의 전체 워크플로우 습득
  3. 실습 프로젝트를 통해 FastAPI 기반 LLM 애플리케이션을 Docker로 패키징 및 실행 성공
  4. 보안 고려 필요: API Key 같은 민감 정보는 이미지에 직접 포함하지 않아야 함

📑 문제 세트 (Docker & LLMOps 기반)

🔹 난이도 하 (기본 개념 확인)

문제 1

Docker 컨테이너(Container)에 대한 설명으로 옳은 것은 무엇인가?

① 가상머신과 동일하게 독립된 운영체제를 포함한다.

② 애플리케이션 실행에 필요한 코드, 라이브러리, 설정 등을 포함한다.

③ 운영체제 전체를 복제하여 실행하기 때문에 무겁다.

④ 실행 시마다 새로운 가상 하드웨어를 요구한다.

정답:

해설: 컨테이너는 애플리케이션 실행에 필요한 모든 요소를 포함하는 경량 실행 단위이다. 가상머신처럼 전체 운영체제를 포함하지 않으므로 효율적이다 .


문제 2

Dockerfile의 역할로 가장 적절한 것은?

① Docker Hub에 이미지를 업로드하는 도구

② 컨테이너 실행 상태를 관리하는 도구

③ 이미지 빌드 지침을 담은 텍스트 파일

④ 컨테이너 간 네트워크를 연결하는 설정

정답:

해설: Dockerfile은 베이스 이미지, 의존성 설치, 실행 명령 등을 정의하여 Docker 이미지 빌드를 자동화한다 .


🔹 난이도 중 (실습 및 활용 중심)

문제 3

다음 중 Docker 기본 명령어와 설명이 옳지 않은 것은?

① docker build : Dockerfile을 기반으로 이미지 생성

② docker run : 이미지에서 컨테이너 실행

③ docker ps : 실행 중인 컨테이너 목록 확인

④ docker copy : 이미지를 Docker Hub로 업로드

정답:

해설: 이미지를 Docker Hub로 업로드할 때는 docker push를 사용한다. docker copy라는 명령어는 존재하지 않는다 .


문제 4

FastAPI 기반 LLM 애플리케이션을 Docker로 배포할 때 올바른 순서는?

① pip install → main.py 실행 → requirements.txt 복사

② 베이스 이미지 지정 → 파일 복사 → 라이브러리 설치 → CMD 실행

③ 라이브러리 설치 → requirements.txt 복사 → Docker Hub push

④ Dockerfile 작성 → requirements.txt 삭제 → 이미지 실행

정답:

해설: 올바른 Dockerfile 작성 순서는 FROM → COPY → RUN pip install -r requirements.txt → CMD ["python", "main.py"] → EXPOSE 80 순으로 구성된다 .


🔹 난이도 상 (심화/응용)

문제 5

다음 상황에서 가장 적절한 Docker 활용 방안은 무엇인가?

상황:

User는 FastAPI 기반 LLM 애플리케이션을 배포하려 한다. 이 애플리케이션은 main.py, config.py, requirements.txt 파일을 포함하고 있으며, 운영 환경과 개발 환경의 라이브러리 버전 차이로 문제가 발생하고 있다.

① 운영 서버와 개발 서버의 Python 버전을 수동으로 동일하게 맞춘다.

② 모든 의존성을 requirements.txt에 기록하고, Dockerfile에서 설치하여 동일한 환경을 구성한다.

③ config.py 파일에 API Key를 하드코딩하여 그대로 Docker Hub에 업로드한다.

④ VM(가상머신)을 새로 설치하여 운영 환경을 동일하게 맞춘다.

정답:

해설: Dockerfile을 통해 Python 버전과 라이브러리를 명시하고, requirements.txt 기반으로 설치하면 환경 차이 문제를 해결할 수 있다. 단, API Key를 직접 포함하는 것은 보안상 위험하다 .


문제 6

Docker Hub에 개인 프로젝트 이미지를 업로드하려고 한다. 이때 보안상 권장되지 않는 방법은 무엇인가?

① docker login 후 사용자 계정으로 이미지 태깅

② docker push를 통해 개인 레포지토리에 업로드

③ config.py에 포함된 API Key를 그대로 이미지에 저장 후 업로드

④ 비공개(Private) 레포지토리로 설정하여 접근 제한

정답:

해설: API Key 같은 민감 정보가 이미지에 포함되면 Docker Hub에 업로드될 때 유출 위험이 크다. 따라서 반드시 환경 변수나 Secret 관리 도구를 사용해야 한다 .

profile
AI에 관심이 많은 23살 대학생입니다.

0개의 댓글