애플리케이션 구조

시작하기

기본적인 라라벨 애플리케이션의 구조는 애플리케이션이 크건, 작건 좋은 시작점이 되는것을 의도하고 있습니다. 당연히 애플리케이션을 원하는대로 구성해도 됩니다. 컴포저가 클래스를 오토로딩할 수 있는 한 클래스를 어디에 위치시키는가에 대한 제약사항은 없습니다.

Root 디렉토리

새롭게 설치한 라라벨의 루트 디렉토리는 다양한 디렉토리들을 가지고 있습니다.

app 디렉토리는 예상하는바와 같이 애플리케이션의 핵심 코드들을 포함하고 있습니다. 이 디렉토리에 대한 보다 자세한 내용은 뒤에서 살펴보겠습니다.

bootstrap 디렉토리는 프레임워크가 부팅하고 오토로딩을 설정하는 몇몇 파일을 가지고 있고, cache 디렉토리는 프레임워크에서 부팅의 성능을 향상시키기 위해서 생성하는 몇개의 파일들이 생성됩니다.

config 디렉토리는 이름에서 알 수 있듯이 애플리케이션의 모든 설정파일을 가지고 있습니다.

database 디렉토리는 데이터베이스의 마이그레이션과 시드 파일들을 가지고 있습니다. 이 디렉토리를 SQLite 데이터베이스 폴더로 사용할 수도 있습니다.

public 디렉토리는 프론트엔드를 관리하고 assets(image, javascript, CSS, 기타..) 파일들을 가지고 있습니다.

resources 디렉토리는 뷰파일들과 raw assets(LESS, SASS, CoffeeScript) 그리고 "다국어" 파일들을 가지고 있습니다.

storage 디렉토리는 컴파일된 블레이드 템플릿, 파일 세션들, 파일 캐시들 그리고 프레임워크에서 생성한 파일들을 포함하고 있습니다. 이 디렉토리에는 app, framework 그리고 logs 디렉토리가 있습니다. app 디렉토리는 여러분의 애플리케이션에서 생성한 파일들이 저장되는데 사용될 수 있습니다. framework 디렉토리는 프레임워크에서 생성한 파일들과 캐시가 저장됩니다. 마지막으로 logs 디렉토리는 애플리케이션 로그 파일들이 위치합니다.

tests 디렉토리는 자동화된 테스트 파일을 가지고 있습니다. PHPUnit 예제 파일이 제공됩니다.

vendor 디렉토리는 Composer의 의존성 폴더 입니다.

App 디렉토리

애플리케이션의 가장 핵심적인 부분app 디렉토리에 있습니다. 기본적으로 이 디렉토리의 네임스페이스는 컴포저가 PSR-4 autoloading standard방식으로 오토로딩될 수 있게 설정된 App 으로 설정되어 있습니다.

app 디렉토리는 Console, Http 그리고 Providers와 같은 추가적인 디렉토리들을 가지고 있습니다. ConsoleHttp 디렉토리는 애플리케이션의 "코어"에 API를 제공한다고 생각하면 됩니다. HTTP 프로토콜 과 CLI 모두 모두 애플리케이션과 상호 관계적인 메커니즘을 가지지만, 실제 애플리케이션 로직은 포함하고 있지 않습니다. 다시 말하자면 애플리케이션을 구동하는 방법이 두가지라는 것입니다. Console 디렉토리는 모든 아티즌 명령어를 가지고 있으며 Http 디렉토리는 컨트롤러, 미들웨어, 그리고 requests-요청들을 가지고 있습니다.

Events 디렉토리는 예상할 수 있듯이 이벤트 클래스를 모아놓은 곳입니다. 이벤트는 어떠한 사용자 액션이 발생했을 때 애플리케이션의 특정 부분에 대해 다양한 메세지를 보내는데 사용될 수 있으며, 이러한 특징은 유연함과 의존성의 디커플링(decoupling)을 제공합니다.

Exceptions 디렉토리는 애플리케이션의 예외 핸들러를 포함하고 있으며, 또한 응용프로그램에서 발생하는 예외파일들을 선언해 두기에 적당한 곳입니다.

Jobs 디렉토리는 당연하게도, 큐를 통한 작업이 가능한 애플리케이션의 작업들을 모아놓은 곳입니다. 각각의 Job들은 애플리케이션은 큐를 통해 처리될 수도, 현재 요청에 대한 라이프사이클 동안에 처리될수도(synchronously) 있습니다.

Listeners 디렉토리는 이벤트들의 처리를 담당하는 클래스들을 포함하고 있습니다. 핸들러는 이벤트가 발생했을 때, 이에대한 로직을 실행합니다. 예를 들어 UserRegistered 이벤트에 대해서는 SendWelcomeEmail 리스너가 관련 로직을 처리하게 됩니다.

Policies 디렉토리는 애플리케이션의 인증 policy 클래스들을 포함하고 있습니다. Policies 는 사용자가 특정 리소스에 대한 주어진 액션을 수행할 수 있는지 없는지 결정하는데 사용됩니다. 보다 자세한 내용은 인증 문서를 확인하십시오.

참고: app 디렉토리 중에 많은 클래스들이 아티즌 명령어에 의해 생성되어 집니다. 사용 가능한 명령어들을 확인하려면 터미널에서 php artisan list make 명령을 실행하십시오.