성장일지 3기 3차

이태형·2025년 4월 12일

Growth Log

목록 보기
15/18

그로스 로그가 이제 클럽 활동을 진행해서, 저는 예승님의 핸디홈, 경보님의 도커&쿠버네티스를 신청했어요!
스터디 주차별 주제 내용을 간단히 예습해보기로 했습니다!
어떤 용어인지, 어떤 기술인지에 대한 간단한 내용을 정리해두면 얘기들을 때 이해하기 편할 거 같습니다.

우선 핸디홈 주제로 MCP 라는 내용이 많이 있었는데 MCP 란?

MCP

  • Anthropic이 오픈소스로 공개
  • AI 에 다양한 프로그램을 쉽게 연결해서 쓸 수 있도록 만든 표준 통신 협약
  • Model Context Protocol 의 약자로 일종의 프로토콜을 의미
  • 애플리케이션이 LLM에 컨텍스트를 제공하는 방법을 표준화하는 개방형 프로토콜
  • AI 모델을 다양한 데이터 소스와 도구에 연결하는 표준화된 방법을 제공
  • 본질적으로 호스트 애플리케이션이 여러 서버에 연결할 수 있는 클라이언트-서버(CS) 아키텍처

즉, LLM 모델이 외부 데이터와 시스템을 원할하게 통신하고 정보를 활용할 수 있는 일종의 연결 프토로콜을 의미하는 거 같습니다.
AI모델이 다양한 데이터 소스와 연결되어 다양한 데이터 소스와 연결되어 실시간으로 정보를 주고 받을 수 있도록 설계된 프로토콜이며, 기존 AI모델이 내부적으로 훈련된 데이터만을 기반으로 작동하는 경우가 많았고, 실시간 정보 활용과 동적 컨텍스트 유지가 필수적인 환경에서 한계를 보여왔기에 MCP라는 것이 새로 나왔습니다.

MCP 특징

  • 개방형 표준
    - MCP는 오픈소스로 공개되어 있어 누구나 자유롭게 사용하고 개선 가능, 어떤 AI 시스템에서도 사용 가능
  • 양방향 연결
    - AI 모델과 데이터 소스 간의 양방향 통신을 지원, AI 모델과 데이터 소스가 지속적으로 연결된 상태에서 서로 정보를 주고 받을 수 있음
  • 범용성과 표준화
    - 다양한 데이터 소스와 도구를 하나의 표준 프로토콜로 연결 가능, 개발자는 각 데이터 소스마다 별도의 커넥터를 유지할 필요 없이 단일 프로토콜을 통해 연결 가능
  • 보안 및 신뢰성
    - 개인 정보 보호화 데이터 무결성 유지 가능

MCP 구성 요소

  • MCP 호스트 : MCP를 통해 데이터에 액세스하려는 Claude Desktop, IDE 또는 AI 도구와 같은 프로그램
  • MCP 클라이언트 : 서버와 1:1 연결을 유지하는 프로토콜 클라이언트
  • MCP 서버 : 표준화된 모델 컨테스트 프로토콜을 통해 각각 특정 기능을 노출하는 경량 프로그램
  • 로컬 데이터 소스 : MCP 서버가 안전하게 액세스 할 수 있는 컴퓨터의 파일, 데이터베이스 및 서비스
  • 원격 서비스 : MCP 서버가 연결할 수 있는 인터넷(ex: API)을 통해 사용 가능한 외부 시스템

저는 Spring boot 로 백엔드 개발을 하고 있어서 Spring 과 관련된 라이브러리를 확인해보니

  • spring-ai-core
  • spring-ai-anthropic-spring-boot-starter
  • spring-ai-mcp-client-spring-boot-starter
    와 같은 MCP 를 활용한 AI 모델과 통신할 수 있는 라이브러리가 존재했습니다.

Spring Boot MCP

  1. 외부 AI 모델과 연결 (위 라이브러리 사용, 외부 AI모델과 연결)
  2. 사용자 입력을 받는 Controller 생성
  3. 사용자 요청
  4. 요청 값을 외부 연결된 AI 모델로 전달
  5. AI 응답을 사용자에게 전달

위와 같은 순서로 사용자에 대한 요청을 AI 모델이 대신 응답하여 전달하는 방식으로 손쉽게 AI 모델을 사용할 수 있습니다.

이제 도커&쿠버네티스 에 대해서 살펴보겠습니다.

도커란

  • 리눅스 컨테이너에 리눅스 애플리케이션을 프로세스 격리기술을 이용하여 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트

라고 내용이 나오는데, 그러면 컨테이너란건 무엇일까??

컨테이너

  • 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싸고, 실해중 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증
  • 가상 머신과 달리 별도의 운영체제를 요구하거나 포함하지 않고, 커널의 기능에 의존하며 리소스 격리 및 격리된 이름공간을 사용하여 운영체제에 대한 응용 프로그램의 관점을 격리 시킴
  • 컨테이너를 사용해서 리소스를 격리시켜 자시만의 프로세스 ID공간, 파일 시스템 구조, 네트워크 인터페이스를 갖고서 운영 체제에 대해 거의 완전히 개인화된 관점을 가짐
  • 여러 개의 컨테이너들은 동일한 커널은 공유하지만, 각 컨테이너는 CPU, 메모리, 입출력과 같이 오직 정의된 양의 리소스에만 제한을 받음

그럼 위와 같은 내용으로 보면, 도커는 컨테이너를 관리하는 프로젝트이고, 그 안에는 컨테이너 가상화라는 기술이 들어있는 것 같다.
그러면 쿠버네티스는 무엇일까??

쿠버네티스

  • 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리하기 위한 컨테이너 오케스트레이션 플랫폼
  • 애플리케이션을 더 쉽게 배포하고 관리할 수 있게하고, 자동 스케일링 및 장애 복구를 처리하는 등의 작업을 처리하여 시스템 안정성을 높임

그러면 쿠버네티스는 도커로 컨테이너화된 애플리케이션을 스케일 아웃이나 스케일 인을 통해 자동으로 배포하는 플랫폼으로 이해하면 될 것 같다.

그러면 도커는 이미지를 기반으로 실행되고, 이미지를 손쉽게 다운받아서 사용할 수 있는 기능을 제공한다고 봤는데, 이미지란 무엇일까??

도커 이미지

  • 컨테이너를 만들기 위한 정적인 템플릿, 말 그대로 실행 가능한 앱을 만들기 위한 모든 것(앱 + 라이브러리 + OS + 설정)들이 압축된 스냅샷
  • 실행 가능한 앱을 배포/공유하기 위한 템플릿, 이미지 기반으로 실행된 독립된 인스턴스가 컨테이너
  • Dockerfile 로 각 명령어를 입력해서 이미지를 생성, 여러 레이어로 구성됨

이렇게 내용을 찾았는데, 이미지는 말 그대로 애플리케이션이 독립된 환경으로 실행될 수 있도록 만든 템플릿이고, 이걸 실행한게 컨테이너라고 이해를 하면 될 것 같다.
간단한게 이미지를 만드는 방법을 GPT 한테 물어봤다.

# 1단계: OpenJDK 기반 이미지 사용
FROM openjdk:17-jdk-slim

# 2단계: 작업 디렉토리 설정
WORKDIR /app

# 3단계: jar 파일 복사
COPY build/libs/demo-0.0.1-SNAPSHOT.jar app.jar

# 4단계: 실행 명령어
ENTRYPOINT ["java", "-jar", "app.jar"]

위 내용처럼 여러 레이어로 구성되어 있고, 위에서부터 아래로 내려가는 형식으로 작성을 하는 것 같은데 아직은 확실히 와닿지 않아서 클럽에서 열심히 배워야겠다.

0개의 댓글