> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# 디렉터리 구조

> Laravel 프로젝트의 주요 디렉터리와 파일의 역할을 설명합니다.

## 소개

Laravel의 기본 애플리케이션 구조는 대규모·소규모 어느 애플리케이션에도 적합한 출발점을 제공합니다.
다만 애플리케이션을 어떻게 구성할지는 자유입니다.
Laravel은 클래스의 배치 장소에 거의 제한을 두지 않습니다. Composer가 클래스를 오토로드할 수만 있으면 문제없습니다.

## 루트 디렉터리

새 Laravel 프로젝트를 생성하면 다음과 같은 디렉터리 구조가 생성됩니다.

```
example-app/
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
├── resources/
├── routes/
├── storage/
├── tests/
├── vendor/
├── .env
├── artisan
└── composer.json
```

### `app/` 디렉터리

애플리케이션의 핵심 코드를 저장하는 디렉터리입니다.
컨트롤러·모델·미들웨어 등 애플리케이션의 거의 모든 클래스가 여기에 놓입니다.

기본적으로 `Http`·`Models`·`Providers` 서브디렉터리가 포함되어 있습니다.
Artisan 명령으로 클래스를 생성하면 다른 서브디렉터리도 자동으로 생성됩니다.

### `bootstrap/` 디렉터리

프레임워크를 부팅하는 `app.php` 파일을 포함합니다.
또한 라우트 캐시나 서비스 캐시 등의 성능 최적화 파일을 저장하는 `cache/` 디렉터리도 포함됩니다.

### `config/` 디렉터리

애플리케이션의 모든 설정 파일을 저장합니다.
이 파일들을 읽고 사용 가능한 옵션을 파악해 두는 것을 권장합니다.

### `database/` 디렉터리

데이터베이스 마이그레이션·모델 팩토리·시더를 저장합니다.
SQLite 데이터베이스 파일도 여기에 배치할 수 있습니다.

### `public/` 디렉터리

애플리케이션에 대한 모든 요청의 진입점인 `index.php`를 포함합니다.
또한 이미지·JavaScript·CSS 같은 에셋도 여기에 저장됩니다.

<Warning>
  웹 서버의 도큐먼트 루트는 Laravel 프로젝트의 `public/` 디렉터리로 설정해 주세요.
  프로젝트 루트나 서브디렉터리를 직접 공개하려고 하면 기밀 파일이 노출될 위험이 있습니다.
</Warning>

### `resources/` 디렉터리

[뷰](/ko/views)와 컴파일 전의 CSS나 JavaScript 같은 원시 에셋을 저장합니다.

### `routes/` 디렉터리

애플리케이션의 모든 라우트 정의를 저장합니다.
기본적으로 `web.php`와 `console.php` 두 개의 라우트 파일이 포함됩니다.

| 파일             | 용도                                                       |
| -------------- | -------------------------------------------------------- |
| `web.php`      | 브라우저용 라우트. 세션·CSRF 보호·쿠키 암호화를 제공하는 `web` 미들웨어 그룹이 적용됩니다. |
| `console.php`  | Artisan 명령을 클로저로 정의하는 파일입니다.                             |
| `api.php`      | 상태 비저장 API 라우트. `install:api` 명령으로 추가합니다.                |
| `channels.php` | 이벤트 브로드캐스트 채널을 등록하는 파일입니다.                               |

### `storage/` 디렉터리

로그·컴파일된 Blade 템플릿·파일 기반 세션·파일 캐시 등 프레임워크가 생성한 파일을 저장합니다.
`app/`·`framework/`·`logs/` 세 개의 서브디렉터리로 나뉘어 있습니다.

### `tests/` 디렉터리

자동화된 테스트를 저장합니다.
[Pest](https://pestphp.com) 또는 [PHPUnit](https://phpunit.de/)에 의한 유닛 테스트와 기능 테스트 샘플이 처음부터 포함되어 있습니다.

### `vendor/` 디렉터리

[Composer](https://getcomposer.org)의 의존 관계를 저장합니다. 이 디렉터리는 소스 컨트롤에 커밋하지 마세요.

## `app/` 디렉터리 상세

`app` 디렉터리의 많은 클래스는 Artisan 명령으로 생성할 수 있습니다.
사용 가능한 명령을 확인하려면 다음을 실행해 주세요.

```shell theme={null}
php artisan list make
```

<AccordionGroup>
  <Accordion title="Http/ 디렉터리">
    컨트롤러·미들웨어·폼 리퀘스트를 저장합니다.
    애플리케이션의 요청 처리 로직 대부분이 여기에 놓입니다.
  </Accordion>

  <Accordion title="Models/ 디렉터리">
    [Eloquent 모델](/ko/eloquent) 클래스를 모두 저장합니다.
    각 데이터베이스 테이블에 대응하는 "모델"이 존재하며, 데이터 조회나 삽입에 사용됩니다.
  </Accordion>

  <Accordion title="Providers/ 디렉터리">
    애플리케이션의 모든 [서비스 프로바이더](/ko/service-providers)를 저장합니다.
    서비스 프로바이더는 서비스를 컨테이너에 바인딩하고 이벤트를 등록하는 등 애플리케이션을 부팅하기 위한 처리를 수행합니다.
  </Accordion>

  <Accordion title="Console/ 디렉터리">
    커스텀 Artisan 명령을 모두 저장합니다.
    `make:command` 명령으로 생성할 수 있습니다.
  </Accordion>

  <Accordion title="Exceptions/ 디렉터리">
    애플리케이션의 커스텀 예외를 모두 저장합니다.
    `make:exception` 명령으로 생성할 수 있습니다.
  </Accordion>
</AccordionGroup>

## 중요한 파일

### `.env` 파일

환경별로 다른 설정 값(데이터베이스 접속 정보·API 키 등)을 관리합니다.
`config/` 내의 설정 파일에서 `env()` 헬퍼를 통해 참조됩니다.

```ini theme={null}
APP_NAME=Laravel
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost

DB_CONNECTION=sqlite
```

### `artisan` 파일

Artisan 커맨드라인 인터페이스의 진입점입니다.
`php artisan <명령 이름>` 형식으로 실행합니다.

## 다음 단계

<Card title="라우팅" icon="route" href="/ko/routing">
  라우트를 정의하는 방법과 URL과 애플리케이션 로직을 연결하는 방법을 배웁니다.
</Card>


## Related topics

- [React 입문 — Inertia × Laravel에서 사용하는 기초 지식](/ko/blog/react-introduction.md)
- [Svelte 입문 — Inertia × Laravel에서 사용하는 기초 지식](/ko/blog/svelte-introduction.md)
- [Vue.js 입문 — Inertia × Laravel에서 사용하는 기초 지식](/ko/blog/vue-introduction.md)
- [프로세스](/ko/processes.md)
- [배포](/ko/deployment.md)
