▶ 정의
Laravel(라라벨)은 PHP MVC 패턴의 오픈소스 웹 프레임워크입니다
* 프레임워크(Framework)
어떤 프로그램을 만들기 위한 기본적인 틀이다
사전적 정의: 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것
(내가 현재 이해한 것으로는,
프레임워크를 사용하면 PPT에서 템플릿을 사용하면 만드는 속도가 빨라지는 것처럼
디렉터리의 구조나 클래스/인터페이스들이 구조화되어 제공되므로 개발이 손쉬워진다는 것이다)
▶ MVC(Model-View-Controller)
사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다
모델(Model): 데이터와 비즈니스 로직을 관리합니다(DB에 접속해서 DB의 내용을 가져오거나 변경할 때 사용하는 것)
뷰(View): 레이아웃과 화면을 처리합니다(화면에 무엇인가를 표현하는 것과 관련되어 있는 것)
컨트롤러(Controller): 모델과 상호 작용하여 뷰에 대한 데이터를 생성합니다(어떤 데이터를 받아 가공하여 View에 전달하는 것)
▶ 장점
1) 오픈 소스이다
=> 개발에 있어서 완전한 투명성으로 협업이 이루어진다
=> 전 세계 Laravel 전문가들이 제공하는 문제 해결책을 찾아볼 수 있다
=> 새로운 모듈과 플러그인들이 주기적인 간격으로 설치된다
2) 큰 커뮤니티
Laracasts
Push your web developments skills to the next level, through expert screencasts on Laravel, Vue, and so much more.
laracasts.com
Laravel.io
laravel.io
위 사이트와 같이 큰 커뮤니티를 통해 다양한 지원을 받을 수 있다
3) Artisan
Artisan이라는 CLI(Command Line Interface)를 통해 많은 기능을 제공한다
예를 들면, "php artisan make:"라는 명령어를 통해서 모델, 컨트롤러, 데이터베이스 마이그레이션 등 다양한 파일들을 자동으로 생성할 수 있다
4) Namespace를 지원한다
Namespace를 통해 컨트롤러나 모델의 이름을 설정하는 데 있어서 자유도를 확보할 수 있다
예를 들어, 기존의 PHP같은 경우 클래스 이름을
AdminClassName
ClassName
와 같이 정했다면,
Namespace를 사용하면
Admin\ClassName
User\ClassName
와 같이 클래스 이름을 설정할 수 있다
5) 패키지 매니저 Composer를 사용할 수 있다
Composer를 통해 다른 사람들이 만들어 놓은 모듈을 쉽게 가져와서 사용할 수 있다
▶ 단점
1) 낮은 접근성
다른 프레임워크에 비해 입문이 상대적으로 힘들다
2) 느린 속도
서비스하는 속도가 느리다
▶ 디렉토리 구조(8.x 기준)
Laravel로 프로젝트를 생성하면 기본적으로 아래처럼 디렉터리가 생성된다
기존 디렉토리 이외에 특정한 기능을 하는 폴더를 추가해서 사용할 수 있습니다
📁 app
: 애플리케이션의 핵심 파일들이 있는 폴더
- 📁 Console : Artisan 명령어들을 가지고 있습니다. 이 명령어들은 make:command 명령어를 통해서 생성될 수 있습니다. 또한 사용자가 정의한 Artisan 명령어들의 스케줄링 작업이 등록되어 있는 콘솔 커널이 저장되어 있습니다
- 📁 Exceptions : 예외(exception) 핸들러를 가지고 있습니다. 예외가 어떻게 로깅되고, 렌더링 될지 설정하고자 한다면 이 디렉터리에 있는 Handler 클래스를 수정해야 합니다
- 📁 Http : 컨트롤러, 미들웨어, form request를 가지고 있습니다. 애플리케이션으로 들어오는 요청(request)을 처리하는 대부분의 로직이 위치하고 있습니다
- 📁 Models : 모든 Eloquent 모델 클래스를 가지고 있습니다. Laravel에 포함된 Eloquent ORM은 ActiveRecord 구현을 제공합니다. 각각의 DB 테이블은 해당 테이블과 상호작용하기 위해 대응되는 Model을 가집니다. Model을 이용해 테이블의 데이터를 쿼리 하고, 테이블에 새로운 레코드를 삽입할 수 있습니다
- 📁 Providers : 애플리케이션의 모든 서비스 프로바이더 파일들을 가지고 있습니다. 서비스 프로바이더는 애플리케이션에서 필요한 서비스들을 컨테이너에 바인딩하고, 이벤트를 등록하고, 기타 애플리케이션이 유입된 요청들을 처리하기 위해서 준비되어야 하는 작업들을 수행합니다
📁 bootstrap
: 부트스트랩과 관련된 폴더
- 📁 cache : 라우트나 서비스 캐시 파일과 같은 퍼포먼스 향상을 위한 폴더
- 📄 app.php : 부트스트래핑을 담당하는 파일
📁 config
: 설정 파일 폴더
📁 database
: 데이터베이스 마이그레이션 파일, 모델 팩토리, 시딩 파일들이 있는 폴더
원한다면 이 디렉토리를 SQLite 데이터베이스가 저장되는 곳으로 사용할 수도 있습니다
📁 public
: 애플리케이션에 진입하는 모든 요청들에 대한 진입점 역할과 자동 로딩을 설정하는 index.php 파일이 있는 폴더
이미지나 JavaScript, CSS와 같은 asset 파일들도 포함되어 있습니다
📁 resources
: View 파일과 LESS, SASS, JavaScript와 같이 컴파일되기 전의 asset 파일, 언어 파일이 있는 폴더
📁 routes
: 애플리케이션에서 정의된 모든 라우트
기본적으로 Laravel에서 제공하는 web.php, api.php, console.php, channels.php 파일이 있다
📁 storage
: 컴파일된 블레이트 템플릿, 파일 기반의 세션, 파일 캐시, 기타 프레임워크에서 생성된 파일이 있는 폴더
📁 tests
: 자동화된 테스트, 별다른 설정 없이도 PHPUnit 테스트의 예제가 제공된다
각각의 테스트 클래스는 "Test"가 붙어야 한다
"phpunit" 또는 "php vendor/bin/phpunit" 명령어를 통해서 테스트를 실행할 수 있다
📁 vendor
: Composer의 의존성 폴더
* 참고 사이트
https://laravel.kr/docs/8.x/structure
🧩 MVC 구조로 디렉터리 보기
Model : app/
View : resources/views/
Controller : app/Http/Contollers/
'웹 Back-End > PHP' 카테고리의 다른 글
[PHP] print_r() 함수 (0) | 2022.01.06 |
---|---|
[PHP] ob_start() 함수 (출력 버퍼링) (0) | 2022.01.06 |
[PHP] 페이지 수행시간 확인하기 (0) | 2021.11.19 |
[PHP] 모바일/PC 구분하기 (0) | 2021.11.10 |
[PHP] $_SERVER 배열 정리 (0) | 2021.11.10 |