AWS 기술 블로그

A1Mobilsoft의 운영 문의 자동화 여정 (1): 문제 정의와 3-에이전트 아키텍처 설계

본 블로그 시리즈는 A1Mobilsoft, Megazone, AWS 가 공동 작성 하였으며, 두 편으로 이루어져 있습니다.

각 편의 구성은 다음과 같습니다.

1편: 슬랙 #운영개발문의 채널의 고통에서 출발해, 왜 Knowledge·Code·DB 세 에이전트 구조로 갈랐는가

수 시간씩 늘어지던 운영 문의를 몇 분으로 줄일 수 있을까요? 32개월간 846건의 문의가 오가고 첫 답변까지 평균 2.6시간이 걸리던 슬랙 #운영개발문의 채널을, Amazon Bedrock AgentCore Runtime · Bedrock Knowledge Base · Strands Agents SDK 기반 Multi-Agent 시스템으로 다시 설계한 기록입니다.

이 프로젝트는 A1Mobilsoft가 AWS DevCraft 2.0을 통해 AWS, 메가존클라우드(MegazoneCloud)와 함께 만든 결과물입니다. AWS DevCraft 2.0은 고객이 AWS·파트너사와 함께 모여 자신만의 AI Agent를 개발할 수 있도록 지원하는 프로그램입니다. 처음 참석했을 때만 해도, 이게 매일 쓰던 운영 채널 자체를 다시 설계하는 일이 될 줄은 몰랐습니다.

1편에서는 왜 이 시스템을 만들게 됐는지, 그리고 전체 및 세부 아키텍처를 다룹니다. 각 에이전트의 실제 구현 디테일과 사람 vs AI 도입 이후 비교 결과는 2편에서 이어집니다.

0. A1Mobilsoft 소개와 배경

A1Mobilsoft(A1모빌소프트 주식회사)는 차량 이용과 관리에 필요한 솔루션을 제공하는 클라우드 기반 Total FMS(Fleet Management System) 기업입니다. 핵심 플랫폼인 IMS(Intelligent Mobility System)를 토대로 다섯 개 사업 영역이 운영됩니다. 보험대차(렌카·렌출), 탁송(렌톡·수퍼드라이버), 글로벌 OTA 채널(카카오모빌리티·NAVER·Hertz·ORIX), 중고차 홈배송(KB차차차 독점), AI IoT 텔레매틱스(쿠팡로지스틱스 독점 FMS). A1Mobilsoft는 이번 프로젝트 이전에도 Amazon Connect 기반 AICC 구축 등 AWS 서비스를 활용한 AX(AI Transformation) 여정을 AWS와 함께 이어오고 있었습니다.

개발 조직은 폼(IMSform) / 렌카 / 차온다(홈배송) / 프리무브 / 화이트라벨 / 모바일 네이티브 셸(iOS·AOS) / 실시간 Presence 서버 등 16개에 달하는 서비스 레포지토리를 동시에 다룹니다. 운영 문의는 사내 슬랙에서 서비스별로 채널을 나눠 받고 있으며, 이번 시스템은 폼(IMSform)·렌카(rencar) 두 서비스의 사내 슬랙 #운영개발문의 채널에 우선 도입되었습니다.

이 글은 그동안 사람이 일일이 대응하던 #운영개발문의 채널을 Amazon Bedrock 기반의 Knowledge·Code·DB 세 에이전트 시스템으로 대체하기까지의 여정을 담았습니다. 도중에 시도했다가 맞지 않다고 판단해 거둬들인 설계, 거기서 얻은 교훈, 그리고 수치를 보며 임계값을 다시 잡아간 튜닝 과정까지 가능한 한 그대로 기록했습니다.

1. 문제 설정: 수동 대응이라는 고통

1.1 또, 멘션이 떴다

평일 오후 3시. 한 개발자가 한창 자기 일에 빠져 있습니다. 새 기능을 만드는 중일 수도, 배포 직전 마지막 점검 중일 수도, 회의 자료를 정리하던 중일 수도 있습니다. 무슨 일이든 공통점은 하나, ‘지금 끊기면 다시 시작하기 싫은’ 흐름 속이라는 것. 그때 흐름을 깨는 알림 소리 하나가 울립니다. 슬랙입니다.

운영팀: “@OO님 폼 웹에서 미수 관리 화면 조회가 안 된다는데요. 캡처 보내드릴게요.”

캡처를 받습니다. 화면에는 흔한 일반 에러 모달. 어떤 화면이지? /accounting인가? 어디부터 봐야 하나. 이번 주 배포 노트를 다시 펼칩니다. PR 두 개가 그 영역을 건드렸네요. 어느 쪽일까. 우선 네트워크 탭 캡처를 요청합니다. 잠시 뒤 답이 돌아옵니다.

“지금 다른 사람한테 부탁해야 해서 좀 걸려요.”

10분, 아니 30분 뒤에야 캡처가 도착해 답을 보냅니다. 문제는 풀렸지만 붙잡고 있던 작업의 흐름은 이미 끊겼습니다. ‘내가 뭘 하고 있었지?’ 다시 몰입하려는 순간, 다른 슬랙 채널에서 또 다른 문의가 날아옵니다. 이번엔 렌카 셀프클레임. 과실이 정해지지 않는다고 합니다. 작년에 OO님이 비슷한 걸 풀었던 것 같은데, 확인해 보니 슬랙 상태에 야자수 이모지. 하필 OO님은 휴가입니다.

#운영개발문의 채널은 이런 식으로 돌아가고 있었습니다. 위 한 단락이, 우리가 이 프로젝트를 해야겠다고 마음먹은 가장 솔직한 이유입니다. 그리고 이게 단순한 푸념이 아니라는 건, 32개월 치 데이터가 말해줍니다.

1.2 32개월 채널 데이터 (폼·렌카 합산)

지표 수치
전체 문의 (2023.08 ~ 2026.03) 846건 (월 평균 약 26건)
첫 답변까지 평균 시간 2.6시간 (중앙값 16.7분)
3건 이상 답변이 오가는 문의 비중 76.6%
8시간 이상 1차 답변이 없던 문의 29건 (약 3.4%)
스레드 종결까지 중앙값 1.8시간
문의 피크 시간대 오전 10~11시, 오후 1~4시

이 표에서 가장 눈에 띄는 건 평균 2.6시간입니다. 그런데 중앙값은 16.7분입니다. 대부분의 문의는 10~20분 안에 닫히지만, 길게 늘어진 소수의 문의가 평균을 끌어올린 것이죠. 빨리 답할 수 있는 케이스는 정말 빠르고, 한 번 막히면 8시간을 넘깁니다(29건이 여기에 해당). 잘 풀리는 날과 안 풀리는 날의 분포가 양극화돼 있다는 게 진짜 문제였습니다. 그래서 우리가 줄이려던 건 평균값 자체가 아니라, 이렇게 길게 늘어지는 꼬리였습니다.

시간대도 문제를 키웁니다. 문의가 가장 몰리는 오전 10~11시와 오후 1~4시는, 개발자가 가장 깊이 코드에 몰입해 있어야 할 시간과 정확히 겹칩니다. 가장 집중이 필요한 순간에 멘션이 뜨니, PR 리뷰든 디버깅이든 붙잡고 있던 컨텍스트가 한 번씩 무너집니다.

1.3 막히는 순간들: 세 가지 패턴

8시간 넘게 끌리는 문의를 들여다보면, 거의 세 가지 시나리오 중 하나입니다.

패턴 1. “이거 어디서 본 것 같은데”

제일 자주 나오는 패턴입니다. 세션이 자꾸 만료되거나, 비대면 계약서 발송이 실패하거나, 셀프클레임 신청이 안 넘어가거나. 이런 류의 문의는 분기마다 한 번씩 돌아옵니다. 그런데 막상 받으면 ‘이전에 어떻게 풀었더라’가 기억나지 않습니다. 슬랙 검색을 해봐도 이 문제와 동일한 스레드를 찾는 건 꽤나 여의치 않습니다. 결국 다시 조사해 해결책을 찾아 답합니다. 하지만 그렇게 힘겹게 찾은 답도 시간이 지나면 스레드 어딘가에 묻혀 잊혀 갑니다. 그래서 다음에 같은 문의가 들어오면, 또 처음부터입니다. 위 표에서 76.6%가 답글 3건 이상으로 늘어나는 이유의 큰 부분이 이 반복 조사이고, 담당자가 가장 진이 빠지는 순간이기도 합니다.

패턴 2. “어느 레포부터 보지”

이번 시스템이 1차로 다루는 프론트엔드 서비스는 폼 웹, 폼 모바일, 렌카, 폼 어드민 네 개입니다. 레포 수가 많아서 어렵다기보다, 한 줄짜리 문의를 받을 때마다 ‘이게 어느 레포인가’를 다시 판단해야 한다는 게 문제입니다. ‘예약 상세에서 계약 정보가 안 보여요’라는 한 줄 문의를 받으면, 담당자의 머릿속은 빠르게 돌아갑니다. 폼 웹인가 폼 모바일인가? 어드민에서 띄운 화면인가? 최근 배포에 관련 변경이 있었나? grep -rl "계약" src/부터 쳐볼까? 절반 이상은 코드만 차분히 읽으면 답이 나오는 결정론적 작업이지만, 그 사이의 컨텍스트 스위치 비용은 고스란히 사람에게 청구됩니다. 게다가 한 화면이 두 레포에 걸쳐 있는 경우(예: 폼 웹과 폼 어드민이 공유하는 컴포넌트)에는, 한쪽만 봐서 빠르게 답할 수 있다는 보장도 없습니다.

패턴 3. “이건 OO님이 회의 중이라”

‘예약 ID 7823이 결제됐는데 앱에는 안 떠요’ 같은 문의가 들어옵니다. 코드만 봐서는 답이 나오지 않습니다. 실제 레코드의 status, is_visible 컬럼 값을 직접 봐야 합니다. 그런데 그 DB에 직접 붙을 수 있는 사람은 또 따로 있고, 그 사람이 회의 중이면 한 텀이 그대로 비어버립니다. 그동안 문의자는 답을 기다립니다. 8시간 방치 케이스 29건의 상당 부분이 정확히 이 한 텀에서 생깁니다.

세 패턴은 결국 같은 사람의 머리와 시간을 갉아먹는 일이었습니다. 패턴 1은 이미 나왔던 답을 다시 찾는 일, 패턴 2는 사람이 직접 하지 않아도 되는 코드 탐색을 사람이 떠안는 일, 패턴 3은 권한이 있는 사람을 기다리는 일. 이 셋을 줄이려고 시작한 것이 이 프로젝트입니다.

패턴 문제의 본질 대응 에이전트 (3장)
패턴 1. “이거 어디서 본 것 같은데” 이미 나왔던 답을 매번 다시 조사 Knowledge Agent
패턴 2. “어느 레포부터 보지” 결정론적 코드 탐색을 사람이 떠안음 Code Agent
패턴 3. “이건 OO님이 회의 중이라” 데이터 확인 권한자를 기다리는 공백 DB Agent

2. AI Agent로 가기로 한 이유, 그리고 만들면서 챙긴 다섯 가지 기준

2.1 왜 AI Agent인가: 세 가지 패턴이 가리키는 답

앞서 정리한 세 가지 패턴은 공통적으로 세 가지를 동시에 요구합니다. 자연어로 적힌 문의의 의미를 이해하고, 코드를 읽고, 구조화된 데이터를 조회하는 일입니다.

  • 패턴 1(‘이거 어디서 본 것 같은데’)은 결국 ‘두 문의가 의미적으로 같은 문제인가’를 가려내는 일입니다. 키워드 매칭만으로는 ‘셀프클레임 신청 실패’와 ‘셀프클레임 취소 실패’처럼 단어는 겹치지만 흐름이 정반대인 케이스를 구분하지 못합니다.
  • 패턴 2(‘어느 레포부터 보지’)는 모호한 한 줄 문의에서 정확한 파일과 라인까지 좁혀 들어가는 일입니다. 결정론적 라우팅 룰만으로는 닿을 수 없고, ‘여기쯤 봐야 할 것 같다’는 가설을 세운 뒤 grep과 파일 읽기를 반복할 주체가 필요합니다.
  • 패턴 3(‘OO님이 회의 중이라’)은 권한을 가진 사람을 기다리는 시간 자체를 없애야 하는 자동화 문제입니다.

세 영역 모두, LLM이 도구를 호출하며 스스로 판단하는 ReAct 패턴이 가장 직접적인 답이었습니다. ‘문의를 읽고 → 가설을 세우고 → 도구로 확인하고 → 답을 만든다’는 흐름이, 사람이 트러블슈팅하는 과정과 그대로 포개지기 때문입니다.

2.2 왜 단일 LLM이 아니라 Multi-Agent였나

처음 가설은 평범했습니다. ‘Bedrock Knowledge Base에 단일 LLM 하나면 충분하지 않을까.’ 그런데 일주일을 돌려보니 세 가지 한계가 곧바로 드러났습니다.

  • 컨텍스트 윈도우 폭증. Knowledge Base 검색 5건, Code 분석 파일 2~3개, DB SELECT 결과를 한 컨텍스트에 모두 밀어 넣으면, ReAct 루프 5사이클 기준 입력 토큰이 누적 80k에 육박하는 경우가 관측됐습니다.
  • 비용 비효율. 코드 분석에는 Sonnet급이 필요하지만, Knowledge Base Rerank/Diagnosis나 ‘SQL 한 줄’은 Haiku로도 충분합니다(백테스트 30건에서 동일 판정 비율 95% 이상). 단일 모델 구조에서는 이렇게 일을 나눠 맡길 여지가 사라집니다.
  • 도구 노출 격리 실패. 모든 도구를 한 에이전트가 쥐고 있으면, ‘Knowledge Base만 봐야 할 때’에 코드까지 같이 호출해버리는 사고가 잦았습니다.

이 세 한계가, 결국 Supervisor와 전문 에이전트 3개로 갈라낸 결정으로 이어졌습니다. 이 구조가 시스템의 출발점이고, 자세한 내용은 다음 장에서 다룹니다.

2.3 만들면서 반드시 챙기려 한 다섯 가지 기준

운영 채널은 한 번 신뢰가 깨지면 다시 쌓는 비용이 유난히 큰 영역입니다. 그래서 다음 다섯 가지를 트레이드오프의 판정 기준으로 못박아 두고 시작했습니다.

  • 기준 1. 모르면 모른다고 한다. 틀린 답보다 에스컬레이션이 낫습니다. 이 원칙이 잡히지 않으면, 그럴듯한 거짓말이 운영 채널에 한 번 박히는 순간 신뢰가 무너집니다. Knowledge Agent Diagnosis의 match=false 게이트와 Supervisor의 CASE 2-B 에스컬레이션 분기로 구체화했습니다.
  • 기준 2. 첫 응답은 무조건 빠르게. 분석이 오래 걸리더라도, 봇이 살아 있다는 신호(확인 중 → ‘수집 중’ → ‘분석 시작’)는 즉시 보냅니다. SQS FIFO와 AgentCore SSE 스트리밍으로 구현했습니다.
  • 기준 3. 운영하면서 자료가 쌓이는 구조. 좋아요를 받은 사례는 자동으로 Knowledge Base에 들어가야 합니다. 누군가 따로 정리해 올려야 하는 구조라면, 결국 아무도 하지 않아 사장되고 맙니다. 피드백 기반 Knowledge Base 증분 축적 루프로 풀었습니다.
  • 기준 4. 비용은 토큰 단위로 추적 가능해야 한다. 에이전트별 input/output/cache 토큰을 CloudWatch 커스텀 메트릭으로 분리했습니다. 그러지 않으면 ‘왜 갑자기 비싸졌는지’가 통째로 안갯속에 묻힙니다.
  • 기준 5. Worker는 상태를 갖지 않는다. Slack 봇 자체에는 분석 로직을 넣지 않고, AgentCore Runtime을 호출만 하게 했습니다. 장애 복구를 단순하게 만들기 위해서입니다.

이 다섯 가지는 이후의 아키텍처와 구현, 운영 설계 전반에서 트레이드오프를 가르는 기준으로 일관되게 쓰입니다.

3. 아키텍처: 왜 에이전트가 3개인가

3.1 전체 아키텍처 다이어그램

전체 아키텍처 다이어그램: Slack → EC2 SlackBot → SQS FIFO → AgentCore Runtime → Supervisor 및 Knowledge/Code/DB 3개 에이전트, Bedrock Claude Models, Knowledge Base Update Pipeline(Lambda·S3·OpenSearch Serverless), CloudWatch Observability로 구성

전체 아키텍처 다이어그램: IMS Mobility x AWS DevCraft with MegazoneCloud

다이어그램의 흐름은 크게 세 갈래입니다.

  • Main Flow (①~⑧, 주황 실선): 사용자 문의가 들어와 답변이 나가는 본선입니다. ① Slack → ② EC2 SlackBot → ③ Amazon SQS FIFO(DelaySeconds 180s/60s) → ④ AgentCore Runtime → ⑤ Tools / ⑥ Bedrock Claude Models → ⑦ Supervisor 종합 → ⑧ Slack 답변.
  • Knowledge Base Update Pipeline (⑨~⑫, 초록 점선): 답변이 끝난 뒤 데이터가 Knowledge Base로 흘러가는 비동기 경로입니다. ⑨ Slack 좋아요 피드백 → ⑩ Lambda 전처리 → ⑪ S3(원본/전처리) → ⑫ Bedrock Knowledge Base / OpenSearch Serverless.
  • Tools / Observability (파란 실선, 회색 점선): Bedrock Runtime Retrieve(), Amazon S3 레포 캐시, GitHub → S3 미러링, AgentCore Observability → CloudWatch.

특히 ③의 SQS FIFO와 DelaySeconds(180s/60s)는 의도된 지연입니다. Slack에 첫 문의가 올라온 직후, 사용자가 스크린샷이나 재현 단계, 로그를 댓글로 이어 다는 경우가 많습니다. 그 정보까지 첫 분석 컨텍스트에 담으려고 일부러 잠깐 기다리는 것이죠. 덤으로 FIFO 큐의 dedupe가 Socket Mode의 이벤트 중복 발송까지 막아줍니다.

3.2 Supervisor 하나로 다 하지 않은 이유

앞서 정리한 세 한계(컨텍스트 폭증, 단가 비효율, 도구 노출 격리 실패)가, 그대로 Supervisor와 전문 에이전트 3개 구조로 갈라낸 이유가 됐습니다. 각 sub-agent는 자기 영역의 도구만 손에 쥡니다. 아래 표기한 Sonnet 4.6·Haiku 4.5는 모두 Anthropic Claude on Amazon Bedrock 모델이며, 정확한 모델 ID는 2편에서 명시합니다.

  • Supervisor (Sonnet 4.6): ask_knowledge_agent / ask_code_agent / ask_db_agent 세 도구. 분류와 결과 종합, 답변 생성만 맡습니다.
  • Knowledge Agent (Haiku 4.5): Bedrock Runtime Retrieve() 하나. Knowledge Base 검색 + LLM Rerank + Diagnosis 3단계 파이프라인 안에서만 움직입니다.
  • Code Agent (Sonnet 4.6): shell / file_read / ensure_repo / Serena MCP. S3 레포 캐시에서 받아 온 파일을 로컬에서 분석할 때만 씁니다.
  • DB Agent (Haiku 4.5): rds-mcp-server를 통한 읽기 전용 SELECT. DB 진단에만 씁니다.

이렇게 나눠 두면, 잘못된 도구를 잘못된 단계에서 부르는 사고가 구조적으로 차단됩니다.

3.3 Knowledge Agent: 담당 영역과 실제 케이스

담당 영역

  • 과거 #운영개발문의 채널의 해결 사례에서 동일하거나 유사한 문제를 찾아냅니다.
  • 단순 벡터 검색이 아니라 Retrieve → LLM Rerank → Diagnosis 3단계 게이트를 거쳐, ‘키워드는 비슷한데 사실 다른 문제’를 걸러냅니다.
  • Knowledge Base만으로 답이 끝나면 Supervisor에 곧장 답변을 돌려주고 Code·DB Agent 호출을 건너뜁니다. 비용과 지연을 줄이는 1차 게이트입니다.

실제 케이스: “로그인하면 자꾸 세션이 만료돼서 다시 로그인하래요”

들어온 화면은 폼 어드민, 발생 빈도는 분기마다 한 번씩.

Supervisor → ask_knowledge_agent("로그인 후 세션 만료...")
  ↓
[Stage 1] Retrieve   → Top 5 (score ≥ 0.4)
  - 1순위: 작년 11월 동일 증상 스레드 (score 0.87)
  - 2순위: 올해 2월 재발 케이스 (score 0.81)
[Stage 2] Rerank → 1, 2순위만 5점 이상 통과 (query_type="오류")
[Stage 3] Diagnosis → match=true, confidence=0.88
           recommendation: "운영 정책 변경 직후 AccessToken refresh 주기와
             Redis TTL 불일치. 이전 해결: Redis TTL 복원 + refresh 폴리시 갱신."
  ↓
Supervisor: Knowledge Base 답변 채택 → Code / DB 호출 스킵 → 답변 생성

이 이슈는 이미 두 번이나 풀린 적이 있는데도, 매번 새 담당자가 ‘또 뭐지?’부터 시작해 1~2시간을 썼습니다. Knowledge Base만으로 풀리는 케이스라 Code Agent(Sonnet) 호출 자체가 없습니다. 응답은 1~2분, 비용은 한 자릿수 원. Knowledge Agent가 존재하는 이유가 바로 이것, ‘이미 답이 있는 문제를 즉시 닫는다’입니다.

3.4 Code Agent: 담당 영역과 실제 케이스

담당 영역

  • Knowledge Base로 풀리지 않는 케이스에서, 사내 레포 코드를 직접 읽어 원인을 특정합니다.
  • 16개 레포 가운데 어디인지는 Supervisor가 지정하고, Code Agent가 S3에 캐시된 {repo}.tar.gz를 받아 /mnt/workspace에 풀어 grep, file_read, Serena MCP(LSP)로 분석합니다.
  • GitHub REST API를 직접 호출하지는 않습니다. push 시점에 GitHub → S3로 미러링된 tar.gz를 쓰는데, 자세한 건 Code Agent 구현 절(2편)에서 다룹니다.

실제 케이스: “예약 상세 페이지에서 어제부터 계약 정보가 안 보입니다”

들어온 화면은 폼 웹 /reservation/[id], 어제 배포 직후.

Supervisor → ask_knowledge_agent(...) → diagnosis.match=false (Knowledge Base miss)
Supervisor → ask_code_agent(repo="<org>/<repo>",
                            problem="reservation detail에서 selfContract 비교 실패")
  ↓
Code Agent:
  ensure_repo("<org>/<repo>")
      └ s3://<repo-cache-bucket>/repo-cache/<repo>.tar.gz 다운로드
      └ /mnt/workspace/<repo>/ 압축 해제 (캐시 적중 시 스킵)
  shell  : grep -rl "selfContract" src/pages/reservation
  Serena : find_symbol("ReservationDetail", include_body=True)
          → 라인 142: selfContract.id === response.contract_id
  결론: 프론트엔드 strict equality + 타입 혼재 (string vs number).
       → String(...) === String(...) 패치 제안.

Knowledge Base miss에 어제 배포까지 겹친 상황입니다. 사람이 했다면 ‘어느 레포 → 어느 파일 → 어느 라인’을 추적하는 데만 1시간 이상 들어갔을 일이죠. Code Agent는 같은 일을 약 20~40초에 끝냅니다. 이렇게 결정론적인 코드 탐색이야말로, 사람이 직접 떠안지 않아도 되는 일입니다.

3.5 DB Agent: 담당 영역과 실제 케이스

담당 영역

  • 코드만 봐서는 답이 나오지 않는, 특정 레코드의 상태나 값을 확인해야 진단되는 문의를 처리합니다.
  • rds-mcp-server를 통해 읽기 전용 DB user로 DESCRIBE와 SELECT만 수행합니다. INSERT/UPDATE/DELETE 권한은 DB 사용자 레벨에서 아예 막혀 있습니다.
  • 결과에 담긴 needs_code_check 플래그로 DB → Code 교차 분석을 자동으로 트리거합니다.

실제 케이스: “예약 ID 7823이 결제됐는데 모바일 앱에서 안 떠요”

Supervisor → ask_knowledge_agent → Knowledge Base miss
Supervisor: 특정 ID 언급 + 데이터 의심 → DB Agent 우선
            → ask_db_agent(db_name="<service-db>",
                           question="reservation_id=7823 status, is_visible 확인")
  ↓
DB Agent via rds-mcp-server:
  ① DESCRIBE reservations
  ② SELECT id, status, is_visible, updated_at FROM reservations WHERE id = 7823;
  → status='COMPLETED', is_visible=false ← 비정상
  결론: { needs_code_check: true,
          hypothesis: "결제 완료됐는데 is_visible 갱신 누락" }
  ↓
Supervisor: needs_code_check=true → Code Agent 교차 호출
            → 결제 webhook 실패 시 is_visible=false 처리하는 catch 블록 발견
            → "webhook 재시도 후 is_visible 수동 복구 필요"

코드만 봐서는 절대 답이 나오지 않는 문의입니다. 사람이 했다면 DB 권한자에게 핑을 보내고, 그가 회의 중이면 30분에서 몇 시간을 기다린 뒤에야 데이터를 확인하고, 그다음 다시 코드 담당자에게 핑을 보내야 합니다. DB Agent는 데이터 진단을 즉시 끝내고, needs_code_check로 Code Agent까지 자동으로 넘깁니다. 이 DB → Code 교차 분석은 단일 에이전트로는 흉내 내기 어려운 흐름입니다. 운영 DB 접근에 적용한 안전 장치(rds-mcp-server 게이트웨이, SELECT 강제, LIMIT 자동 주입 등)의 상세는 2편 4.3에서 다룹니다.

이어서 2편에서는 각 에이전트를 실제 구현하며 겪은 우여곡절을 디테일하게 다루며, 사람과 AI 도입 이후에 대한 비교 결과를 제시합니다.


면책 조항: 본문에 등장하는 예시 문의, 코드 조각, 식별자(예약 ID, DB 컬럼값 등)는 외부에 공개 가능한 수준으로 비식별·재구성한 것으로, 실제 고객 데이터 및 운영 환경과 무관합니다.

김윤수

김윤수

김윤수님은 A1Mobilsoft에서 웹 및 모바일 서비스 개발을 담당하고 있습니다. AI 에이전트 프로젝트에서는 서비스 환경에서 안정적으로 운영될 수 있도록 응답 속도와 비용 효율성, 예외 처리 성능 안정화를 고려한 구조 설계와 기술 검증을 전반적으로 주도했습니다. 기술을 위한 기술이 아닌, 비즈니스와 프로덕션 환경에서 확실한 시너지를 내는 실효성 있는 개선에 집중하고 있습니다.

김호정

김호정

김호정님은 A1Mobilsoft 프론트개발팀에서 프론트엔드 개발을 담당하고 있습니다. 사용자가 매일 마주하는 화면을 책임지며, 항상 ‘사용자가 체감하는 안정성과 편의성’을 최우선으로 두고 화면 이면의 구조까지 고민합니다. 사용자가 불편함을 느끼지 않는 경험을 누구나 누릴 수 있도록 노력하는 개발자가 되고자 합니다.

나호석

나호석

나호석님은 A1Mobilsoft에서 프론트엔드 개발을 담당하고 있습니다. 당장의 수정에 그치지 않고 문제의 근본을 해결하며, 사용자가 불편 없이 쓸 수 있는 견고한 화면을 만드는 데 집중하고 있습니다.

정미림

정미림

정미림님은 A1Mobilsoft에서 서비스 기획을 담당하고 있으며, 모빌리티 서비스의 운영 정책과 신규 기능을 기획하고 있습니다. 사용자 경험과 업무 효율을 함께 고려한 서비스 설계에 관심이 있으며, AI를 활용한 서비스 개선과 업무 자동화 방안을 고민하고 있습니다.

김보근

김보근

김보근님은 메가존클라우드에서 AI Architect를 맡고 있으며, AWS 기반 GenAI 시스템의 설계부터 구현까지 고객사의 AI 솔루션 아키텍처 구축을 함께하고 있습니다.

김세희

김세희

김세희님은 메가존클라우드에서 Solutions Architect를 맡고 있습니다. AWS 기반 인프라 설계 및 구축부터 AI 챗봇 PoC까지 다양한 고객사의 클라우드 환경에서의 서비스 도입을 지원하고 있습니다.

Sukwon Lee

Sukwon Lee

이석원 솔루션즈 아키텍트는 고객들의 비즈니스 문제를 AWS의 기술을 통해 해결하고 구현하는데 도움을 드리고 있습니다.

Hajeong Ryoo

Hajeong Ryoo

류하정 클라우드 영업 담당자는 고객과 함께 문제를 깊이 이해하고, AWS 클라우드와 AI 솔루션으로 창의적인 해결방안을 모색합니다. 기술을 통한 비즈니스 가치 창출에 집중하여 고객의 성공을 함께 만들어갑니다.