공모사업 통합 운영 콘솔
접수 현황과 서류 검토, 심사위원 배정과 심사표 채점·순위 산출, 협약·교부 관리, 정산 검토, 알림 템플릿·발송 이력, 승인 대기 목록을 한 콘솔에서 다루는 임직원용 관리 웹을 구현합니다.
프로젝트 개요
접수 현황과 서류 검토, 심사위원 배정과 심사표 채점·순위 산출, 협약·교부 관리, 정산 검토, 알림 템플릿·발송 이력, 승인 대기 목록을 한 콘솔에서 다루는 임직원용 관리 웹을 구현합니다. 사업 담당·심사·관리자 역할에 따라 메뉴와 권한이 달라지며 신청 웹과 같은 백엔드를 공유하는 확장 프로젝트입니다.
작업 범위
- 대시보드: 사업 단계별 단체 수, 보고 제출 현황, 정산 검토 대기 건을 한 화면에서 보고 바로 처리 화면으로 이동합니다. 승인 대기 목록과 알림함도 이 화면의 모바일 폭 보기로 확인하며 앱 스토어 배포는 범위에 포함하지 않습니다
- 접수·서류 검토: 접수된 신청서를 검색·필터로 찾고 서류 검토 화면에서 보완 요청이나 반려를 처리하며 이력을 남깁니다
- 심사·선정: 심사위원을 배정하고 항목별 점수와 의견을 입력하는 심사표를 채점한 뒤 점수 집계와 순위를 확인하고 선정을 확정합니다
- 협약·정산 검토: 선정 단체의 협약·교부 차수를 관리하고, 제출된 집행 내역과 증빙을 항목별로 검토해 보완 요청이나 확정 처리를 합니다
주요 업무
- 대시보드 화면: 단계별 집계는 접수·검토·심사·선정·협약 순서로 표시하고 각 숫자를 누르면 해당 목록으로 이동합니다
- 접수·서류 검토 화면: 목록에서 상태 칩으로 거르고 검토 대화상자에서 보완 사유를 작성하면 신청자에게 알림 발송 대기열이 등록됩니다
- 심사·선정 화면: 외부 심사위원은 배정된 건만 열람하며 채점 완료 후 점수 평균과 순위가 자동 계산됩니다
- 협약·정산 검토 화면: 교부 차수 합계를 협약 금액과 대조하고 집행 행마다 검토 상태를 저장하며 모든 행이 승인되면 정산 확정이 열립니다




프로젝트 핵심 과제
외부 심사위원이 배정 건만 열람하
API와 증빙 파일 접근까지 같은 규칙으로 제한하는 접근 제어 설계가 필요합니다
심사표 항목 가중치가 사업마다 달라질 때 이미 채점된 점수의 재계산 범위를 정하는 집계 구조 설계가 필요합니다
알림톡 템플릿 사전 등록 규격과 메일·푸시 채널의 변수 치환 방식을 통합하는 발송 구조 설계가 필요합니다
기존 시스템 기록을 이관할 때 상태 코드와 금액 단위를 새 구조로 변환하고 건수·금액을 대조하는 검증 절차 설계가 필요합니다
웹 콘솔과 앱이 같은 승인 API를 쓰되 처리 이력의 중복 기록을 막는 멱등 처리 설계가 필요합니다
핵심 기능 상세
대시보드
사업 단계별 단체 수, 보고 제출 현황, 정산 검토 대기 건을 한 화면에서 보고 바로 처리 화면으로 이동합니다.
- PostgreSQL 집계 쿼리와 Materialized View로 단계별 단체 수와 제출 현황 산출
- 역할별 위젯 구성을 서버 응답에 포함하여 화면 분기를 단순화
- 승인 대기 목록 API를 웹 콘솔과 React Native(Expo) 앱이 공유하도록 REST로 설계
단계별 집계 뷰와 역할별 위젯 구성을 결합하여 담당자가 오늘 처리할 일을 한 화면에서 보게 하는 대시보드를 설계합니다.


접수·서류 검토
접수된 신청서를 검색·필터로 찾고 서류 검토 화면에서 보완 요청이나 반려를 처리하며 이력을 남깁니다. 목록에서 상태 칩으로 거르고 검토 대화상자에서 보완 사유를 작성하면 신청자에게 알림 발송 대기열이 등록됩니다.
- 서버 사이드 페이지네이션과 인덱스 기반 검색으로 대량 접수 목록 조회
- 보완 요청 작성과 알림 대기열 등록을 하나의 트랜잭션으로 처리
- 검토 처리 시 낙관적 잠금으로 동시에 같은 건을 처리하는 충돌 방지
검토 처리와 알림 등록을 한 트랜잭션으로 묶고 낙관적 잠금으로 동시 처리 충돌을 막는 검토 흐름을 구현합니다.


심사·선정
심사위원을 배정하고 항목별 점수와 의견을 입력하는 심사표를 채점한 뒤 점수 집계와 순위를 확인하고 선정을 확정합니다. 외부 심사위원은 배정된 건만 열람하며 채점 완료 후 점수 평균과 순위가 자동 계산됩니다.
- 심사위원 배정 테이블 기준으로 조회 권한을 제한하는 행 단위 접근 제어 적용
- 심사표 항목별 가중치를 설정 테이블로 관리하여 점수 합산식 변경에 대응
- 순위 산출을 동점 처리 규칙과 함께 서버 함수로 구현
배정 건만 열람하는 접근 제어와 가중치 기반 점수 집계를 결합하여 공정한 심사와 순위 산출 흐름을 구현합니다.


협약·정산 검토
선정 단체의 협약·교부 차수를 관리하고, 제출된 집행 내역과 증빙을 항목별로 검토해 보완 요청이나 확정 처리를 합니다.
- 교부 차수 테이블에 금액·예정일·상태를 두고 합계가 협약 금액과 일치하는지 검증
- 집행 행 단위 검토 상태를 저장하고 전체 승인 여부로 확정 버튼 활성 제어
- 증빙 미리보기를 서명된 임시 주소로 제공하여 파일 직접 노출 방지
교부 차수 합계 검증과 행 단위 검토 상태를 결합하여 협약부터 정산 확정까지의 누락을 막는 구조를 구현합니다.


프로젝트 진행 단계
역할·권한 모델과 처리 이력 설계 · 2026.11
사업 담당·심사·관리자 권한 매트릭스 정의, 행 단위 접근 제어와 처리 이력 테이블 설계
접수 검토·심사 채점 모듈 개발 · 2026.11
접수 목록과 검토 대화상자, 심사표 가중치 설정과 순위 산출 서버 함수 구현
협약·교부·정산 검토 개발 · 2026.11
교부 차수 검증과 집행 행 단위 정산 검토, 증빙 임시 주소 열람 구현
알림 큐·승인 API 공유 및 데이터 이관 · 2026.11
Redis 기반 발송 큐와 앱 공유 승인 API 구현, 기존 기록 이관 스크립트와 건수·금액 대조 점검 작성
개발 결과
기술적 주안점
- 단계별 집계 뷰와 역할별 위젯 구성을 결합하여 담당자가 오늘 처리할 일을 한 화면에서 보게 하는 대시보드를 설계합니다
- 검토 처리와 알림 등록을 한 트랜잭션으로 묶고 낙관적 잠금으로 동시 처리 충돌을 막는 검토 흐름을 구현합니다
- 배정 건만 열람하는 접근 제어와 가중치 기반 점수 집계를 결합하여 공정한 심사와 순위 산출 흐름을 구현합니다