Livewire란
Laravel에서 동적인 UI를 만들려고 하면, 이전에는 Vue.js나 React 등의 JavaScript 프레임워크를 조합하거나, 스스로 AJAX 요청을 작성할 수밖에 없었습니다. Livewire는 그 문제를 해결하는 Laravel용 패키지입니다. PHP와 Blade만으로 리액티브한 UI를 구축할 수 있습니다. 폼의 실시간 유효성 검증, 라이브 검색, 카운터 등, 기존이라면 JavaScript가 필요했던 기능을 모두 PHP로 구현할 수 있습니다.Livewire 4는 Laravel 10 이후, PHP 8.1 이후에서 동작합니다. 현재의 최신 버전은 Livewire 4입니다.
구조 개요
Livewire 컴포넌트는 서버 상의 PHP 클래스와 Blade 템플릿의 조합입니다. 사용자가 버튼을 클릭하거나 폼에 입력하면, Livewire는 뒤에서 AJAX 요청을 보내 PHP를 실행하고, 변경된 부분만을 페이지에 반영합니다. 개발자는 이 구조를 의식하지 않고 PHP만으로 기술할 수 있습니다.설치
Laravel 애플리케이션의 루트 디렉터리에서 다음 명령을 실행합니다.레이아웃 파일 생성
풀 페이지 컴포넌트로 사용할 경우 레이아웃 파일이 필요합니다. 다음 Artisan 명령으로 생성할 수 있습니다.resources/views/layouts/app.blade.php가 생성됩니다.
@livewireStyles와 @livewireScripts가 Livewire와 Alpine.js의 애셋을 자동으로 로드합니다.
첫 컴포넌트
Livewire 컴포넌트를 생성하는 Artisan 명령이 준비되어 있습니다. 심플한 카운터를 만들어 봅시다.resources/views/components/⚡counter.blade.php라는 단일 파일 컴포넌트가 생성됩니다.
생성된 파일을 다음과 같이 편집합니다.
wire:click이 JavaScript 대신 PHP 메서드를 호출하는 구조입니다.
프로퍼티와 액션
프로퍼티 — wire:model
wire:model 디렉티브로 입력 요소와 컴포넌트의 프로퍼티를 양방향 바인드할 수 있습니다.
wire:model은 액션(폼 송신 등)이 실행되었을 때만 서버와 동기화합니다. 입력할 때마다 동기화시키고 싶은 경우는 .live 수식자를 추가합니다.
액션 — wire:click, wire:submit
wire:click은 클릭 이벤트, wire:submit은 폼의 송신 이벤트에 메서드를 연결합니다.
실시간 유효성 검증
Livewire 4에서는#[Validate] 어트리뷰트로 프로퍼티에 유효성 검증 룰을 직접 정의할 수 있습니다.
#[Validate]를 붙인 프로퍼티는 갱신할 때마다 자동 유효성 검증이 실행됩니다. wire:model.live.blur와 조합함으로써, 포커스를 잃은 순간에 오류 메시지가 표시되는 실시간 유효성 검증 경험을 실현할 수 있습니다.
$this->validate()는 폼 송신 시 전 프로퍼티를 일괄 검증합니다. #[Validate]에 의한 자동 유효성 검증과 2단계로 사용하는 것이 권장 패턴입니다.라이프사이클 훅
Livewire 컴포넌트에는 몇 가지 라이프사이클 훅이 있습니다.mount() — 초기화
mount()는 컴포넌트의 초기화에 사용합니다. 생성자의 대신입니다.
updated() — 프로퍼티 변경 후 처리
프로퍼티가 갱신된 후에 처리를 끼워 넣고 싶은 경우는 updated()를 사용합니다. 특정 프로퍼티로 좁히는 경우는 메서드 이름에 포함시킵니다.
Laravel과의 통합
Eloquent 모델 활용
Livewire는 프로퍼티에 직접 Eloquent 모델을 유지할 수 있습니다.폼 오브젝트
복잡한 폼은 폼 오브젝트로 분리함으로써 컴포넌트를 심플하게 유지할 수 있습니다.정리
Livewire가 특히 적합한 유스케이스를 정리합니다.
Livewire는 “Blade를 사용해 본 적이 있다”라는 Laravel 엔지니어라면 오늘부터 사용을 시작할 수 있습니다. JavaScript 프레임워크의 학습 비용 없이 인터랙티브한 UI를 실현할 수 있는 것이 최대의 강점입니다.
SPA 급의 고도의 인터랙션이 필요한 장면에서는 Inertia.js가 적합하지만, 폼이나 관리 화면, 데이터 테이블 같은 용도라면 Livewire 쪽이 더 심플하게 구현할 수 있는 경우가 많습니다. 우선 작은 컴포넌트 하나부터 시험해 보세요.
Livewire 공식 문서
Livewire의 전체 기능(파일 업로드, 페이지네이션, 테스트 등)에 대해서는 공식 문서를 참고하세요.