프로젝트 배경
배경 (문제 상황) 사내 설문·투표를 위해 구글폼 등 외부 도구에 의존하면, 기업의 민감한 응답 데이터가 외부 서버에 저장됩니다. 또한 여러 기업 고객에게 동일 기능을 제공하려면 고객마다 별도 시스템을 구축해야 해 운영 비용이 급증합니다. 달성하고자 한 목표 - 데이터 주권 확보: 외부 도구 없이 자사 플랫폼 안에서 설문을 만들고 응답을 수집·보관하여, 사내 데이터가 외부로 유출되지 않도록 함. -
프로젝트 성과
자동 테넌트 격리 (멀티테넌시)
복합 기본키 + Prisma Extension·AsyncLocalStorage로 모든 쿼리에 테넌트 범위를 자동 주입해 기업 고객 간 데이터 유출을 원천 차단.
fail-closed 보안 가드
테넌트 컨텍스트 없이 데이터 접근 시 예외를 던지는 가드를 적용해, 실수로 인한 전체 데이터 노출을 방지.
공개 API 보안
클라이언트가 보낸 tenantId를 신뢰하지 않고 서버에서 직접 도출하며, 일반화된 에러로 정보 유출(oracle attack)을 차단.
개인정보(PII) 보호
비공개 결과는 응답자 정보를 숨기되, 설문 소유자만 예외적으로 자신의 결과를 조회하도록 권한 게이트를 구현.
편집 상태 실시간 동기화
localStorage와 storage 이벤트로 여러 브라우저 탭 간 편집 내용을 자동 동기화하고, 언어 변경 시 문구도 함께 갱신.
핵심 기능
진행 단계
기획
2024.01.
사내 설문 요구사항과 멀티테넌트 SaaS 구조를 정의하고, 질문 타입·권한·다국어 등 기능 범위와 데이터 모델을 설계.
프로젝트 상세
기업 협업 솔루션에 탑재되는 B2B SaaS형 설문조사 서비스를 프론트엔드부터 백엔드, 인프라까지 풀스택으로 설계·개발했습니다. 설문 제작 → 배포 → 응답 수집 → 결과 분석에 이르는 전체 라이프사이클을 하나의 서비스로 제공하며, 하나의 코드베이스로 여러 기업 고객(테넌트)과 여러 브랜드를 동시에 운영하는 멀티테넌시 구조가 핵심입니다. 1. 프로젝트 개요 서비스 형태: 사내 설문/투표 서비스 이용






