경북 AI UPSkill Academy - Semantic Kernel Integration with SpringBoot Application

cheringring·2025년 5월 28일

WorkShop

목록 보기
3/4

42에서 밋업을 한다는 소식이 들렸다.
빠질 내가 아니지. 레스고

오케스트레이션

ai를 통해 협업하는 구조 ( 지휘자 ) - 다중 협업

시멘틱 커널이 랭체인이랑 다른 점?

랭체인은 개발 스택(언어 등)이 맞지 않아서 처음부터 ai 추천 기능을 개발해야하지만,
상관 없이 C#, 파이썬, java를 지원하기때문에 있는 앱에다가 ai 기능을 삽입할 수 있고, 크기도 작아서 랭체인보다 잘 돌아간다.


시멘틱 커널의 특징

  1. 기업용 앱 친화적 ( 보안 뛰어남, 레거시 앱에다가 기능 추가 잘됨 -> 하위호환 잘됨 ).
    -> 랭체인은 하위호환을 지원하지않아서 업데이트가 됐는데 그 때 부터 버그가 생길 수도 있다.

  2. 플러그인 (ai모델이 사용할 수 있는 함수)

  3. 멀티 에이전트(페르소나) 지원



커널의 핵심기능

커넥터, 히스토리, 플러그인, 에이전트, RAG


Connector

ai 모델을 오케스트레이션 하기 위해 커널에다가 ai 모델을 추가해야하는데 이때 사용하는게 connector이다.

  • OpenAI, Ollma, Gemini, Hugging face ...

  1. Client 객체를 만들어서 ai 모델 연결
  2. 이를 기반으로 Service 객체를 만듦.
  3. Kernel에 AI 모델을 추가한다.

-> 이렇게 하면 터미널에 작동하는 GPT 정도이다.
-> 이때 작업을 대신 수행할 수 있는 "플러그인을 만들거다."
ex) getWeather(), getName() ...

PlugIn

커널입장에서는 어떤 함수(플러그인)을 써야 날씨를 알 수 있는 지 모른다.
이 작업을 수행하기 위해 @DefineKernelFuctuon 어노테이션을 추가해야됨.
이 어노테이션 안에 이 함수가 어떤 함수인지 코드를 쓴다.


커널이 날씨 찾는 함수를 찾는다!


History

" 이번엔 " 서울 알려줘 라고 하면 커널에서는 뭔 말인 지 알 수가 없다.

이 때 chatHistory라는 치팅 페이퍼를 주면 사용자가 질문을 입력할때마다, "히스토리" 에다가 기억을 하게 해준다. (사용자 질문, ai 답변)


이러면 kernel은 대화의 맥락을 이해하고 , 이번엔 이라고 하면 알아듣는다.


RAG

인터넷에 검색해줘 -> RAG기능 !
외부에서 검색한 답변을 바탕으로 답변을 생성(벡터 데이터도 포함)

ex) sql도 포함할 수 있다. 전부 jdbc를 쓰면 됨.

이렇게 벡터 서비스를 만들었다 -> 이제 읽고 쓰게 만들자! -> 임베딩 서비스(검색어, 새로 추가할 데이터를 임베딩을 거쳐서 벡터화된 다음에 접근을 하게 됨)

쿼리 프로바인딩 ( 쿼리할때 보호를 하는 역할)

제품 기획 가능? -> 다중 에이전트 협업으로 아이디어 구상, 마케팅, 디자인, 검토까지 해준다.

  1. 프롬프트 템플릿 작성 (now를 기준)
  2. 프롬프트 템블릿을 바탕으로 agent 작성
    (now에 현재 시간이 들어간다.)
  3. Thread(에이전트 동작 루프) 생성

모든 API를 다 연결해야하나?

MCP를 사용하면 설정 파일에 몇 줄 추가하는 것만으로도 쉽게 플러그인을 추가할 수 있다.

-> MCP를 자바를 준비중이다 ㅠ_ㅠ

Semantic-Kernel-java
https://github.com/microsoft/semantic-kernel-java



현재 동향

copilot as frontend <-> Agents as backend
Copilot : Ai를 위한 UI
Agent : Copilot을 통해 입력받은 사용자의 요구사항을 자동으로 알아서 처리하는 개체


어떻게 알아서?

AI Tooling 또는 Funtion Calling

하지만 Funtion Calling을 구현하는 방법이 에이전트 프레임워크마다, 랭귀지 모델마다 구현 방법이 다 다르다.


-> 표준화 시킬 수 있는 방법이 뭘까?
-> MCP !


MCP란?

Model context Protocol
Protocol을 정의한 명세

LLM(Model)에 맥락(Context)을 추가해주는 규약(Protocol)

MCP는 RAG와 비슷하면서도 다르다.

MCP 클라이언트와 MCP 서버

MCP 클라이언트 (데스크탑 어플리케이션, 챗봇 ..)
MCP 서버는 MCP 명세로 따라간 서버들
이 될 수 있다.

어딘가에 배포된 서버(상당 수가 웹 기반, 즉 마치 MCP 서버가 API처럼 작용한다는 소리)

-> UI 프론트엔드 / API 백엔드 MCP 클라이언트 / MCP 서버
-> UI 프론트엔드 / MCP 서버

MCP 서버 만들기

원하는 언어를 선정하면 됨.

  1. 빌더 정의하기.

  2. api나 엔드포인트가 없는 대신에 tool을 사용
    Tool이라고 정의되어있으면 다 긁어와서 브로드캐스트

  3. 빌더를 앱으로 빌딩

  4. 웹 기반이니까 엔드포인트 하나는 필요함.
    app.MapMcp();

  5. app.Run(); 해주면 됨.

tool 정의


[McpServerToolType]

public class EchoTool
{
[McpServerTool]
[Description("Echoes the input back.")]
public static string Echo
{

~~
}
이런 식으로 [] 안에 정의를 해주면 툴로 인식을 한다.

Client 정의

< MCPclient > 를 싱글톤으로 연결

클라이언트 트렌스포트와 옵션을 파라미터로 집어넣은 다음 디펜던시를 만든다. (ClinetTransport,clientOptions를 삽입)

웹 기반의 MCP 서버가 Copliot 윗 단에 만들어진다.


MCP 보안

내 컴퓨터를 읽어들여서 파일을 읽어들이고, 삭제시키고, 모든 것을 할 수 있다.
서비스를 이용해 내 컴퓨터에 있는 자원들을 활용할 수 있다는 점이 큰 취약점이다.

MCP서버가 악의적인 목적으로 쓰인다면?

인증, 권한 부여, 프롬프트 인젝션에 대비를 해야한다.

믿을만한 회사에서 나온 걸 사용 , 개인이 한 걸 사용할려면 docker같은 컨테이너 환경 활용

  • 인증 : 인증 로직 점검 (로그인이라던지)

목적 이외에 다른 것을 하면 안되니까

  • 권한 부여 : 최소 권한 부여

누가 와서 갑자기 프롬프트를 안좋은 목적으로 강화 시킬 수 있으니까.

  • 프롬프트(디스크립션) 인젝션 : AI 프롬프트 쉴드


    => 인증 관련 스펙 최근에 추가
    => SDK마다 구현중

간단하게 구현 ! => 리퀘스트 헤더에다가 API 키 헤더값을 같이 보내면 됨.
인증을 하는 미들웨어를 밑에 추가

서버 쪽 api 키가 날라오면 서버를 실행시키고,
안 맞거나, 안날라오면 서버 에러 때려버리면 됨.


MCP 클라이언트 / 서버
https://github.com/modelcontextprotocol/csharp-sdk/tree/main/samples

https://aka.ms/mcp/dotnet/samples

데모 샘플
https://github.com/devkimchi/openai-mcp-agent-dotnet

vscode에서 MCP 서버 사용하기
https://aka.ms/vscode/mcp

vscode에서 에이전트 모드
https://aka.ms/vscode/agent

MCP랑 Copilot으로 프론트엔드 앱 만들기

ui를 개발 코드로 옮기는 과정을 MCP가 자동으로 옮겨준다면?

  1. figma API를 끌어와야됨.
  2. copilot은 agent 모드로
  3. 코파일럿 지침 임베드
  4. 깃허브 코파일럿에게 환경 설정 해달라고 함.
  5. 피그마 UI 만들고 copy link to section 한 링크를
  6. 코파일럿에게 주면 ... 바이브 코딩으로 프론트 만들기 ~!

전부터 느낀거지만 프론트는 상위 몇퍼만 빼면 코더들은 거의 대체될 듯... 아 물론 백엔드도 마찬가지겠지만,
기업 입장에선 유지보수 측면에서 몇 명만 채용하는 너낌으로 갈 거 같음.
요새 풀스택을 선호하기도 하고, 짧은 식견으로 보기엔 그러하다.

profile
체은 Github:@cheringring

0개의 댓글