백엔드/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 라우팅 추가
    • 미들웨어, 세션, 로그인 인증 처리
    • 파일 업로드, 폼 검증 등 실무 기능 추가 예정