Streamlit과 n8n을 이용한 자동 재무 보고서 생성 대시보드 구축: 데이터 수집부터 시각화까지
더 이상 엑셀에 파묻혀 재무 보고서를 수동으로 작성하지 마세요. n8n을 사용하여 다양한 소스에서 재무 데이터를 자동 수집하고, Streamlit으로 대화형 대시보드를 구축하여 핵심 지표를 실시간으로 시각화할 수 있습니다. 이 조합은 효율성을 극대화하고, 데이터 기반 의사 결정을 돕는 게임 체인저입니다.
1. The Challenge / Context
많은 스타트업, 소규모 기업, 그리고 개인 사업자들이 재무 보고서를 작성하는 데 어려움을 겪습니다. 엑셀 스프레드시트를 사용하여 수동으로 데이터를 수집하고, 정리하고, 분석하는 데 많은 시간을 소비합니다. 이는 비효율적일 뿐만 아니라, 오류 발생 가능성도 높입니다. 또한, 실시간으로 업데이트되는 데이터가 부족하여, 빠르게 변화하는 시장 상황에 대한 적절한 대응이 어렵습니다. 예를 들어, 여러 온라인 판매 플랫폼(Shopify, Amazon Seller, Google Ads 등)에서 발생하는 데이터를 통합하고, 은행 계좌 정보와 카드 거래 내역을 수집하여 통합적인 재무 현황을 파악하는 것은 매우 복잡하고 시간 소모적인 작업입니다.
2. Deep Dive: n8n and Streamlit
n8n은 노드 기반의 로우코드 자동화 플랫폼입니다. 다양한 서비스와 애플리케이션을 연결하여 워크플로우를 구축하고 자동화할 수 있습니다. 특히 API를 활용하여 데이터를 추출, 변환, 로드(ETL)하는 데 강력합니다. Streamlit은 파이썬 기반의 오픈 소스 프레임워크로, 데이터 과학 및 머신러닝 모델을 위한 대화형 웹 애플리케이션을 쉽고 빠르게 구축할 수 있도록 돕습니다. 복잡한 HTML, CSS, JavaScript 코딩 없이도 파이썬 스크립트만으로 멋진 대시보드를 만들 수 있습니다.
n8n은 백엔드 데이터 파이프라인을 구축하고, Streamlit은 프론트엔드 시각화를 담당하는 이상적인 조합입니다.
3. Step-by-Step Guide / Implementation
다음은 n8n과 Streamlit을 사용하여 자동 재무 보고서 생성 대시보드를 구축하는 단계별 가이드입니다.
Step 1: n8n 워크플로우 구축 - Shopify 데이터 수집
Shopify API를 사용하여 매출 데이터를 수집하는 n8n 워크플로우를 만듭니다. 먼저 Shopify 계정에 비공개 앱을 생성하고 API 키와 비밀번호를 확보해야 합니다. 다음으로 n8n에서 HTTP Request 노드를 사용하여 Shopify API 엔드포인트에 요청을 보냅니다.
{
"nodes": [
{
"parameters": {
"requestMethod": "GET",
"url": "https://{your_shop_name}.myshopify.com/admin/api/2023-10/orders.json",
"options": {
"authentication": "basicAuth",
"basicAuthUser": "{your_api_key}",
"basicAuthPassword": "{your_api_password}"
},
"responseFormat": "json"
},
"name": "Shopify - Get Orders",
"type": "n8n-nodes-http-request",
"typeVersion": 1,
"position": [
200,
200
]
},
{
"parameters": {
"jsCode": "items.forEach(item => {\n item.json.created_at_formatted = new Date(item.json.created_at).toLocaleDateString('ko-KR');\n});\n\nreturn items;"
},
"name": "Format Dates",
"type": "n8n-nodes-function",
"typeVersion": 1,
"position": [
400,
200
]
}
],
"connections": {
"Shopify - Get Orders": {
"main": [
[
"Format Dates",
0
]
]
}
}
}
위 코드에서 `{your_shop_name}`, `{your_api_key}`, `{your_api_password}`는 실제 값으로 대체해야 합니다. "Format Dates" 노드는 데이터를 가공하여 한국 날짜 형식으로 변환합니다.
Step 2: n8n 워크플로우 구축 - Google Sheets에 데이터 저장
수집된 Shopify 데이터를 Google Sheets에 저장합니다. n8n에서 Google Sheets 노드를 사용하여 데이터를 추가합니다. 먼저 Google Sheets API를 활성화하고, 서비스 계정 키를 생성해야 합니다. 그런 다음 Google Sheets 노드에서 서비스 계정 키를 사용하여 인증하고, 스프레드시트 ID와 시트 이름을 지정하여 데이터를 추가합니다.
{
"nodes": [
{
"parameters": {
"spreadsheetId": "{your_spreadsheet_id}",
"sheetName": "{your_sheet_name}",
"operation": "append",
"rawData": "={{ $json[\"line_items\"] ? $json[\"line_items\"].map(item => [item.name, item.quantity, item.price]).flat() : [] }}",
"options": {}
},
"name": "Google Sheets - Append Data",
"type": "n8n-nodes-google-sheets",
"typeVersion": 1,
"position": [
600,
200
]
}
],
"connections": {
"Format Dates": {
"main": [
[
"Google Sheets - Append Data",
0
]
]
}
}
}
위 코드에서 `{your_spreadsheet_id}`와 `{your_sheet_name}`은 실제 값으로 대체해야 합니다. "Google Sheets - Append Data" 노드는 Shopify 주문 데이터를 Google Sheets 시트에 추가합니다. `rawData` 파라미터는 데이터를 스프레드시트 형식에 맞게 변환합니다.
Step 3: Streamlit 앱 구축 - 데이터 시각화
Streamlit을 사용하여 Google Sheets 데이터를 가져와 대시보드를 만듭니다. `streamlit`과 `pandas` 라이브러리가 설치되어 있어야 합니다.
import streamlit as st
import pandas as pd
import gspread
from google.oauth2.service_account import Credentials
# Google Sheets API credentials
scopes = ['https://www.googleapis.com/auth/spreadsheets.readonly']
creds = Credentials.from_service_account_file('path/to/your/service_account.json', scopes=scopes)
gc = gspread.service_account(filename='path/to/your/service_account.json') # Using gspread.service_account
# Spreadsheet ID and sheet name
spreadsheet_id = "{your_spreadsheet_id}"
sheet_name = "{your_sheet_name}"
# Function to fetch data from Google Sheets
@st.cache_data
def load_data():
sheet = gc.open_by_key(spreadsheet_id).worksheet(sheet_name)
data = sheet.get_all_records()
return pd.DataFrame(data)
# Load data
df = load_data()
# Calculate total revenue
total_revenue = df['price'].sum()
# Display total revenue
st.title("재무 보고서 대시보드")
st.metric("총 매출", f"${total_revenue:,.2f}") # Format as currency
# Display data table
st.subheader("판매 데이터")
st.dataframe(df)
# Create a bar chart of product sales (example)
product_sales = df.groupby('name')['quantity'].sum()
st.bar_chart(product_sales)
위 코드에서 `path/to/your/service_account.json`, `{your_spreadsheet_id}`, `{your_sheet_name}`은 실제 값으로 대체해야 합니다. `load_data` 함수는 Google Sheets에서 데이터를 읽어와 pandas DataFrame으로 변환합니다. Streamlit 기능을 사용하여 총 매출액을 표시하고, 데이터 테이블을 표시하고, 제품 판매량 막대 차트를 표시합니다.
Streamlit 앱을 실행하려면 터미널에서 `streamlit run your_app_name.py` 명령어를 실행합니다.
Step 4: n8n 스케줄링
n8n 워크플로우를 스케줄링하여 정기적으로 데이터를 수집하고 업데이트합니다. n8n 인터페이스에서 "Cron" 트리거를 사용하여 워크플로우 실행 빈도를 설정할 수 있습니다. 예를 들어, 매일 자정에 워크플로우를 실행하도록 설정하여 최신 데이터를 대시보드에 반영할 수 있습니다.
{
"nodes": [
{
"parameters": {
"cronExpression": "0 0 * * *"
},
"name": "Cron",
"type": "n8n-trigger",
"typeVersion": 1,
"position": [
100,
200
]
}
],
"connections": {
"Cron": {
"main": [
[
"Shopify - Get Orders",
0
]
]
}
}
}
위 코드에서 `cronExpression`은 워크플로우 실행 빈도를 나타냅니다. `0 0 * * *`는 매일 자정을 의미합니다.
4. Real-world Use Case / Example
저는 개인적으로 이 워크플로우를 구축하여 여러 온라인 판매 플랫폼의 데이터를 통합하고 있습니다. 이전에는 매주 5시간 이상을 엑셀 작업에 소비했지만, 지금은 n8n과 Streamlit을 사용하여 자동으로 데이터를 수집하고 시각화하여 시간을 크게 절약할 수 있었습니다. 또한, 실시간으로 변화하는 재무 데이터를 파악하여, 마케팅 전략을 더욱 효과적으로 조정할 수 있게 되었습니다.
예를 들어, 특정 제품의 판매량이 급격히 감소하는 것을 실시간 대시보드를 통해 빠르게 감지하고, 광고 캠페인을 즉시 수정하여 판매량 감소를 막을 수 있었습니다.
5. Pros & Cons / Critical Analysis
- Pros:
- 자동화된 데이터 수집 및 처리로 시간 절약
- 실시간 데이터 시각화를 통한 빠른 의사 결정
- 다양한 데이터 소스 통합 가능
- 코드 거의 없이 대시보드 구축 가능
- 확장성 및 유연성이 뛰어남
- Cons:
- n8n 및 Streamlit 학습 곡선 존재
- Google Sheets API 사용량 제한 가능성
- API 키 및 서비스 계정 키 관리 필요
- 데이터 보안 고려 사항 (특히 민감한 재무 데이터)
- n8n 무료 플랜의 기능 제한 (실행 횟수, 노드 수 등)
6. FAQ
- Q: n8n을 처음 사용하는데, 어떻게 시작해야 하나요?
A: n8n 공식 웹사이트에서 가입하고, 문서를 참고하여 기본적인 워크플로우 구축 방법을 익히세요. 유튜브에도 n8n 관련 튜토리얼이 많이 있습니다. - Q: Streamlit 앱을 배포하려면 어떻게 해야 하나요?
A: Streamlit Cloud, Heroku, AWS EC2 등 다양한 플랫폼에 배포할 수 있습니다. Streamlit Cloud는 가장 쉽고 간편한 배포 방법입니다. - Q: 데이터 보안을 위해 어떤 조치를 취해야 하나요?
A: API 키와 서비스 계정 키를 안전하게 보관하고, 데이터 암호화를 적용하고, 필요한 최소한의 권한만 부여하세요. 또한, 정기적으로 보안 감사를 실시하는 것이 좋습니다. - Q: Google Sheets 대신 다른 데이터베이스를 사용할 수 있나요?
A: 네, n8n은 MySQL, PostgreSQL, MongoDB 등 다양한 데이터베이스를 지원합니다. 적절한 데이터베이스 노드를 사용하여 데이터를 저장하고 검색할 수 있습니다.
7. Conclusion
n8n과 Streamlit을 결합하면, 재무 보고서 생성 프로세스를 완전히 자동화하고, 실시간 데이터 기반 의사 결정을 내릴 수 있습니다. 이 가이드를 통해 여러분도 자신만의 자동 재무 보고서 생성 대시보드를 구축하고, 시간과 노력을 절약하며, 더 나은 비즈니스 성과를 달성할 수 있기를 바랍니다. 지금 바로 n8n과 Streamlit을 설치하고, 이 코드를 사용해 보세요! 공식 문서를 참고하여 더 많은 기능을 탐색하고, 자신만의 워크플로우를 만들어 보세요.


