Programming
사용자 계정 생성과 서브도메인 자동화 구현
octo54
2025. 3. 24. 09:54
반응형
사용자 계정 생성과 서브도메인 자동화 구현
데모 사이트에서 가장 중요한 구조 중 하나는 사용자별 분석 실습 환경을 분리하는 것입니다. Analytics Playground는 각 사용자가 자신의 서브도메인에 접속하여 GA4, Amplitude 등의 분석 스크립트를 실습할 수 있도록 설계되었습니다.
이번 글에서는 사용자 계정 생성, 로그인, 그리고 서브도메인 자동 생성 과정을 어떻게 구현할 수 있는지 다룹니다.
1. 사용자 인증 시스템 구현 (Supabase 기준)
1-1. Supabase 설치 및 설정
npx create-next-app analytics-playground
cd analytics-playground
npm install @supabase/supabase-js
1-2. Supabase 프로젝트 생성 후 환경 설정
.env.local에 다음과 같이 입력합니다:
NEXT_PUBLIC_SUPABASE_URL=your-project-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
1-3. 회원가입 및 로그인 로직 구현
반응형
// lib/supabase.ts
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
);
export default supabase;
// pages/signin.tsx
const signIn = async () => {
const { data, error } = await supabase.auth.signInWithPassword({
email, password
});
};
2. 사용자별 서브도메인 설계
2-1. 사용자 식별자로 도메인 분기 처리
- 로그인 후 사용자 이메일의 @ 앞 부분을 서브도메인으로 사용합니다.
- 예: user123@gmail.com → user123.analytics-playground.com
2-2. Next.js Middleware를 활용한 동적 서브도메인 처리
// middleware.ts
import { NextResponse } from 'next/server';
export function middleware(req) {
const hostname = req.headers.get('host') || '';
const subdomain = hostname.split('.')[0];
// 정적 경로 제외
if (["www", "app"].includes(subdomain)) return NextResponse.next();
// 사용자 전용 환경으로 라우팅
const url = req.nextUrl.clone();
url.pathname = `/subsites/${subdomain}${url.pathname}`;
return NextResponse.rewrite(url);
}
2-3. Vercel 설정
- Vercel의 rewrites 설정 또는 DNS 설정을 통해 *.analytics-playground.com을 허용합니다.
- Vercel Dashboard → Project Settings → Domains → Wildcard Subdomain 추가
3. 사용자별 환경 구성
3-1. 사용자 로그인 시 자동 라우팅
- 로그인 후 사용자의 subdomain으로 redirect
router.push(`https://${username}.analytics-playground.com`);
3-2. subdomain에 따른 사용자 정보 불러오기
// subsites/[subdomain]/index.tsx
const subdomain = context.params.subdomain;
const user = await getUserBySubdomain(subdomain);
3-3. 사용자 격리된 데이터 처리 방식
- Supabase 또는 Firestore에서 subdomain 필드를 기준으로 데이터를 분리 저장
- 스크립트, 이벤트, 페이지 설정 등 모두 사용자별로 나눔
4. 보안 고려 사항
- 인증되지 않은 사용자가 다른 subdomain에 접근하지 못하도록 서버사이드 체크
- script 삽입은 반드시 로그인 후 대시보드에서만 가능
- 모든 사용자 데이터는 권한 기반으로 접근 제한
다음 글에서는 사용자 대시보드에서 분석 스크립트를 삽입하고 제어하는 방식을 상세히 설명합니다.
→ 4편. 사용자 정의 분석 스크립트 삽입 기능 구현