본문으로 건너뛰기
DEVKBS
작업 원장
017Dpectrum2024.11 – 2024.12사내 전용

STATION by UHC 백오피스

숙박 앱 운영자와 입점 사업자를 위한 관리 도구

기간
2024.11 – 2024.12
분류
백오피스
역할
프론트엔드 (기여도 약 80%)
구성
프론트엔드 2 · 백엔드 · 디자인 협업

화면 비공개입점 사업자와 투숙객의 실제 운영 데이터가 그대로 찍힌 관리자 화면이라 캡처를 싣지 않습니다.어떤 문제를 어떻게 풀었는지는 아래에 정리해 두었습니다.

01개요

STATION by UHC는 호텔·숙박 서비스 앱입니다. 이 프로젝트는 그 앱을 실제로 굴러가게 만드는 뒷단, 즉 백오피스를 만드는 일이었습니다. 최상위 운영 관리자와 입점한 숙박 사업자가 같은 시스템을 쓰되 서로 다른 것을 볼 수 있어야 했습니다.

이런 도구의 사용자는 개발자가 아닙니다. 하루 종일 이 화면을 띄워놓고 객실을 등록하고, 예약을 확인하고, 쿠폰을 발급합니다. 그래서 '한 화면에 얼마나 많은 정보를 담느냐'보다 '실수했을 때 되돌릴 수 있느냐', '지금 뭘 하고 있는지 알 수 있느냐'가 훨씬 중요했습니다.

특히 공들인 부분은 등록 화면의 미리보기입니다. 사업자가 숙소 정보를 입력할 때, 그 내용이 실제 앱에서 어떻게 보이는지를 옆에서 같이 보여줬습니다. 등록하고 앱을 켜서 확인하고 다시 수정하는 왕복을 없애기 위해서였습니다.

02기술 결정

문제가 무엇이었고, 무엇을 골랐고, 그래서 어떻게 됐는지.

  1. 결정 01

    권한은 화면을 숨기는 방식이 아니라 라우트를 나누는 방식으로

    문제
    권한별 분기를 컴포넌트 안에서 `if (isAdmin)`으로 처리하면 화면 수가 늘수록 조건문이 흩어집니다. 어떤 권한이 무엇을 볼 수 있는지 한눈에 파악할 수 없게 됩니다.
    선택
    권한별 라우트 트리를 따로 정의하고, 접근 가능한 메뉴 목록 자체를 권한에서 파생시켰습니다. 컴포넌트는 자기가 어떤 권한에서 렌더되는지 모릅니다.
    결과
    '이 권한은 무엇을 볼 수 있는가'가 라우트 정의 파일 하나를 보면 답이 나옵니다. 권한이 추가됐을 때 손댈 곳도 명확했습니다.
  2. 결정 02

    영상 업로드는 브라우저에서 미리 줄여 보낸다

    문제
    앱 내 쇼츠 영상을 사업자가 직접 올리는데, 스마트폰으로 찍은 원본은 수백 MB에 이릅니다. 그대로 올리면 업로드가 오래 걸리고 서버 저장·변환 부담도 커집니다.
    선택
    FFmpeg(WebAssembly)로 업로드 전에 브라우저에서 해상도와 비트레이트를 정해진 규격으로 낮췄습니다. 변환 진행률을 보여줘 멈춘 것처럼 보이지 않게 했습니다.
    결과
    업로드 용량이 크게 줄어 전송이 빨라졌고, 앱에서의 재생 시작도 안정적이 됐습니다. 서버는 검증만 하면 되는 구조가 됐습니다.
  3. 결정 03

    등록 폼 옆에 실제 앱 화면 미리보기를 붙인다

    문제
    사업자가 숙소 정보를 등록해도 앱에서 어떻게 보이는지 알 수 없었습니다. 등록 → 앱 확인 → 수정의 왕복이 반복됐습니다.
    선택
    입력 값을 그대로 받아 앱과 동일한 레이아웃으로 그리는 프리뷰 컴포넌트를 만들어 폼 오른쪽에 고정했습니다. 입력하는 즉시 반영됩니다.
    결과
    등록 후 다시 고치는 일이 눈에 띄게 줄었습니다. 사업자가 '이 문구가 잘리는구나'를 입력 중에 알 수 있게 된 것이 컸습니다.
  4. 결정 04

    예약 현황은 표가 아니라 캘린더로

    문제
    객실별 예약을 표로 보면 '이번 주에 어느 방이 비어 있나'를 파악하기 어렵습니다. 운영자가 가장 자주 하는 질문인데 답하기 가장 어려운 형태였습니다.
    선택
    FullCalendar를 도입해 객실을 행으로, 날짜를 열로 놓는 뷰를 만들었습니다.
    결과
    빈 방과 예약이 한눈에 들어옵니다. 운영자가 표를 스크롤하며 세던 작업이 사라졌습니다.

03주요 기능

  • 권한 기반 접근 제어

    운영 관리자와 입점 사업자의 라우트·메뉴·데이터 범위를 권한 정의에서 파생시켜 관리합니다.

  • 숙박 업체 등록과 실시간 프리뷰

    입력하는 즉시 실제 앱에 노출될 화면을 옆에서 보여줘 등록 전에 결과를 확인할 수 있습니다.

  • 캘린더 기반 객실·예약 관리

    FullCalendar로 객실별 예약 현황을 달력 뷰로 확인하고 그 자리에서 조정합니다.

  • 영상 자동 최적화 업로드

    FFmpeg로 브라우저에서 해상도·용량을 조정한 뒤 전송해 업로드 시간과 서버 부담을 줄였습니다.

  • 쿠폰 발급과 사용 이력

    프로모션 쿠폰을 등록하고, 누가 언제 썼는지 이력을 추적할 수 있습니다.

  • 통계 대시보드

    결제 내역·예약 현황·사용자 지표를 Chart.js로 시각화해 의사결정에 필요한 숫자를 모았습니다.

04회고

백오피스를 만드는 일은 결국 남의 하루를 줄여 주는 일이었습니다. 프리뷰는 기술적으로 어려운 기능이 아닙니다. 그런데 사업자가 등록하고, 앱 켜서 확인하고, 다시 고치던 왕복을 통째로 없앴습니다. 여기서 가장 값어치 있었던 건 그거였습니다.

FFmpeg를 브라우저에서 돌리는 것은 처음이었는데, 변환이 진행되는 동안 화면이 멈춘 것처럼 보이는 문제가 있었습니다. 진행률을 노출하는 것만으로 체감이 크게 달라졌습니다. 무거운 작업일수록 '지금 뭐가 되고 있는지'를 보여주는 것이 실제 속도만큼 중요합니다.

권한을 라우트 수준에서 나눈 결정은 프로젝트가 커질수록 이득이 커졌습니다. 컴포넌트 안에 조건문으로 흩뿌렸다면 두 달 뒤에는 아무도 전체 그림을 말할 수 없었을 것입니다.