Article
Laravel PSR 코딩 표준 완벽 가이드
개요
Laravel 프레임워크는 PHP 커뮤니티의 표준 코딩 스타일을 따릅니다. Laravel 8 이전 버전에서는 PSR-2를 기반으로 하였으나, 최신 버전에서는 PSR-12로 업그레이드되었습니다. 이 가이드는 Laravel 프로젝트에서 일관된 코드 스타일을 유지하기 위한 필수 규칙들을 정리합니다.
PSR-2 vs PSR-12
| 항목 | PSR-2 | PSR-12 |
|---|---|---|
| 제정 연도 | 2012년 | 2019년 |
| 사용 버전 | Laravel 7 이하 | Laravel 8 이상 |
| 주요 변화 | 기본 표준 | 선언 문법 개선 |
| 화살표 함수 | 미지원 | 지원 |
들여쓰기와 공백
기본 규칙
- 들여쓰기: 스페이스 4개 (탭 문자 사용 금지)
- 한 줄 길이: 최대 80-120자 권장
- 줄 끝 공백: 제거해야 함
- 파일 끝: 줄바꿈으로 종료
// ✓ 올바른 예
namespace App\Models;
class User
{
protected $fillable = [
'name',
'email',
];
}
// ✗ 잘못된 예
namespace App\Models;
class User {
protected $fillable = ['name', 'email'];
}
클래스와 메서드 정의
클래스 선언
namespace App\Http\Controllers;
class UserController extends Controller
{
// 클래스 본문
}
메서드 정의
class UserController extends Controller
{
public function index()
{
return view('users.index');
}
public function show($id)
{
return view('users.show', ['user' => User::find($id)]);
}
}
메서드 간에는 한 줄의 빈 라인으로 구분합니다.
네이밍 컨벤션
클래스명
- PascalCase 사용
- 각 단어의 첫 글자는 대문자
- 예:
UserController,BlogPost,CommentRepository
메서드명과 변수명
- camelCase 사용
- 첫 글자는 소문자, 다음 단어부터 대문자
- 예:
getUserById(),calculateTotal,isActive
상수명
- UPPER_SNAKE_CASE 사용
- 예:
DATABASE_HOST,API_TIMEOUT
제어 구조
// if 문
if ($condition) {
// 코드
} elseif ($otherCondition) {
// 코드
} else {
// 코드
}
// for 루프
for ($i = 0; $i < 10; $i++) {
// 코드
}
// foreach 루프
foreach ($users as $user) {
echo $user->name;
}
// switch 문
switch ($value) {
case 'option1':
// 코드
break;
case 'option2':
// 코드
break;
default:
// 기본 코드
}
선언 문법 (PSR-12)
함수 선언
// 짧은 함수
public function getName(): string
{
return $this->name;
}
// 긴 함수 시그니처는 개행
public function processLargeDataSet(
string $input,
int $count,
bool $verbose
): array {
return array_map(fn($item) => $item * 2, range(1, $count));
}
화살표 함수 (PHP 7.4+)
// PSR-12부터 공식 지원
$numbers = [1, 2, 3, 4, 5];
$squared = array_map(fn($n) => $n ** 2, $numbers);
// 결과: [1, 4, 9, 16, 25]
코드 포맷팅 도구
Laravel 프로젝트에서 자동으로 스타일을 적용하려면:
PHP-CS-Fixer 사용
composer require --dev friendsofphp/php-cs-fixer
# 스타일 자동 수정
php vendor/bin/php-cs-fixer fix app/
Pint 사용 (권장)
composer require --dev laravel/pint
# 스타일 확인
./vendor/bin/pint --test
# 스타일 자동 수정
./vendor/bin/pint
IDE 설정
PhpStorm / IntelliJ IDEA
- Settings → Editor → Code Style → PHP
- Scheme 선택: PSR-2 또는 PSR-12
- 저장 시 자동 포매팅 활성화
VS Code
.editorconfig 파일을 프로젝트 루트에 생성:
root = true
[*.php]
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
실무 팁
- 팀 협업:
.php-cs-fixer.php또는pint.json을 프로젝트에 커밋하여 모든 개발자가 동일한 스타일 유지 - CI/CD 통합: GitHub Actions나 GitLab CI에서 스타일 검사 자동화
- 점진적 마이그레이션: 레거시 코드는 새 파일부터 PSR-12 적용
- 코드 리뷰: Pull Request에서 스타일 지적 자동화
마치며
Laravel의 PSR 코딩 표준은 팀 전체가 이해하기 쉬운 일관된 코드를 작성하도록 도와줍니다. 자동화 도구를 적절히 활용하면 개발자는 로직에만 집중할 수 있습니다. 새 프로젝트를 시작할 때 처음부터 이 규칙을 적용하면, 나중에 큰 리팩토링 비용을 절감할 수 있습니다.
댓글