
Dev log
성당 앱 백엔드 구조 개선기
클라이언트가 들고 있던 날짜 계산, 외부 데이터 처리, 게시 상태 책임을 Spring Boot 백엔드로 옮기며 고민한 책임 분리 기록입니다.
배경
상3동성당 앱은 본당 신자들이 주보, 전례력, 매일미사, 공지사항을 쉽게 확인할 수 있도록 만드는 모바일 앱 프로젝트다.
초기 앱은 백엔드가 주보 PDF를 제공하고, 클라이언트 앱이 현재 날짜를 기준으로 어떤 주보를 보여줄지 계산하는 구조에 가까웠다. 전례력과 매일미사도 앱에서 직접 가져오거나 가공하는 흐름이 섞여 있었다. 기능이 주보 조회에 가까울 때는 빠르게 만들 수 있었지만, 운영과 확장을 생각하기 시작하면서 구조의 한계가 보였다.
이번에는 앱에 있던 날짜 계산, 외부 데이터 처리, 게시 상태 관리를 Spring Boot 서버로 옮겼다.
기존 구조의 문제
초기 구조에서 백엔드는 파일 제공자에 가까웠다. 앱은 현재 날짜를 기준으로 주보를 고르고, 외부 데이터나 날짜 기반 정보를 직접 다뤄야 했다.
이 방식은 빠르게 시작하기에는 편했다. 서버가 단순하니 구현할 것도 적었고, 모바일 화면에서 필요한 값을 바로 계산하면 됐다. 하지만 운영 관점에서는 세 가지 문제가 있었다.
첫째, 외부 데이터 구조가 바뀌면 앱 수정으로 이어질 수 있었다. 전례력, 매일미사, 날짜 기준 콘텐츠 선택 같은 로직이 앱 안에 있으면 작은 정책 변경도 모바일 앱 재배포 부담으로 연결된다.
둘째, 기능 확장이 어려웠다. 공지사항, 푸시 알림, 게시판 같은 기능은 서버가 데이터와 상태를 안정적으로 관리해야 한다. 하지만 PDF 조회 중심 구조에서는 게시 상태, 노출 기간, 관리자 권한 같은 개념을 자연스럽게 확장하기 어렵다.
셋째, 앱의 책임이 너무 무거웠다. 모바일 앱은 화면 표시와 사용자 경험에 집중해야 하는데, 실제로는 날짜 계산, 데이터 파싱, 외부 의존 처리까지 담당하고 있었다.
고민한 지점
처음에는 클라이언트에서 처리하는 방식이 더 빠르게 느껴졌다. 앱에서 날짜를 계산하고 필요한 데이터를 바로 보여주면 서버 API를 많이 만들지 않아도 된다.
성당 앱은 매주 주보가 바뀌고 전례력과 미사 정보도 계속 갱신된다. 이런 변경을 앱 재배포 없이 반영하려면 서버가 맡을 일이 더 많아져야 했다.
그래서 책임을 다음 기준으로 나눴다.
- 운영자가 바꾸는 데이터는 서버가 소유한다.
- 날짜 기준으로 어떤 콘텐츠를 보여줄지 결정하는 로직은 서버가 담당한다.
- 외부 데이터를 수집하고 정규화하는 일은 서버가 맡는다.
- 앱은 서버가 내려준 상태를 사용자에게 읽기 쉽게 보여준다.
개선 방향
백엔드는 Spring Boot 기반으로 다시 구성했다. 핵심 목표는 클라이언트에 있던 도메인 로직을 서버로 옮기는 것이었다.
개선 방향은 다음과 같다.
- 주보의 현재 날짜 계산은 서버가 담당한다.
- 주보 PDF와 이미지 파일은 서버에서 관리한다.
- 전례력 데이터는 서버 DB에서 검수와 게시 상태를 관리한다.
- 매일미사 데이터는 서버가 수집하고 정규화한다.
- 앱은 API를 조회하고 화면에 표시하는 역할에 집중한다.
이 구조로 바꾸면 외부 데이터나 운영 정책이 바뀌어도 서버 수정으로 대응할 수 있다. 모바일 앱 재배포 부담도 줄어든다.
현재 백엔드 구조
Spring Boot 백엔드는 도메인별로 기능을 나누는 방향으로 잡았다.
bulletin: 본당 주보, 교구 주보, PDF 업로드, 이미지 변환liturgy: 전례력 데이터 조회mass: 매일미사 수집 및 조회notice: 공지사항prayer: 기도문schedule: 미사 시간표church: 본당 정보
API는 모바일 앱이 사용하기 쉬운 REST 형태로 구성했다. 예를 들어 앱은 현재 주보를 직접 계산하지 않고 현재 주보 API를 호출한다.
GET /api/v1/bulletins/current
전례력도 앱에 전체 데이터를 하드코딩하지 않고 기간 기준으로 조회한다.
GET /api/v1/liturgical-days?from=2026-05-01&to=2026-05-31
프론트엔드 책임 정리
모바일 앱은 Expo와 React Native 기반으로 다시 구성했다. 주요 탭은 홈, 주보, 전례력, 미사, 더보기로 나눴다.
앱의 역할은 서버에서 받은 데이터를 사용자가 읽기 쉽게 보여주는 것이다. 특히 성당 앱은 고령층 사용자도 고려해야 하므로 큰 글씨, 단순한 흐름, 명확한 메뉴 구조가 중요하다.
날짜 계산과 데이터 수집을 서버로 옮겨도 앱에 남는 일은 있다.
- 서버 응답을 화면 흐름에 맞게 배치하기
- 로딩, 빈 상태, 오류 상태를 명확하게 보여주기
- 네트워크 실패 상황에서도 사용자가 다음 행동을 알 수 있게 하기
- 사용자가 자주 확인하는 정보를 홈에서 빠르게 보여주기
사용자 설정, 캐시, 접근성도 클라이언트에서 계속 다뤄야 한다. 서버가 콘텐츠를 고르는 동안 앱은 그 결과와 실패 상태를 사용자가 이해할 수 있게 보여줘야 한다.
앞으로의 계획
앞으로는 관리자 기능을 더 강화할 예정이다. 우선 공지사항 작성과 주보 업로드 기능을 안정화하고, 이후 푸시 알림과 게시판 기능을 추가할 계획이다.
게시판에는 사용자가 작성한 콘텐츠가 들어간다. 권한, 신고, 숨김 처리, 관리자 검수 정책을 함께 설계하고 서버에서 관리해야 한다.
주보에 더해 본당 소식과 신앙 생활 정보를 제공하는 것이 목표다. 다음 기능을 추가할 때도 먼저 변경할 데이터와 정책을 정하고, 서버와 앱 중 어디에서 관리할지 나누려 한다.
