티스토리 뷰
[Flutter] 몽땅계산기 - 한국 세법 기반 101개 고품질 계산기 앱 개발기 (168,000줄)
권퓨터: Kwonputer 2026. 2. 2. 15:13SUMMARY
몽땅계산기 (TaxCalc)
한국 세법과 제도에 특화된 101개 고품질 계산기를 12개 카테고리로 제공하는 Flutter 모바일 앱입니다.
Clean Architecture + GetX GetBuilder 패턴 기반, 510개 Dart 파일, 약 168,000줄 규모.
연도별 세율 데이터(2024/2025/2026), PDF 리포트, Drift SQLite, Firebase 5종 연동.
주요 기술적 도전: 101개 계산기 품질 표준화, 연도별 법령 데이터 중앙 관리, 142개 DI Singleton 최적화
TABLE OF CONTENTS
목차
왜 이 앱을 만들었나? 주요 기능 소개 아키텍처 기술적 도전과 해결 활용 사례
WHY
왜 이 앱을 만들었나?
세금 계산, 급여 계산, 대출 이자... 매년 바뀌는 한국 법령에 따라 정확한 계산이 필요한 순간이 많습니다.
하지만 대부분의 계산기 앱은 단순 곱셈 수준이거나, 오래된 세율을 사용하거나, 한국 법령의 특수 조건(누진세율, 공제, 감면 등)을 반영하지 않는 경우가 많았습니다.
예를 들어 종합소득세는 8구간 누진세율을 적용해야 하고, 양도소득세는 장기보유특별공제와 1세대1주택 비과세 조건을 고려해야 합니다.
저는 실제 한국 법령을 정확히 반영하면서도, 매년 법령 변경 시 쉽게 업데이트할 수 있는 계산기 앱을 만들고 싶었습니다.
FEATURES
주요 기능 소개
101개 고품질 계산기 (12개 카테고리)
세금 (15개) — 종합소득세, 양도소득세, 취득세, 법인세, 부가가치세, 증여세, 상속세, 연말정산 등
급여 (18개) — 실수령액, 최저임금, 퇴직금, 야근수당, 주휴수당, 연차수당, 실업급여 등
부동산 (13개) — 전세vs매매, 중개수수료, 종합부동산세, LTV/DTI/DSR, 청약가점 등
금융 (18개) — 복리이자, 대출상환, 투자수익률, 배당수익률, 환율계산 등
기타 — 건강(11), 자동차(3), 교육(2), 사업(10), 육아(2), 군대(2), 상속(5), 노후(2)
연도별 세율 데이터 시스템 (2024/2025/2026)
소득세 8구간 누진세율 — 1,400만원 이하 6% ~ 10억원 초과 45%
4대보험 요율 (2025) — 건강보험 7.09%, 장기요양 12.95%, 국민연금 9%
최저임금 — 2024년 9,860원, 2025년 10,030원
법인세 4구간 세율 — 2억원 이하 9% ~ 3,000억원 초과 24%
실제 한국 법령 기반 계산 로직
종합소득세 — 8구간 누진세율, 소득유형별 공제, 세액공제 적용
양도소득세 — 장기보유특별공제(최대 80%), 1세대1주택 비과세 판정
취득세 — 다주택자 중과(8~12%), 생애최초 감면(200만원 한도)
상세 breakdown — 계산 과정 단계별 표시 (어떻게 이 금액이 나왔는지 투명하게 공개)
일괄/연계/역산/비교 계산 패턴
비교 계산 — 전세 vs 매매 5년 비용 비교, 리스 vs 구매, 법인 vs 개인사업자
연계 계산 — A 계산 결과를 B 계산의 입력으로 자동 연결
역산 계산 — 목표 실수령액에서 필요 연봉 역산
부채 상환 전략 — 눈사태(고금리 우선) vs 눈덩이(소액 우선) 비교
PDF 리포트 생성 + 공유
PDF 문서 생성 — 계산 결과 + 입력값 + breakdown을 PDF로 저장
스크린샷 캡처 — 계산 결과 화면을 이미지로 저장
타 앱 공유 — 카카오톡, 메일 등으로 바로 공유
ARCHITECTURE
아키텍처
Clean Architecture + GetX GetBuilder
lib/
├── presenter/ # Presentation Layer
│ ├── pages/calculator/ # 101개 계산기 UI + ViewModel
│ │ ├── tax/ # 세금 15개
│ │ ├── salary/ # 급여 18개
│ │ ├── realEstate/ # 부동산 13개
│ │ └── ...
│ ├── widgets/ # TCScaffold, TCButton, TCNumberTextField
│ └── styles/ # RColors, RTexts, AppTheme
│
├── domain/ # Domain Layer
│ └── model/calculator/
│ ├── CalculatorType.dart # 101개 enum (5개 getter)
│ └── CalculationResultModel.dart
│
├── data/ # Data Layer
│ ├── services/
│ │ ├── calculators/ # 103개 @singleton Calculator 서비스
│ │ └── tax_rates/ # TaxRate2024, TaxRate2025, TaxRate2026
│ └── database/ # Drift SQLite ORM
│
└── di/ # GetIt + Injectable 자동 DI
BaseViewModel 템플릿 메서드 패턴
113개 ViewModel이 모두 BaseViewModel을 상속하여 일관된 라이프사이클과 상태 관리를 공유합니다.
abstract class BaseViewModel extends GetxController {
bool isInitLoading = true;
bool isLoading = false;
bool isError = false;
String? errorMessage;
@override
void onReady() {
super.onReady();
initialize(); // 템플릿 메서드 패턴
}
Future<void> initialize() async {
await init(); // 서브클래스에서 구현
isInitLoading = false;
update(updateKeys); // 선택적 리빌드
}
Future<void> init();
List<String> get updateKeys;
}
TROUBLESHOOTING
기술적 도전과 해결
PROBLEM 01
101개 계산기의 일관된 품질 유지
101개 계산기가 각각 다른 법령/제도를 다루면서도 일관된 UI 패턴, 코드 구조, 계산 정확성을 유지해야 했습니다.
초기에는 166개 계산기가 있었지만, 상당수가 단순 곱셈 수준의 저품질이었고, 법령 데이터가 산발적으로 하드코딩되어 있었습니다.
SOLUTION — 품질 표준화 + 저품질 계산기 삭제
1. 저품질 69개 삭제 — 166개 → 101개, 품질 기준 미달 계산기 과감히 제거
2. 계산기 생성 10단계 체크리스트 — Enum 타입 시스템, 실제 계산 로직, 상세 breakdown, 법적 근거 주석 필수화
3. dart analyze 경고 0개 유지 — CI/CD에서 경고 발생 시 빌드 실패 처리
4. BaseViewModel 상속 강제 — 113개 ViewModel 모두 동일 패턴 적용
PROBLEM 02
연도별 법령 데이터 중앙 관리
매년 1월 법령이 변경되면, 수십 개 계산기에 흩어진 세율/공제액/요율을 찾아서 업데이트해야 했습니다.
초기에는 각 계산기 서비스에 하드코딩되어 있어서, 한 곳을 수정하면 다른 곳을 누락하는 실수가 발생했습니다.
SOLUTION — TaxRateProvider 중앙 집중 관리
// data/services/tax_rates/
├── TaxRateProvider.dart // @singleton, 연도 선택 로직
├── TaxRate2024.dart // 2024년 세율 데이터
├── TaxRate2025.dart // 2025년 세율 데이터
└── TaxRate2026.dart // 2026년 세율 데이터
// 사용 예시
final taxRate = getIt<TaxRateProvider>().getRate(2025);
final incomeTax = taxRate.calculateIncomeTax(income); // 8구간 누진세율 자동 적용
결과: 새 연도 세율 추가 시 TaxRate2027.dart 1개 파일만 추가하면 전체 계산기에 반영
PROBLEM 03
142개 @singleton DI 등록과 메모리 관리
103개 Calculator 서비스 + 30개 UseCase + 공통 서비스들, 총 142개 singleton을 DI 등록해야 했습니다.
모든 singleton이 앱 시작 시 생성되면 메모리 부담과 초기화 지연이 발생할 수 있었습니다.
SOLUTION — Injectable 코드 생성 + Lazy Singleton
// Calculator 서비스 예시
@singleton // GetIt에 Lazy Singleton으로 자동 등록
class IncomeTaxCalculator {
final TaxRateProvider _taxRateProvider;
IncomeTaxCalculator(this._taxRateProvider); // DI 자동 주입
CalculationResult calculate(int income, int year) {
final taxRate = _taxRateProvider.getRate(year);
// 8구간 누진세율 계산...
}
}
// build_runner로 자동 생성
// injection.config.dart에 142개 서비스 등록 코드 생성
결과: 실제 사용 시점에만 인스턴스 생성 → 앱 시작 시간 영향 없음, 새 계산기 추가 시 @singleton 어노테이션만 추가하면 자동 등록
TECH STACK
기술 스택
언어/프레임워크 — Dart 3.1+, Flutter 3.38.5
아키텍처 — Clean Architecture (presenter/domain/data)
상태관리 — GetX 4.6.6 (GetBuilder 패턴, .obs 미사용)
DI — GetIt 8.0.3 + Injectable 2.5.0 (코드 생성)
로컬 DB — Drift 2.20.3 (SQLite ORM, 3테이블)
PDF/공유 — pdf 3.11.1, printing 5.13.4, screenshot 3.0.0, share_plus 10.1.4
Firebase — Analytics, Crashlytics, Remote Config, Messaging, Core (5종)
폰트 — Pretendard (9웨이트: Thin ~ Black)
USE CASES
활용 사례
직장인 연말정산
연말정산 예상 환급액 계산, 소득공제/세액공제 항목별 시뮬레이션
부동산 투자 의사결정
전세 vs 매매 5년 비용 비교, 취득세/양도소득세 시뮬레이션, LTV/DTI/DSR 한도 계산
창업자/사업자
법인 vs 개인사업자 세금 비교, 일반과세 vs 간이과세 비교, 부가가치세 계산
퇴직 준비
퇴직금 계산, 퇴직연금 일시금 vs 연금 비교, 실업급여 수령액/기간 계산
상속/증여 계획
상속세/증여세 시뮬레이션, 상속 순위 및 지분 계산
REFERENCE
국세청 국가법령정보센터 4대사회보험 정보연계센터 Flutter Drift (SQLite ORM) Injectable
CONCLUSION
결론
몽땅계산기는 한국 세법과 제도를 정확히 반영한 101개 고품질 계산기를 제공하는 Flutter 앱입니다.
510개 Dart 파일, 약 168,000줄 규모의 프로젝트를 Clean Architecture와 BaseViewModel 템플릿 패턴으로 일관되게 유지했습니다.
특히 연도별 세율 데이터 중앙 관리 시스템을 통해, 매년 법령 변경 시에도 빠르게 대응할 수 있는 구조를 만들었습니다.
이 프로젝트를 통해 대규모 Flutter 앱의 아키텍처 설계, DI 최적화, 도메인 지식(한국 세법)과 기술의 결합에 대해 깊이 경험할 수 있었습니다.
긴 글을 읽어주셔서 감사합니다!
처음 이 앱을 시작했을 때는 "간단한 세금 계산기"를 목표로 했습니다.
하지만 한국 세법을 깊이 파고들수록, 누진세율, 장기보유특별공제, 다주택자 중과, 두루누리 감면 등 복잡한 조건들을 정확히 반영해야 한다는 것을 깨달았습니다.
결과적으로 166개 중 저품질 69개를 삭제하고, 101개 고품질 계산기만 남기는 어려운 결정을 했습니다.
"양보다 질"이라는 원칙을 지키면서, 사용자에게 신뢰할 수 있는 계산 결과를 제공하는 것이 더 가치 있다고 판단했습니다.
이 앱이 세금 계산, 재무 계획을 고민하시는 분들께 작은 도움이 되었으면 합니다.
- Total
- Today
- Yesterday
- 파이썬 기초
- riverpod
- 서버리스 아키텍처
- flutter 면접 질문
- flutter
- dynamodb
- injectable
- https://github.com/kwongeneral/kortfolio.git
- Prompt Engineering
- OpenAI GPT
- 클린 아키텍처
- flutter 개발자
- TypeScript
- 크로스플랫폼
- 내러티브 게임
- aws lambda
- 개발자
- Compose
- Single Table Design
- 자막 생성기
- https://www.kwonputer.shop/
- 파이썬
- python
- 상태관리
- python 기초
- kotlin
- Clean Architecture
- KE-T5
- ai 게임 개발
- AWS CDK
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |









