애플리케이션 구조
시작하기
기본적인 라라벨 애플리케이션의 구조는 애플리케이션이 크건, 작건 좋은 시작점이 되는것을 의도하고 있습니다. 당연히 애플리케이션을 원하는대로 구성해도 됩니다. 컴포저가 클래스를 오토로딩할 수 있는 한 클래스를 어디에 위치시키는가에 대한 제약사항은 없습니다.
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:name
아티즌 명령어를 통해서 네임스페이스를 변경할 수 있습니다.
app
디렉토리는 Console
, Http
그리고 Providers
와 같은 추가적인 디렉토리들을 가지고 있습니다. Console
과 Http
디렉토리는 애플리케이션의 "코어"에 API를 제공한다고 생각하면 됩니다. HTTP 프로토콜 과 CLI 모두 모두 애플리케이션과 상호 관계적인 메커니즘을 가지지만, 실제 애플리케이션 로직은 포함하고 있지 않습니다. 다시 말하자면 애플리케이션을 구동하는 방법이 두가지라는 것입니다. Console
디렉토리는 모든 아티즌 명령어를 가지고 있으며 Http
디렉토리는 컨트롤러, 미들웨어, 그리고 requests-요청들을 가지고 있습니다.
Jobs
디렉토리는 당연하게도, 큐를 통한 작업이 가능한 애플리케이션의 작업들을 모아놓은 곳입니다. 각각의 Job들은 애플리케이션은 큐를 통해 처리될 수도, 현재 요청에 대한 라이프사이클 동안에 처리될수도(synchronously) 있습니다.
Events
디렉토리는 예상할 수 있듯이 이벤트 클래스를 모아놓은 곳입니다. 이벤트는 어떠한 사용자 액션이 발생했을 때 애플리케이션의 특정 부분에 대해 다양한 메세지를 보내는데 사용될 수 있으며, 이러한 특징은 유연함과 의존성의 디커플링(decoupling)을 제공합니다.
Listeners
디렉토리는 이벤트들의 처리를 담당하는 클래스들을 포함하고 있습니다. 핸들러는 이벤트가 발생했을 때, 이에대한 로직을 실행합니다. 예를 들어 UserRegistered
이벤트에 대해서는 SendWelcomeEmail
리스너가 관련 로직을 처리하게 됩니다.
Exceptions
디렉토리는 애플리케이션의 예외 핸들러를 포함하고 있으며, 또한 응용프로그램에서 발생하는 예외파일들을 선언해 두기에 적당한 곳입니다.
참고:
app
디렉토리 중에 많은 클래스들이 아티즌 명령어에 의해 생성되어 집니다. 사용 가능한 명령어들을 확인하려면 터미널에서php artisan list make
명령을 실행하십시오.
애플리케이션에 네임스페이스 지정하기
지금까지 보신바와 같이 애플리케이션의 네임스페이스는 기본값으로 App
으로 지정되어 있습니다. 하지만 이 네임스페이스를 여러분이 원하는 고유한 값으로 변경하고자 한다면 app:name
아티즌 명령어를 통해서 손쉽게 변경 할 수 있습니다. 예를들어 애플리케이션이 “SocialNet”으로 이름을 지정하고자 한다면 다음과 같이 명령어를 실행하면 됩니다.
php artisan app:name SocialNet
물론, App
네임스페이스를 그대로 사용해도 됩니다.