🛠️
설치 가이드
개발 환경 설정 및 배포 가이드
📄 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 줄)
애플리케이션 진입점
초기화 순서:
- 에러 핸들링 설정
- 상수 정의 (프로젝트 경로)
- Composer 자동로더 로드
- .env 파일 로드 (phpdotenv)
- 헬퍼 함수 로드
- 설정 파일 로드
- 타임존 설정
- 데이터베이스 초기화
- 로그/업로드 디렉토리 생성
- CORS 헤더 설정
- 세션 시작
- 라우터 초기화
- 라우트 로드
- 요청 디스패치
예외 처리:
- •모든 예외를 캐치하여 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}- 업로드 취소
멀티링크 (MultiLink) - 모두 인증 필요
- •
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/- 웹 스크래핑 서비스
주요 특징
- PHP 8.2+ 기능 활용
- •Match 표현식
- •Union 타입
- •Nullsafe 연산자
- •Named arguments
- 보안
- •CSRF 보호
- •SQL 인젝션 방지 (Prepared Statement)
- •환경 변수 관리
- •세션 보안
- 확장성
- •라우트 그룹 및 미들웨어
- •싱글톤 데이터베이스
- •설정 파일 분리
- 개발 편의성
- •헬퍼 함수 45개
- •라우트 명명
- •자동 에러 핸들링
다음 단계
- 컨트롤러 생성 -
app/Controllers/디렉토리에 컨트롤러 클래스 추가 - 모델 생성 -
app/Models/디렉토리에 데이터 모델 클래스 추가 - 뷰 생성 -
app/Views/디렉토리에 템플릿 파일 추가 - 미들웨어 생성 -
app/Middleware/디렉토리에 미들웨어 클래스 추가 - 서비스 생성 -
app/Services/디렉토리에 서비스 클래스 추가 - 마이그레이션 설정 - 데이터베이스 스키마 마이그레이션 도구 추가
총 라인 수
- •설정 파일: 309 줄
- •코어 프레임워크: 887 줄
- •헬퍼 함수: 544 줄
- •라우트: 155 줄
- •기타: 170 줄
- •총합: 2,065 줄
모든 파일이 한글 주석과 함께 작성되었으며, PHP 8.2+ 기능을 활용하여 현대적이고 유지보수하기 쉬운 코드 구조를 제공합니다.