← 개발일지

B2B 예산 승인 시스템에 상신자 예산 조회 기능 추가하기


어떤 기능이었나

B2B 커머스 플랫폼에서 예산 승인 워크플로우를 운영하는 고객사가 있다. 주문자(상신자)가 물품을 주문하면, 결재라인에 등록된 승인자가 이를 승인하는 구조다.

운영팀에서 요청이 들어왔다. 승인자 계정에서 상신자에게 배정된 예산을 확인할 수 없어 불편하다는 것이었다. 부서 잔여 예산을 파악할 수 없으니, 승인 판단에 필요한 정보가 부족하다는 게 핵심이었다.

원래 요청과 실제 스코프

운영팀의 원래 요청은 두 가지였다.

  1. 승인자가 상신자의 예산현황을 조회할 수 있을 것
  2. 승인자가 상신자의 예산을 공유하여 주문할 수 있을 것

2번은 기획 단계에서 거절했다. 현재 시스템의 예산은 회원 개인에게 귀속되는 구조다. 부서 단위 공동 예산을 구현하려면 예산 관리 시스템 자체를 새로 설계해야 하므로, 단일 기능 추가와는 차원이 다른 작업이 된다.

모바일 화면도 설계까지는 완료했지만, 피드백 과정에서 "PC 먼저, 모바일은 추후"로 합의되었다. 설계 자산은 남겨두되 개발 리소스는 PC에 집중한 셈이다.

추가로 하나 더 제약이 있었다. 기존 결재내역 페이지에 상신자 예산을 끼워넣자는 의견도 있었는데, 이것도 불가했다. 결재내역 페이지는 예산 승인형이 아닌 고객사도 공통으로 사용하는 화면이기 때문이다.

권한 설계에서 고민한 점

이 기능의 핵심은 "누가 누구의 예산을 볼 수 있는가"에 대한 권한 정책이다.

결정한 규칙은 단순하다. 로그인한 사용자가 1차/2차/3차 승인자로 포함된 결재라인의 상신자만 조회할 수 있다. 결재라인이 변경되면 조회 가능 대상도 즉시 반영된다.

예외 처리도 필요했다. 상신자가 본인을 결재라인에 포함하는 케이스에서는, 본인 예산을 이 페이지에서 중복 표시할 필요가 없다. 기존 예산내역 메뉴에서 이미 확인 가능하므로 제외했다.

적용 범위 판단은 공통코드 기반으로 처리했다. 특정 코드에 등록된 고객사에만 메뉴가 노출되고, 그 외 고객사에는 메뉴 자체가 보이지 않는다.

화면 구성

PC 기준 3개 화면으로 설계했다.

첫 번째는 메뉴 화면이다. 기존 예산/결재 메뉴 하위에 "결재대상자 조회"를 추가한다. 예산 승인형 고객사인 경우에만 노출된다.

두 번째는 목록 화면이다. 승인자의 결재라인에 속한 상신자들을 테이블로 보여준다. 회원명, 아이디, 부서, 총 상신가능예산을 한눈에 볼 수 있고, 필터 검색도 지원한다.

세 번째는 상세 화면이다. 특정 상신자를 선택하면 해당 상신자의 예산현황을 보여준다. 이 화면은 기존 마이페이지의 예산현황 페이지와 동일한 구성과 데이터를 사용한다. 새로 만드는 게 아니라 기존 컴포넌트를 재활용하는 방식이다.

개발 과정에서 발견된 이슈

배포 후 검증 과정에서 두 가지 문제가 나왔다.

하나는 회원명 표시 오류였다. 상신자의 예산을 조회하는데 회원명이 로그인한 승인자의 이름으로 표시되고 있었다. 데이터를 가져올 때 세션의 사용자 정보를 그대로 사용한 것으로 보인다.

다른 하나는 네비게이션 문제였다. 예산 상세에서 "이전페이지" 버튼을 누르면 상신자 예산 페이지가 아닌 다른 곳으로 이동했다. 두 이슈 모두 수정 후 재배포되었다.

돌아보며

이 작업에서 가장 중요했던 판단은 스코프 조정이었다. "예산 공유" 요청을 수용했다면 예산 관리 시스템 전체를 재설계해야 했을 것이다. 기존 구조에서 가능한 범위(조회)만 정확히 잘라내어 제공한 것이 현실적인 선택이었다.

화면 설계 관점에서는, 기존 예산현황 페이지를 그대로 재활용한 것이 효율적이었다. 승인자 입장에서도 이미 익숙한 UI를 다른 사용자의 데이터로 볼 수 있으니 학습 비용이 없다.

권한 설계는 결재라인이라는 기존 데이터 구조를 그대로 활용했다. 별도의 권한 테이블을 만들지 않아도, 결재라인 데이터만으로 "누가 누구를 볼 수 있는지"가 자연스럽게 결정된다. 기존 데이터 구조를 권한 판단의 기준으로 재활용한 패턴이다.