Laravel 디렉토리 구조

Directory Structure
디렉토리 구조

1 소개[ | ]

Laravel 애플리케이션의 기본 구조는 대규모 및 소규모 애플리케이션 모두에 적합한 출발점을 제공하도록 설계되었습니다. 그러나 애플리케이션을 원하는 대로 조직할 수 있습니다. Laravel은 Composer가 클래스를 자동 로드할 수 있는 한, 특정 클래스의 위치에 거의 제한을 두지 않습니다.

Note

Laravel이 처음이신가요? Laravel Bootcamp에서 프레임워크 실습 투어를 통해 첫 번째 Laravel 애플리케이션을 구축하는 방법을 안내합니다.

2 루트 디렉토리[ | ]

2.1 app 디렉토리[ | ]

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

2.2 bootstrap 디렉토리[ | ]

bootstrap 디렉토리에는 프레임워크를 부트스트랩하는 app.php 파일이 포함되어 있습니다. 이 디렉토리에는 또한 cache 디렉토리가 있으며, 여기에는 경로 및 서비스 캐시 파일과 같은 성능 최적화를 위한 프레임워크 생성 파일이 포함되어 있습니다.

2.3 config 디렉토리[ | ]

config 디렉토리는 이름에서 알 수 있듯이 애플리케이션의 모든 설정 파일을 포함하고 있습니다. 이 파일들을 모두 읽어보고 사용할 수 있는 모든 옵션에 익숙해지는 것이 좋습니다.

2.4 database 디렉토리[ | ]

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

2.5 public 디렉토리[ | ]

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

2.6 resources 디렉토리[ | ]

resources 디렉토리에는 와 CSS 또는 JavaScript와 같은 원시 미컴파일 애셋이 포함되어 있습니다.

2.7 routes 디렉토리[ | ]

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

web.php 파일에는 Laravel이 web 미들웨어 그룹에 배치하는 라우트가 포함되어 있으며, 이 그룹은 세션 상태, CSRF 보호 및 쿠키 암호화를 제공합니다. 애플리케이션이 상태 비저장 RESTful API를 제공하지 않는 경우, 대부분의 라우트는 web.php 파일에 정의될 것입니다.

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

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

api.php 파일에는 상태 비저장 목적으로 설계된 라우트가 포함되어 있으며, 이러한 라우트를 통해 애플리케이션에 들어오는 요청은 토큰을 통해 인증되며 세션 상태에 접근할 수 없습니다.

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

2.8 storage 디렉토리[ | ]

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

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

2.9 tests 디렉토리[ | ]

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

2.10 vendor 디렉토리[ | ]

vendoer 디렉토리는 Composer 의존성을 포함하고 있습니다.

3 App 디렉토리[ | ]

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

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

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

Note

app 디렉토리의 여러 클래스들은 Artisan 명령어를 통해 생성할 수 있습니다. 사용가능한 명령어들을 살펴보려면 터미널에서 php artisan list make 명령어를 실행하십시오.

3.1 Broadcasting 디렉토리[ | ]

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

3.2 Console 디렉토리[ | ]

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

3.3 Events 디렉토리[ | ]

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

3.4 Exceptions 디렉토리[ | ]

Exceptions 디렉토리는 애플리케이션의 모든 커스텀 예외를 포함하고 있습니다. 이러한 예외는 make:exception 명령어를 사용하여 생성할 수도 있습니다.

3.5 Http 디렉토리[ | ]

Http 디렉토리는 컨트롤러, 미들웨어, 폼 요청을 포함하고 있습니다. 애플리케이션에 들어오는 요청을 처리하는 대부분의 로직은 이 디렉토리에 배치됩니다.

3.6 Jobs 디렉토리[ | ]

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

3.7 Listeners 디렉토리[ | ]

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

3.8 Mail 디렉토리[ | ]

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

3.9 Models 디렉토리[ | ]

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

3.10 Notifications 디렉토리[ | ]

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

3.11 Policies 디렉토리[ | ]

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

3.12 Providers 디렉토리[ | ]

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

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

3.13 Rules 디렉토리[ | ]

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