본문으로 건너뛰기
포트폴리오로 돌아가기
[kg-repo] 유치원·어린이집 Single-Tenant SaaS Platform

[kg-repo] 유치원·어린이집 Single-Tenant SaaS Platform

유치원 하나를 개발하는 것이 아니라, 유치원 앱을 반복적으로 만들어낼 수 있는 플랫폼을 개발했습니다. 고객사별 독립 배포가 필요한 Single-Tenant 환경에서 공통 Platform과 Feature를 분리하고, Product Definition과 Composition Engine을 통해 고객별 앱을 안전하고 반복 가능하게 조립할 수 있는 제품 개발 기반을 설계했습니다.

기간2026.07 – 현재
역할풀스택 개발 (100%)
팀 규모1
사용 스택
  • TypeScript
  • Node.js
  • Hono
  • PostgreSQL
  • Drizzle
  • Redis
  • React Native
  • AWS S3
  • CloudFront(OAC)
  • AWS Lambda
  • Pino
  • Docker
  • Github Actions
  • Terraform

유치원·어린이집 Single-Tenant SaaS Platform

01. 프로젝트 개요

유치원·어린이집 한 곳당 하나의 독립 인스턴스를 구축하는 Single-Tenant SaaS 플랫폼입니다. 인증·비즈니스 API를 물리적으로 분리하고, 32개 업무 도메인과 RBAC, 실시간 서비스, 결제, 미디어 파이프라인, AI 기능을 모듈화했습니다. 고객사별 인스턴스는 별도 CLI를 통해 생성하고 필요한 Domain만 선택적으로 조립합니다.


02. 주요 기능

① 피크타임 트래픽에 대응하기 위한 인증·비즈니스 API 독립 아키텍처

유치원 서비스 특성상 등원·하원 등 특정 시간대에 사용자 접속과 API 요청이 집중되는 트래픽 패턴을 고려했습니다. 로그인·세션을 담당하는 Auth Server와 실제 서비스 요청을 처리하는 API Server를 독립 프로세스로 분리하여, 비즈니스 API의 부하가 증가하더라도 인증 영역이 직접 영향을 받지 않고 각각 독립적으로 확장할 수 있도록 설계했습니다.

핵심 기능

  • servers/auth / servers/api 독립 프로세스 구성
  • 피크타임의 인증 트래픽과 서비스 API 트래픽 격리
  • Auth Server에서 Credential · JWT 발급 · Refresh Rotation · Session 전담
  • API Server에서 JWT Local Verification → 요청마다 Auth Server를 호출하지 않는 구조
  • Auth / API Server의 독립 Scale-out이 가능한 구조
  • Redis 기반 기기별 Session 관리 및 전체·개별 Revoke
  • Refresh Token Rotation + Replay Detection
  • Redis Lua 기반 로그인 Rate Limit
  • API Server의 Stateful Dependency 최소화

② 3-Layer RBAC & Data Scope

Role · Permission · Data Scope를 결합한 3계층 접근통제

핵심 기능

  • public / authenticated / active 1차 Access Gate
  • Permission 기반 세부 RBAC
  • 교사 · 원장 · 보호자별 데이터 Scope 판정
  • 교사 → 담당 반 / 보호자 → 본인 자녀 / 원장 → 전체
  • access 패키지를 Authorization SSOT로 구성
  • 배치 IN Query 기반 Scope 조회로 N+1 방지
  • 승인대기 · 비활성 · 권한부족 오류 코드 분리

③ 무상태 API 서버와 Scale-out Architecture

무상태 API 서버와 Scale-out Architecture

핵심 기능

  • Session State를 Redis로 완전 분리
  • API Server의 Sticky Session 의존 제거
  • JWT Local Verification 기반 Stateless Request 처리
  • Redis Cluster / TLS 대응
  • Auth / API 각각 독립 Docker Image 구성
  • turbo prune 기반 최소 Production Image
  • ECS Fargate Horizontal Scale-out 고려
  • GitHub Actions 기반 Build · Lint · Test Pipeline

④ 32개 도메인과 독립 Package

32개 업무 도메인을 실제 구현 및 Route Mount까지 완료

원아 · 학급 관리

  • 원아 등록
  • 반 구성 및 담임·보조·외부교사 배정
  • 보호자 / 교사 초대 및 연결

등·하원 및 이동 관리

  • 출결 · 결석 · 조퇴 관리
  • 비콘 / GPS / 수동 체크인
  • 셔틀 노선 및 실시간 운행 관리
  • GPS 기반 하원·픽업 호출

건강 · 생활 관리

  • 원아 건강 및 응급정보 관리
  • 알레르기 · 식이 제한 관리
  • 투약 의뢰
  • 식단 및 급식 안전정보 관리
  • 보호자 동의서 관리

알림장 · 미디어

  • 일일 알림장 및 보육활동 AI 기록
  • 사진 · 앨범 및 원아 태깅
  • 댓글 · 좋아요 · 읽음 상태 관리
  • Presigned URL 기반 이미지/영상 업로드

일정 · 프로그램

  • 기관 일정 및 휴원일 관리
  • 재능기부 · 특별활동 클래스
  • 방과후 프로그램 및 출석 관리
  • 외부강사 초대 · 배정
  • 시설·공간 예약

커뮤니케이션

  • 학부모 커뮤니티 및 소모임
  • 교사 ↔ 학부모 1:1 채팅
  • 원장 핫라인
  • 실시간 Presence · Typing
  • 인앱 / Push Notification

원비 · 결제

  • 월별 원비 및 청구서 관리
  • 할인 · Credit Note · 미납 관리
  • Toss Payments 기반 결제
  • 환불 · 보증금 Pre-authorization
  • 행사비 · 공간대여료 등 통합 결제

마켓플레이스

  • 학부모 간 중고거래
  • 판매자 ↔ 구매자 문의 채팅
  • 신고 · Moderation · 판매상태 관리

AI 보육 지원

  • AI 기반 원아별 알림장 초안 생성
  • AI 월간 성장 리포트
  • 알림장 · 출결 · 앨범 기반 Evidence Grounding
  • OpenAI · Anthropic · Gemini Multi-provider
  • 교사 검토 후 발행하는 Human-in-the-loop

⑤ Media Pipeline

S3 · CloudFront 기반 대용량 미디어 Direct Upload Pipeline

핵심 기능

  • Presigned URL 기반 S3 Direct Upload
  • Application Server의 Image/Video Byte 중계 제거
  • 최대 500MB Video Upload 검증
  • temp → attached Asset Lifecycle
  • 24시간 미첨부 Asset 자동 정리
  • 계정 삭제 Asset Deletion Queue
  • CloudFront 기반 CDN 조회
  • Lambda + Sharp 기반 Thumbnail / 720px 파생 이미지
  • DB에는 URL 대신 Storage Key만 저장

⑥ AI-powered Childcare Features

Multi-Provider AI와 Privacy-first 유아교육 AI 기능

핵심 기능

  • OpenAI · Anthropic · Google GenAI Multi-provider 지원
  • Port / Adapter 기반 LLM Provider 교체
  • AI 알림장 초안 자동 생성
  • 최대 40명 원아 일괄 Draft 생성
  • LLM 전송 전 원아 실명 비식별화
  • AI 월간 성장 리포트 생성
  • Notice · Attendance · Album 기반 Evidence Grounding
  • 교사 검토 후 Publish하는 Human-in-the-loop Workflow
  • 의료적 진단/ADHD/자폐 등 AI 진단 표현 차단
  • Feature Flag 기반 AI 기능 활성화

⑦ Billing & Unified Payment

여러 업무 도메인을 하나의 결제 경로로 연결

핵심 기능

  • 월별 원비 Invoice / Item 관리
  • 할인 · Credit Note · 미납 알림
  • PG Gateway 추상화
  • Toss Payments Adapter
  • 결제 · 환불 · 보증금 Pre-authorization
  • Webhook Idempotency
  • payables Polymorphic Hub 구성
  • 원비 · 공간예약 · 클래스 참가비를 하나의 Payment Domain으로 통합

⑧ Single-Tenant Product Scaffolding

고객사별 독립 서비스를 자동 생성하는 KG-CLI

핵심 기능

  • @xierra/kg-cli npm 배포
  • 신규 유치원 프로젝트 자동 생성
  • Template Repository Clone
  • Git History 초기화
  • 유치원명 / Namespace 자동 초기화
  • ENABLED_DOMAINS 기반 기능 선택
  • Template Version 지정
  • Path Escape Guard
  • Docker 기반 로컬 환경 생성 Workflow

⑨ Re-architecture

실제 운영형 시스템의 구조적 부채를 발견하고 재설계

핵심 기능

  • 기존 32개 Domain 구조의 Architecture Debt 분석
  • 중앙@kg/db에 집중된 86개 Table 구조 문제 식별
  • 33개 Domain → 중앙 DB Package 의존 문제 분석
  • Domain별 Schema / Migration Ownership으로 전환
  • TransactionRunner Port로 ORM 의존성 격리
  • defineModule → Type-safe defineProduct / CapabilityFactory 재설계
  • Feature Dependency Topological Sort
  • Hono 등 Framework Dependency를 Boundary로 격리

⑩ Token Rotation 기반 인증·세션 보안

모바일 서비스의 인증을 단순 JWT 저장 수준으로 처리하지 않고, Access / Refresh Token 수명주기와 세션 무효화까지 고려한 인증 계약으로 설계

핵심 기능

  • Short-lived Access Token 설계
  • Refresh Token Rotation
  • Refresh Token 원문 대신 Hash 저장
  • Refresh Token Replay Attack 감지
  • 기기별 Session 독립 Revoke
  • tokenVersion 기반 인증정보 즉시 무효화
  • authorizationVersion 기반 권한 변경 즉시 반영
  • Token · Password · Secret 등 Audit/Log 기록 차단

⑪ 기능 의존성을 자동 해결하는 제품 조립 엔진

각 Feature를 독립적인 Capability로 정의하고, 기능 간 의존성을 분석하여 올바른 순서로 제품을 조립하는 DI/Composition Engine을 구축했습니다.

핵심 기능

  • defineFeature() 기반 Feature 및 Dependency 선언
  • CapabilityFactory<TContext, TModule> 기반 타입 안전 DI
  • Feature Dependency Topological Sort
  • Circular / Missing / Self Dependency 검증
  • Feature ID Ownership 검증
  • 동일 Feature 중복 및 정의 충돌 방지
  • API · Mobile · Admin별 Capability 추출

⑫ Ports & Adapters 기반 인프라 격리

비즈니스 로직이 특정 DB·스토리지·웹 프레임워크에 종속되지 않도록 외부 인프라를 Port로 추상화하고 실제 구현체를 Adapter로 격리

핵심 기능

  • Domain/Application과 Infrastructure 관심사 분리
  • Database · Storage · Event · Notification · Auth를 Port로 추상화
  • 벤더 SDK가 핵심 비즈니스 계층으로 침투하지 않도록 제한
  • Production / Test Adapter 교체 가능 구조
  • Hono · Expo · Admin Web 등 Framework Boundary 분리
  • 인프라 변경 시 Feature 코드 영향 최소화