01 / 04INTERNAL OPERATIONS PWA2026

Internal Operations PWA

회의실 예약과 주간보고를 하나의 운영 제품으로

ROLE
Freelance Product Engineer · Solo
STACK
React · TypeScript · Vite · Supabase · PostgreSQL · PWA
STATUS
유료 납품 · 실제 사용 · 후속 유지보수

제품 개발 회고 · 검증된 범위

해결하려던 문제
의뢰사 측은 회의실 예약 앱을 요청했습니다. 기존에는 수기와 대면으로 예약했고, 예약 시간이 겹치거나 언제 어디서든 현재 예약 상태를 알기 어렵다는 사례를 전달받았습니다.
제가 맡은 역할과 제약
Freelance Product Engineer · Solo별도 앱의 비용 · 모바일 접근 · 1인 전담
핵심 결정 3가지
  1. 현재 상태를 입력보다 먼저 보여 주기
  2. 겹치는 예약을 저장 경로마다 예방하기
  3. 별도 앱 대신 설치 가능한 웹으로 접근하기
확인된 결과
실제 업무에 사용되었고, 추가 요청 반영과 후속 유지보수로 이어졌습니다.
검증 경계
실제 사용과 후속 유지보수는 확인했습니다. 사용자 만족도·시간 절감 같은 정량 효과는 측정하지 않았으며, 공개 화면은 익명화된 UI와 합성 데이터만 사용합니다.

정식 참여자 연구가 아니라, 제가 전달받은 사례와 구현·운영 기록을 바탕으로 정리한 제품 개발 회고입니다.

실제 제품 화면

예약 상태부터 보고 전달까지

합성 예약 데이터로 회의실별 현재 상태와 전체 시간표를 표시한 모바일 화면
예약 현황회의실별 사용 상태와 이후 예약을 같은 화면에서 확인
합성 예약 데이터로 이미 지난 시간과 예약된 시간을 비활성화한 모바일 시간 선택 화면
시간 선택예약할 수 없는 구간을 선택 단계에서 구분
합성 업무 내용으로 주차별 보고 목록과 작성 및 PDF 내보내기 진입점을 표시한 모바일 화면
주간 업무보고주차별 보고 작성·확인과 전달 작업의 출발점

실제 제품 컴포넌트 · 공개용 합성 데이터 · 회사 식별 정보 제거

제가 내린 핵심 결정

  1. 01

    현재 상태를 입력보다 먼저 보여 주기

    문제
    예약 전에 사용자가 먼저 판단해야 할 것은 어느 회의실이 지금 비어 있고 다음 예약이 언제 시작되는지였습니다.
    선택
    회의실별 사용 중·비어 있음·다음 예약과 선택한 날짜의 예약 요약을 앞에 두고, 일간·월간·타임라인 보기를 같은 예약 데이터에 연결했습니다.
    구현
    Supabase Realtime 변경 이벤트를 받으면 React Query의 관련 쿼리를 무효화해 현황, 달력과 타임라인이 예약 데이터를 다시 조회하도록 구성했습니다.
    확인된 영향
    현황·달력·타임라인이 동일한 예약 원본을 기준으로 현재 상태와 이후 일정을 표시하도록 만들었습니다.
  2. 02

    겹치는 예약을 저장 경로마다 예방하기

    문제
    실제 불편 사례로 예약 시간 중복이 전달됐고, 화면 검증만으로는 비슷한 시점의 저장 요청을 일관되게 막기 어려웠습니다.
    선택
    지난 시간, 잘못된 시간 범위, 한 달을 넘는 예약과 기존 예약 중복을 화면에서 먼저 검사하고 데이터베이스에도 같은 충돌 경계를 뒀습니다.
    구현
    PostgreSQL의 시간 범위 exclusion constraint를 적용해 같은 회의실의 겹치는 예약을 최종 저장 단계에서도 거부하도록 구성했습니다.
    확인된 영향
    예약 생성과 변경 등 요청 경로가 달라도 동일한 충돌 규칙이 적용되는 기준점을 만들었습니다.
  3. 03

    별도 앱 대신 설치 가능한 웹으로 접근하기

    문제
    모바일 사용 요구는 있었지만 별도 네이티브 앱에는 추가 개발비와 지속 비용이 필요했습니다.
    선택
    하나의 반응형 웹을 PWA로 설치할 수 있게 하고, QR 접속 경로와 기기별 설정 매뉴얼을 함께 제공했습니다.
    구현
    웹 앱 매니페스트와 설치 흐름을 구성하고 iOS를 포함한 홈 화면 추가 절차를 별도 안내 화면으로 만들었습니다.
    확인된 영향
    별도 네이티브 앱을 운영하지 않고도 브라우저와 홈 화면에서 같은 제품에 접근할 수 있는 경로를 마련했습니다.

운영 요청과 직접 제안으로 확장한 범위

  • 예약 생성·조회·변경·취소와 일간·월간·타임라인 보기를 하나의 흐름으로 연결했습니다.
  • React Query 캐시와 Supabase Realtime 이벤트를 연결해 예약 변경 이후 관련 화면을 다시 동기화했습니다.
  • 기존 주간업무보고 항목과 PDF·DOC 양식을 바탕으로 앱 입력 화면, 검색과 PDF 내보내기 형식을 구현했습니다.
  • 실제 사용 중 접수된 문제와 추가 요청을 반영하며 후속 유지보수를 진행했습니다.

확인된 결과와 검증 경계

실제 업무에 사용되었고, 추가 요청 반영과 후속 유지보수로 이어졌습니다.

  • 실사용·유지보수

    회의실 예약과 주간보고가 업무에 사용됐고 운영 중 추가 요청을 반영했습니다.

  • 기능과 변경 이력

    예약 상태, 한 달 이내 생성·변경·취소, 데이터베이스 중복 차단, Realtime 동기화, 주간보고와 PWA 설치 안내를 코드와 변경 이력에서 확인했습니다.

구현으로 확인한 범위

  • 현황·일간·월간·타임라인에서 같은 예약 데이터를 조회
  • 클라이언트 검증과 PostgreSQL constraint로 예약 중복을 이중 차단
  • 예약 변경 이벤트 이후 관련 화면을 Realtime으로 다시 동기화
  • 전달받은 기존 항목과 PDF·DOC 양식을 바탕으로 주간보고 입력·검색·PDF 내보내기 형식을 구현하고 PWA 설치 안내를 제공
MORE PRODUCT UI추가 제품 화면 보기

운영 중 확장된 기능

핵심 흐름은 전체 화면으로, 보조 기능은 필요한 부분만 확대했습니다.

부서, 주간 주요 내용과 비고를 입력하는 모바일 주간 업무보고 작성 화면
업무보고 작성전달받은 기존 보고 항목을 모바일 입력 흐름으로 구성
합성 예약 데이터와 회의실 및 공지 관리 탭을 표시한 모바일 관리자 화면
관리자 화면한 달 범위의 예약과 회의실·공지를 한곳에서 관리

업무보고 검색과 PDF 내보내기

키워드와 부서 필터, 관련도순과 최신순 정렬을 적용한 업무보고 검색 결과 일부
검색·필터키워드·부서·정렬 조건으로 지난 보고를 다시 찾는 기능
주간 업무보고를 표 형식 문서로 미리 보는 PDF 내보내기 화면 일부
PDF 내보내기기존 보고 양식을 바탕으로 만든 문서 미리보기와 내보내기
FULL PRODUCT REVIEW전체 제품 개발 회고 보기

발단과 문제 발견

의뢰사 측 요청으로 시작한 유료 납품 프로젝트입니다. 이전에는 회의실 예약을 수기와 대면으로 진행했고, 예약 시간이 겹치거나 회사 밖에서 현재 예약 상태를 확인하기 어렵다는 사례를 전달받았습니다.

별도 네이티브 앱도 검토했지만 추가 개발비와 지속 비용이 필요했습니다. 웹을 기반으로 만들고 PWA 설치, QR 진입 경로와 설정 매뉴얼을 더해 모바일에서도 반복해서 접근할 수 있는 방향을 선택했습니다.

주간업무보고는 운영 중 들어온 후속 요청이었습니다. 기존 보고 절차에서 사용하던 항목을 전달받아 앱 안에서 입력할 수 있도록 구성했고, 기존 주간업무보고 PDF·DOC 양식을 바탕으로 화면과 PDF 내보내기 형식을 동일하게 구현했습니다. 검색·필터 기능도 후속 요청에 맞춰 추가했습니다.

확인한 문제점

  • 현재 상태를 알기 어려움

    회사 밖이나 다른 위치에서 어떤 회의실이 언제 비는지 바로 확인하기 어려웠습니다.

  • 겹치는 예약 시간

    수기·대면 절차에서 같은 시간대의 예약이 겹친 사례가 있었다고 전달받았습니다.

  • 운영하며 달라진 범위

    초기 UX를 다듬고 한 달 이내 예약, 예약 변경, 월간 관리, 주간보고 검색·필터·PDF와 PWA 안내를 후속 반영했습니다.

설계 제약

  • 별도 앱의 비용

    네이티브 모바일 앱은 추가 개발비와 지속 비용이 발생한다는 논의가 있었습니다.

  • 모바일 접근

    브라우저 접속뿐 아니라 필요할 때 빠르게 다시 열 수 있는 모바일 사용 흐름이 필요했습니다.

  • 1인 전담

    요구사항 정리, UX, 프론트엔드, 데이터베이스, 배포, 매뉴얼과 유지보수를 혼자 맡았습니다.

PRODUCT QUESTION

어떻게 하면 구성원이 어디서든 회의실 상태를 빠르게 파악하고, 겹치는 예약을 예방하며, 별도 모바일 앱의 추가 비용 없이 편리하게 접근할 수 있을까?

예약 업무 흐름의 변화

기존 수기·대면 확인 흐름과 웹 PWA에서 현황 확인, 시간 선택, 중복 검사, 예약 완료로 이어지는 개선 흐름의 비교

수기·대면 예약에서 앱 기반 예약으로 바뀐 흐름을 단계별로 정리했습니다.

검토한 대안과 판단

CONSIDERED

네이티브 모바일 앱

모바일 전용 앱을 별도로 개발하고 배포합니다.

TRADE-OFF
앱다운 사용 경험을 만들 수 있지만 추가 개발비와 지속 운영 비용이 필요했습니다.
CONSIDERED

브라우저 웹

URL로 접속하는 반응형 웹만 제공합니다.

TRADE-OFF
하나의 코드베이스로 접근할 수 있지만 반복 접속과 설치 안내까지는 해결하지 못합니다.
SELECTED

웹 + PWA

반응형 웹에 홈 화면 설치와 QR 진입, 설정 매뉴얼을 더합니다.

TRADE-OFF
네이티브 앱을 별도 운영하지 않으면서 모바일 반복 접근 경로를 마련할 수 있어 선택했습니다.

설계 판단의 근거와 흐름

  • 현재 상태를 입력보다 먼저 보여 주기상태 가시성 · 공통 상태 인식

    시스템의 현재 상태와 다른 구성원의 예약 결과를 같은 화면 언어로 드러내 다음 행동을 판단할 단서를 제공합니다.

  • 겹치는 예약을 저장 경로마다 예방하기오류 예방

    오류 메시지로 사후 복구하는 데 그치지 않고, 선택 단계와 저장 단계 모두에서 잘못된 예약이 확정되지 않도록 합니다.

  • 별도 앱 대신 설치 가능한 웹으로 접근하기사용 효율 · 도움말과 문서

    반복 접근 경로를 짧게 만들고, 기기별 설치 절차는 사용자가 스스로 따라 할 수 있는 문서로 보완했습니다.

예약 충돌 차단과 화면 동기화

예약 생성 또는 변경이 PostgreSQL 중복 차단을 거쳐 저장되고 Realtime 이벤트로 현황, 달력, 타임라인에 다시 동기화되는 흐름

클라이언트 검증 이후에도 데이터 계층을 최종 충돌 기준으로 유지했습니다.

후속 요청으로 확장된 보고 흐름

주간보고 작성에서 주차와 부서별 조회, 검색과 필터, PDF 내보내기로 이어지는 업무 흐름

전달받은 기존 보고 항목과 PDF·DOC 양식을 바탕으로 앱 입력부터 PDF 내보내기까지 구현한 흐름입니다.

배운 점과 다음 검증

운영 도구의 가치는 기능 수보다 사용자가 지금 상태를 빠르게 이해하고 다음 행동을 안전하게 선택할 수 있는지에서 시작했습니다. 후속 요청을 반영하는 과정에서도 새 기능을 기존 화면의 상태 표현과 일관되게 연결하는 일이 중요했습니다.

아직 모르는 것

  • 예약 전후의 중복 오류 빈도와 예약 완료에 걸리는 시간은 측정하지 않았습니다.
  • 사용자별 만족도와 PWA·QR 진입 경로의 실제 사용 비중은 확인하지 않았습니다.

다음에 검증할 시나리오

  1. 현재 예약 상태를 보고 가능한 회의실을 찾아 예약하기
  2. 겹치는 시간을 만났을 때 원인을 이해하고 다른 시간으로 변경하기
  3. 지난 주간보고를 검색해 필요한 내용을 찾고 PDF로 내보내기

설계 관점과 참고자료

아래 개념은 프로젝트 성과를 검증하는 근거가 아니라, 구현 이후 제가 내린 설계 판단을 설명하기 위해 참고한 관점입니다.

  1. 상태 가시성 · 오류 예방 · 도움말10 Usability Heuristics for User Interface DesignNielsen Norman Group · 2024 update

    현재 예약 상태를 앞에 두고, 잘못된 시간과 중복을 저장 전에 막으며, PWA 설치 절차를 문서로 안내한 설계 결정을 설명할 때 참고했습니다.

  2. 공통 상태 인식Awareness and Coordination in Shared WorkspacesPaul Dourish & Victoria Bellotti · 1992

    여러 구성원이 공유 자원인 회의실의 현재·다음 예약을 같은 상태로 확인하도록 만든 결정을 해석하는 참고자료입니다.

프로젝트 목록으로