celina의 이것저것

[Spring AI] 나만의 Chat 서비스 만들기3 (Docker 환경 구축, Open Web UI RAG 활용) 본문

Project/MSA JAVA 3기

[Spring AI] 나만의 Chat 서비스 만들기3 (Docker 환경 구축, Open Web UI RAG 활용)

celinayk 2025. 12. 2. 00:26
반응형

이제 직접 만든 Spring API와 openwebui를 활용하여 실제로 웹으로 접속해서 나만의 챗봇을 만들것이다.

이번에 구현할 사항은 다음과 같다.

 

1. Docker 환경 구성

2. Open Web UI 설치 및 연결

3. RAG 기능 구현

 

 


1. Docker 환경 구성

프로젝트에서 제공하는 서비스들은 전부 docker로 만들고 관리할 것이다.

  1. postgres: RAG용 벡터 저장소
  2. ollama: LLM 백엔드 
  3. spring-api: 구현한 API
  4. open-webui: 사용자 인터페이스
services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    networks:
      - chatbot-network
    restart: unless-stopped

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    volumes:
      - open-webui_data:/app/backend/data
    ports:
      - "3000:8080"
    environment:
      OLLAMA_BASE_URL: http://ollama:11434
      OPENAI_API_BASE_URL: http://spring-api:8080/v1
      OPENAI_API_KEY: dummy
      WEBUI_SECRET_KEY: secret-key-change-in-production
    depends_on:
      - ollama
      - spring-api
    networks:
      - chatbot-network
    restart: unless-stopped
  postgres:
    image: pgvector/pgvector:pg16
    container_name: postgres
    environment:
      POSTGRES_DB: teamsparta_vector
      POSTGRES_USER: 비밀
      POSTGRES_PASSWORD: 비밀
      POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=en_US.UTF-8"
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    command: postgres -c shared_preload_libraries=vector
    networks:
      - chatbot-network
    restart: unless-stopped
  spring-api:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: spring-api
    ports:
      - "8080:8080"
    environment:
      SPRING_PROFILES_ACTIVE: docker
      OLLAMA_BASE_URL: http://ollama:11434
      ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
    depends_on:
      - ollama
      - postgres
    networks:
      - chatbot-network
    restart: unless-stopped


volumes:
  ollama_data:
  open-webui_data:
  postgres_data:

networks:
  chatbot-network:
    driver: bridge

 

여기서 조금 어려웠던점은 내가 만든 spring코드를 도커로 띄운다는 점이다.

다른  PostgreSQL, Ollama, Open Web UI는 이미지를 pull해서 그냥 쓰면 되는데 

나의 Spring Boot 애플리케이션은 내가 직접 인텔리제이에서 만든건데 어떻게 컨테이너 이미지로 띄우지? 라는점 이다.
  ㄴ Dockerfile을 이용하자! 하나 배웠다!!!!

 

 

두번째는 application-docker.yml이 왜 필요한가?

로컬에서 올라마를 실행할때랑 도커로 실행할때 다르다. 즉  Docker 환경에 맞는 설정을 해주는 파일이다.

application.yml에서 올라마모델의 주소는 이렇다.
  base-url: http://localhost:11434

 

 spring-api 컨테이너가 http://localhost:11434로 요청하면
  → 자기 자신(spring-api 컨테이너) 내부를 찾음 ❌
  → ollama 컨테이너는 완전히 다른 곳에 있음!

  올바른 주소: http://ollama:11434
  - ollama는 컨테이너 이름
  - Docker가 자동으로 IP 주소로 변환해줌

 

아직은 좀 어려운것같다...!! 그래서 도커관련해서도 계속 공부가 필요한것같다

 

 


2. Open Web UI 설치 및 연결

 

내가 기존에 만든 올라마 모델과, 클로드 모델을 선택하여 이렇게 질문을 하고 답변을 받을 수 있다.

 


3. RAG 기능 구현

문서를 바탕으로 답을 하고, 문서에 없으면 답을 하지 않는다.

Comments