WGAλ AWS ν΄λΌμ°λ μ΄μ μ 보λ₯Ό μμ°μ΄λ‘ μ§μμλ΅ν μ μλ μλ²λ¦¬μ€ κΈ°λ°μ AI μ±λ΄ μλΉμ€μ λλ€. μ¬μ©μλ 볡μ‘ν AWS μ½μμ μ§μ μ‘°μνλ λμ , κ°λ¨ν μμ°μ΄ μ§λ¬Έμ ν΅ν΄ ν΄λΌμ°λ μμ μν, λΉμ© λΆμ, 보μ μ΄λ²€νΈ, λ‘κ·Έ λΆμ λ±μ μ 보λ₯Ό μ¦μ μ»μ μ μμ΅λλ€.
- κ°νΈν μ κ·Όμ±: μμ°μ΄ κΈ°λ° μ§μλ‘ AWS μ λ¬Έ μ§μ μμ΄λ ν΄λΌμ°λ μ 보 μ‘°ν κ°λ₯
- μ νν λ΅λ³: AWS 곡μ λ¬Έμλ₯Ό κΈ°λ°μΌλ‘ μ νν λ΅λ³ μ 곡
- μ€μκ° λͺ¨λν°λ§: CloudWatch λ‘κ·Έμ λμ보λλ₯Ό ν΅ν μ€μκ° μμ€ν μν νμ
- λΉμ© μ΅μ ν: AWS λΉμ© λΆμ λ° μ΅μ ν μ μ
- 보μ κ°ν: 보μ μ΄λ²€νΈ λͺ¨λν°λ§ λ° μλ¦Ό
- Frontend: React 18, TypeScript, Vite, Tailwind CSS
- Backend: AWS Lambda (Python 3.12), API Gateway
- AI/ML: Claude Sonnet 4, AWS Bedrock, MCP (Model Context Protocol)
- Database: DynamoDB
- Storage: S3 (μ μ νμΌ, λ‘κ·Έ μ μ₯)
- Monitoring: CloudWatch Log, CloudWatch Dashboard, Billing and Cost Management
- Authentication: AWS Cognito
- Infrastructure: CloudFormation, AWS CDK
- CI/CD: CodeBuild, Amplify
- λ‘κ·Έ λΆμ: "μ΄μ S3μ μ κ·Όν μ¬μ©μλ λꡬμΈκ°μ?"
- λΉμ© λΆμ: "μ§λ μ£Ό Opensearch λΉμ©μ΄ μΌλ§λ λμλμ?"
- 보μ μ‘°ν: "μ΅κ·Ό μ€ν¨ν λ‘κ·ΈμΈ μλκ° μλμ?"
- AWS λ¬Έμ κ²μ: "GuardDuty μ¬κ°λλ μ΄λ€ μλ―ΈμΈκ°μ?"
- CloudWatch λ‘κ·Έ λΆμ: μλΉμ€λ³ λ‘κ·Έ μ‘°ν λ° λΆμ
- CloudWatch λμ보λ λͺ¨λν°λ§: μ£Όμ μλΉμ€λ₯Ό μ€μκ°μΌλ‘ λͺ¨λν°λ§
- CloudTrail μ΄λ²€νΈ: AWS API νΈμΆ μ΄λ ₯ λ° μ¬μ©μ νλ μΆμ
- GuardDuty 보μ μ΄λ²€νΈ: 보μ μν λΆμ
- λΉμ© λΆμ: μλΉμ€λ³, 리μ λ³, μΌλ³ λΉμ© λΆμ
- λμ μ°¨νΈ: λ§λ μ°¨νΈ, λΌμΈ μ°¨νΈ, νμ΄ μ°¨νΈ, μ°μ λ λ±
- μν€ν μ² λ€μ΄μ΄κ·Έλ¨: AWS μΈνλΌ μκ°ν
- νλ‘μ°μ°¨νΈ: νλ‘μΈμ€ νλ¦λ μμ±
- λ§μΈλλ§΅: ꡬ쑰νλ μ 보 νν
- μ€μκ° λ¬Έμ κ²μ: AWS 곡μ λ¬Έμμμ ν€μλ κΈ°λ° κ²μ
- 컨ν μ€νΈ κΈ°λ° μΆμ²: νμ¬ μ§λ¬Έκ³Ό κ΄λ ¨λ λ¬Έμ μλ μΆμ²
- λ€κ΅μ΄ μ§μ: μλ¬Έ λ¬Έμλ₯Ό νκ΅μ΄λ‘ μλ λ²μνμ¬ μ 곡
- μΉ μΈν°νμ΄μ€: React κΈ°λ° λ°μν μΉ μ±
- Slack λ΄: μ¬λ μ±λμμ μ§μ μ§μ κ°λ₯
- μΈμ κ΄λ¦¬: μ¬μ©μλ³ λν νμ€ν 리 μ μ₯
- 컨ν μ€νΈ μ μ§: μ΄μ λν λ΄μ©μ κΈ°λ°μΌλ‘ ν μ°μ μ§μ
- νμ€ν 리 κ²μ: κ³Όκ±° μ§μ λ° λ΅λ³ κ²μ
- μν΄λ¦ λ°°ν¬: λ¨μΌ μ€ν¬λ¦½νΈλ‘ μ 체 μΈνλΌ λ°°ν¬
- CloudFormation κΈ°λ°: AWS λ€μ΄ν°λΈ IaCλ‘ μμ μ μΈ μΈνλΌ κ΄λ¦¬
- μλνλ λΉλ: CodeBuildλ₯Ό ν΅ν Docker μ΄λ―Έμ§ μλ λΉλ λ° λ°°ν¬
- νκ²½λ³ λΆλ¦¬: dev/test/prod νκ²½ λ 립 λ°°ν¬ λ° κ΄λ¦¬
WGA_production/
ββcloudformation
ββfrontend
β ββpublic
β ββsrc
β ββassets
β ββcomponents
β ββdirectives
β ββlayouts
β ββrouter
β ββstores
β ββtypes
β ββutils
β ββviews
ββimages
ββlayers
β ββcommon
ββmcp
β ββlambda_mcp
ββservices
β ββchat-history
β ββdb
β ββllm
β ββslackbot
β
βββ deploy.sh
- AWS CLI μ€μ λ° μ μ ν κΆν
- Service Quotas -> API Gateway -> Maximum integration timeout in milliseconds -> 180000msλ‘ λ³κ²½ μμ²(μλ μΉμΈ)
- Node.js 18+
- Python 3.12+
# AWS CLI μ€μ
aws configure# νλ‘μ νΈ ν΄λ‘
git clone https://github.com/WeGoAWS/WGA_production.git
cd WGA_production
# SSM νλΌλ―Έν° μ€μ (νμν κ²½μ°)
aws ssm put-parameter --name "/wga/${Environment}/SlackbotToken" --value "your-slack-token" --type "SecureString"
aws ssm put-parameter --name "/wga/${Environment}/ANTHROPIC_API_KEY" --value "your-anthropic-key" --type "SecureString"# κ°λ° νκ²½ λ°°ν¬
./deploy.sh dev
# νλ‘λμ
νκ²½ λ°°ν¬
./deploy.sh prodλ°°ν¬ μλ£ ν λ€μ μ λ³΄κ° μΆλ ₯λ©λλ€:
- νλ‘ νΈμλ URL:
https://ENVIRONMENT.xxxxxxxxxxxxx.amplifyapp.com - API Gateway URL:
https://xxxxxxxxxx.execute-api.AWSREGION.amazonaws.com/ENVIRONMENT - MCP Function URL:
https://xxxxxxxxxx.lambda-url.AWSREGION.on.aws/
μΆκ°λ‘, SSM Parameter μ 보λ μ 곡λ©λλ€.
- Slack μ± μμ± λ° λ΄ ν ν° λ°κΈ
- SSM Parameter Storeμ ν ν° μ μ₯
- Slack μ±μ λ€μ κΈ°λ₯ μΆκ°:
- Slash Commands:
/models - Interactive Components
- Bot Token Scopes:
chat:write,im:write
- Slash Commands:
- λΈλΌμ°μ μμ νλ‘ νΈμλ URL μ μ
- Cognitoλ₯Ό ν΅ν λ‘κ·ΈμΈ
- μ±ν μΈν°νμ΄μ€μμ μμ°μ΄ μ§λ¬Έ μ λ ₯
# λͺ¨λΈ μ€μ
/models
# μ§μ μ€ν
μ΄μ EC2 μΈμ€ν΄μ€λ₯Ό μμν μ¬μ©μλ λꡬμΈκ°μ?
μ§λ μ£Ό S3 λΉμ© λΆμν΄μ£ΌμΈμ
GuardDutyμμ κ°μ§λ 보μ μ΄λ²€νΈκ° μλμ?
React 18κ³Ό TypeScriptλ₯Ό νμ©νμ¬ ChatGPTμ μ μ¬ν λνν μΈν°νμ΄μ€λ₯Ό ꡬννμ΅λλ€. useStateμ useEffect ν μ ν΅ν΄ λ©μμ§ μνλ₯Ό κ΄λ¦¬νκ³ , μ€μκ°μΌλ‘ AI μλ΅μ μ€νΈλ¦¬λ°νλ κ²μ²λΌ 보μ΄λ νμ΄ν μ λλ©μ΄μ μ ꡬννμ΅λλ€. μΈμ κΈ°λ° λν νμ€ν 리λ₯Ό μ§μνμ¬ μ¬μ©μκ° μ΄μ λνλ₯Ό μΈμ λ λ€μ νμΈν μ μμΌλ©°, λ‘컬 μ€ν 리μ§μ μλ² λκΈ°νλ₯Ό ν΅ν΄ λ°μ΄ν° μΌκ΄μ±μ 보μ₯ν©λλ€. λ§ν¬λ€μ΄ λ λλ§μ μ§μνμ¬ μ½λ λΈλ‘, ν, λ§ν¬ λ±μ μ¬λ°λ₯΄κ² νμνκ³ , μ°¨νΈμ λ€μ΄μ΄κ·Έλ¨μ μ΄λ―Έμ§λ‘ μλ λ λλ§λ©λλ€.
AWS Cognito User Poolκ³Ό Identity Poolμ νμ©ν μμ ν μΈμ¦ μμ€ν μ ꡬννμ΅λλ€. OAuth 2.0 Authorization Code Flowλ₯Ό ν΅ν΄ μμ ν λ‘κ·ΈμΈμ μ 곡νκ³ , JWT ν ν° κΈ°λ°μ μΈμ κ΄λ¦¬λ₯Ό ꡬννμ΅λλ€. μ¬μ©μ μ 보λ Context APIλ₯Ό ν΅ν΄ μ μ μνλ‘ κ΄λ¦¬λλ©°, ν ν° λ§λ£ μ μλ κ°±μ λ‘μ§μ ν¬ν¨ν©λλ€. νλ‘ νΈμλμμλ protected routeλ₯Ό ꡬννμ¬ μΈμ¦λμ§ μμ μ¬μ©μμ μ κ·Όμ μ°¨λ¨νκ³ , λ‘κ·ΈμΈ μνμ λ°λΌ λ€λ₯Έ UIλ₯Ό μ‘°κ±΄λΆ λ λλ§ν©λλ€.
κΈ°μ‘΄ MCP νλ‘ν μ½μ HTTP+SSE(Server-Sent Events) λ°©μμ AWS Lambdaμ μ μ½μ¬νκ³Ό νΈνλμ§ μμ, Streamable HTTP λ°©μμΌλ‘ μ¬μ€κ³νμ΅λλ€. Lambdaμ μλ²λ¦¬μ€ νκ²½μμ μ§μμ μΈ μ°κ²°μ μ μ§ν μ μλ νΉμ±μ κ³ λ €νμ¬, μμ²-μλ΅ κΈ°λ°μ HTTP νλ‘ν μ½λ‘ MCP μ€νμ ꡬννμ΅λλ€. μ΄λ₯Ό μν΄ μ μ© MCP μλ²μ ν΄λΌμ΄μΈνΈλ₯Ό μ§μ μ€κ³νκ³ κ°λ°νμΌλ©°, κΈ°μ‘΄μ μ‘΄μ¬νλ MCP μλ²λ€μ μ°λ¦¬μ Streamable HTTP λ°©μκ³Ό νΈνλλλ‘ λ¦¬ν©ν λ§νμ΅λλ€. μΆκ°λ‘, analyze_log_groups_insights λ± νμν MCP λꡬλ₯Ό μ§μ μ€κ³νκ³ κ΅¬ννμκ³ , κΈ°μ‘΄μ MCP λꡬ μ€ fetch_cloudwatch_logs_for_service()μ μΉλͺ μ μΈ κ²°ν¨μ λ°κ²¬ ν μμ νμμΌλ©°, μμμμ Github Repoμ ν΄λΉ λ΄μ©μ λ°μν Pull Requestλ₯Ό μμ±νμ΅λλ€.
μ 체 λ°±μλ μμ€ν μ AWS Lambda ν¨μ κΈ°λ°μΌλ‘ ꡬννμ¬ μλ²λ¦¬μ€ μν€ν μ²μ μ₯μ μ κ·Ήλννμ΅λλ€. κ° λ§μ΄ν¬λ‘μλΉμ€λ₯Ό λ 립μ μΈ Lambda ν¨μλ‘ λΆλ¦¬νμ¬ κ°λ°, λ°°ν¬, νμ₯μ΄ μ©μ΄νλλ‘ μ€κ³νμ΅λλ€. LLM Service, Database Service, Chat History Service, Slackbot Serviceλ₯Ό κ°κ° λ³λμ Lambda ν¨μλ‘ κ΅¬ννκ³ , API Gatewayλ₯Ό ν΅ν΄ ν΅ν©λ RESTful APIλ‘ μ 곡ν©λλ€. Lambdaμ μ΄λ²€νΈ κΈ°λ° μ€ν λͺ¨λΈμ νμ©νμ¬ μμ²μ΄ μμ λλ§ μ€νλλ―λ‘ λΉμ© ν¨μ¨μ±μ ν보νμΌλ©°, AWSμ κ΄λ¦¬ν μλΉμ€μμ λ€μ΄ν°λΈ ν΅ν©μ ν΅ν΄ μ΄μ λΆλ΄μ μ΅μννμ΅λλ€. νΉν Lambda Layerλ₯Ό νμ©νμ¬ κ³΅ν΅ λΌμ΄λΈλ¬λ¦¬μ μ’ μμ±μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκ³ , μ½λ μ€ννΈ μ΅μ νλ₯Ό μν΄ ν¨μλ³ λ©λͺ¨λ¦¬μ νμμμμ μΈλ°νκ² μ‘°μ νμ΅λλ€.
μ΄μ λν λ΄μ©μ νμ©ν μ°μμ μΈ μ§μμλ΅μ μν΄ DynamoDB κΈ°λ°μ μΈμ κ΄λ¦¬ μμ€ν μ ꡬννμ΅λλ€. κ° μ¬μ©μμ λν νμ€ν 리λ₯Ό Messages λ°°μ΄ ννλ‘ μ μ₯νκ³ , μλ‘μ΄ μ§μ μ μ΄μ 컨ν μ€νΈμ ν¨κ» AI λͺ¨λΈμ μ λ¬νμ¬ λ μ νν λ΅λ³μ μμ±ν©λλ€. λ©λͺ¨λ¦¬ ν¨μ¨μ±μ μν΄ μΈμ λΉ μ΅λ λ©μμ§ μλ₯Ό μ ννκ³ , μ€λλ μΈμ μ TTLμ ν΅ν΄ μλ μμ λλλ‘ κ΅¬ννμ΅λλ€. νΉν MCP ν΄λΌμ΄μΈνΈμμ process_user_input_with_history λ©μλλ₯Ό ν΅ν΄ νμ€ν 리 κΈ°λ° μ²λ¦¬μ μΌλ° μ²λ¦¬λ₯Ό ꡬλΆνμ¬ μ±λ₯μ μ΅μ ννμ΅λλ€.
λͺ¨λ Lambda ν¨μλ€μ ν΅ν©νλ λ¨μΌ API Gatewayλ₯Ό ꡬννμ¬ RESTful API μλν¬μΈνΈλ₯Ό μ 곡ν©λλ€. AWS_PROXY ν΅ν© λ°©μμ μ±ννμ¬ Lambda ν¨μμμ HTTP μμ²κ³Ό μλ΅μ μ§μ μ²λ¦¬ν μ μλλ‘ νμΌλ©°, κ° μλΉμ€λ³λ‘ 리μμ€λ₯Ό λΆλ¦¬νμ¬ λͺ νν API ꡬ쑰λ₯Ό ꡬμ±νμ΅λλ€(/llm1, /llm2, /sessions, /execute-query, /create-table, /login, /callback, /models, /req λ±). CORS μ€μ μ ν΅ν΄ νλ‘ νΈμλμμ μμ ν ν΅μ μ 보μ₯νκ³ , OPTIONS λ©μλλ₯Ό μ§μνμ¬ λΈλΌμ°μ μ preflight μμ²μ μ²λ¦¬ν©λλ€. νκ²½λ³ μ€ν μ΄μ§(dev/test/prod) λ°°ν¬λ₯Ό ν΅ν΄ λ 립μ μΈ API μλν¬μΈνΈλ₯Ό κ΄λ¦¬νλ©°, CloudFormationμ ν΅ν μλνλ API λ°°ν¬μ λ²μ κ΄λ¦¬λ₯Ό ꡬννμ΅λλ€. νΉν Slack λ΄μ κ²½μ° μλ‘ λ€λ₯Έ μΈμ¦ λ°©μ(OAuth, μ¬λμ 컀맨λ)μ λμνκΈ° μν΄ λΌμ°ν λ³λ‘ μΈλ°ν κΆν μ€μ μ μ μ©νμ΅λλ€.
μ 체 μμ€ν
μ λ°°ν¬μ κ΄λ¦¬λ₯Ό μλννκΈ° μν΄ CloudFormation κΈ°λ°μ IaC(Infrastructure as Code)μ CodeBuildλ₯Ό νμ©ν CI/CD νμ΄νλΌμΈμ ꡬννμ΅λλ€. deploy.sh μ€ν¬λ¦½νΈλ₯Ό ν΅ν΄ μν΄λ¦ λ°°ν¬κ° κ°λ₯νλ©°, νκ²½λ³(dev/test/prod) λ
립μ μΈ μ€ν κ΄λ¦¬λ₯Ό μ§μν©λλ€. MCP μλ²μ κ²½μ° Docker 컨ν
μ΄λννμ¬ ECRμ μ μ₯νκ³ , Lambda Container Imageλ‘ λ°°ν¬νλ λ°©μμ μ±ννμ΅λλ€. CloudFormation μ€νμ μμ‘΄μ± κ΄λ¦¬λ₯Ό ν΅ν΄ μμ ν λ°°ν¬ μμλ₯Ό 보μ₯νλ©°, λ°°ν¬ μ€ν¨ μ μλ λ‘€λ°± κΈ°λ₯μ μ 곡ν©λλ€.
# κ°λ° μ’
μμ± μ€μΉ
cd frontend && npm install
cd ../services/llm && pip install -r requirements.txt
# λ‘컬 κ°λ° μλ² μ€ν
cd frontend && npm run dev
# Lambda ν¨μ λ‘컬 ν
μ€νΈ
cd services/llm && python lambda_function.pyA: νμ¬ CloudWatch, CloudTrail, GuardDuty, Cost Explorer, EC2, Lambda λ±μ μ§μνλ©°, μ§μμ μΌλ‘ νμ₯ μ€μ λλ€.
A: μ¬μ©λμ λ°λΌ λ€λ₯΄μ§λ§, μΌλ°μ μΌλ‘ μ $10-50 μμ€μ λλ€.
A: νμ¬λ AWS ν΄λΌμ°λ μ μ©μ λλ€.
A: λ€, Anthropicμ΄ μ 곡νλ λ€μν λͺ¨λΈμ μ§μνλ©°, μ€μ μμ λ³κ²½ κ°λ₯ν©λλ€.
- GitHub Issues: νλ‘μ νΈ μ΄μ νμ΄μ§
μ΄ νλ‘μ νΈλ MIT λΌμ΄μ μ€ νμ λ°°ν¬λ©λλ€. μμΈν λ΄μ©μ LICENSE νμΌμ μ°Έμ‘°νμΈμ.