실제 현업에서 개발하는 API는 단순히 GET요청도 있지만 인증 등이 들어가고 복잡한 데이터를 POST로 요청하는 경우가 많은데

과연 LLM을 이용해서 대화형으로 사용자가 부하테스트를 할 수 있게 구현이 가능한지 궁금증이 들어 시작을 했다.

 

문제는 크게 3가지같다.

1. 다양한 데이터를 어떻게 활용하게 할지 ( 예를들어 로그인 api테스트면 여러 ID를 만드는 가입절차까지 스스로 만들게 하는건 어려워보이기 때문에 이미 만들어진 계정을 넘겨줘야 하는데, 어떻게 넘겨줄지)

 

2. 스크립트를 어떻게 전달할 것인가

    - 스크립트 생성까지 llm이 한다면 검증이 필요한데, 검증은 무조건 스모크테스트처럼 부하를 조금이라도 쏴봐야 한다.

    - 기본적인 스크립트를 줄것인가 ( 그럼 왜 이 llm을 이용하는지에 대한 강점을 확실하게 줘야함 )

 

3. API을 알려주면 어떻게 llm이 이해를 하고 스크립트를 짤것인가, 또는 만들어진 스크립트를 활용할 것인가

    - 스웨거 json을 이용해야하나?

 

 

--개인 메모 -----------

FLOW:  사용자 요청 → LLM 스크립트 생성 → 검증 단계 → 실행 → 결과 보고

 

검증 단계에서는:

  • 문법 검사: k6 스크립트의 문법적 오류 확인
  • 안전성 검사: 위험한 코드나 무한 루프 등 확인
  • 테스트 실행 가능성 검사: 필수 파라미터 누락 여부 확인

점진적 실행 접근법

  • 스모크 테스트 먼저 실행: 생성된 스크립트를 먼저 최소한의 VU(1~2개)로 짧은 시간(5-10초) 실행
  • 결과 확인 후 전체 테스트: 스모크 테스트가 성공하면 전체 테스트 실행

템플릿 기반 접근법

  • 완전히 자유로운 스크립트 생성 대신, 검증된 템플릿을 사용하고 LLM은 파라미터만 채우는 방식

피드백 루프 구현 ( 이건 랭그래프로 복잡한 구조가 될 듯 )

  • 사용자 피드백을 통해 스크립트를 개선하는 메커니즘

 

실용적인 구현 방안

위 접근법들을 종합하여 다음과 같은 실용적인 구현을 제안합니다:

  1. 단계적 접근:
    • 1단계: 템플릿 기반 + 파라미터 추출 (안전하게 시작)
    • 2단계: 제한된 자유도의 스크립트 생성 + 검증
    • 3단계: 완전 자유도의 스크립트 생성 + 강력한 검증
  2. 하이브리드 접근법:
    • 핵심 구조는 템플릿 기반으로 유지
    • 동적 부분(페이로드, 검증 로직 등)은 LLM이 생성
    • 생성된 코드는 샌드박스에서 검증 후 통합
  3. 사용자 지식 활용:
    • "이 API는 JWT 인증이 필요해" 같은 사용자 힌트 활용
    • 이전에 성공한 테스트 패턴 재활용
  4. 점진적 학습:
    • 성공한 스크립트를 데이터베이스에 저장
    • 새로운 스크립트 생성 시 유사한 성공 사례 참조

 

최우선 조건 : 사용자의 복잡한 질문,여러 툴을 이용해야해도 완성도 있게 대답해야 한다.

  1. 오케스트레이터 노드: 사용자 입력을 최초로 받아 처리 방향을 결정하는 중앙 제어 장치
  2. 플래닝 노드: 복잡한 작업을 여러 단계로 분해하여 실행 계획을 수립
  3. 전문 에이전트 노드들: 각각 특정 도구나 서비스에 특화된 8개의 에이전트 (그라파나, 로키, 템포, 아르고시디 등)
  4. 밸리데이션 노드: 결과의 완성도와 정확성을 검증
  5. 응답 노드: 최종 결과를 사용자 친화적으로 요약하여 제공

 

보완하면 좋을 만한 부분들:

  • 컨텍스트 관리: 사용자와의 대화가 이어질 때 이전 대화 컨텍스트를 어떻게 유지할지 고려가 필요함. 예를 들어 "그 중에서 메모리 사용량이 가장 높은 것만 보여줘"와 같은 후속 질문에 대응할 수 있어야 함 -> 메모리세이버 등 이용
  • 에이전트 선택 메커니즘: 오케스트레이터가 어떤 에이전트를 호출할지 결정하는 로직이 중요. -> 프롬프트 강화
  • 실패 처리 메커니즘: 특정 에이전트가 실패하거나 정보를 가져오지 못할 경우에 대한 대처 방안이 필요.-> 고민 필요
  • 사용자 피드백 루: 사용자가 결과에 만족하지 못할 경우 시스템이 어떻게 개선 방향을 찾을지에 대한 고려가 필요 -> 고민 필요
  • 병렬 처리: 여러 에이전트를 동시에 실행하여 응답 시간을 단축하는 방법을 고려해 볼 수 있음 -> 멀티 처리 적용
  • 간 결과 제공: 복잡한 질문의 경우 최종 답변까지 시간이 오래 걸릴 수 있으므로, 중간 진행 상황이나 부분 결과를 제공하는 기능이 유용할 수 있음 -> add 메세지를 구현하고 st.session_state를 이용하여 화면에 실시간 출력
  • 에이전트 확장성: 새로운 에이전트를 쉽게 추가할 수 있는 구조인지 확인. 향후 새로운 도구나 서비스를 통합할 필요가 있을 수 있음 -> 고민필요

 

 

 

코드 구현은 차차 할 예정, 랭그래프, 랭체인, 제미나이 예정

MCP서버를 만들기전 시나리오를 수립해보자.

 

k6 Tool 사용 시나리오

  • 특정 API endpoint에 대해 지정된 부하(초당 요청 수, 가상 유저 수, 지속 시간)로 테스트 실행 및 결과 요약
  • 동일 endpoint에 대한 과거 테스트 결과 비교(성능 트렌드, 최대 TPS, 에러율 등)
  • 다양한 HTTP 메소드(GET, POST, PUT, DELETE)별 부하 테스트.
  • 인증이 필요한 API에 대해 토큰 발급 및 헤더 자동 세팅
  • Swagger/OpenAPI 문서를 파싱하여 자동으로 k6 스크립트 생성.
  • 여러 API endpoint를 조합한 시나리오 테스트(사용자 플로우 시뮬레이션).
  • 테스트 실패(에러율 급증, 응답 지연) 시 자동 알림/이슈 생성.

cli나 스크립트 사용

 

 

 

argocd Tool 사용 시나리오

 

  • 배포 실패시 자동으로 로그도 가져와주기. ( 해결 방안 추천도 해주면 좋을것 같음)
  • 배포 자동화
  • 현재 out-of-sync인 app 요청
  • 배포 히스토리 물어보기
  • 전체 pod진단
  • project생성
  • project리스트 검색
  • project기반 검색
  • app생성
  • app검색
/api/v1/applications (GET) 전체 애플리케이션 목록 및 상태 조회
/api/v1/applications/{appName} (GET) 특정 앱의 상세 정보 및 sync 상태 확인
/api/v1/applications?syncStatus=OutOfSync Out-of-sync 상태인 앱 목록 필터링
/api/v1/applications/{appName}/sync (POST) 특정 앱 강제 동기화 트리거
/api/v1/applications/{appName}/operation 앱에 대한 롤백, 중단 등 연산 실행
/api/v1/projects (GET) 프로젝트 단위로 앱 관리
/api/v1/session (POST) 인증 토큰 발급
 

 

 

챗봇에서 가능한 시나리오:

  • "my-app 어플리케이션 지금 sync상태 어때?" → /api/v1/applications/my-app 호출 후 status.sync.status 반환.
  • "지금 out-of-sync인 서비스들 쭉 알려줘" → /api/v1/applications?syncStatus=OutOfSync로 조회.
  • "my-app을 강제로 동기화해줘" → /api/v1/applications/my-app/sync POST.
  • "오늘 배포된 앱 목록 알려줘" → /api/v1/applications?createdAfter=YYYY-MM-DD 등(필터링 지원 시).
  • "특정 앱의 리소스 트리 보여줘" → /api/v1/applications/{appName}/resource-tree.
  • 특정 프로젝트 내 앱의 동기화 상태 집계 및 리포트.

Agentic AI라는게 정말로 가능한 것인가라는 생각이 든다. 

아직까지 챗봇형태로 할루시네이션이 어느정도 발생하여도 용인이 되는 서비스는 충분히 가능해 보인다. 마누스와 같은...

 

하지만 기업이 서비스를 연동하려면 많은 부분들이 필요해 보인다.

가전제품처럼 오작동이 있어서는 안되는 서비스에서는 re-check과정이 타이트하게 들어가야 하는데 LLM 자체가 생성형이기때문에 항상 우리가 생각하는 일관된 답변을 주지 않아서 re-plan과정이 들어갈수밖에 없다. 이럴수록 시간이 늘어나기 때문에 고객 경험 측면에서 좋지 않음. 근데 이 시간을 줄이기 위해서는 단계를 줄이거나 프롬프트를 엄청나게 잘 짜거나, json형식으로 잘 관리해서  LLM으로 검증하는게 아닌 코드기반으로 빠르게 검증을 해야한다.

 

또한 LLM 호출을 타이트하게 제어해야한다. 돈을 무한정 낼 수 없다.

 

멀티 에이전트간 흐름제어가 굉장히 어렵다. 프롬프트만으로는 불가능해 보이며 결국에는 검증코드들이 많이 들어가야 한다. 

 

에이전틱 ai는 결국에 사람처럼 생각하는 사고방식을 가져야한다. 사람이 과거를 기억하고, 할일의 우선순위를 정하고, 할일을 기억하는 등 이러한 과정을 시스템에 녹여내야 하는데,,,,굉장히 어렵다. 

 

또한 단일 워크플로우만 잘 처리하도록 에이전트를 개발하면 안된다. 아쉬운 점은 현재 대부분의 강의들이 이러한 형태뿐이다. 당연히 그럴수밖에 없는게..아직 국내에서 에이전틱 시스템을 해본사람도 극소수일 것이기에...

 

앞으로는 집중할 부분은 "사람처럼 생각하게하기" , "output검증", "보안이나 오작동을 최소화 하기위한 가드레일 기능" 이다.

< 자료 조사 >

사용할 도구 카테고리 : QA, 모니터링, 부하성능테스트, 도큐먼트 RAG, DB모니터링 등

 

# QA관련도구 

1. 정적 코드 분석 도구

   - 소나큐브 : REST API통해 코드 품질 데이터 수집 및 대시보드 시각화

                      CI/CD 파이프라인과도 연동할수도 있음

   - ESLint : 자바스크립트 및 타입스크립트 코드를 린팅하여 코드 스타일 및 품질 관리 가능

                   MCP서버 연결해서 린팅규칙과 결과를 관리할수도 있을것 같음

   - Semgrep : 코드 보안 취약점 및 품질을 찾아주고 이미지화도 가능

                        커스텀 규칙 작정 및 관리기능을 MCP로 제공하면 좋을듯

 

2. 테스트 도구

    - JUnit : MCP서버로 자바기반 어플리케이션 테스트를 자동으로 실행하고 결과를 수집해주는 것으로 가능

    - pytest : 파이썬 코드를 자동화하고 플러그인으로 커스터마이징된 리포트를 제공하도록 개발

 

 

#모니터링 도구

   -  loki : 로그를 수집하고 쿼리로 보여주는 기능으로 cli및 api지원함. 그라파나와 연동이 매우 쉽기 때문에 mcp서버로 자                연어로 질문이 loki 쿼리를 날려서 결과를 찾아주는 등 다양한 시도가 가능해보임. 

               이미 mcp서버가 있어서 참고하기좋음 (https://github.com/tumf/grafana-loki-mcp, https://github.com/scottlepp/loki-mcp)

     

    - tempo : 트레이싱을 모니터링 하게 도와주는 오픈소스이며 이또한 어플리케이션 api에 대한 트레이싱 추적을 사용자에게 자연어로 질문하도록 연동해주면 편리해 보임 , 이것도 mcp서버가 이미 있어서 참고하기 좋음 ( https://github.com/ivelin-web/tempo-mcp-server, https://github.com/kitakou0313/grafana-tempo-mcp )

 

    - grafana : 시각화 오픈소스로 많은 데이터소스들을 지원함, 특히 개발자들이 대시보드 해석 및 알람 규칙 설정등을 어려워하는데 어느정도 편리하게 제공해준다면 리포트 뽑아내기 등 유용한 기능이 많을 것 같음. 여긴 grafana에서 공식 mcp개발중 ( https://github.com/grafana/mcp-grafana )

 

    - prometheus : 메트릭 수집기로 사용되며 타임시리즈 데이터들을 관리하여 패턴찾기 등등 아주 유용한 데이터베이스. 알람등을 제공하면 좋을것 같음. 이것도 mcp들이 있어서 참고하기 좋음 ( https://github.com/loglmhq/mcp-server-prometheus, https://github.com/pab1it0/prometheus-mcp-server )

 

 

 

 

# 부하성능테스트

    - k6 : grafana에서 만든 부하테스트기로 코드베이스로 제공하기 때문에 굉장히 mcp로 만들기 유용해보임. 프로메테우스로 연동이 되기때문에 그라파나로 성능지표 모니터링이 가능, 자연어를 통해 시나리오를 짜고 리포트까지 주는 기능이 있으면 매우 강력한 도구가 될 것 같음. 이것도 mcp가 있음 ( https://github.com/QAInsights/k6-mcp-server )

 

   - locust : 이 솔루션도 k8s시대에 많이 사용되는 부하성능기. 이것도 mcp가 있음 ( https://github.com/QAInsights/locust-mcp-server )

 

 

#  DB모니터링

    - 이부분은 생각이 잘 떠오르지 않음. db에 대한 데이터 푸시, 검색 등을 할것인지 아니면 모니터링이 주목적인지.  모니터링이 주 목적이라 하면 exporter를 통해 prometheus로 데이터를 넣고 이 데이터를 그라파나에서 가지고오면 되는데 그럼 grafana mcp에 합쳐져야할 기능, 데이터에 대한 푸시 등 기능이면 postgre cli 등을 잘 랩핑하면 mcp로 만들수 있음 ( 아래와 같은 사용예시가 좋아보임 https://modulabs.co.kr/community/momos/44/feeds/719 )

maraidb mcp  ( https://github.com/abel9851/mcp-server-mariadb )

 

 

# RAG

RAG는 서칭관련 기능이 좋을것 같음

   - milvus : k8s에 설치하기 매우 편리하여 테스트용도로 사용하기에 좋음. 아래는 rag를 어떻게 mcp로 사용하면 좋을지 usecase ( https://github.com/teddynote-lab/mcp-usecase/tree/main/case1 ), 또한 mcp도 있어서 참고하기 좋음 ( https://github.com/zilliztech/mcp-server-milvus)

AI관련 업무들을 하게되었는데 스스로 나중에 찾아보기 위한 목적으로 기록할 예정이다.

LLM을 이용한 서비스 개발 내용을 주로 다룰 예정이며 AI석,박은 아니기 때문에 전문성은 떨어질 수 있습니다.

대략적인 내용들은

langchain, langraph 등 위주이며 아키텍쳐 관점에서 많이 다룰 예정.

ollama블로그에서는 embedding model이란 아래와 같이 설명하고 있다.

https://ollama.com/blog/embedding-models

 

즉, 고차원 벡터공간에 데이터를 유의미하게 저장하기 위해 변환하는 방식.

ollama기준 REST API, Python, JS로 사용이 가능하다고 한다.

또한 랭체인이나 라마인덱스같은 툴과도 연동이 가능.

 

랭체인에서 소개하는 임베딩모델은 24.10.29 기준 대표적으로 아래와 같다. 

이외에도 더 있는데 https://python.langchain.com/docs/integrations/text_embedding/ 페이지를 참고.

https://python.langchain.com/docs/integrations/text_embedding/

좀 더 알고싶으면 아래 블로그참고, 좋아보인다.

https://www.syncly.kr/blog/what-is-embedding-and-how-to-use

+ Recent posts