Claude Code에게 "이 데이터베이스를 중단하면 누가 곤란해지나요?"라고 물어보고 근거까지 추적하기
요약
기존 AI는 코드 구조 분석에는 능하지만, 데이터베이스 중단 시의 비즈니스 영향(누가 사용하는지)을 파악하는 데 한계가 있습니다. 본문은 MCP 서버와 ADL(Architecture Description Language)을 활용하여 시스템별 유스케이스 정보를 Claude Code에 제공함으로써, 단순 코드를 넘어선 업무적 근거까지 추적하는 방법을 제시합니다.
핵심 포인트
- AI는 코드 구조 정보만 읽어 비즈니스 맥락 파악에 한계가 있다.
- MCP 서버와 ADL은 시스템별 유스케이스(누가, 무엇을 하는지)를 정의한다.
- Claude Code는 외부 데이터를 연결하여 단순 코드를 넘어선 영향 분석이 가능하다.
- 터미널 명령어로 MCP 서버를 쉽게 추가하고 관리할 수 있다.
현재 사용하고 있는 AI를 시스템 유지보수에 강하게 만들고 싶은 분들을 위해 작성되었습니다.
개발 지원 AI는 코드 자체에 관한 답변에는 능숙합니다. 하지만 "이 데이터베이스를 중단하면 누가 곤란해지나요?"라고 질문했을 때, 그 결과는 기대에 미치지 못한다고 느낍니다. 왜냐하면 해당 시스템을 누가, 어떤 업무로 사용하고 있는지는 세부 자료나 담당자의 기억 속에 파편화되어 있을 뿐, 코드 자체에는 기록되어 있지 않기 때문입니다.
본문에서는 이러한 질문에 정확하게 답변하기 위해 MCP 서버가 어떻게 도움이 되는지 소개합니다. Claude Code에 MCP 서버를 단 한 줄로 추가하고, 등록 과정 없이 열 수 있는 공개 샘플을 사용하여, 이 질문에 대한 답과 그 근거까지 직접 재현해 보겠습니다.
사용하는 것은 저희가 운영하는 IceShore의 MCP 서버입니다. 터미널에서 명령어 2개와 Claude Code에게 던지는 질문 3개만으로 답변에 도달하며, 마지막에는 curl과 jq를 사용하여 AI를 거치지 않고 동일한 결과를 얻습니다.
Claude Code가 리포지토리로부터 읽어낼 수 있는 것은 구조적인 정보뿐입니다. 어떤 서비스가 어느 데이터베이스에 데이터를 기록하는지는 코드나 CloudFormation, Terraform 등을 읽으면 알 수 있습니다.
반면 "그 기록이 누구의 어떤 업무를 위한 것인가"는 코드에 적혀 있지 않고 자료나 담당자의 기억 속에 흩어져 있습니다. 따라서 데이터베이스를 중단했을 때 어려움을 겪을 대상을 답변하려면, 구조적인 정보 외에도 시스템별 유스케이스(누가, 어느 정도 인원으로, 어떤 경로를 통해 무엇을 하는지)가 필요합니다.
IceShore는 이러한 유스케이스를 정의 언어 ADL (Architecture Description Language)로 작성된 구성도로 가지고 있으며, 이를 MCP를 통해 Claude Code에 전달합니다. ADL은 JSON으로 되어 있기 때문에 후반부에서는 AI를 거치지 않고도 jq를 사용하여 동일한 집계를 수행할 수 있습니다.
터미널에서 다음 1줄을 실행합니다.
claude mcp add -s user iceshore --transport http https://mcp.iceshore.ai/mcp
실행하면 다음과 같이 반환됩니다.
Added HTTP MCP server iceshore with URL: https://mcp.iceshore.ai/mcp to user config
File modified: /Users/<당신>/.claude.json
여기서 iceshore 부분은 Claude Code가 이 연결을 호출할 때 사용하는 이름입니다. -s user는 사용자 전체 설정(user)을 덮어씁니다. 만약 프로젝트별로 작업 환경을 분리하는 규정이 있다면, 프로젝트 단위의 스코프를 이용해 주세요. 테스트를 마쳤다면, claude mcp remove iceshore -s user 명령어로 제거할 수 있습니다.
연결이 되었는지 다음 명령어로 확인합니다.
claude mcp list
iceshore: https://mcp.iceshore.ai/mcp (HTTP) - ✔ Connected
IceShore 항목이 ✔ Connected를 반환하고 있다면 연결에 성공한 것입니다. 참고로 이 표시는 Claude Code의 버전에 따라 변동될 수 있습니다.
여기서는 인증을 요구하지 않습니다. 등록이나 로그인 없이 호출할 수 있는 것은 공개 샘플 목록을 반환하는 list_samples, 샘플 내용을 반환하는 get_content, 사용법 안내를 반환하는 get_guide의 3가지입니다. 단순히 샘플만 읽어볼 목적이라면 이 3가지만으로 충분합니다.
여기부터 Claude Code에게 말을 겁니다. 사용한 프롬프트는 다음과 같습니다.
샘플 구성도를 보여줘. 진료 기록 데이터베이스를 중단하면 누가 곤란해지나요?
Claude Code는 샘플 목록을 가져와 IceShore에 게시된 공개 샘플인 "Clivasoft 진료 기록・예약 시스템"의 구성도를 읽고, 경로를 거슬러 올라가 답변합니다. 다른 샘플이 선택되었다면, 프롬프트에서 이 이름을 지정해 주세요. 반환된 내용은 다음과 같았습니다.
- 의사가 진료 기록을 보는 경로 (진료 기록 참조)
- 환자의 온라인 예약
- 접수 직원의 예약 관리
- 매일 밤 2시에 실행되는 백업
【이미지: Claude Code에 위 프롬프트를 입력하여 4가지 업무가 반환된 화면. 오너 촬영】
구성도에는 각각의 기점이 다음과 같이 적혀 있습니다.
| 업무 | 시작점(Trigger) | 구성도에 명시된 규모 |
|---|---|---|
| 진료 기록 참조 | 담당 의사 | 20명 |
| ... |
네 번째는 정기 처리로, 사람이 조작하지 않아도 매일 밤 실행됩니다. 데이터베이스를 중단하는 작업은 새벽 2시 전후를 피해서 구성할 수 있습니다.
답변이 추측이 아님은 구성도 내용으로 확인할 수 있습니다. 이어서 다음과 같이 질문합니다.
현재 답변의 근거가 된 ADL 부분을 보여주세요.
이 샘플 ADL에서는 유스케이스별로 시작점(trigger)과 거기서 이어지는 경로(traffics)가 작성되어 있습니다. 시작점을 실행하는 사람이나 외부 이용자는 '액터(Actor)'라고 부르며, actors에 인원수와 함께 정의되어 있습니다. 의사의 진료 기록 참조를 추출하면 다음과 같은 형태입니다 (설명문이나 통신량 항목은 생략했습니다).
"recordAccess": {
"title": { "ja": "진료 기록 참조" },
"trigger": {
...
추적 경로는 3단계입니다.
end가DatabaseCluster를 가리키는 경로를 찾습니다 (여기서는t2RdsRecord). - 그 경로의source를,trigger에 도달할 때까지 거슬러 올라갑니다. -trigger의start가 가리키는 액터가 곤란해하는 대상입니다. 여기서는clinicPhysicians(담당 의사)입니다.
end의 도착지는 CloudFormation 템플릿 내의 리소스 이름을 그대로 가리킵니다. ADL은 리소스의 구조를 복사하지 않고, 구성 관리 파일을 참조합니다. ADL이 추가하는 것은 그 위에 놓이는 '누가・무엇을 위해'라는 부분입니다.
백업만은 형태가 다릅니다. 사람의 조작이 아니기 때문에, trigger의 start가 데이터베이스 자체(DatabaseCluster)를 가리키고, schedule에 0 2 * * *가 들어 있습니다. 답변의 '매일 밤 2시'는 여기서 나옵니다.
중단하는 이야기뿐만 아니라, 변경하는 이야기도 같은 형태로 질문할 수 있습니다.
웹 계층의 EC2 Auto Scaling Group (WebAutoScalingGroup)을 교체하면 어떤 업무에 파급되나요?
구성도 상에서는 온라인 예약, 예약 관리(접수 직원), 진료 기록 참조 세 가지가 중간 경로에서 WebAutoScalingGroup을 거칩니다. 야간 백업은 시작점이 데이터베이스이고, end 역시 데이터베이스 인스턴스(DatabaseInstance0와 DatabaseInstance1)이므로, 여기에는 포함되지 않습니다.
AI의 답변을 AI를 통하지 않고 확인하고 싶은 경우도 있습니다. 샘플 읽기는 인증이 필요 없으므로, curl로 MCP 서버에 직접 get_content를 호출할 수 있습니다. 반환 값 안에 ADL이 JSON 문자열 형태로 들어있기 때문에, fromjson으로 두 번 파싱하여 adl.json에 저장합니다.
curl -s https://mcp.iceshore.ai/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
...
id는 list_samples가 반환하는 Clivasoft 샘플의 ID입니다.
다음 jq 명령어는 지정된 리소스에 영향을 받는 유스케이스와 그 시작점을 반환합니다.
jq -r --arg r DatabaseCluster '
. as $adl
| .useCases[]
...
온라인 예약 환자・디지털 의료 이용자
예약 관리(접수 직원) 접수 직원
진료 기록 참조 담당 의사
...
식의 읽는 방법은 다음과 같습니다.
[.trigger, .traffics[]?]로 유스케이스의 시작점과 경로를 하나의 배열로 묶습니다. - `.start[
변환하면, 백업을 제외한 3개가 반환됩니다. 이는 질문 1과 질문 3의 답과 일치합니다.
이 수식은 source를 역추적하지 않고, 유스케이스 내에서 대상 리소스를 참조하는 부분이 있는지 여부만 보고 있습니다. 하나의 유스케이스 경로는 하나로 연결되어 있기 때문에, 이번 ADL에서는 그것으로 같은 결과를 얻습니다. 또한, 리소스 이름만으로 대조하기 때문에, 다른 템플릿에 동일한 이름을 가진 리소스가 있다면 그것도 가져옵니다.
ADL의 언어 사양과 스키마는 Apache License 2.0으로 공개되어 있습니다. IceShore를 사용하지 않아도, 같은 형태의 JSON을 리포지토리에 놓으면 이 jq로 동일한 집계를 할 수 있습니다.
동일한 샘플은 브라우저에서도 열 수 있습니다. 답이 맞는지 그림으로 확인할 수 있습니다.
IceShore에 게재된 공개 샘플 'Clivasoft 진료 기록/예약 시스템'을 연결한 AI가 읽은 결과입니다.
자신의 시스템에 사용할 때는 Claude Code에게 '이 리포지토리의 시스템을 IceShore에 등록해 줘'라고 요청합니다. Claude Code가 손안 자료와 CloudFormation이나 Terraform 같은 구성 관리 파일을 읽고(읽지 않아도 무방합니다), 유스케이스를 정리하여 ADL 초안을 작성합니다. IceShore에 저장되는 것은 ADL과, 거기서 참조하는 구성 관리 파일입니다. 비밀번호 등 보이는 값은 저장 전에 마스크 처리됩니다. 저장을 위해서는 로그인이 필요하며, 그 과정에서 Claude Code가 등록 방법을 안내합니다.
사람이 가장 먼저 하는 것은 완성된 구성도 확인입니다. 구성도가 생각한 것과 다르다면, Claude Code가 사용자의 시스템을 그렇게 이해하고 있다는 의미입니다. 다른 부분을 지적하여 수정하게 하면, 다음 질문부터는 그 이해를 바탕으로 답변합니다.
이상입니다. 참고로, IceShore는 유료이지만(무료 플랜이 있으며, 혼자 사용하는 범위라면 구성도 수에 제한은 없습니다), 구성도 작성에 사용되는 ADL은 오픈 소스입니다. IceShore는 시스템별 유스케이스 정리를 사용자 AI에게 촉진하고, 구성도를 자동 생성하는 구성 관리 플랫폼입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기