티스토리 뷰

반응형

로컬 LLM + RAG 기반 AI 채팅봇 만들기

6.1 백엔드 Docker 컨테이너화 및 배포

이제 Ktor 기반의 백엔드 서버를 Docker 컨테이너로 패키징하여 배포 가능하도록 설정합니다.
Docker를 활용하면 환경에 관계없이 쉽게 배포하고, 운영 중인 서버를 일관성 있게 유지할 수 있습니다.


1) Docker를 사용하는 이유

✅ Docker 배포의 장점

  • 환경 일관성 유지 → 운영 체제(OS)와 관계없이 동일한 환경에서 실행 가능
  • 간편한 배포 → 컨테이너 이미지를 사용하면 배포가 용이
  • 확장성 향상 → 여러 컨테이너를 병렬 실행하여 성능 확장 가능

2) Docker 설치 및 기본 설정

✅ ① Docker 설치

sudo apt update
sudo apt install docker.io
  • Docker 버전 확인
docker -v

📌 예상 결과:

Docker version 24.0.5, build 123456

3) Dockerfile 작성 (Ktor 애플리케이션 컨테이너화)

✅ ① 프로젝트 루트 디렉토리에 Dockerfile 생성

# 1. JDK 17을 포함한 기본 이미지 사용
FROM eclipse-temurin:17-jdk

# 2. 작업 디렉토리 생성
WORKDIR /app

# 3. JAR 파일을 컨테이너 내부로 복사
COPY build/libs/ktor-chatbot.jar /app/ktor-chatbot.jar

# 4. 컨테이너 실행 시 JAR 파일 실행
CMD ["java", "-jar", "/app/ktor-chatbot.jar"]

# 5. Ktor 서버의 기본 포트 8080을 컨테이너에서 노출
EXPOSE 8080

4) Docker 빌드 및 실행

✅ ① JAR 파일 빌드 (ktor-chatbot.jar 생성)

./gradlew build

✅ ② Docker 이미지 빌드

docker build -t ktor-chatbot .

📌 예상 결과:

Successfully built abc12345
Successfully tagged ktor-chatbot:latest

✅ ③ Docker 컨테이너 실행

docker run -p 8080:8080 --name chatbot-container ktor-chatbot

✅ ④ 실행 확인

curl -X GET "http://localhost:8080/api/chat/sessions/test"

📌 예상 결과:

[]

5) Docker Compose 설정 (PostgreSQL 포함 컨테이너 실행)

Ktor 서버와 PostgreSQL을 함께 실행하기 위해 docker-compose.yml을 설정합니다.

✅ ① docker-compose.yml 파일 생성

version: '3.8'

services:
  ktor-chatbot:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - postgres
    environment:
      DATABASE_URL: "jdbc:postgresql://postgres:5432/chatbot_db"
      DATABASE_USER: "postgres"
      DATABASE_PASSWORD: "password"

  postgres:
    image: postgres:15
    restart: always
    environment:
      POSTGRES_DB: chatbot_db
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

6) 컨테이너 실행 및 테스트

✅ ① Docker Compose 실행

docker-compose up -d

✅ ② 실행된 컨테이너 확인

docker ps

📌 예상 결과:

CONTAINER ID   IMAGE          PORTS                    NAMES
abc12345       ktor-chatbot   0.0.0.0:8080->8080/tcp   chatbot-container
xyz67890       postgres       0.0.0.0:5432->5432/tcp   chatbot-db

7) 컨테이너 최적화 및 유지보수

✅ ① 컨테이너 자동 재시작 설정

restart: always

✅ ② 로그 확인 및 디버깅

docker logs chatbot-container

✅ ③ 컨테이너 중지 및 삭제

docker-compose down

8) Docker 기반 배포 요약

단계 실행 명령어

JAR 파일 빌드 ./gradlew build
Docker 이미지 빌드 docker build -t ktor-chatbot .
Docker 컨테이너 실행 docker run -p 8080:8080 ktor-chatbot
PostgreSQL 포함 실행 docker-compose up -d
실행된 컨테이너 확인 docker ps

9) 다음 단계

이제 Ktor 백엔드를 Docker 컨테이너화하고, PostgreSQL과 함께 실행할 수 있도록 설정했습니다.
다음으로 6.2 프론트엔드 배포 (Vercel) 을 진행하여
SvelteKit 기반 프론트엔드를 Vercel을 이용해 배포하겠습니다! 🚀

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함
반응형