Skip to content

newbiehwang/WGA_production

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

361 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

WGA (WeGoAWS) - AWS ํด๋ผ์šฐ๋“œ ์šด์˜ ์ •๋ณด ์ฑ—๋ด‡ ์„œ๋น„์Šค

thumbnail

๊ฐœ์š”

WGA๋Š” AWS ํด๋ผ์šฐ๋“œ ์šด์˜ ์ •๋ณด๋ฅผ ์ž์—ฐ์–ด๋กœ ์งˆ์˜์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ๊ธฐ๋ฐ˜์˜ AI ์ฑ—๋ด‡ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋ณต์žกํ•œ AWS ์ฝ˜์†”์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ๋Œ€์‹ , ๊ฐ„๋‹จํ•œ ์ž์—ฐ์–ด ์งˆ๋ฌธ์„ ํ†ตํ•ด ํด๋ผ์šฐ๋“œ ์ž์› ์ƒํƒœ, ๋น„์šฉ ๋ถ„์„, ๋ณด์•ˆ ์ด๋ฒคํŠธ, ๋กœ๊ทธ ๋ถ„์„ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ฆ‰์‹œ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ฐ€์น˜

  • ๊ฐ„ํŽธํ•œ ์ ‘๊ทผ์„ฑ: ์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์งˆ์˜๋กœ AWS ์ „๋ฌธ ์ง€์‹ ์—†์ด๋„ ํด๋ผ์šฐ๋“œ ์ •๋ณด ์กฐํšŒ ๊ฐ€๋Šฅ
  • ์ •ํ™•ํ•œ ๋‹ต๋ณ€: AWS ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •ํ™•ํ•œ ๋‹ต๋ณ€ ์ œ๊ณต
  • ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง: CloudWatch ๋กœ๊ทธ์™€ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ ์ƒํƒœ ํŒŒ์•…
  • ๋น„์šฉ ์ตœ์ ํ™”: AWS ๋น„์šฉ ๋ถ„์„ ๋ฐ ์ตœ์ ํ™” ์ œ์•ˆ
  • ๋ณด์•ˆ ๊ฐ•ํ™”: ๋ณด์•ˆ ์ด๋ฒคํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์•Œ๋ฆผ

์•„ํ‚คํ…์ฒ˜

์ „์ฒด ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

WGA ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

๊ธฐ์ˆ  ์Šคํƒ

  • 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

์ฃผ์š” ๊ธฐ๋Šฅ

1. ์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์งˆ์˜์‘๋‹ต

  • ๋กœ๊ทธ ๋ถ„์„: "์–ด์ œ S3์— ์ ‘๊ทผํ•œ ์‚ฌ์šฉ์ž๋Š” ๋ˆ„๊ตฌ์ธ๊ฐ€์š”?"
  • ๋น„์šฉ ๋ถ„์„: "์ง€๋‚œ ์ฃผ Opensearch ๋น„์šฉ์ด ์–ผ๋งˆ๋‚˜ ๋‚˜์™”๋‚˜์š”?"
  • ๋ณด์•ˆ ์กฐํšŒ: "์ตœ๊ทผ ์‹คํŒจํ•œ ๋กœ๊ทธ์ธ ์‹œ๋„๊ฐ€ ์žˆ๋‚˜์š”?"
  • AWS ๋ฌธ์„œ ๊ฒ€์ƒ‰: "GuardDuty ์‹ฌ๊ฐ๋„๋Š” ์–ด๋–ค ์˜๋ฏธ์ธ๊ฐ€์š”?"

2. ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ถ„์„

  • CloudWatch ๋กœ๊ทธ ๋ถ„์„: ์„œ๋น„์Šค๋ณ„ ๋กœ๊ทธ ์กฐํšŒ ๋ฐ ๋ถ„์„
  • CloudWatch ๋Œ€์‹œ๋ณด๋“œ ๋ชจ๋‹ˆํ„ฐ๋ง: ์ฃผ์š” ์„œ๋น„์Šค๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง
  • CloudTrail ์ด๋ฒคํŠธ: AWS API ํ˜ธ์ถœ ์ด๋ ฅ ๋ฐ ์‚ฌ์šฉ์ž ํ™œ๋™ ์ถ”์ 
  • GuardDuty ๋ณด์•ˆ ์ด๋ฒคํŠธ: ๋ณด์•ˆ ์œ„ํ˜‘ ๋ถ„์„
  • ๋น„์šฉ ๋ถ„์„: ์„œ๋น„์Šค๋ณ„, ๋ฆฌ์ „๋ณ„, ์ผ๋ณ„ ๋น„์šฉ ๋ถ„์„

3. ์‹œ๊ฐํ™” ๋ฐ ์ฐจํŠธ ์ƒ์„ฑ

  • ๋™์  ์ฐจํŠธ: ๋ง‰๋Œ€ ์ฐจํŠธ, ๋ผ์ธ ์ฐจํŠธ, ํŒŒ์ด ์ฐจํŠธ, ์‚ฐ์ ๋„ ๋“ฑ
  • ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ: AWS ์ธํ”„๋ผ ์‹œ๊ฐํ™”
  • ํ”Œ๋กœ์šฐ์ฐจํŠธ: ํ”„๋กœ์„ธ์Šค ํ๋ฆ„๋„ ์ƒ์„ฑ
  • ๋งˆ์ธ๋“œ๋งต: ๊ตฌ์กฐํ™”๋œ ์ •๋ณด ํ‘œํ˜„

4. AWS ๊ณต์‹ ๋ฌธ์„œ ๊ธฐ๋ฐ˜ ๋‹ต๋ณ€ ์ œ๊ณต

  • ์‹ค์‹œ๊ฐ„ ๋ฌธ์„œ ๊ฒ€์ƒ‰: AWS ๊ณต์‹ ๋ฌธ์„œ์—์„œ ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰
  • ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์ถ”์ฒœ: ํ˜„์žฌ ์งˆ๋ฌธ๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์„œ ์ž๋™ ์ถ”์ฒœ
  • ๋‹ค๊ตญ์–ด ์ง€์›: ์˜๋ฌธ ๋ฌธ์„œ๋ฅผ ํ•œ๊ตญ์–ด๋กœ ์ž๋™ ๋ฒˆ์—ญํ•˜์—ฌ ์ œ๊ณต

5. ๋‹ค์ค‘ ์ธํ„ฐํŽ˜์ด์Šค ์ง€์›

  • ์›น ์ธํ„ฐํŽ˜์ด์Šค: React ๊ธฐ๋ฐ˜ ๋ฐ˜์‘ํ˜• ์›น ์•ฑ
  • Slack ๋ด‡: ์Šฌ๋ž™ ์ฑ„๋„์—์„œ ์ง์ ‘ ์งˆ์˜ ๊ฐ€๋Šฅ

6. ๋Œ€ํ™” ๊ธฐ๋ก ๊ด€๋ฆฌ

  • ์„ธ์…˜ ๊ด€๋ฆฌ: ์‚ฌ์šฉ์ž๋ณ„ ๋Œ€ํ™” ํžˆ์Šคํ† ๋ฆฌ ์ €์žฅ
  • ์ปจํ…์ŠคํŠธ ์œ ์ง€: ์ด์ „ ๋Œ€ํ™” ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์—ฐ์† ์งˆ์˜
  • ํžˆ์Šคํ† ๋ฆฌ ๊ฒ€์ƒ‰: ๊ณผ๊ฑฐ ์งˆ์˜ ๋ฐ ๋‹ต๋ณ€ ๊ฒ€์ƒ‰

7. ๊ฐ„ํŽธํ•œ ๋ฐฐํฌ

  • ์›ํด๋ฆญ ๋ฐฐํฌ: ๋‹จ์ผ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ „์ฒด ์ธํ”„๋ผ ๋ฐฐํฌ
  • 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

1๋‹จ๊ณ„: ๊ธฐ๋ณธ ์„ค์ •

# ํ”„๋กœ์ ํŠธ ํด๋ก 
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"

2๋‹จ๊ณ„: ํ†ตํ•ฉ ๋ฐฐํฌ

# ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐฐํฌ
./deploy.sh dev

# ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ๋ฐฐํฌ
./deploy.sh prod

3๋‹จ๊ณ„: ๋ฐฐํฌ ํ™•์ธ

๋ฐฐํฌ ์™„๋ฃŒ ํ›„ ๋‹ค์Œ ์ •๋ณด๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค:

  • ํ”„๋ก ํŠธ์—”๋“œ 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 ๋ด‡ ์„ค์ •

  1. Slack ์•ฑ ์ƒ์„ฑ ๋ฐ ๋ด‡ ํ† ํฐ ๋ฐœ๊ธ‰
  2. SSM Parameter Store์— ํ† ํฐ ์ €์žฅ
  3. Slack ์•ฑ์— ๋‹ค์Œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€:
    • Slash Commands: /models
    • Interactive Components
    • Bot Token Scopes: chat:write, im:write

์‚ฌ์šฉ ์˜ˆ์‹œ

์›น ์ธํ„ฐํŽ˜์ด์Šค

  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ”„๋ก ํŠธ์—”๋“œ URL ์ ‘์†
  2. Cognito๋ฅผ ํ†ตํ•œ ๋กœ๊ทธ์ธ
  3. ์ฑ„ํŒ… ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ž์—ฐ์–ด ์งˆ๋ฌธ ์ž…๋ ฅ

Slack ๋ด‡

# ๋ชจ๋ธ ์„ค์ •
/models

# ์งˆ์˜ ์‹คํ–‰
์–ด์ œ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•œ ์‚ฌ์šฉ์ž๋Š” ๋ˆ„๊ตฌ์ธ๊ฐ€์š”?
์ง€๋‚œ ์ฃผ S3 ๋น„์šฉ ๋ถ„์„ํ•ด์ฃผ์„ธ์š”
GuardDuty์—์„œ ๊ฐ์ง€๋œ ๋ณด์•ˆ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ๋‚˜์š”?

ํ•ต์‹ฌ ๊ตฌํ˜„ ๋กœ์ง

React ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์‹œ์Šคํ…œ

React 18๊ณผ TypeScript๋ฅผ ํ™œ์šฉํ•˜์—ฌ ChatGPT์™€ ์œ ์‚ฌํ•œ ๋Œ€ํ™”ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. useState์™€ useEffect ํ›…์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์‹ค์‹œ๊ฐ„์œผ๋กœ AI ์‘๋‹ต์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ํƒ€์ดํ•‘ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ธ์…˜ ๊ธฐ๋ฐ˜ ๋Œ€ํ™” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ง€์›ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ด์ „ ๋Œ€ํ™”๋ฅผ ์–ธ์ œ๋“  ๋‹ค์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์™€ ์„œ๋ฒ„ ๋™๊ธฐํ™”๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋งˆํฌ๋‹ค์šด ๋ Œ๋”๋ง์„ ์ง€์›ํ•˜์—ฌ ์ฝ”๋“œ ๋ธ”๋ก, ํ‘œ, ๋งํฌ ๋“ฑ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œํ•˜๊ณ , ์ฐจํŠธ์™€ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์ด๋ฏธ์ง€๋กœ ์ž๋™ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.

Cognito OAuth 2.0 ํ†ตํ•ฉ ์ธ์ฆ

AWS Cognito User Pool๊ณผ Identity Pool์„ ํ™œ์šฉํ•œ ์™„์ „ํ•œ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. OAuth 2.0 Authorization Code Flow๋ฅผ ํ†ตํ•ด ์•ˆ์ „ํ•œ ๋กœ๊ทธ์ธ์„ ์ œ๊ณตํ•˜๊ณ , JWT ํ† ํฐ ๊ธฐ๋ฐ˜์˜ ์„ธ์…˜ ๊ด€๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •๋ณด๋Š” Context API๋ฅผ ํ†ตํ•ด ์ „์—ญ ์ƒํƒœ๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ, ํ† ํฐ ๋งŒ๋ฃŒ ์‹œ ์ž๋™ ๊ฐฑ์‹  ๋กœ์ง์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์—์„œ๋Š” protected route๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ธ์ฆ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž์˜ ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•˜๊ณ , ๋กœ๊ทธ์ธ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ UI๋ฅผ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

Lambda ๊ธฐ๋ฐ˜ MCP ์„œ๋ฒ„ ๋ฐ ํด๋ผ์ด์–ธํŠธ ๊ตฌํ˜„

๊ธฐ์กด 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๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

Lambda ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ๋ฐฑ์—”๋“œ ์•„ํ‚คํ…์ฒ˜

์ „์ฒด ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ์„ 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 ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํžˆ์Šคํ† ๋ฆฌ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ์™€ ์ผ๋ฐ˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

API Gateway ํ†ตํ•ฉ ๋ฐ ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ

๋ชจ๋“  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, ์Šฌ๋ž˜์‹œ ์ปค๋งจ๋“œ)์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์šฐํŒ…๋ณ„๋กœ ์„ธ๋ฐ€ํ•œ ๊ถŒํ•œ ์„ค์ •์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌํ˜„

์ „์ฒด ์‹œ์Šคํ…œ์˜ ๋ฐฐํฌ์™€ ๊ด€๋ฆฌ๋ฅผ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•ด 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.py

FAQ

Q: ์–ด๋–ค AWS ์„œ๋น„์Šค๋ฅผ ์ง€์›ํ•˜๋‚˜์š”?

A: ํ˜„์žฌ CloudWatch, CloudTrail, GuardDuty, Cost Explorer, EC2, Lambda ๋“ฑ์„ ์ง€์›ํ•˜๋ฉฐ, ์ง€์†์ ์œผ๋กœ ํ™•์žฅ ์ค‘์ž…๋‹ˆ๋‹ค.

Q: ๋น„์šฉ์€ ์–ผ๋งˆ๋‚˜ ๋ฐœ์ƒํ•˜๋‚˜์š”?

A: ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ์›” $10-50 ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค.

Q: ์˜จํ”„๋ ˆ๋ฏธ์Šค์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

A: ํ˜„์žฌ๋Š” AWS ํด๋ผ์šฐ๋“œ ์ „์šฉ์ž…๋‹ˆ๋‹ค.

Q: ๋‹ค๋ฅธ AI ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

A: ๋„ค, Anthropic์ด ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ชจ๋ธ์„ ์ง€์›ํ•˜๋ฉฐ, ์„ค์ •์—์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ง€์› ๋ฐ ๋ฌธ์˜

๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

About

LLM-Based Cloud Native Agent

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 52.6%
  • Vue 28.1%
  • TypeScript 12.5%
  • Shell 6.1%
  • CSS 0.4%
  • Dockerfile 0.2%
  • HTML 0.1%