[Flutter] 몽땅계산기 - 한국 계산기 앱 개발기

2026. 2. 2. 15:13·개발/프로젝트
반응형

DOWNLOAD

몽땅 계산기 다운로드

 

01234

 

Android iOS


SUMMARY

몽땅계산기 (TaxCalc)

한국 세법과 제도에 특화된 100개+ 고품질 계산기를 제공하는 Flutter 모바일 앱입니다.

Clean Architecture + GetX GetBuilder.

연도별 세율 데이터(2024/2025/2026), PDF 리포트, Drift SQLite, Firebase.

주요 기술적 도전: 100개+ 계산기 품질 표준화, 연도별 법령 데이터 중앙 관리, DI Singleton 최적화


TABLE OF CONTENTS

목차

왜 이 앱을 만들었나? 주요 기능 소개 아키텍처 기술적 도전과 해결 활용 사례


WHY

왜 이 앱을 만들었나?

세금 계산, 급여 계산, 대출 이자... 매년 바뀌는 한국 법령에 따라 정확한 계산이 필요한 순간이 많습니다.

하지만 대부분의 계산기 앱은 단순 곱셈 수준이거나, 오래된 세율을 사용하거나, 한국 법령의 특수 조건(누진세율, 공제, 감면 등)을 반영하지 않는 경우가 많았습니다.

예를 들어 종합소득세는 8구간 누진세율을 적용해야 하고, 양도소득세는 장기보유특별공제와 1세대1주택 비과세 조건을 고려해야 합니다.

저는 실제 한국 법령을 정확히 반영하면서도, 매년 법령 변경 시 쉽게 업데이트할 수 있는 계산기 앱을 만들고 싶었습니다.


FEATURES

주요 기능 소개

100개+ 고품질 계산기

세금 — 종합소득세, 양도소득세, 취득세, 법인세, 부가가치세, 증여세, 상속세, 연말정산 등

급여— 실수령액, 최저임금, 퇴직금, 야근수당, 주휴수당, 연차수당, 실업급여 등

부동산 — 전세vs매매, 중개수수료, 종합부동산세, LTV/DTI/DSR, 청약가점 등

금융 — 복리이자, 대출상환, 투자수익률, 배당수익률, 환율계산 등

기타 — 건강, 자동차, 교육, 사업, 육아, 군대, 상속, 노후


연도별 세율 데이터 시스템 (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

100개+ 계산기의 일관된 품질 유지

계산기가 각각 다른 법령/제도를 다루면서도 일관된 UI 패턴, 코드 구조, 계산 정확성을 유지해야 했습니다.

초기에는 더 많은 계산기가 있었지만, 상당수가 단순 곱셈 수준의 저품질이었고, 법령 데이터가 산발적으로 하드코딩되어 있었습니다.

SOLUTION — 품질 표준화 + 저품질 계산기 삭제

1. 저품질 삭제 — 160개+ → 100개+, 품질 기준 미달 계산기 과감히 제거

2. 계산기 생성 10단계 체크리스트 — Enum 타입 시스템, 실제 계산 로직, 상세 breakdown, 법적 근거 주석 필수화

3. dart analyze 경고 0개 유지 — CI/CD에서 경고 발생 시 빌드 실패 처리

4. BaseViewModel 상속 강제 — 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

@singleton DI 등록과 메모리 관리

Calculator 서비스 + UseCase + 공통 서비스들, 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

결론

몽땅계산기는 한국 세법과 제도를 정확히 반영한 100개+ 고품질 계산기를 제공하는 Flutter 앱입니다.

Clean Architecture와 BaseViewModel 템플릿 패턴으로 일관되게 유지했습니다.

특히 연도별 세율 데이터 중앙 관리 시스템을 통해, 매년 법령 변경 시에도 빠르게 대응할 수 있는 구조를 만들었습니다.

이 프로젝트를 통해 대규모 Flutter 앱의 아키텍처 설계, DI 최적화, 도메인 지식(한국 세법)과 기술의 결합에 대해 깊이 경험할 수 있었습니다.


DOWNLOAD

몽땅 계산기 다운로드 (AOS는 베타 테스트 중입니다)

 

01234

 

Android iOS


긴 글을 읽어주셔서 감사합니다!

처음 이 앱을 시작했을 때는 "간단한 세금 계산기"를 목표로 했습니다.

하지만 한국 세법을 깊이 파고들수록, 누진세율, 장기보유특별공제, 다주택자 중과, 두루누리 감면 등 복잡한 조건들을 정확히 반영해야 한다는 것을 깨달았습니다.

결과적으로 160개+ 중 저품질 계산기를 삭제하고, 100개+ 고품질 계산기만 남기는 어려운 결정을 했습니다.

"양보다 질"이라는 원칙을 지키면서, 사용자에게 신뢰할 수 있는 계산 결과를 제공하는 것이 더 가치 있다고 판단했습니다.

이 앱이 세금 계산, 재무 계획을 고민하시는 분들께 작은 도움이 되었으면 합니다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'개발 > 프로젝트' 카테고리의 다른 글

[Flutter Plugin] MediaPipe Face/Pose Landmarker 라이브러리 개발기  (1) 2026.02.02
[Flutter] AI 턴제 내러티브 게임 '힘내라 권대리' 개발기 - Clean Architecture + MVVM + Riverpod  (0) 2026.02.02
[Flutter] AI 핑계 생성기 '뻥이야' 앱 개발기  (0) 2026.02.02
[Flutter Project] 간단한 녹음 앱  (1) 2025.03.16
'개발/프로젝트' 카테고리의 다른 글
  • [Flutter Plugin] MediaPipe Face/Pose Landmarker 라이브러리 개발기
  • [Flutter] AI 턴제 내러티브 게임 '힘내라 권대리' 개발기 - Clean Architecture + MVVM + Riverpod
  • [Flutter] AI 핑계 생성기 '뻥이야' 앱 개발기
  • [Flutter Project] 간단한 녹음 앱
권퓨터
권퓨터
만드는 걸 좋아하는 개발자의 기록. 코드든 글이든, 일단 만들어 봅니다.
  • 권퓨터
    권퓨터: Kwonputer
    권퓨터
  • 티스토리 홈 관리자
  • 전체
    오늘
    어제
    • 분류 전체보기 (559)
      • 개발 (56)
        • 프로젝트 (5)
        • 모바일 (44)
        • 프론트엔드 (0)
        • 백엔드 (2)
        • 인프라 (0)
        • AI · 머신러닝 (4)
      • IT · 테크 (10)
        • 기술 트렌드 (3)
        • 도구 · 생산성 (1)
        • 제품 리뷰 · 추천 (0)
        • 마케팅 · 수익화 (6)
      • 자기계발 (7)
        • 공부법 · 언어 (0)
        • 취업 · 커리어 (7)
      • 아카이브 (486)
        • 일기 (480)
        • 취미 (6)
  • 블로그 메뉴

    • 홈
  • 링크

    • 블로그 이전
  • 공지사항

    • 서브 블로그 => https://kwonputer.com/
  • 인기 글

  • 태그

    flutter
    클린 아키텍처
    python
    ai 게임 개발
    콘텐츠자동화
    flutter 개발자
    Prompt Engineering
    kotlin
    aws lambda
    블로그수익화
    FACEBOOK광고
    https://github.com/kwongeneral/kortfolio.git
    injectable
    TypeScript
    Clean Architecture
    next.js
    내러티브 게임
    dynamodb
    OpenAI GPT
    riverpod
    https://www.kwonputer.shop/
    AWS CDK
    AI블로그
    서버리스 아키텍처
    파이썬
    상태관리
    flutter 면접 질문
    Single Table Design
    python 기초
    다국어 블로그
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
권퓨터
[Flutter] 몽땅계산기 - 한국 계산기 앱 개발기
상단으로

티스토리툴바