StarKorea CRM — 동적 필드 인물 관리
업종에 맞는 필드를 직접 설계하고, 엑셀 데이터를 한 번에 불러오며, 인물 프로필을 PDF로 자동 생성해주는 맞춤형 CRM.
동적 필드 CRM — 검색·PDF·엑셀 임포트

문제
업종마다 필요한 고객 항목이 다른데 기성 CRM은 우리 업무에 맞지 않고, 엑셀은 버전이 꼬이고 공유가 안 됩니다. 파일이 너무 많아 최신 버전이 어느 파일인지 모르고, 여러 명이 동시에 수정하면 데이터 충돌과 분실이 발생합니다.
자주 쓰는 검색 조건을 매번 다시 입력해야 하고, 고객에게 보낼 인물 프로필을 한 명당 30분 이상 들여 직접 취합·디자인합니다. 퇴사자가 자리를 떠난 뒤에도 데이터 접근 제어가 불가능합니다.
접근
연예·방송·공연·에이전시처럼 업종 특성이 강한 영역에서 일반 CRM의 정형 항목으로는 운영이 안 됩니다. 핵심은 "관리자가 직접 필드를 설계할 수 있어야 한다"는 것이었습니다. PostgreSQL JSONB 컬럼에 동적 필드 데이터를 저장하고 GIN 인덱스로 검색 성능을 확보해 유연성과 속도를 모두 잡았습니다.
기존 엑셀 자산은 한 번에 마이그레이션할 수 있어야 도입 장벽이 낮아집니다. 엑셀 업로드 → 컬럼 매핑 → Sidekiq 비동기 처리로 수천 건도 끊김 없이 처리되도록 설계했습니다. 프로필 PDF는 정보 수집 → 검수 → 생성 3단계로 분리해 담당자 검토 단계를 보장했습니다.
해결
관리자가 카테고리별로 필드 종류·순서·표시 여부를 직접 설계할 수 있고, 어떤 업종이든 맞춤 항목을 구성할 수 있습니다. 기존 엑셀 파일을 업로드하면 컬럼 매핑 후 자동으로 데이터가 이관됩니다.
자주 쓰는 검색 조건은 저장해두고 클릭 한 번으로 즉시 결과를 조회할 수 있고, GIN 인덱스로 동적 필드 기반 검색도 빠릅니다. 인물을 선택하면 정보 수집 → 검수 → PDF 생성 3단계로 프로필이 자동 제작됩니다.

기능
카테고리별로 필드 이름·타입·순서를 자유롭게 설계. 텍스트·숫자·날짜·선택지·계산 필드(한국 나이 자동 계산 등) 다양한 타입을 지원합니다. 실데이터는 Person 모델의 JSONB 컬럼에 저장됩니다.
.xlsx/.xls/.csv 파일 업로드 → 자동 헤더 파싱 → 엑셀 컬럼과 CRM 필드 직접 매핑. Sidekiq 비동기 처리로 수천 건도 끊김 없이 처리되고, ImportLog로 처리 결과(성공·오류·행 번호)가 전체 기록됩니다.
자주 쓰는 검색 조건(필드 값·범위·텍스트)을 이름 붙여 저장(사용자당 최대 10개). 클릭 한 번으로 즉시 결과 조회, 카테고리별로 독립 관리됩니다.
인물 목록에서 대상 선택 → 자동 정보 수집 → 검수 화면(이미지·바이오·최근 작품 편집) → PDF 자동 생성·다운로드. 발행 이력은 ProfileLog로 추적됩니다.
인물 목록 테이블 뷰에서 커스텀 필드 기준 정렬·필터·검색이 가능하고, 한 화면에서 인라인 편집을 지원합니다.
관리자·직원 역할 구분, 카테고리별·페이지별로 읽기/쓰기/삭제 권한을 세밀하게 설정합니다. 직원은 허용된 카테고리만 접근 가능합니다.
스택
- Ruby on Rails 8.1 + Hotwire — SPA형 UX
- PostgreSQL + JSONB + GIN 인덱스 — 유연하고 빠른 동적 필드
- Sidekiq + Solid Queue — 대용량 임포트 비동기 처리
- Roo — .xlsx/.xls/.csv 파싱
- Devise + 역할 기반 권한 시스템
- Active Storage + Google Drive 자동 백업
결과
ImportLog·ProfileLog·BackupLog로 모든 작업이 추적되어 운영 신뢰성이 확보됩니다.
엑셀 기반 운영의 한계를 벗어나 검색·공유·출력이 모두 시스템 안에서 일어나면서, 인물 데이터가 실제로 활용되는 자산으로 전환됐습니다.
다음 사례
같은 카테고리의 비슷한 시스템.