백엔드/PHP
[PURE PHP] MVC 프레임워크 - 기초부터 구조 설계까지 완벽 가이드
알쓸신개
2025. 6. 15. 20:21
1. 개요
- 왜 퓨어 PHP로 MVC를 직접 구현하는가?
- Laravel/Lumen/Symfony와의 차이점
- 실무에서 도움이 되는 점 (구조 이해, 커스텀 구현력)
- 목표: 프레임워크 없이 완전한 MVC 아키텍처 구성
2. MVC 패턴 개념 정리
- MVC란 무엇인가?
- 각각의 역할 구분
- Model: DB 로직, 데이터 추상화
- View: UI 구성, 출력 담당
- Controller: 사용자 요청 처리, 흐름 제어
- 순수 PHP 환경에서 MVC는 어떤 구조가 적합한가?
3. 디렉터리 구조 설계
/project-root
│
├── public/ # 진입점 (index.php)
├── app/
│ ├── Controllers/
│ ├── Models/
│ └── Views/
├── core/ # 라우터, 베이스 클래스, 헬퍼 등
├── config/ # DB 설정, 환경 변수
├── vendor/ # composer 종속성
└── .htaccess # Apache 리라이트 설정
- public만 웹에서 접근 가능하게 구성 (.htaccess 리다이렉션)
- 각 디렉터리 역할 분리 설명
4. Composer 및 오토로딩 설정
- Composer 초기화: composer init
- PSR-4 오토로딩 설정
- composer dump-autoload로 클래스 자동 로딩 테스트
- 예시 코드:
"autoload": {
"psr-4": {
"App\\": "app/",
"Core\\": "core/"
}
}
5. 라우팅 구현
- Front Controller (public/index.php) 역할
- URL 요청 분석: $_SERVER['REQUEST_URI']
- Router 클래스 설계
- 등록된 경로와 현재 요청 비교
- 컨트롤러 및 메서드로 분기
- 예시:
$router->get('/post/show', 'PostController@show');
6. 컨트롤러 설계 및 요청 분기
- 베이스 컨트롤러 생성
- 컨트롤러 → 뷰 호출 → 모델 호출 흐름
- 예시:
class PostController {
public function show() {
$post = Post::find(1);
return View::render('post/show', ['post' => $post]);
}
}
7. 모델과 DB 연동
- PDO를 활용한 DB 연결 (core/Database.php)
- 베이스 모델 작성 (CRUD 공통 처리)
- Active Record 스타일 간략 구현
- Post::find(1) 또는 Post::all() 등 구현 방식
8. 뷰 템플릿 처리
- 기본 View::render() 구현
- extract()와 include를 활용한 값 전달
- Blade 또는 Twig 없이 순수 PHP 템플릿 처리
View::render('post/show', ['post' => $post]);
9. 테스트 예제: 게시글 목록 불러오기
- DB에 게시글 테이블 생성
- Post 모델로 조회
- 리스트 출력 뷰 구성
- 전체 흐름 확인 및 디버깅
10. 결론
- 현재까지 구현된 구조 요약
- 다음 편에서 다룰 내용:
- RESTful 라우팅 추가
- 미들웨어, 세션, 로그인 인증 처리
- 파일 업로드, 폼 검증 등 실무 기능 추가 예정