안녕하세요 여러분! 서버 관리하다가 매번 같은 응답 보내느라 손가락 아프셨죠?! ㅠㅠ 저도 그랬어요~ 매일 반복되는 서버 응답에 지쳐서 결국 자동화의 길을 찾아 나섰답니다! 이번엔 제가 직접 구현해본 Claude MCP Server 자동응답 시스템을 여러분께 소개해드릴게요. 복잡할 것 같지만 생각보다 정말 쉬워요! 코딩을 많이 해보지 않으셨더라도 이 글만 따라오시면 하루 만에 끝낼 수 있답니다. 진짜로요! ㅎㅎ
일단 가장 먼저 해야 할 일은 환경 세팅이에요! 아니 근데 솔직히 이거 처음에 진짜 헷갈려요 ㅠㅠ 저도 처음에 삽질 엄청 했답니다... 그래서 제가 직접 해보면서 정리한 순서대로 알려드릴게요! 이거 따라하면 진짜 실패할 일 없을 거예요 ㅋㅋ
먼저 Node.js가 설치되어 있어야 해요. 혹시 없으시면 여기서 다운받으시면 됩니다! 그 다음은 터미널이나 명령 프롬프트를 열고 아래 명령어로 필요한 패키지들을 설치해줍니다.
npm init -y
npm install express anthropic dotenv cors
위 명령어를 실행하면 기본적인 package.json 파일이 생성되고, 필요한 라이브러리들이 설치돼요. Express는 서버 구축용, Anthropic은 Claude API 사용을 위한 것, dotenv는 환경변수 관리용, cors는 교차 출처 리소스 공유 설정용이에요!
이제 프로젝트 폴더 구조를 만들어봅시다! 아래처럼 구성하면 나중에 관리하기도 편해요.
💡 TIP: 폴더 구조를 처음부터 잘 잡아두면 나중에 코드가 복잡해져도 관리하기 쉬워요! 저는 처음에 대충하다가 나중에 고생했답니다...
claude-mcp-server/
├── .env # 환경변수 파일
├── package.json # 패키지 정보
├── server.js # 메인 서버 파일
├── routes/ # 라우트 폴더
│ └── api.js # API 라우트
└── controllers/ # 컨트롤러 폴더
└── responseController.js # 응답 처리 컨트롤러
이제 Claude API 키를 발급받아야 해요! 이게 없으면 자동응답이 작동을 안 하니까 정말 중요합니다. API 키 발급은 생각보다 쉬워요. 제가 처음에 좀 겁먹었는데 막상 해보니까 별거 아니더라구요 ㅋㅋ
먼저 Anthropic Console에 접속해서 계정을 만들어주세요. 회원가입 후 로그인하면 API 키를 발급받을 수 있는 콘솔 화면이 나옵니다.
콘솔에서 "API Keys" 메뉴를 찾아 클릭한 다음 "Create API Key" 버튼을 누르면 새 API 키가 생성돼요. ⚠️ 중요: API 키는 한 번만 표시되니까 반드시 안전한 곳에 저장해두세요! 저는 실수로 창을 닫았다가 다시 발급받느라 고생했어요 ㅠㅠ
모델명 | 특징 | 사용 추천 |
---|---|---|
Claude 3 Haiku | 가장 빠르고 비용 효율적 | 간단한 응답, 높은 처리량 |
Claude 3 Sonnet | 균형잡힌 성능과 속도 | 대부분의 일반적 사용 사례 |
Claude 3 Opus | 최고 성능, 복잡한 작업 가능 | 전문적 작업, 정확도 중요 시 |
이제 발급받은 API 키를 프로젝트에서 사용할 수 있도록 환경 변수로 설정해야 해요. 프로젝트 루트 폴더에 .env 파일을 만들고 아래 내용을 입력합니다.
ANTHROPIC_API_KEY=your_api_key_here
PORT=3000
MODEL=claude-3-haiku-20240307
당연히 "your_api_key_here" 부분은 여러분이 발급받은 실제 API 키로 바꿔주셔야 해요! MODEL은 사용할 Claude 모델을 지정하는 건데, 일단 가장 가벼운 Haiku로 시작하는 게 좋아요. 속도도 빠르고 비용도 적게 들거든요~
드디어 본격적인 코딩 시간입니다! 걱정 마세요, 복잡하지 않아요. 제가 단계별로 쉽게 설명해드릴게요. 사실 저도 처음엔 좀 어려웠는데 하다보니 별거 아니더라구요~ ㅎㅎ
가장 먼저 server.js 파일을 만들어 기본적인 Express 서버를 설정해야 해요. 아래 코드를 복사해서 사용하면 됩니다.
// server.js
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const apiRoutes = require('./routes/api');
const app = express();
const PORT = process.env.PORT || 3000;
// 미들웨어 설정
app.use(cors());
app.use(express.json());
// 라우트 설정
app.use('/api', apiRoutes);
// 기본 라우트
app.get('/', (req, res) => {
res.send('Claude MCP Server 자동응답 시스템이 실행 중입니다!');
});
// 서버 시작
app.listen(PORT, () => {
console.log(`서버가 http://localhost:${PORT} 에서 실행 중입니다`);
});
다음으로 routes 폴더 안에 api.js 파일을 만들어주세요. 이 파일은 API 엔드포인트를 정의합니다.
// routes/api.js
const express = require('express');
const router = express.Router();
const responseController = require('../controllers/responseController');
// 자동응답 엔드포인트
router.post('/generate-response', responseController.generateResponse);
// 상태 확인 엔드포인트
router.get('/status', (req, res) => {
res.json({ status: 'online', timestamp: new Date() });
});
module.exports = router;
여기서는 두 가지 엔드포인트를 만들었어요. /api/generate-response는 실제로 Claude를 통해 자동응답을 생성하는 엔드포인트이고, /api/status는 서버가 정상적으로 작동하는지 확인하는 상태 체크 엔드포인트예요.
이제 controllers 폴더에 responseController.js 파일을 만들고 실제 Claude API와 통신하는 코드를 작성해봅시다. 여기가 가장 중요한 부분이니까 집중해주세요!
// controllers/responseController.js
const { Anthropic } = require('@anthropic-ai/sdk');
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
});
// 자동응답 생성 컨트롤러
exports.generateResponse = async (req, res) => {
try {
const { prompt, systemPrompt, maxTokens } = req.body;
if (!prompt) {
return res.status(400).json({ error: '프롬프트가 필요합니다' });
}
const response = await anthropic.messages.create({
model: process.env.MODEL || 'claude-3-haiku-20240307',
max_tokens: maxTokens || 1000,
system: systemPrompt || '당신은 도움이 되는 AI 비서입니다.',
messages: [{ role: 'user', content: prompt }]
});
return res.json({
success: true,
response: response.content[0].text,
model: response.model,
usage: response.usage
});
} catch (error) {
console.error('Error generating response:', error);
return res.status(500).json({ error: error.message });
}
};
이 코드는 클라이언트로부터 받은 프롬프트를 Claude API에 전달하고, 생성된 응답을 돌려주는 역할을 해요. req.body에서 prompt(필수), systemPrompt(선택), maxTokens(선택) 값을 받아와 Claude API 호출에 사용합니다.
💡 TIP: systemPrompt는 Claude의 역할을 정의하는 중요한 부분이에요. 여기에 자동응답의 톤이나 스타일, 응답해야 할 내용의 범위 등을 자세히 지정해주면 더 정확한 응답을 얻을 수 있어요!
자, 이제 코드를 다 작성했으니 제대로 작동하는지 테스트해볼 차례예요! 테
스트는 정말 중요해요. 저는 처음에 테스트를 제대로 안 하고 바로 배포했다가 에러가 나서 고생했거든요... ㅠㅠ
터미널에서 아래 명령어로 서버를 실행해보세요.
node server.js
"서버가 http://localhost:3000 에서 실행 중입니다"라는 메시지가 나오면 성공이에요! 웹 브라우저에서 http://localhost:3000 주소로 접속해보면 "Claude MCP Server 자동응답 시스템이 실행 중입니다!"라는 메시지가 보여야 해요.
API 테스트는 Postman이나 curl 같은 도구를 사용하면 편해요. 저는 Postman 쓰는 걸 추천합니다! 더 직관적이거든요.
Postman에서 POST 요청을 다음과 같이 설정해주세요:
- URL: http://localhost:3000/api/generate-response - Method: POST - Body (raw, JSON):
{
"prompt": "안녕하세요, 오늘 날씨는 어때요?",
"systemPrompt": "당신은 친절한 날씨 안내 도우미입니다. 항상 밝고 긍정적인 태도로 응답해주세요.",
"maxTokens": 500
}
요청을 보내면 Claude API가 생성한 응답이 돌아와야 해요! 근데 처음에 API 키 설정 문제나 네트워크 에러가 발생할 수 있으니 에러 메시지를 잘 확인해보세요.
만약 테스트 중에 문제가 발생한다면, 다음 사항들을 확인해보세요:
로컬에서 테스트가 잘 됐다면 이제 실제 서버에 배포할 차례입니다! 처음 배포할 때는 좀 긴장되는데요, 천천히 따라하면 쉽게 할 수 있어요 ㅎㅎ
여러 배포 플랫폼 중에서 고를 수 있어요. 제가 자주 사용하는 몇 가지를 소개해드릴게요:
플랫폼 | 장점 | 난이도 |
---|---|---|
Heroku | 사용하기 쉽고, 자동 배포 기능 | 쉬움 |
Vercel | 무료 티어 제공, GitHub 연동 | 쉬움 |
AWS EC2 | 완전한 제어, 확장성 | 어려움 |
저는 처음엔 Heroku로 시작했어요. 무료 티어가 있고 사용하기도 쉬워서 입문자에게 딱이더라구요! 지금은 트래픽이 많아져서 AWS로 옮겼지만, 처음 시작하시는 분들께는 Heroku나 Vercel을 추천해요. 진짜 편하거든요~
Heroku에 배포하는 방법을 간단히 소개해드릴게요:
✅ 1단계: Heroku 계정 만들기 (https://signup.heroku.com)
✅ 2단계: Heroku CLI 설치하기
✅ 3단계: 프로젝트에 Procfile 추가하기 (내용: web: node server.js
)
✅ 4단계: 터미널에서 아래 명령어 실행하기
# Heroku에 로그인
heroku login
# 새 Heroku 앱 생성
heroku create claude-mcp-server
# 환경변수 설정
heroku config:set ANTHROPIC_API_KEY=your_api_key_here
heroku config:set MODEL=claude-3-haiku-20240307
# 배포하기
git push heroku main
⚠️ 주의: API 키를 Heroku 환경변수로 설정할 때는 절대로 실수하지 마세요! API 키가 노출되면 다른 사람이 여러분의 계정으로 API를 사용할 수 있어요. 그럼 요금이 막 나갈 수도 있답니다... 저도 한번 이렇게 당했어요 ㅠㅠ
기본적인 자동응답 시스템이 완성되었지만, 여기서 더 발전시킬 수 있는 여러 가지 방법이 있어요! 제가 실제로 구현해봤던 몇 가지 기능들을 소개해드릴게요. 여러분의 필요에 따라 추가해보세요 ㅎㅎ
Claude는 기본적으로 대화 기록을 저장하지 않아요. 하지만 자동응답 시스템에서 대화 맥락을 유지하려면 대화 기록을 저장해두는 게 필요해요. MongoDB 같은 데이터베이스를 연결해서 대화 기록을 저장하면 좋아요. 아래 코드는 MongoDB 연결 예시입니다.
// MongoDB 설정 예시 (server.js에 추가)
const mongoose = require('mongoose');
mongoose.connect(process.env.MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => console.log('MongoDB 연결 성공'))
.catch(err => console.error('MongoDB 연결 에러:', err));
// 대화 모델 예시 (models/conversation.js)
const mongoose = require('mongoose');
const messageSchema = new mongoose.Schema({
role: String,
content: String,
timestamp: { type: Date, default: Date.now }
});
const conversationSchema = new mongoose.Schema({
userId: String,
messages: [messageSchema],
createdAt: { type: Date, default: Date.now }
});
module.exports = mongoose.model('Conversation', conversationSchema);
API 사용량이 많아지면 비용도 늘어나기 때문에, 사용량을 모니터링하고 제한하는 기능도 중요해요. 아래 코드는 간단한 사용량 제한 미들웨어 예시입니다.
// middlewares/rateLimit.js
const rateLimit = require('express-rate-limit');
const apiLimiter = rateLimit({
windowMs: 60 * 60 * 1000, // 1시간
max: 100, // IP당 100회 요청 제한
message: {
error: '너무 많은 요청이 발생했습니다. 1시간 후에 다시 시도해주세요.'
}
});
module.exports = apiLimiter;
// server.js에 미들웨어 추가
const apiLimiter = require('./middlewares/rateLimit');
app.use('/api', apiLimiter);
저도 처음에는 사용량 제한을 안 걸어뒀다가 갑자기 API 비용이 폭증해서 당황했던 적이 있어요 ㅠㅠ 꼭 걸어두세요!
Claude는 다양한 형식의 응답을 생성할 수 있어요. 텍스트뿐만 아니라 JSON, 마크다운, HTML 등 다양한 형식으로 응답을 받을 수 있도록 시스템을 확장할 수 있어요. 아래는 JSON 형식의 응답을 요청하는 예시입니다.
// JSON 응답 생성 예시
const systemPrompt = `
당신은 JSON 형식으로 응답하는 AI 비서입니다.
아래 형식으로 항상 응답해주세요:
{
"answer": "질문에 대한 답변",
"confidence": 0-100 사이의 신뢰도 점수,
"sources": ["참고 자료"]
}
`;
const response = await anthropic.messages.create({
model: process.env.MODEL,
max_tokens: 1000,
system: systemPrompt,
messages: [{ role: 'user', content: prompt }]
});
// JSON 파싱 예시
try {
const jsonResponse = JSON.parse(response.content[0].text);
return res.json({
success: true,
data: jsonResponse
});
} catch (error) {
console.error('JSON 파싱 에러:', error);
return res.status(500).json({ error: 'JSON 파싱 중 오류가 발생했습니다' });
}
이렇게 하면 클라이언트가 JSON 데이터를 받아서 더 쉽게 처리할 수 있어요. 특히 모바일 앱이나 웹 프론트엔드와 연동할 때 유용하죠!
Claude API는 토큰 사용량에 따라 요금이 부과됩니다. Claude 3 Haiku는 가장 저렴한 모델로, 입력 토큰당 $0.25/백만 토큰, 출력 토큰당 $1.25/백만 토큰 정도의 비용이 발생합니다. 일반적인 자동응답 시스템은 한 달에 몇 달러 정도면 충분히 운영할 수 있어요.
Claude 3 Haiku 모델을 사용할 경우 일반적으로 1-3초 내외로 응답이 생성됩니다. 물론 네트워크 상태나 요청 복잡도에 따라 조금 더 걸릴 수 있어요. 참고로 Claude 3 Opus는 더 정확하지만 5-10초 정도 걸리기도 합니다.
Claude API는 기본적으로 전송 중 암호화(HTTPS)를 사용하지만, 매우 민감한 데이터는 처리하지 않는 것이 좋습니다. Anthropic의 개인정보 처리방침에 따라 전송된 데이터가 모델 개선을 위해 사용될 수 있어요. 중요한 정보는 마스킹 처리하거나 별도 보안 조치를 취하는 것이 좋습니다.
API 키가 노출되었다면 즉시 Anthropic 콘솔에서 해당 키를 삭제하고 새 키를 발급받아야 합니다. 노출된 키로 인해 이미 비용이 발생했다면 Anthropic 고객 지원에 연락해 상황을 설명하세요. 그리고 다음부터는 .env 파일을 .gitignore에 추가하는 것 잊지 마세요!
.env 파일의 MODEL 변수 값만 변경하면 됩니다. 예를 들어 'claude-3-sonnet-20240229'나 'claude-3-opus-20240229'로 변경할 수 있어요. 더 정확한 응답이 필요할 때는 Opus 모델을, 속도와 비용의 균형이 필요할 때는 Sonnet 모델을 사용하세요.
AI 모델은 100% 정확하지 않을 수 있습니다. 중요한 정보는 항상 검증이 필요해요. systemPrompt를 더 구체적으로 작성하거나, 특정 분야에 대한 정보를 제공할 때는 출처를 요청하도록 설정할 수 있습니다. 또한 모델 버전을 더 높은 것으로 변경하면 정확도가 향상될 수 있어요.
여러분, 오늘은 하루 만에 끝내는 Claude MCP Server 자동응답 시스템 구현에 대해 함께 알아봤어요! 어때요? 생각보다 쉽지 않나요? ㅎㅎ 처음에는 API 연동이나 서버 배포가 어려워 보일 수 있지만, 차근차근 따라하다 보면 금방 마스터할 수 있어요. 저도 처음에는 이것저것 에러 투성이었는데, 몇 번 해보니까 이제는 30분만에 뚝딱 만들 수 있게 됐답니다! 여러분도 꼭 성공하실 거예요~
이 자동응답 시스템을 구축하면 서버 운영이 훨씬 편해질 거예요. 자주 묻는 질문에 자동으로 응답하게 하거나, 데이터 분석을 자동화하거나, 심지어 고객 상담도 가능하답니다. 혹시 구현하시다가 어려운 점이 있으면 댓글로 물어봐 주세요! 제가 아는 한 최대한 도와드릴게요. 다음에는 더 고급 기능을 추가하는 방법이나, 다른 AI 모델과 연동하는 방법에 대해서도 포스팅해볼까 생각 중이에요. 어떤 주제가 궁금하신지 댓글로 알려주시면 더 좋을 것 같네요!
💎 마지막 TIP:
서버 구현도 중요하지만, Claude에게 어떻게 지시를 내리느냐(systemPrompt)가 더 중요할 때가 많아요. 다양한 systemPrompt를 실험해보면서 가장 적합한 응답을 만들어보세요!