Missionary Platform

선교 관리 플랫폼

삼일교회 선교 참가 신청부터 팀 관리, 게시판까지
선교의 모든 과정을 하나의 플랫폼에서

프로젝트 전체 개요

현재까지의 개발 진행 상황과 시스템 규모

📊 현재 시스템 규모

15
데이터베이스 테이블
7
Enum 타입
4
애플리케이션
8+
서버 API 모듈

🎯 핵심 기능 요약

선교 관리
선교 생성/수정/삭제, 그룹별 차수 관리
👥
참가 신청
온라인 신청, 정원 관리, 결제 승인
👨‍👩‍👧‍👦
팀 편성
교회별 팀 구성, 팀장/팀원 배정
📋
게시판/약관
공지, 버스, 숙소, FAQ, 일정, 약관 동의
👤
사용자 관리
사용자 목록 조회, 상세 정보 편집, 역할 관리
사용자 여정 (User Flow)
🔐
로그인
구글/카카오
SNS 로그인
선교 조회
모집중인
선교 확인
📝
참가 신청
개인정보 입력
신청비 안내
💰
결제 확인
관리자 확인
결제 승인
👥
팀 배정
교회별
팀 편성
📋
정보 확인
버스/숙소
일정 확인
관리자 여정 (Admin Flow)
🔧
선교 생성
이름, 기간, 정원
지역 설정
👤
스탭 지정
리더/멤버
역할 배정
📊
신청 관리
참가자 확인
결제 승인
👨‍👩‍👧‍👦
팀 편성
교회별 팀
팀원 배정
📥
CSV 다운
참가자 명단
엑셀 추출

데이터베이스 구조

PostgreSQL + Prisma ORM 기반, 총 15개 테이블

사용자/인증
선교 핵심
팀/참가
교회
게시판
약관
사용자 & 인증
User (사용자)👤
🔑idUUID
📧emailString?
nameString?
🔒passwordString?
🌐providerAuthProvider
🎭roleUserRole
📱phoneNumberString?
🎂birthDateDateTime?
genderString?
✝️isBaptizedBoolean
🗑️deletedAt소프트 삭제
선교 핵심
MissionGroup (선교 그룹)📁
🔑idUUID
nameString
📝descriptionText?
🗂️typeRegionType
🗑️deletedAt소프트 삭제
Missionary (선교)
🔑idUUID
nameString
📅startDate ~ endDateDateTime
👨‍💼pastorName / PhoneString?
📅참가신청 시작 ~ 종료DateTime?
💰priceInt?
👥최대/현재 참가인원Int
🏦계좌 정보String?
📊statusMissionStatus
🔗missionGroupId그룹 FK
#️⃣order차수 (1차, 2차...)
MissionaryRegion (지역)🗺️
🔑idUUID
nameString
📌visitPurposeString?방문 목적
👨‍💼pastorName / PhoneString?
📍addressBasic / DetailString?
🔗missionaryId선교 FK
MissionaryStaff (스탭)🧑‍💼
🔑idUUID
🎭roleLEADER | MEMBER
🔗missionaryId선교 FK
🔗userId사용자 FK
MissionaryPoster (포스터)🖼️
🔑idUUID
nameString
📂pathString
🔗missionaryId선교 FK
팀 & 참가
Participation (참가)📝
🔑idUUID
nameString
🎂birthDateString
💰applyFeeInt?
isPaidBoolean
🔒identificationNumberAES 암호화
🚗isOwnCarBoolean
🔗missionaryId, userId, teamId
Team (팀)👨‍👩‍👧‍👦
🔑idUUID
teamNameString
👑leaderUserId / NameString
🔗missionaryId선교 FK
🔗churchId교회 FK
TeamMember (팀원)👤
🔑idUUID
🔗teamId팀 FK
🔗userId사용자 FK
교회
Church (교회)
🔑idUUID
nameString
👨‍💼pastorName / PhoneString?
📍addressBasic / DetailString?
게시판
MissionaryBoard (게시판)📋
🔑idUUID
🗂️typeBoardType
titleString
📝contentText
🔗missionaryId선교 FK
MissionaryBoardFile (첨부)📎
🔑idUUID
nameString
📂pathString
🔗boardId게시판 FK
약관
Terms (약관)📜
🔑idUUID
🗂️termsTypeTermsType
termsTitleString
🔗termsUrlString?
📝termsDescriptionText?
isEssentialBoolean
📊isUsed / seqBoolean / Int
TermsContent (약관 내용)📄
🔑idUUID
🗂️termsTypeTermsType
📝termsContentsText
📅termsApplyAtDateTime
UserTermsAgreement (동의)
🔑idUUID
isAgreedBoolean
🔗userId사용자 FK
🔗termsId약관 FK

Enum (상태/유형 값)

AuthProvider

LOCAL GOOGLE KAKAO

UserRole

USER ADMIN STAFF

MissionaryCategory

DOMESTIC (국내) ABROAD (해외)

MissionStatus

ENROLLMENT_OPENED (모집중) ENROLLMENT_CLOSED (모집마감) IN_PROGRESS (진행중) COMPLETED (완료)

MissionaryBoardType

NOTICE (공지) BUS (버스) ACCOMMODATION (숙소) FAQ SCHEDULE (일정)

MissionaryStaffRole

LEADER (리더) MEMBER (멤버)

TermsType

서비스 이용약관 개인정보 처리방침 개인정보 이용동의 제3자 제공동의
테이블 간 관계 (Relationships)
MissionGroup Missionary 1 : N
User Missionary 1 : N (생성자)
Missionary MissionaryStaff 1 : N
Missionary MissionaryPoster 1 : N
Missionary MissionaryRegion 1 : N
Missionary MissionaryBoard 1 : N
MissionaryBoard BoardFile 1 : N
Missionary Participation 1 : N
User Participation 1 : N
Missionary Team 1 : N
Church Team 1 : N
Team TeamMember 1 : N
User UserTermsAgreement 1 : N
Terms UserTermsAgreement 1 : N

개발 로드맵

완료된 작업과 앞으로의 개발 계획

1

서버 인프라 & DB 설계

Spring Boot에서 NestJS로 전체 마이그레이션

완료
Prisma 스키마 설계15개 테이블, UUID 기반, Soft Delete
RBAC 인증/인가JWT + Roles Guard (USER/ADMIN/STAFF)
AES 암호화주민번호 등 민감정보 암호화 저장
전체 도메인 API선교, 참가, 팀, 스탭, 교회, 게시판, 약관
BullMQ 비동기 처리참가 신청 비동기 큐 처리
CSV 다운로드참가자 명단 엑셀 추출 (UTF-8)
2

어드민 앱 기본 기능

선교 CRUD, 인증, 사이드바

완료
관리자 로그인이메일/비밀번호 + Google/Kakao OAuth
선교 CRUD 페이지생성/수정/삭제/리스트 (DatePicker, Select)
MissionGroup 차수 관리"군선교 1차, 2차..." 자동 차수 증가
동적 사이드바API 연동으로 선교 목록 실시간 표시
디자인 시스템InputField, Button, Select, DatePicker, Badge...
컬러 시스템 개편삼일교회 브랜드 컬러 기반 리디자인
사용자 관리 페이지사용자 목록 조회, 상세 편집 패널
3

어드민 앱 고급 기능

참가 관리, 팀 편성, 게시판

진행중
참가 신청 관리참가자 목록, 결제 승인, CSV 다운로드 (등록자 170명+, 참석 옵션 선교당 3개)
연계지 관리선교 그룹별 연계지(교회, 봉사지역) CRUD 관리 (24개 연계지)
팀 편성 관리교회별 팀 구성, 팀장/팀원 배정
스탭 관리선교별 리더/멤버 스탭 지정
게시판 관리공지, 버스, 숙소, FAQ, 일정 게시판
교회 관리교회 등록/수정, 선교 교회 연결
약관 관리약관 등록/수정, 필수/선택 설정

프로덕션 시드 데이터

실 운영 목 데이터 구축

완료
선교 그룹 7개군선교, 농촌선교, 도시선교, 청소년선교, 필리핀선교, 캄보디아선교, 몽골선교
선교 차수 15개각 선교 그룹당 1~2개 차수 (예: 33~35차 군선교)
참가자 유저 20명 / 등록자 170명+Participation 170명 이상, 참석 옵션 선교당 3개
연계지 24개군선교 5개, 농촌선교 4개, 도시선교 3개, 청소년선교 3개, 필리핀선교 3개, 캄보디아선교 3개, 몽골선교 3개
4

사용자 앱 (missionary-app)

일반 사용자를 위한 참가 신청 앱

계획됨
SNS 로그인Google/Kakao 소셜 로그인 + 회원가입 구현
회원가입 & 비밀번호 변경회원가입, 로그인, 비밀번호 변경 페이지 구현
선교 목록 조회모집중인 선교 카드형 리스트
선교 상세 페이지포스터, 기간, 교역자, 신청 기간 확인
참가 신청 폼개인정보 입력, 약관 동의, 신청 제출
내 참가 현황신청 내역, 결제 상태, 팀 배정 확인
선교 정보 게시판공지/버스/숙소/일정 조회
5

고도화 & 운영

파일 업로드, 알림, 배포

계획됨
파일 업로드포스터/게시판 첨부파일 (S3 스토리지)
푸시 알림신청 승인, 팀 배정, 공지 알림
대시보드 통계선교별 참가자 수, 결제 현황 차트
CI/CD 파이프라인자동 빌드/테스트/배포
도메인 & SSL프로덕션 도메인 연결, HTTPS
모니터링에러 트래킹, 성능 모니터링

시스템 아키텍처

모노레포 구조와 기술 스택

시스템 전체 구조도
클라이언트 (사용자가 보는 화면)
👤missionary-app
사용자 앱 (Next.js 16)
🔧missionary-admin
관리자 앱 (Next.js 16)
⬇ 컴포넌트 공유 ⬇
공유 라이브러리 (UI 부품 모음)
🎨@samilhero/design-system
버튼, 입력창, 달력 등 공통 UI
⬇ API 통신 (HTTP) ⬇
서버 (데이터 처리 엔진)
⚙️missionary-server
NestJS 11 + Prisma ORM
📨BullMQ
비동기 작업 처리 (Redis)
Scheduler
민감정보 자동 정리
📘Swagger
API 자동 문서화
⬇ 데이터 저장/조회 ⬇
데이터베이스
🗄️PostgreSQL
메인 데이터베이스 (15 테이블)
🔴Redis
작업 큐, 캐시

🖥️ 프론트엔드 기술

⚛️
React 19
UI 렌더링 라이브러리
Next.js 16
서버사이드 렌더링, 라우팅
🎨
Tailwind CSS 4
유틸리티 기반 스타일링
📖
Storybook 8.6
UI 컴포넌트 문서화
🧪
Vitest
프론트엔드 테스트
React Compiler
자동 메모이제이션 (useMemo/useCallback 불필요)

⚙️ 백엔드 기술

🦅
NestJS 11
엔터프라이즈급 Node.js 프레임워크
🔷
Prisma ORM
타입 안전한 데이터베이스 접근
🐘
PostgreSQL
안정적인 관계형 데이터베이스
🔴
Redis + BullMQ
메시지 큐, 비동기 처리
🔐
Passport.js + JWT
인증/인가 (OAuth, RBAC)
📘
Swagger (OpenAPI)
API 자동 문서화