회계사무소를 위한 상용 SaaS 아키텍처
지금까지 완성한 AI 엔진은 뛰어납니다. 하지만 내 노트북에서만 돌아간다면 의미가 없습니다.
수많은 회계사무소가 웹브라우저로 접속해 가입하고, 각자의 직원을 초대하고, 서로의 고객 데이터가 절대 섞이지 않도록 격리(Multi-Tenant)하는 상용 구독형 서비스(SaaS)의 아키텍처를 설계해 봅니다.
SaaS와 Multi-Tenant 아키텍처
SaaS (Software as a Service)란 프로그램을 설치하는 것이 아니라, 사용자가 웹(클라우드)에 접속해 서비스를 이용하고 월 구독료를 내는 비즈니스 모델입니다.
이 구조의 핵심은 Tenant(테넌트, 임차인) 개념입니다. "하나의 독립된 고객 조직(=회계사무소)"을 1개의 Tenant로 취급하여, 하나의 시스템(하나의 DB 서버) 안에서도 데이터가 서로 완벽히 격리되도록 설계해야 합니다.
가장 중요한 보안: DB 격리 (office_id)
테넌트를 분리하는 가장 간단하고 확실한 방법은, 고객사, 장부, 세금계산서, 직원 등 모든 데이터 테이블에 office_id (소속 회계사무소 ID) 컬럼을 박아넣는 것입니다.
웹 개발 초보자가 흔히 하는 실수가 SELECT * FROM customers 같은 쿼리를 날리는 것입니다.
SaaS에서는 로그인한 유저의 세션(JWT 등)에서 office_id를 추출하여, 서버단에서 강제로 WHERE office_id = ? 필터를 씌워야 다른 회계사무소의 고객이 노출되는 대형 사고를 막을 수 있습니다.
def get_customers(current_user): # 절대 사용자(Front-End)가 보내주는 office_id를 믿지 말고, 서버의 인증 토큰에서 추출합니다. office_id = current_user.office_id # 항상 office_id 조건이 쿼리에 포함되도록 설계합니다. return db.query(f""" SELECT * FROM customers WHERE office_id = {office_id} """)
역할 기반 접근 제어 (RBAC)
같은 회계사무소 안에서도 대표(OWNER), 담당 회계사(ACCOUNTANT), 기장 직원(STAFF)의 권한은 달라야 합니다. 이를 RBAC(Role-Based Access Control)이라고 합니다.
| Role (역할) | 사용자 관리 | 결제/구독 관리 | AI 분석 실행 | 기본 전표 조회 |
|---|---|---|---|---|
| OWNER | 가능 | 가능 | 가능 | 가능 |
| ACCOUNTANT | 불가 | 불가 | 가능 | 가능 |
| STAFF | 불가 | 불가 | 불가 | 가능 |
백엔드(Backend) 통신: FastAPI 연동
여태껏 우리가 만든 파이썬 Agent 코드들을 웹 서버에서 작동시키려면 FastAPI 같은 프레임워크가 필요합니다. 사용자가 웹에서 버튼을 누르면(POST 요청), FastAPI가 이를 받아 Agent를 깨우는 구조입니다.
# [요청의 흐름] 1. Browser (웹 화면) -> POST /api/ai/analyze 2. FastAPI (백엔드 서버) -> JWT 로그인 검증 (Authentication) -> RBAC 권한 검증 (Authorization) -> 소속 회계법인(office_id) 식별 3. Python AI Engine -> Manager Agent 기동 -> Multi-Agent + RAG 파이프라인 처리 4. Result -> 분석 결과를 JSON으로 변환하여 웹 화면에 표출
감사 추적(Audit Log)과 사용량 과금(Metering)
상용 서비스에서 빼놓을 수 없는 두 가지는 "누가 무슨 사고를 쳤는가(Audit Log)"와 "비용 청구를 위해 AI를 얼마나 썼는가(Metering)"입니다.
Agent가 LLM(OpenAI 등)을 호출할 때마다 비용이 발생합니다. DB의 `agent_logs` 테이블에 "A회계사무소의 김대리가, B고객사 매출 분석을 위해, 3,200 토큰을 소모했다"는 기록을 남겨야만 나중에 'Basic 요금제(월 100회 한도)' 등에 맞춰 과금 및 차단을 할 수 있습니다.
25단계 예고: 다시 "실무 파이썬 자동화"의 세계로
21~24단계에 걸쳐 우리는 거대한 "AI 아키텍처"와 "플랫폼(SaaS) 인프라"를 설계했습니다.
플랫폼의 뼈대가 갖춰졌으니, 다음 25단계부터는 다시 본연의 목적인 "회계 파이썬 실무"로 돌아갑니다.
대량의 엑셀 자료를 업로드했을 때, 파이썬이 거래처를 자동 매칭하고 계정과목을 스스로 추천하는 실제 "자동 전표 처리 봇"을 구축하면서 현업 회계사무소의 반복 업무를 박살내는 여정을 재개하겠습니다.