본 게시물은 Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle 제출물입니다.
제가 만든 것 (What I Built)
Ledger는 프리랜서 및 1인 사업자들을 위한 소규모 비즈니스 재무 추적기이자 AI 가격 책정 도우미입니다. 사용자가 수입과 지출을 기록하고, 비즈니스 총액을 검토하며, 제품이나 서비스의 가격을 추정하는 데 도움을 줍니다.
가격 계산기(Price Calculator)는 저장된 예상 가격을 실제 재무 거래와 분리하여 관리합니다. 사용자는 가격을 계산하고, 이를 검토한 후, 가격 책정 기록으로 저장할 수 있습니다. 저장된 가격은 검색, 필터링, 조회, 수정, 삭제하거나 계산기 입력값으로 재사용할 수 있습니다. 기록을 재사용하면 양식이 미리 채워지지만, 이전 결과를 복원하지는 않습니다. 새로운 가격을 저장하려면 사용자가 다시 계산해야 합니다.
Ledger는 전체 회계 시스템(full accounting suite)보다 더 간단한 워크플로우를 원하는 소규모 사업자들을 목표로 합니다.
데모 (Demo)
실시간 Ledger 데모를 사용해 보세요.
스크린샷 (Screenshot)
Screenshot of the Overview
개요 (Overview)
Screenshot of the Transactions
거래 (Transaction)
Screenshot for Creating a Transaction
거래 생성 (Create a Transaction)
Screenshot for the Price Calculator
가격 계산기 (Price Calculator)}{
Screen shot for AI recommended pricing
AI 추천 가격 책정(Pricing)
Screenshot of Saved Prices
저장된 가격(Saved Prices)
코드 (Code)
Ledger on GitHub
구축 과정 (How I Built It)
프론트엔드는 React, TypeScript, Vite, Tailwind CSS를 사용합니다. 백엔드는 Express와 TypeScript API이며, Mongoose를 통해 MongoDB Atlas에 연결됩니다.
두 AI 흐름 모두 동일한 Groq 클라이언트와 설정된 모델을 사용합니다. 서버는 OpenAI SDK를 사용하여 Groq의 OpenAI 호환 엔드포인트(endpoint)로 통신합니다:
new OpenAI({
apiKey,
baseURL: "https://api.groq.com/openai/v1",
...
기본 모델 ID는 openai/gpt-oss-120b입니다. “OpenAI 호환(OpenAI-compatible)”은 API 프로토콜을 설명하며, 추론 요청(inference requests)은 Groq으로 전송됩니다. 이는 로컬 추론이 아닌 호스팅된 추론이며, 사용자가 제출한 텍스트는 Groq으로 전송됩니다.
거래 항목 입력 시, Ledger는 모델에게 JSON 형식의 초안(drafts)을 요청하고, 서버에서 응답을 검증하며, 금액과 날짜가 사용자의 원본 텍스트에 증거(evidence)로 지원되는지 확인합니다. 초안은 자동으로 저장되지 않으며, 사용자가 검토하고 확인해야 합니다. 가격 책정의 경우, 모델은 결정론적 계산 주변으로 정성적인 조언을 제공합니다. 애플리케이션이 추천 내용을 검증하며, 재무 산술(financial arithmetic)은 일반적인 애플리케이션 코드로 유지됩니다.
표준 판매 가격 공식은 다음과 같습니다:
(단가 + 단위당 추가 비용) × (1 + 마크업 비율 / 100)
저장된 가격(Saved prices)은 트랜잭션으로 저장되는 대신 전용 Mongoose 모델과 비즈니스 범위 API를 사용합니다. 한 가지 제한 사항이 있습니다: Ledger는 아직 사용자 인증이나 비즈니스 소유권 확립 기능을 갖추지 못했습니다. 비즈니스 ID가 요청의 범위를 지정할 수는 있지만, 호출자가 해당 비즈니스를 소유했는지 증명하지는 않으므로, 권한 부여(authorization) 기능이 추가될 때까지 이 프로토타입을 사적인 다중 사용자 재무 서비스로 공개해서는 안 됩니다.
Open Innovation은 왜 중요할까요?
오픈 웨이트 모델(open-weight model)을 사용하면 Ledger에 독점 모델 엔드포인트 외의 또 다른 선택지가 생기며, OpenAI와 호환되는 API 덕분에 서버가 추론 제공업체(inference providers)를 변경하면서도 기존 클라이언트 형태를 유지할 수 있었습니다. 이는 유용한 유연성이지만, 로컬에서 모델을 실행하거나 사용자 장치에 데이터를 보관하는 것과는 같지 않습니다. 이 버전은 Groq으로 텍스트를 전송하며, 저는 추론 비용(inference costs), 다른 모델 대비 추출 품질, 또는 고객의 지불 의사(customer willingness to pay)는 측정하지 않았습니다.
또한 모델 해석과 재무 결정 사이의 경계를 명확하게 유지합니다. 즉, 모델은 언어를 해석하고 가격 책정 컨텍스트를 제안하는 데 도움을 줄 수 있지만, 애플리케이션 코드가 가격을 계산하고, 모델 출력을 검증하며, 중요한 저장(consequential saves)은 사용자 통제 하에 남겨둡니다.
나의 에이전트 세션
이 이전 세션은 여기서 논의된 '저장된 가격' 작업을 담고 있으며, Groq으로 전환되기 전의 내용입니다:
Ledger의 저장된 가격 기능 구축 및 Hacktoberfest 게시물 준비
당신
전용 비즈니스 범위의 '저장된 가격(Saved Prices)' 페이지를 추가하여 Ledger의 저장된 가격 기능을 확장하세요: 실제 가격 기록을 검색하고 필터링하며, 세부 정보를 표시하고, 계산기에서 저장된 입력을 재사용하며, 트랜잭션을 건드리지 않고도 편집 및 확정 삭제를 지원합니다.
에이전트
기존의 가격 기록 모델과 비즈니스 범위(business-scoped) GET/POST 엔드포인트가 재사용되었습니다. 'Saved Prices' 페이지에는 검색 및 유형/통화 필터, 상세 보기, 이전 결과를 복원하지 않는 계산기 사전 채우기 기능, 직접 기록 편집, 그리고 확정된 삭제 기능이 추가되었습니다. 비즈니스 범위의 PATCH/DELETE 경로는 업데이트를 검증하고 가격 기록을 거래(transaction)와 분리하여 유지합니다. 유형 검사(Typechecks), 프로덕션 빌드, 47개의 서버 테스트, 모바일 브라우저 확인까지 통과했습니다. 하지만 이 애플리케이션에는 여전히 인증(authentication)이나 비즈니스 소유권 계층이 없어 ID가 기록의 범위를 지정할 수는 있지만 요청자의 소유권을 증명할 수는 없습니다.
당신
Mastra를 이 프로젝트에 어떻게 포함해야 할까요? 통합 계획을 세워주세요.
Agent
제안된 범위는 오직 거래 초안 작성(transaction-drafting) 흐름만 사용합니다. Ledger의 기존 Zod 스키마, 증거 기반 검사(evidence-grounding checks), 응답 계약(response contract), 그리고 저장 전 검토(review-before-save) 동작을 유지하면서 제한된 Mastra 워크플로우를 사용하여 구조화된 추출을 수행해야 합니다. 모델에게 거래 또는 데이터베이스 도구를 제공하지 마십시오.
▸ dependency_compatibility_check Ledger의 문서화된 Node 지원 하한선과 현재 Mastra 패키지 버전을 비교하고 의존성 감사(dependency audit) 결과를 검사하세요.
입력
Ledger의 문서화된 Node 지원 하한선에 맞춰 현재 Mastra 패키지 버전들을 확인하고, 의존성 감사 결과도 살펴보세요.
출력
최신 @mastra/core 1.78.0은 Node >=22.13을 요구합니다. Node 20과 호환되는 최신 안정 버전은 0.24.9입니다. npm audit에 따르면 높은 취약점(high)이 6개, 보통 취약점(moderate)이 32개 보고되었으며, 수정하려면 메이저 업그레이드가 필요합니다.
당신
Node 20 지원을 유지하고 Mastra 통합은 연기하세요.
Agent
Mastra는 의존성으로 유지되지 않았고, 이 통합을 위해 저장소 기능 변경 사항도 없습니다. 미래 옵션은 런타임 하한선이 Node 22.13 이상으로 이동하거나 안전하게 호환되는 Mastra 릴리스가 제공될 때 워크플로우를 재검토하는 것입니다.
당신
Hacktoberfest Week 2 Side Hustle 구조를 사용하여 DEV 게시물을 준비하고 에이전트 세션을 포함하세요.
Agent
현재 코드는 OpenAI 기반 파서를 사용하며 Mastra 통합 기능이 없으므로, Week 2의 오픈 소스 AI 적격성 주장은 할 수 없습니다. 사용자는 적격 제출물 주장보다는 도전 과제 구조를 활용한 솔직한 프로젝트 게시물을 요청했습니다.
8 of 7 메시지
수상 부문 (Prize Categories)
구현된 기술과 이용 가능한 프로젝트 증거를 바탕으로, 제가 입증할 수 있는 파트너 카테고리는 다음과 같습니다:
- Render 활용 최우수 사례 (Best Use of Render) — Ledger는 API와 빌드된 React 앱을 제공하는 단일 Render 웹 서비스로 실행되며, 구성된 상태 확인(health check) 기능을 갖추고 있습니다.
- MongoDB Atlas 활용 최우수 사례 (Best Use of MongoDB Atlas) — Ledger는 Mongoose를 통해 비즈니스 데이터와 저장된 가격 책정 기록을 영속화합니다. 배포 설정은 Atlas 연결 문자열을 사용하며, 실시간 상태 확인 보고서에는 연결된 데이터베이스가 표시됩니다.
- GitHub Copilot 활용 최우수 사례 (Best Use of GitHub Copilot) — Copilot은 Ledger를 구현하고, 디버깅하고, 테스트하는 데 사용되었습니다. 내장 에이전트 세션 기록에 그 작업의 일부가 문서화되어 있습니다.