애플리케이션 구조(Application Structure)

소개

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

루트 디렉토리

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

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

bootstrap 폴더는 프레임워크가 부팅하고 오토로딩을 설정하는 몇몇 파일을 가지고 있습니다.

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

database 폴더는 데이터베이스의 마이그레이션과 시드 파일들을 가지고 있습니다.

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

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

storage 디렉토리는 컴파일된 블레이드 템플릿, 파일 세션들, 파일 캐시들 그리고 프레임워크에서 생성한 파일들을 포함하고 있습니다.

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

vendor 디렉토리는 컴포저의 의존성 폴더입니다.

App 디렉토리

애플리케이션의 가장 핵심적인 부분은 app 디렉토리에 있습니다. 기본적으로 이 디렉토리의 네임스페이스는 컴포저가 PSR-4 autoloading standard방식으로 오토로딩될 수 있게 설정된 App으로 설정되어 있습니다. app:name 아티즌 명령어를 통해서 네임스페이스를 변경할 수 있습니다.

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

Commands 디렉토리는 당연하게도, 응용 프로그램의 명령어를 모아놓은 곳입니다. 각각의 명령어는 응용 프로그램이 큐에 삽입하는 작업을 나타내는 동시에 현재 요청에 대한 라이프 사이클 동안 수행 할 수있는 작업을 나타냅니다.

Events 디렉토리는 예상할 수 있듯이 이벤트 클래스를 모아놓은 곳입니다. 물론 이벤트를 표현하기 위해서 꼭 클래스를 사용할 필요는 없습니다. 그러나 새로운 이벤트를 사용하기 위해서, 아티즌 명령어를 통해서 생성 된 클래스는 기본적으로 이 디렉토리에 위치합니다.

Handlers 디렉토리는 커맨드와 이벤트들을 처리하는 클래스들을 포함하고 있습니다. 핸들러는 커맨드 또는 이벤트를 받아서 해당 명령 또는 발생한 이벤트에 따라 수행 로직을 실행합니다.

Services 디렉토리는 애플리케이션에서 필요한 다양한 다양한 “헬퍼” 서비스들을 포함하고 있습니다. 예를 들어, 라라벨에 포함된 Registrar 서비스는 애플리케이션에 새로운 사용자의 생성과 검증하는 역할을 수행합니다. 다른 예로는 서비스가 외부 API들과 연결하거나, 다른 시스템 또는 애플리케이션에서 필요한 통계 데이터들을 수집하는 역할을 수행할 수 있습니다.

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

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

애플리케이션에 네임스페이스 지정하기

앞서 이야기한대로 애플리케이션의 네임스페이스는 기본값으로 App으로 지정되어 있습니다. 하지만 이 네임스페이스를 여러분이 고유한 값으로 변경하고자 한다면 app:name 아티즌 명령어를 통해서 손쉽게 할 수 있습니다. 예를 들어, 애플리케이션이 “SocialNet”으로 이름을 지정하고자 한다면 다음과 같이 명령어를 실행하면 됩니다:

php artisan app:name SocialNet