AWS DynamoDB, Next.js, Claude AI를 사용하여 실시간 회의 비용 계산기를 구축한 방법
요약
AWS DynamoDB, Next.js, Claude AI를 활용하여 회의 비용을 실시간으로 계산하는 'MeetingTax' 구축 사례를 소개합니다. 서버리스 환경에 최적화된 DynamoDB의 PAY_PER_REQUEST 모델과 실시간 데이터 처리 아키텍처를 다룹니다.
핵심 포인트
- Next.js와 DynamoDB를 결합한 서버리스 아키텍처 구현
- DynamoDB의 PAY_PER_REQUEST를 통한 비용 효율적 스케일링
- Claude AI를 활용한 회의 효율성 분석 기능 제공
- 실시간 비용 추적을 위한 프론트엔드 및 백엔드 설계
저는 H0: Hack the Zero Stack 해커톤에 참여하기 위해 이 포스트를 작성했습니다. #H0Hackathon
문제점
매주 기업들은 아무도 필요로 하지 않는 회의에 막대한 돈을 쏟아붓고 있습니다. 시니어 엔지니어 6명이 참여하는 스탠드업(standup) 미팅은 아무도 말을 꺼내기도 전에 이미 50달러의 비용이 발생합니다. 이를 52주로 곱하면 단 하나의 정기 미팅에만 2,600달러가 소요되는 것을 볼 수 있습니다. 대부분의 팀은 수십 개의 미팅을 진행합니다. 문제는 사람들이 낭비되는 시간을 신경 쓰지 않는 것이 아니라, 그 비용이 눈에 보이지 않는다는 점입니다.
그래서 저는 모든 회의에 실시간 달러 카운터를 표시하는 실시간 회의 비용 계산기인 MeetingTax를 구축했습니다.
라이브 데모: https://meetingtax-lac.vercel.app
GitHub: https://github.com/durtymurty/meetingtax
주요 기능
- 팀 빌더 (Team builder) — 급여를 입력하면 시간당 요율이 자동으로 계산되는 인원 추가 기능
- 라이브 회의실 (Live meeting room) — 500ms마다 실시간으로 올라가는 달러 카운터 확인
- 비용 상세 내역 (Cost breakdown) — 총비용, 인당 비용, 분당 비용을 모두 실시간으로 표시
- 회의 기록 (Meeting history) — 모든 회의 데이터와 전체 참석자 정보를 DynamoDB에 저장
- 분석 대시보드 (Analytics dashboard) — 총 지출액, 평균값, 회의 비용 막대 그래프 제공
- Claude AI 분석 (Claude AI analysis) — 클릭 한 번으로 어떤 회의를 줄여야 할지에 대한 날카로운 통찰력 제공
기술 스택
| 계층 (Layer) | 기술 (Tech) |
|---|---|
| 프론트엔드 (Frontend) | Next.js 15, React, TypeScript |
| ... |
DynamoDB를 선택한 이유
이것은 이 프로젝트에서 가장 의도적인 아키텍처 결정이었습니다.
회의 데이터는 명확하고 급격한 사용 패턴(spiky usage pattern)을 보입니다. 업무 시간 중에는 쓰기(write) 작업이 많지만, 밤에는 거의 발생하지 않습니다. 요청당 결제 (PAY_PER_REQUEST billing) 방식을 사용하면 사용한 만큼만 비용을 지불하며, 밤에는 비용이 0으로 스케일링(scaling)됩니다.
더 중요한 점은, Vercel의 Next.js API 라우트가 상태가 없는 서버리스 함수(stateless serverless functions)라는 것입니다. DynamoDB의 SDK는 지속적인 연결(persistent connections) 없이도 연결되므로 매우 자연스럽게 어울립니다. 커넥션 풀링(connection pooling)도, 워밍업 시간(warm-up time)도, 복잡성도 없습니다.
실제 배포 환경에서는 여러 팀이 동시에 회의를 종료할 수도 있습니다. DynamoDB는 별도의 잠금(locking) 없이도 동시 쓰기(concurrent writes)를 기본적으로 처리합니다. 각 쓰기 작업은 원자적(atomic)이며 독립적입니다.
저는 두 개의 테이블을 설정했습니다:
meetingtax-people— 팀원 정보와 급여를 저장합니다.meetingtax-meetings— 비용, 지속 시간, 참석자가 포함된 모든 회의 기록을 저장합니다.
두 테이블 모두 PAY_PER_REQUEST 모드로 설정했습니다. 설정에는 스크립트 하나와 약 5초 정도가 소요되었습니다.
실시간 카운터 (The Real-Time Counter)
실시간 비용 티커(ticker)는 프론트엔드 측면에서 가장 흥미로운 도전 과제였습니다. 단순한 접근 방식은 매초 API를 폴링(polling)하는 것이겠지만, 이는 낭비적이고 느립니다.
대신, 카운터는 완전히 클라이언트 측(client-side)에서 실행됩니다:
const costPerSec = Array.from(selected).reduce((sum, id) => {
const p = people.find((x) => x.id === id);
return sum + (p ? p.salary / 2080 / 3600 : 0);
...
연봉 ÷ 2080 근무 시간 ÷ 3600초 = 1인당 초당 비용입니다. 모든 참석자의 값을 합산하고, 경과된 초를 곱하여 500ms마다 업데이트합니다. 회의가 진행되는 동안에는 API 호출이 전혀 발생하지 않습니다. API는 회의가 종료되고 최종 기록을 DynamoDB에 쓸 때만 호출됩니다.
Claude 통합 (The Claude Integration)
AI 분석은 /api/analyze로 보내는 단 한 번의 POST 요청으로 이루어집니다. 전체 회의 이력과 팀 데이터를 Claude Haiku에 전송하며, 일반적인 조언이 아닌 구체적이고 실행 가능한 통찰(actionable insights)을 요구하는 정교한 프롬프트(prompt)를 사용합니다.
핵심은 범위를 좁히고 구체화하는 것이었습니다.
Vercel은 Next.js를 자동으로 감지하여 빌드하고 배포합니다. 환경 변수(Environment variables, AWS 키, Anthropic API 키)는 Vercel 대시보드에 저장되며, 코드나 GitHub에는 절대 포함되지 않습니다.
main 브랜치로 git push를 할 때마다 새로운 프로덕션 배포(production deploy)가 자동으로 트리거됩니다.
향후 계획
- Slack 연동 — 회의가 종료될 때 비용 요약본 게시
- Google Calendar 동기화 — 회의 일정 자동 가져오기
- 초대 링크를 통한 멀티 팀 워크스페이스(Multi-team workspaces)
- 가장 비용이 많이 든 회의에 대한 주간 이메일 요약(Weekly email digest)
체험하기
라이브 데모: https://meetingtax-lac.vercel.app
GitHub: https://github.com/durtymurty/meetingtax
Amazon과 Vercel이 주관하는 H0: Hack the Zero Stack 해커톤을 위해 제작되었습니다.
H0Hackathon
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기