Skip to content

디렉토리 구조

소개

기본 Laravel 애플리케이션 구조는 크고 작은 애플리케이션 모두에 훌륭한 시작점을 제공하기 위한 것입니다. 그러나 애플리케이션을 원하는 대로 자유롭게 구성할 수 있습니다. Laravel은 Composer가 클래스를 자동으로 로드할 수 있는 한 특정 클래스가 어디에 위치하는지에 거의 제한을 두지 않습니다.

lightbulb

Laravel을 처음 사용하십니까? 첫 번째 Laravel 애플리케이션을 구축하는 과정을 안내하면서 프레임워크를 직접 체험해 볼 수 있는 Laravel Bootcamp을 확인해 보세요.

루트 디렉토리

App 디렉토리

app 디렉토리에는 애플리케이션의 핵심 코드가 포함되어 있습니다. 곧 이 디렉토리를 자세히 살펴보겠지만, 애플리케이션의 거의 모든 클래스가 이 디렉토리에 있습니다.

Bootstrap 디렉토리

bootstrap 디렉토리에는 프레임워크를 부트스트랩하는 app.php 파일이 포함되어 있습니다. 이 디렉토리에는 라우트 및 서비스 캐시 파일과 같은 성능 최적화를 위해 프레임워크에서 생성한 파일이 포함된 cache 디렉토리도 있습니다.

Config 디렉토리

이름에서 알 수 있듯이 config 디렉토리에는 애플리케이션의 모든 구성 파일이 포함되어 있습니다. 이러한 파일을 모두 읽고 사용 가능한 모든 옵션을 숙지하는 것이 좋습니다.

Database 디렉토리

database 디렉토리에는 데이터베이스 마이그레이션, 모델 팩토리 및 시드가 포함되어 있습니다. 원하는 경우 이 디렉토리를 사용하여 SQLite 데이터베이스를 저장할 수도 있습니다.

Public 디렉토리

public 디렉토리에는 애플리케이션에 들어오는 모든 요청의 진입점이고 자동 로딩을 구성하는 index.php 파일이 포함되어 있습니다. 이 디렉토리에는 이미지, JavaScript 및 CSS와 같은 자산도 있습니다.

Resources 디렉토리

resources 디렉토리에는 뿐만 아니라 CSS 또는 JavaScript와 같은 컴파일되지 않은 원시 자산이 포함되어 있습니다.

Routes 디렉토리

routes 디렉토리에는 애플리케이션의 모든 라우트 정의가 포함되어 있습니다. 기본적으로 두 개의 라우트 파일이 Laravel에 포함되어 있습니다: web.phpconsole.php.

web.php 파일에는 Laravel이 세션 상태, CSRF 보호 및 쿠키 암호화를 제공하는 web 미들웨어 그룹에 배치하는 라우트가 포함되어 있습니다. 애플리케이션이 상태 비저장 RESTful API를 제공하지 않는 경우 모든 라우트는 web.php 파일에 정의될 가능성이 높습니다.

console.php 파일은 클로저 기반 콘솔 명령을 모두 정의할 수 있는 곳입니다. 각 클로저는 명령 인스턴스에 바인딩되어 각 명령의 IO 메서드와 상호 작용하는 간단한 접근 방식을 허용합니다. 이 파일은 HTTP 라우트를 정의하지 않더라도 애플리케이션에 대한 콘솔 기반 진입점(라우트)을 정의합니다. console.php 파일에서 작업을 예약할 수도 있습니다.

선택적으로 install:apiinstall:broadcasting Artisan 명령을 통해 API 라우트(api.php) 및 브로드캐스팅 채널(channels.php)에 대한 추가 라우트 파일을 설치할 수 있습니다.

api.php 파일에는 상태 비저장으로 의도된 라우트가 포함되어 있으므로 이러한 라우트를 통해 애플리케이션에 들어오는 요청은 토큰을 통해 인증되도록 의도되었으며 세션 상태에 액세스할 수 없습니다.

channels.php 파일은 애플리케이션이 지원하는 모든 이벤트 브로드캐스팅 채널을 등록할 수 있는 곳입니다.

Storage 디렉토리

storage 디렉토리에는 로그, 컴파일된 Blade 템플릿, 파일 기반 세션, 파일 캐시 및 프레임워크에서 생성한 기타 파일이 포함되어 있습니다. 이 디렉토리는 app, frameworklogs 디렉토리로 분리됩니다. app 디렉토리는 애플리케이션에서 생성한 모든 파일을 저장하는 데 사용할 수 있습니다. framework 디렉토리는 프레임워크에서 생성한 파일과 캐시를 저장하는 데 사용됩니다. 마지막으로 logs 디렉토리에는 애플리케이션의 로그 파일이 포함되어 있습니다.

storage/app/public 디렉토리는 공개적으로 액세스해야 하는 프로필 아바타와 같은 사용자가 생성한 파일을 저장하는 데 사용할 수 있습니다. 이 디렉토리를 가리키는 public/storage에 심볼릭 링크를 생성해야 합니다. php artisan storage:link Artisan 명령을 사용하여 링크를 생성할 수 있습니다.

Tests 디렉토리

tests 디렉토리에는 자동화된 테스트가 포함되어 있습니다. 예시 Pest 또는 PHPUnit 단위 테스트 및 기능 테스트가 기본적으로 제공됩니다. 각 테스트 클래스에는 Test라는 단어가 접미사로 붙어야 합니다. /vendor/bin/pest 또는 /vendor/bin/phpunit 명령을 사용하여 테스트를 실행할 수 있습니다. 또는 테스트 결과를 보다 자세하고 아름답게 표시하려면 php artisan test Artisan 명령을 사용하여 테스트를 실행할 수 있습니다.

Vendor 디렉토리

vendor 디렉토리에는 Composer 종속성이 포함되어 있습니다.

App 디렉토리

애플리케이션의 대부분은 app 디렉토리에 있습니다. 기본적으로 이 디렉토리는 App 아래의 네임스페이스로 지정되고 PSR-4 자동 로딩 표준을 사용하여 Composer에 의해 자동으로 로드됩니다.

기본적으로 app 디렉토리에는 Http, ModelsProviders 디렉토리가 포함되어 있습니다. 그러나 시간이 지남에 따라 클래스를 생성하기 위해 make Artisan 명령을 사용하면 앱 디렉토리 내부에 다양한 다른 디렉토리가 생성됩니다. 예를 들어, 명령 클래스를 생성하기 위해 make:command Artisan 명령을 실행할 때까지 app/Console 디렉토리는 존재하지 않습니다.

ConsoleHttp 디렉토리는 아래의 해당 섹션에서 자세히 설명되어 있지만, ConsoleHttp 디렉토리를 애플리케이션 코어에 대한 API를 제공하는 것으로 생각하십시오. HTTP 프로토콜과 CLI는 모두 애플리케이션과 상호 작용하는 메커니즘이지만 실제로 애플리케이션 로직을 포함하지는 않습니다. 즉, 애플리케이션에 명령을 내리는 두 가지 방법입니다. Console 디렉토리에는 모든 Artisan 명령이 포함되어 있는 반면, Http 디렉토리에는 컨트롤러, 미들웨어 및 요청이 포함되어 있습니다.

lightbulb

app 디렉토리의 많은 클래스는 Artisan을 통해 명령으로 생성할 수 있습니다. 사용 가능한 명령을 검토하려면 터미널에서 php artisan list make 명령을 실행하십시오.

Broadcasting 디렉토리

Broadcasting 디렉토리에는 애플리케이션의 모든 브로드캐스트 채널 클래스가 포함되어 있습니다. 이러한 클래스는 make:channel 명령을 사용하여 생성됩니다. 이 디렉토리는 기본적으로 존재하지 않지만, 첫 번째 채널을 생성할 때 생성됩니다. 채널에 대해 자세히 알아보려면 이벤트 브로드캐스팅에 대한 문서를 확인하십시오.

Console 디렉토리

Console 디렉토리에는 애플리케이션의 모든 사용자 지정 Artisan 명령이 포함되어 있습니다. 이러한 명령은 make:command 명령을 사용하여 생성할 수 있습니다.

Events 디렉토리

이 디렉토리는 기본적으로 존재하지 않지만, event:generatemake:event Artisan 명령으로 생성됩니다. Events 디렉토리에는 이벤트 클래스가 있습니다. 이벤트는 특정 작업이 발생했음을 애플리케이션의 다른 부분에 알리는 데 사용할 수 있으며, 이는 뛰어난 유연성과 분리를 제공합니다.

Exceptions 디렉토리

Exceptions 디렉토리에는 애플리케이션의 모든 사용자 지정 예외가 포함되어 있습니다. 이러한 예외는 make:exception 명령을 사용하여 생성할 수 있습니다.

Http 디렉토리

Http 디렉토리에는 컨트롤러, 미들웨어 및 양식 요청이 포함되어 있습니다. 애플리케이션에 들어오는 요청을 처리하는 거의 모든 로직이 이 디렉토리에 배치됩니다.

Jobs 디렉토리

이 디렉토리는 기본적으로 존재하지 않지만, make:job Artisan 명령을 실행하면 생성됩니다. Jobs 디렉토리에는 애플리케이션의 큐 작업이 있습니다. 작업은 애플리케이션에서 큐에 대기하거나 현재 요청 라이프사이클 내에서 동기적으로 실행할 수 있습니다. 현재 요청 중에 동기적으로 실행되는 작업은 명령 패턴의 구현이기 때문에 때로는 "명령"이라고도 합니다.

Listeners 디렉토리

이 디렉토리는 기본적으로 존재하지 않지만, event:generate 또는 make:listener Artisan 명령을 실행하면 생성됩니다. Listeners 디렉토리에는 이벤트를 처리하는 클래스가 포함되어 있습니다. 이벤트 리스너는 이벤트 인스턴스를 수신하고 이벤트가 발생한 것에 대한 응답으로 로직을 수행합니다. 예를 들어, UserRegistered 이벤트는 SendWelcomeEmail 리스너에 의해 처리될 수 있습니다.

Mail 디렉토리

이 디렉토리는 기본적으로 존재하지 않지만, make:mail Artisan 명령을 실행하면 생성됩니다. Mail 디렉토리에는 애플리케이션에서 보낸 이메일을 나타내는 모든 클래스가 포함되어 있습니다. 메일 객체를 사용하면 Mail::send 메서드를 사용하여 보낼 수 있는 단일의 간단한 클래스에서 이메일을 작성하는 모든 로직을 캡슐화할 수 있습니다.

Models 디렉토리

Models 디렉토리에는 모든 Eloquent 모델 클래스가 포함되어 있습니다. Laravel에 포함된 Eloquent ORM은 데이터베이스 작업을 위한 아름답고 간단한 ActiveRecord 구현을 제공합니다. 각 데이터베이스 테이블에는 해당 테이블과 상호 작용하는 데 사용되는 해당 "모델"이 있습니다. 모델을 사용하면 테이블의 데이터를 쿼리할 수 있을 뿐만 아니라 테이블에 새 레코드를 삽입할 수도 있습니다.

Notifications 디렉토리

이 디렉토리는 기본적으로 존재하지 않지만, make:notification Artisan 명령을 실행하면 생성됩니다. Notifications 디렉토리에는 애플리케이션 내에서 발생하는 이벤트에 대한 간단한 알림과 같이 애플리케이션에서 보낸 모든 "트랜잭션" 알림이 포함되어 있습니다. Laravel의 알림 기능은 이메일, Slack, SMS 또는 데이터베이스에 저장된 다양한 드라이버를 통해 알림을 보내는 것을 추상화합니다.

Policies 디렉토리

이 디렉토리는 기본적으로 존재하지 않지만, make:policy Artisan 명령을 실행하면 생성됩니다. Policies 디렉토리에는 애플리케이션의 인증 정책 클래스가 포함되어 있습니다. 정책은 사용자가 리소스에 대해 특정 작업을 수행할 수 있는지 여부를 결정하는 데 사용됩니다.

Providers 디렉토리

Providers 디렉토리에는 애플리케이션의 모든 서비스 공급자가 포함되어 있습니다. 서비스 공급자는 서비스 컨테이너에 서비스를 바인딩하거나, 이벤트를 등록하거나, 들어오는 요청에 대한 애플리케이션을 준비하기 위한 다른 작업을 수행하여 애플리케이션을 부트스트랩합니다.

새 Laravel 애플리케이션에서 이 디렉토리에는 이미 AppServiceProvider가 포함되어 있습니다. 필요에 따라 이 디렉토리에 자신의 공급자를 자유롭게 추가할 수 있습니다.

Rules 디렉토리

이 디렉토리는 기본적으로 존재하지 않지만, make:rule Artisan 명령을 실행하면 생성됩니다. Rules 디렉토리에는 애플리케이션의 사용자 지정 유효성 검사 규칙 객체가 포함되어 있습니다. 규칙은 복잡한 유효성 검사 논리를 간단한 객체에 캡슐화하는 데 사용됩니다. 자세한 내용은 유효성 검사 문서를 확인하십시오.