space‑l · 고객사 전용 OS

기간  — 현재

진행 상황을 문서와 메신저로 따로 전하던 일을 한곳에 모았습니다. 서버와 배포 체계를 맡았습니다.

해외 3개 시장의 광고 성과와 일별 매출을 한 화면에

Next.jsTypeScriptGoVercelAWS EKSAWS S3

  • 고객사는 아이디⁠·⁠비밀번호, 사내는 슬랙 로그인으로 들어오는 두 경로
  • 현지 통화 금액과 원화 참고액 함께 표시
  • 일정 타임라인과 자료 공유
  • 사내 CRM과 문의 접수

고객 데이터와 사내 데이터

문제
고객사 화면과 사내 CRM을 한 앱에서 다루더라도 고객사 데이터는 서로 섞이면 안 됐습니다.
해결
화면은 Next.js, 인증⁠·⁠DB⁠·⁠파일⁠·⁠메일은 Go API 서버로 나눴습니다. 고객사 담당자는 자기 회사 화면만 봅니다. 파일은 고객별 저장소와 그 저장소만 쓰는 권한으로 격리했습니다.

고객사마다 쌓이는 분기

문제
고객사별 요구를 코드에 그대로 넣으면 고객사가 늘 때마다 분기가 쌓입니다.
해결
공통 기능과 고객사별 업무 모듈을 나눴습니다. 데이터는 고객, 브랜드, 프로젝트⁠·⁠캠페인, 업무 순의 계층으로 묶고, 고객별 하드코딩은 규칙으로 막았습니다. 서버 업무를 공통 기능과 업무 모듈 11개로 나눴습니다.

개발자를 거쳐야 했던 화면 수정

문제
화면 수정을 반영할 때마다 PM이 개발자에게 병합과 배포를 부탁해야 했습니다.
해결
사내 배포기가 브랜치를 2분마다 확인해 검사 뒤 배포합니다. PM이 라벨을 붙이면 검사를 통과한 PR만 병합합니다. PM이 개발자 도움 없이 화면 수정을 반영하고, 배포 토큰은 저장소에서 걷어 냈습니다.