아파트 정기배송 계란 주문 서비스
본 요구사항(아파트 단위 모집·참여 신청, 배송 회차별 상품 주문과 마감, 문 앞 배송·매장 수령 조회)을 반영한 입주민용 모바일 웹 PWA형 앱 화면 맞춤 구현한 프로젝트입니다.
프로젝트 개요
본 요구사항(아파트 단위 모집·참여 신청, 배송 회차별 상품 주문과 마감, 문 앞 배송·매장 수령 조회)을 반영한 입주민용 모바일 웹 PWA형 앱 화면 맞춤 구현한 프로젝트입니다.
작업 범위
- 홈·아파트 모집: 입주민이 첫 화면에서 우리 아파트의 모집 상태와 목표 대비 참여 세대수, 다음 배송일과 주문 마감 시각을 한 화면에서 봅니다. 모집 중인 아파트는 참여 신청 버튼을, 운영 중인 아파트는 이번 회차 상품을 바로 확인합니다
- 상품 주문: 입주민이 이번 회차 상품의 규격·포장 단위·보관 방법을 확인하고 장바구니에 담아 주문서를 작성합니다. 결제 전 배송일·수령 방식·배송비·마감 시각을 한 번 더 확인합니다
- 배송·수령 조회: 입주민이 주문 내역에서 배송 진행 상태를 확인하고 문 앞 배송 요청사항을 남깁니다. 매장 수령 주문은 주문번호 확인 화면으로 수령 상태를 확인합니다
- 주문 변경·취소·문의: 입주민이 마감 전에는 주문을 변경·취소하고, 마감 후에는 처리 기준 안내를 확인합니다. 파손·누락 문제는 사진을 첨부해 문의하고 부분 환불 결과를 확인합니다
주요 업무
- 홈·아파트 모집 화면: 모집 상태 알약(모집 중·개시 예정·운영 중·일시 중단), 참여 세대 진행 막대, 다음 배송일 카드, 이번 회차 대표 상품, 이웃 초대 링크와 QR 구조를 설계합니다
- 상품 주문 화면: 상품 목록, 상품 상세 시트, 장바구니, 주문서와 수령 방식 선택, 품절·공급 한도 안내, 결제 확인 화면 구조를 설계합니다
- 배송·수령 조회 화면: 주문 내역 목록, 배송 상태 단계 표시, 요청사항 입력, 매장 수령 확인 카드, 지난 주문 다시 담기 구조를 설계합니다
- 주문 변경·취소·문의 화면: 주문 변경 대화상자, 취소 확인 대화상자, 마감 후 처리 기준 안내, 사진 첨부 문의 폼, 문의 내역과 환불 결과 구조를 설계합니다




프로젝트 핵심 과제
정기배송 회차마다 마감 시각과 공급 한도가 달라져 서버 시간 기준 검증과 화면 상태 동기화 설계
같은 세대의 중복 참여와 중복 결제를 막
유니크 제약과 멱등 처리 설계 필요
PG 가맹·알림 발송 계정 발급이 선행되어야 하므로 테스트 환경 기준으로 먼저 흐름을 갖추는 순서 설계
앱 스토어 심사 일정이 별도로 필요해 모바일 웹 PWA형 앱 화면을 먼저 갖추고 확장하는 단계 설계
핵심 기능 상세
홈·아파트 모집
입주민이 첫 화면에서 우리 아파트의 모집 상태와 목표 대비 참여 세대수, 다음 배송일과 주문 마감 시각을 한 화면에서 봅니다.
- 아파트별 모집 상태를 상태 머신으로 정의하고 화면 문구와 버튼이 상태에서 파생되도록 구현
- 동·호수 단위 참여 신청의 중복 세대 집계 방지를 DB 유니크 제약과 서버 검증으로 구현
- 공유 링크와 QR 생성을 아파트 식별 코드 기반으로 구성
참여 세대수 집계를 세대 단위 유니크 키로 계산해, 같은 세대의 중복 신청이 목표 달성 수치에 반영되지 않도록 구현합니다.


상품 주문
입주민이 이번 회차 상품의 규격·포장 단위·보관 방법을 확인하고 장바구니에 담아 주문서를 작성합니다. 결제 전 배송일·수령 방식·배송비·마감 시각을 한 번 더 확인합니다.
- 회차별 판매 상품과 공급 한도를 조회해 한도 초과 수량의 장바구니 담기를 서버에서 차단
- 주문 확정 시 재고 차감과 결제 요청 생성을 하나의 트랜잭션으로 묶어 중복 주문 방지
- 결제 연동은 PG 테스트 환경 기준 결제 요청·승인·웹훅 흐름으로 구성
마감 시각과 공급 한도를 서버 시간 기준으로 검증해, 화면이 열려 있는 동안 마감이 지나도 주문이 접수되지 않도록 구현합니다.


배송·수령 조회
입주민이 주문 내역에서 배송 진행 상태를 확인하고 문 앞 배송 요청사항을 남깁니다. 매장 수령 주문은 주문번호 확인 화면으로 수령 상태를 확인합니다.
- 주문 상태를 접수·준비·배송 중·완료 단계로 정의하고 상태 변경 이력을 기록하는 구조 설계
- 매장 수령 확인 화면에서 주문번호 조회와 전달 완료 상태가 서버 값으로 표시되도록 구현
- 다시 담기 시 현재 가격과 재고를 재조회해 변경된 항목을 안내하는 로직 구현
배송 상태와 매장 수령 상태를 같은 주문 상태 모델로 관리해, 입주민 화면과 운영 화면이 같은 값을 보도록 구성합니다.


주문 변경·취소·문의
입주민이 마감 전에는 주문을 변경·취소하고, 마감 후에는 처리 기준 안내를 확인합니다. 파손·누락 문제는 사진을 첨부해 문의하고 부분 환불 결과를 확인합니다.
- 마감 시각 기준으로 변경·취소 가능 여부를 서버가 판정하고 화면 버튼 상태를 응답값으로 제어
- 문의 사진 첨부를 업로드 용량·형식 검증과 함께 구성
- 부분 환불 금액을 상품 단위로 계산해 환불 안내 문구에 그대로 표시
취소·환불 결과를 주문 이력에 남겨 입주민이 문의 내역에서 처리 결과를 그대로 확인하도록 구현합니다.


프로젝트 진행 단계
모집·주문 도메인 모델과 DB 설계 · 2026.11
아파트·세대·회차·상품·주문 테이블과 모집 상태 정의, 공급 한도 제약 설계
모집 신청·상품 주문 API 구현 · 2026.11
참여 신청, 회차 상품 조회, 장바구니, 주문 확정 API와 마감 검증 구현
입주민용 모바일 웹 화면 구현 · 2026.11
홈, 상품, 주문서, 주문 내역, 문의 화면을 PWA형 앱 화면으로 구현
결제 연동·알림·시험 스크립트 · 2026.11
PG 결제·취소 웹훅, 마감 알림 발송 모듈, API 시험 스크립트 작성
개발 결과
기술적 주안점
- 참여 세대수 집계를 세대 단위 유니크 키로 계산해, 같은 세대의 중복 신청이 목표 달성 수치에 반영되지 않도록 구현합니다
- 마감 시각과 공급 한도를 서버 시간 기준으로 검증해, 화면이 열려 있는 동안 마감이 지나도 주문이 접수되지 않도록 구현합니다
- 배송 상태와 매장 수령 상태를 같은 주문 상태 모델로 관리해, 입주민 화면과 운영 화면이 같은 값을 보도록 구성합니다