🛠️

설치 가이드

개발 환경 설정 및 배포 가이드

📄 SETUP.md 📏 -줄 💾 - 🌐 ad.uschool.kr

TokTak Clone - PHP Configuration & Core Framework Setup

프로젝트의 PHP 설정 파일 및 코어 프레임워크가 성공적으로 생성되었습니다.

프로젝트 구조

code
toktak-clone/
├── config/                      # 설정 파일들
│   ├── app.php                  # 애플리케이션 기본 설정
│   ├── database.php             # 데이터베이스 연결 설정
│   └── services.php             # 외부 서비스 API 설정
├── app/
│   ├── Config/
│   │   ├── Database.php         # PDO 싱글톤 클래스
│   │   └── Router.php           # PHP 라우터 클래스
│   ├── helpers.php              # 글로벌 헬퍼 함수
│   ├── Controllers/             # (생성될 디렉토리)
│   ├── Models/                  # (생성될 디렉토리)
│   ├── Middleware/              # (생성될 디렉토리)
│   ├── Services/                # (생성될 디렉토리)
│   └── Views/                   # (생성될 디렉토리)
├── public/
│   └── index.php                # 애플리케이션 진입점
├── routes/
│   └── web.php                  # 웹 라우트 정의
├── composer.json                # Composer 의존성 관리
├── .env.example                 # 환경 변수 템플릿
└── SETUP.md                     # 이 파일

파일별 설명

1. config/app.php (94 줄)

애플리케이션 기본 설정

  • 앱 이름, 환경, 디버그 모드
  • URL, 타임존, 언어 설정
  • 페이지네이션 설정
  • 세션 설정 (드라이버, 유지 시간, 쿠키 옵션)
  • 파일 업로드 설정 (최대 크기, 허용 확장자)
  • 캐시 설정
  • CORS 설정

2. config/database.php (81 줄)

데이터베이스 연결 설정

  • 기본 DB 드라이버 설정
  • MySQL 연결 설정 (호스트, 포트, 데이터베이스명, 사용자명, 비밀번호)
  • Redis 설정
  • PDO 옵션
  • 연결 풀 설정
  • 슬로우 쿼리 로깅
  • 쿼리 로깅 설정

3. config/services.php (134 줄)

외부 서비스 API 설정

  • OpenAI API: 콘텐츠 생성용 AI 모델
  • SNS APIs:
  • YouTube API (동영상 업로드)
  • Instagram API (피드 게시물)
  • TikTok API (쇼츠 업로드)
  • Twitter API (트윗 게시)
  • Naver Blog API (블로그 글 게시)
  • OAuth 제공자:
  • Google OAuth (로그인)
  • Facebook OAuth (로그인)
  • AWS 설정:
  • S3 (파일 저장소)
  • SNS (알림)
  • Stripe: 결제 처리
  • 메일 및 SMS: 사용자 알림

4. app/Config/Database.php (315 줄)

PDO 데이터베이스 싱글톤 클래스

기능:

  • MySQL/SQLite 연결 지원
  • Prepared Statement (바인딩된 매개변수)
  • 싱글톤 패턴으로 단일 연결 관리

주요 메서드:

  • getInstance(config): 싱글톤 인스턴스 반환
  • prepare(query): Prepared Statement 준비
  • execute(query, params): 바인딩된 쿼리 실행
  • fetchOne(query, params): 단일 행 조회
  • fetchAll(query, params): 다중 행 조회
  • fetchColumn(query, params, columnIndex): 단일 칼럼 조회
  • run(query, params): INSERT/UPDATE/DELETE 실행
  • beginTransaction()/commit()/rollBack(): 트랜잭션 관리
  • lastInsertId(): 마지막 삽입 ID 반환

특징:

  • 슬로우 쿼리 자동 감지 및 로깅
  • 쿼리 실행 시간 측정
  • 마지막 쿼리 추적
  • 타임존 자동 설정

5. app/Config/Router.php (407 줄)

간단한 PHP 라우터 클래스

지원 기능:

  • HTTP 메서드: GET, POST, PUT, DELETE, PATCH, ANY
  • 라우트 매개변수: /content/{id}, /sns/connect/{platform}
  • 이름 지정 라우트: ->name('route.name')
  • 미들웨어 그룹: 라우트에 미들웨어 적용
  • 라우트 그룹: 공통 설정으로 여러 라우트 관리

주요 메서드:

  • get(path, handler): GET 라우트 등록
  • post(path, handler): POST 라우트 등록
  • put(path, handler): PUT 라우트 등록
  • delete(path, handler): DELETE 라우트 등록
  • group(options, callback): 라우트 그룹 정의
  • middlewareGroup(name, middleware): 미들웨어 그룹 정의
  • dispatch(method, path): 요청 처리 및 라우트 실행
  • route(name, params): 라우트 URL 생성
  • getParameters(): 라우트 매개변수 반환

예시:

php
// 단순 라우트
$router->get('/home', 'HomeController@index')->name('home');

// 매개변수를 포함한 라우트
$router->get('/content/{id}', 'ContentController@show')->name('content.show');

// 라우트 그룹
$router->group(['prefix' => '/api', 'middleware' => 'api'], function($router) {
    $router->get('/users', 'UserController@index');
    $router->post('/users', 'UserController@create');
});

// 라우트 URL 생성
route('content.show', ['id' => 123]); // /content/123

6. public/index.php (165 줄)

애플리케이션 진입점

초기화 순서:

  1. 에러 핸들링 설정
  2. 상수 정의 (프로젝트 경로)
  3. Composer 자동로더 로드
  4. .env 파일 로드 (phpdotenv)
  5. 헬퍼 함수 로드
  6. 설정 파일 로드
  7. 타임존 설정
  8. 데이터베이스 초기화
  9. 로그/업로드 디렉토리 생성
  10. CORS 헤더 설정
  11. 세션 시작
  12. 라우터 초기화
  13. 라우트 로드
  14. 요청 디스패치

예외 처리:

  • 모든 예외를 캐치하여 JSON 응답으로 반환
  • 디버그 모드에서는 상세 오류 정보 제공
  • 프로덕션에서는 민감한 정보 숨김

7. routes/web.php (155 줄)

웹 라우트 정의

라우트 카테고리:

인증 (Auth)

  • GET /login - 로그인 페이지
  • POST /login - 로그인 처리
  • POST /logout - 로그아웃
  • GET /auth/google - Google OAuth 리다이렉트
  • GET /auth/google/callback - Google OAuth 콜백
  • GET /auth/facebook - Facebook OAuth 리다이렉트
  • GET /auth/facebook/callback - Facebook OAuth 콜백

대시보드 (Dashboard)

  • GET / - 홈 페이지
  • GET /dashboard - 대시보드 (인증 필요)

콘텐츠 (Content) - 모두 인증 필요

  • GET /content/create - 콘텐츠 생성 페이지
  • POST /content/create - 콘텐츠 저장
  • GET /content/{id} - 콘텐츠 상세 보기
  • GET /content/{id}/edit - 콘텐츠 수정 페이지
  • PUT /content/{id} - 콘텐츠 수정
  • DELETE /content/{id} - 콘텐츠 삭제
  • GET /content/list - 콘텐츠 목록

SNS 연동 (SNS) - 모두 인증 필요

  • GET /sns/channels - 채널 목록
  • POST /sns/channels - 채널 추가
  • DELETE /sns/channels/{id} - 채널 삭제
  • GET /sns/connect/{platform} - SNS 연결 (YouTube, Instagram, TikTok, Twitter, Naver Blog)
  • GET /sns/callback/{platform} - SNS 콜백
  • POST /sns/upload - SNS에 업로드
  • GET /sns/upload/{id}/status - 업로드 상태 확인
  • DELETE /sns/upload/{id} - 업로드 취소
  • GET /multilink - 멀티링크 목록
  • GET /multilink/create - 멀티링크 생성 페이지
  • POST /multilink/create - 멀티링크 저장
  • GET /multilink/{id}/edit - 멀티링크 수정 페이지
  • PUT /multilink/{id} - 멀티링크 수정
  • DELETE /multilink/{id} - 멀티링크 삭제

팔로우 (Follow) - 모두 인증 필요

  • GET /follow - 팔로우 관리 페이지
  • POST /follow/request/{id} - 팔로우 요청
  • POST /follow/accept/{id} - 팔로우 요청 수락
  • POST /follow/reject/{id} - 팔로우 요청 거부
  • POST /follow/remove/{id} - 팔로워 제거

가격 정책 (Pricing)

  • GET /pricing - 가격 정책 페이지
  • GET /pricing/subscribe - 구독 페이지 (인증 필요)
  • POST /pricing/subscribe - 구독 처리 (인증 필요)
  • POST /pricing/cancel - 구독 취소 (인증 필요)

가이드 (Guide)

  • GET /guide - 가이드 목록
  • GET /guide/{slug} - 가이드 상세

프로필 (Profile) - 모두 인증 필요

  • GET /profile - 프로필 조회
  • GET /profile/edit - 프로필 수정 페이지
  • PUT /profile/edit - 프로필 수정
  • GET /profile/settings - 설정 페이지
  • PUT /profile/settings - 설정 수정

API 라우트 - 모두 api 미들웨어 적용

  • POST /api/content/generate - AI 콘텐츠 생성
  • POST /api/scrape/url - URL 스크래핑
  • POST /api/upload/sns - SNS 업로드 API
  • GET /api/upload/{id}/status - 업로드 상태 API
  • GET /api/credits/balance - 크레딧 잔액 조회
  • POST /api/credits/purchase - 크레딧 구매
  • GET /api/search - 검색 API
  • GET /api/analytics/overview - 통계 개요
  • GET /api/analytics/content - 콘텐츠 통계

관리자 라우트 (Admin) - auth & admin 미들웨어 필요

  • GET /admin/dashboard - 관리자 대시보드
  • GET /admin/users - 사용자 관리
  • GET /admin/users/{id} - 사용자 상세
  • PUT /admin/users/{id} - 사용자 수정
  • DELETE /admin/users/{id} - 사용자 삭제
  • GET /admin/plans - 요금제 관리
  • POST /admin/plans - 요금제 생성
  • PUT /admin/plans/{id} - 요금제 수정
  • DELETE /admin/plans/{id} - 요금제 삭제
  • GET /admin/statistics - 통계
  • GET /admin/logs - 시스템 로그

8. app/helpers.php (544 줄)

글로벌 헬퍼 함수 (45개 함수)

설정 관련:

  • env(key, default) - 환경 변수 취득
  • config(path, default) - 설정값 취득
  • db() - 데이터베이스 인스턴스

라우팅 관련:

  • route(name, params) - 라우트 URL 생성
  • url(path) - 절대 URL 생성
  • asset(path) - 자산 경로 생성
  • redirect(url, code) - 리다이렉트
  • back() - 뒤로가기

인증 관련:

  • auth() - 현재 사용자 정보
  • authId() - 현재 사용자 ID
  • isAuthenticated() - 로그인 확인
  • hasPermission(permission) - 권한 확인
  • hasRole(role) - 역할 확인

응답 관련:

  • json(data, code) - JSON 응답
  • error(message, code) - 에러 응답
  • success(data, message) - 성공 응답

텍스트 처리:

  • escape(value) - HTML 특수문자 이스케이프
  • truncate(string, length, suffix) - 문자열 자르기

날짜/시간:

  • formatDate(date, format) - 날짜 포맷팅
  • timeAgo(date) - 상대 시간 표시 (예: 2시간 전)

파일:

  • formatBytes(bytes) - 파일 크기 포맷팅

보안:

  • csrfToken(action) - CSRF 토큰 생성
  • verifyCsrfToken(token, action) - CSRF 토큰 검증

검증:

  • isValidEmail(email) - 이메일 유효성
  • isValidUrl(url) - URL 유효성

유틸리티:

  • generateId(prefix) - 고유 ID 생성
  • randomString(length) - 무작위 문자열 생성
  • only(array, keys) - 배열에서 특정 키만 추출
  • except(array, keys) - 배열에서 특정 키 제외
  • arrayGet(array, key, default) - 점 표기법으로 배열값 취득
  • log(message, level, context) - 로그 기록

9. composer.json (63 줄)

Composer 의존성 관리

필수 의존성:

  • vlucas/phpdotenv (5.5+) - .env 파일 로드
  • firebase/php-jwt (6.8+) - JWT 토큰 처리
  • guzzlehttp/guzzle (7.7+) - HTTP 클라이언트
  • league/oauth2-client (2.7+) - OAuth 클라이언트
  • intervention/image (2.7+) - 이미지 처리
  • phpmailer/phpmailer (6.8+) - 이메일 발송
  • PHP 8.2+ 요구

개발용 의존성:

  • phpunit/phpunit (10.0+) - 단위 테스트
  • phpstan/phpstan (1.10+) - 정적 분석
  • squizlabs/php_codesniffer (3.8+) - 코드 스타일 검사
  • php-cs-fixer/php-cs-fixer (3.14+) - 코드 포매팅

스크립트:

  • composer test - 테스트 실행
  • composer test:coverage - 테스트 커버리지 리포트
  • composer lint - 코드 스타일 검사
  • composer lint:fix - 코드 스타일 자동 수정
  • composer analyze - 정적 분석
  • composer format - 코드 포매팅
  • composer dev - 개발 서버 시작
  • post-install-cmd - .env 파일 자동 생성

10. .env.example (107 줄)

환경 변수 템플릿

모든 설정 가능한 환경 변수를 정의합니다:

  • 앱 설정 (APP_NAME, APP_ENV, APP_DEBUG, APP_URL 등)
  • 데이터베이스 설정 (DB_HOST, DB_PORT, DB_NAME 등)
  • Redis 설정
  • 세션 및 캐시 설정
  • 메일 설정
  • OpenAI API 키
  • SNS API 키 (YouTube, Instagram, TikTok, Twitter, Naver Blog)
  • OAuth 설정 (Google, Facebook)
  • AWS 설정 (S3, SNS)
  • Stripe 설정
  • Slack 설정
  • SMS 설정

설치 및 사용

1. 의존성 설치

bash
cd /sessions/zen-kind-einstein/mnt/toktak/toktak-clone
composer install

2. 환경 변수 설정

bash
cp .env.example .env
# .env 파일을 편집하여 API 키 및 데이터베이스 설정 추가

3. 데이터베이스 생성

sql
CREATE DATABASE toktak CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

4. 개발 서버 실행

bash
composer dev
# 또는
php -S localhost:8000 -t public/

5. 테스트

bash
composer test
composer lint
composer analyze

아키텍처 설명

MVC 패턴

  • Model: app/Models/ - 데이터 모델
  • View: app/Views/ - 템플릿 파일
  • Controller: app/Controllers/ - 비즈니스 로직

미들웨어

  • app/Middleware/ - 요청/응답 필터링

서비스

  • app/Services/ - 비즈니스 로직 클래스
  • SNS/ - SNS 연동 서비스
  • AI/ - AI 콘텐츠 생성 서비스
  • Scraper/ - 웹 스크래핑 서비스

주요 특징

  1. PHP 8.2+ 기능 활용
  • Match 표현식
  • Union 타입
  • Nullsafe 연산자
  • Named arguments
  1. 보안
  • CSRF 보호
  • SQL 인젝션 방지 (Prepared Statement)
  • 환경 변수 관리
  • 세션 보안
  1. 확장성
  • 라우트 그룹 및 미들웨어
  • 싱글톤 데이터베이스
  • 설정 파일 분리
  1. 개발 편의성
  • 헬퍼 함수 45개
  • 라우트 명명
  • 자동 에러 핸들링

다음 단계

  1. 컨트롤러 생성 - app/Controllers/ 디렉토리에 컨트롤러 클래스 추가
  2. 모델 생성 - app/Models/ 디렉토리에 데이터 모델 클래스 추가
  3. 뷰 생성 - app/Views/ 디렉토리에 템플릿 파일 추가
  4. 미들웨어 생성 - app/Middleware/ 디렉토리에 미들웨어 클래스 추가
  5. 서비스 생성 - app/Services/ 디렉토리에 서비스 클래스 추가
  6. 마이그레이션 설정 - 데이터베이스 스키마 마이그레이션 도구 추가

총 라인 수

  • 설정 파일: 309 줄
  • 코어 프레임워크: 887 줄
  • 헬퍼 함수: 544 줄
  • 라우트: 155 줄
  • 기타: 170 줄
  • 총합: 2,065 줄

모든 파일이 한글 주석과 함께 작성되었으며, PHP 8.2+ 기능을 활용하여 현대적이고 유지보수하기 쉬운 코드 구조를 제공합니다.