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 자동 문서화