Skip to content

seungwonme/demodev-link

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

데모 링크 (Demo Link)

소개

월부 개발 블로그에 있는 글을 보고 만든 단축 URL 서비스입니다. 긴 URL을 짧은 링크로 변환하여 공유하기 쉽게 만들어주는 서비스입니다.

기능

  • 단축 URL 생성 및 관리
  • 단축 URL 리다이렉션
  • 클릭 통계 및 분석
  • 모바일 친화적인 UI/UX

기술 스택

설치 및 실행

전제 조건

  • Node.js 18.0.0 이상
  • pnpm 8.0.0 이상
  • Supabase 계정

설치 방법

  1. 저장소 클론
git clone https://github.com/yourusername/demo-link.git
cd demo-link
  1. 의존성 설치
pnpm install
  1. 환경 변수 설정

.env.example 파일을 복사하여 .env.local 파일을 생성하고 필요한 환경 변수를 설정합니다.

cp .env.example .env.local

.env.local 파일을 열고 다음 변수들을 설정합니다:

NEXT_PUBLIC_BASE_URL=http://localhost:3000
NEXT_PUBLIC_SUPABASE_URL=your-supabase-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-supabase-service-role-key  # 관리자 기능에 필요
  1. 개발 서버 실행
pnpm dev
  1. 브라우저에서 확인

브라우저에서 http://localhost:3000 을 열어 애플리케이션을 확인합니다.

초기 관리자 설정

이 애플리케이션은 사용자 승인 시스템을 사용합니다. 첫 관리자 계정을 설정하려면:

  1. 대화형 스크립트 사용 (권장)

    pnpm run seed:admin
  2. SQL을 통한 직접 설정

  3. 환경 변수를 통한 자동 승인

    • .env.localINITIAL_ADMIN_EMAIL 설정
    • 해당 이메일로 가입 시 자동으로 관리자 권한 부여

📚 자세한 설정 방법은 관리자 설정 가이드를 참조하세요.

데이터베이스 구성

이 프로젝트는 Supabase를 데이터베이스로 사용합니다.

마이그레이션 실행

pnpm run db:push

주요 테이블 구조

profiles 테이블 (사용자 프로필)

  • id: 사용자 ID (auth.users 참조)
  • email: 이메일 주소
  • role: 사용자 역할 (user/admin) - PostgreSQL enum
  • status: 계정 상태 (pending/approved/rejected) - PostgreSQL enum
  • created_at, updated_at: 타임스탬프
  • approved_at, approved_by: 승인 정보
  • rejected_at, rejected_by, rejection_reason: 거절 정보

links 테이블 (단축 URL)

  • id: 링크 ID
  • slug: 단축 URL 슬러그
  • original_url: 원본 URL
  • user_id: 생성한 사용자 ID
  • click_count: 클릭 수
  • created_at: 생성 시간

link_clicks 테이블 (클릭 기록)

  • id: 클릭 ID
  • link_id: 링크 ID 참조
  • clicked_at: 클릭 시간
  • user_agent: 사용자 에이전트
  • ip_address: IP 주소

데이터베이스 타입 생성

타입스크립트 타입을 Supabase 스키마에서 자동 생성:

pnpm run gen:types

프로젝트 구조

├── src/
│   ├── app/              # Next.js 앱 디렉토리
│   │   ├── admin/        # 관리자 페이지
│   │   └── [slug]/       # 동적 리다이렉션 페이지
│   ├── features/         # 기능별 모듈
│   │   ├── auth/         # 인증 관련 기능
│   │   ├── links/        # 링크 관리 기능
│   │   └── analytics/    # 분석 기능
│   ├── shared/           # 공유 모듈
│   │   ├── components/   # 공통 컴포넌트
│   │   ├── types/        # 공통 타입
│   │   └── utils/        # 유틸리티 함수
│   └── lib/              # 외부 라이브러리 설정
├── supabase/
│   └── migrations/       # 데이터베이스 마이그레이션
├── scripts/              # 유틸리티 스크립트
│   └── seed-admin.ts     # 관리자 생성 스크립트
├── docs/                 # 문서
│   └── ADMIN_SETUP.md    # 관리자 설정 가이드
├── public/               # 정적 파일
├── .env.example          # 환경 변수 예제
└── README.md             # 프로젝트 설명

주요 기능

사용자 관리 시스템

  • 사용자 가입 시 관리자 승인 필요
  • 역할 기반 접근 제어 (RBAC)
  • 관리자 대시보드에서 사용자 관리

URL 단축 기능

  • Snowflake 알고리즘 기반 고유 ID 생성
  • 사용자별 링크 관리
  • 실시간 클릭 통계

관리자 기능

  • 사용자 승인/거절
  • 역할 변경 (user/admin)
  • 전체 링크 및 통계 관리

라이센스

MIT License

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •