피드로 돌아가기
I shipped a support desk by deleting a dependency
Dev.toDev.to
Backend

Third-party 의존성 제거를 통한 Core 모듈 경량화 및 State Machine 기반 티켓 시스템 설계

I shipped a support desk by deleting a dependency

Dmitry Isaenko2026년 6월 8일10intermediate

Context

재사용 가능한 SaaS 코어인 LaraFoundry 구축 과정에서 기존 외부 라이브러리에 의존하던 티켓 시스템의 한계 발견. 외부 패키지 도입 시 호스트 앱이 불필요한 Migration, 테이블 명칭, 상태 정의를 강제 상속받아야 하는 Load-bearing Dependency 문제 발생.

Technical Solution

  • Third-party 패키지를 제거하고 약 180라인의 Self-contained Model을 직접 구현하여 코어 의존성 최소화
  • 상태 값의 수동 선택을 배제하고 행위 주체에 따라 상태가 결정되는 Derived Status 메커니즘 도입
  • 'wait-moderator'와 'wait-customer' 두 가지 상태를 중심으로 한 단순화된 State Machine 설계
  • created_at = updated_at 조건을 활용하여 별도 컬럼 없이 신규 티켓을 최상단에 배치하는 쿼리 최적화
  • UUID 기반의 Route Key 적용 및 Ownership Policy 강제를 통한 ID 열거 공격 및 비인가 접근 차단
  • 텍스트 보간법(Text Interpolation) 및 Vitest 테스트 적용을 통한 Stored XSS 취약점 원천 봉쇄

- 외부 라이브러리 도입 전 호스트 앱에 강제되는 Schema나 Migration이 있는지 검토 - 상태 값(Status) 관리 시 사용자 입력 대신 시스템 이벤트에 의한 자동 전이 구조 설계 고려 - 관리자 페이지 내 사용자 생성 콘텐츠 렌더링 시 v-html 사용을 지양하고 텍스트 기반 렌더링 강제 - API 엔드포인트 설계 시 Sequential ID 대신 UUID를 사용하여 내부 데이터 규모 노출 방지

원문 읽기