블로그

Laravel

Laravel로 웹 애플리케이션 만들기. 라우팅, Eloquent 모델, 인증, 큐, 배포까지 실제 프로젝트에 바로 쓸 수 있는 실용적인 예제로 설명합니다.

아직 등록된 글이 없습니다!

이 주제에 대한 글을 준비 중입니다. 다른 주제를 먼저 둘러보시거나 곧 다시 들러주세요!

Questions about this topic

Quick, clear answers to what readers ask most about this topic.

Laravel이란 무엇인가요?

Laravel은 웹 애플리케이션을 만들기 위한 무료 오픈소스 PHP 프레임워크입니다. 라우팅, 데이터베이스, 로그인, 이메일, 큐, 테스트에 필요한 기능이 미리 갖춰져 있어 개발자가 반복되는 코드를 훨씬 적게 작성해도 됩니다. 모델, 뷰, 컨트롤러(MVC) 패턴을 따르며 사용자 커뮤니티도 매우 큽니다.

Laravel은 어디에 사용되나요?

Laravel은 관리 시스템, 고객 포털, 온라인 쇼핑몰, 예약 플랫폼, 모바일 앱용 API 같은 웹 애플리케이션을 만드는 데 사용됩니다. 사용자, 데이터베이스, 업무 규칙이 필요한 프로젝트라면 어디에나 잘 맞습니다. 안정적이고 확장하기 쉬워서 많은 기업이 대규모 사내 시스템을 Laravel로 운영합니다.

Laravel은 초보자에게 적합한가요?

PHP 기초를 이미 알고 있는 초보자라면 Laravel은 좋은 선택입니다. 코드가 읽기 쉽고 공식 문서가 명확하며, 커뮤니티와 강좌가 풍부하고 로그인 화면을 자동으로 만들어 주는 스타터 키트도 있습니다. 순수 PHP를 먼저 익혀 두면 프레임워크를 훨씬 쉽게 이해할 수 있습니다.

내 컴퓨터에 Laravel을 설치하려면 어떻게 하나요?

먼저 PHP와 Composer를 설치한 다음 composer create-project laravel/laravel 뒤에 프로젝트 이름을 붙여 실행하면 Laravel이 설치됩니다. laravel new 명령으로 실행하는 Laravel 설치 도구도 같은 일을 하며 스타터 키트까지 선택할 수 있습니다. 설치 후 php artisan serve를 실행하면 로컬 서버가 켜져 브라우저에서 앱을 열 수 있습니다.

Laravel에는 어떤 PHP 버전이 필요한가요?

Laravel에는 최신 PHP 8 버전이 필요하며, Laravel의 각 릴리스마다 지원하는 최소 PHP 버전이 명시되어 있습니다. 오래된 PHP 버전은 보안 지원이 끝나면 새 Laravel 릴리스에서 지원이 중단됩니다. 사용하려는 Laravel 버전의 업그레이드 가이드를 항상 확인하세요.

Laravel의 라우팅이란 무엇인가요?

Laravel의 라우팅은 웹 주소와 GET, POST 같은 HTTP 메서드를 그 요청에 응답하는 코드와 연결하는 기능입니다. 라우트는 페이지용 routes/web.php, API용 routes/api.php 같은 파일에 작성합니다. 라우트는 클로저나 컨트롤러 메서드를 호출할 수 있고, 로그인 확인 등 각종 검사를 위한 미들웨어를 붙일 수도 있습니다.

Laravel의 Eloquent란 무엇인가요?

Eloquent는 Laravel의 ORM으로, 데이터베이스 테이블을 모델이라는 PHP 클래스로 다룰 수 있게 해 줍니다. 모델 하나가 테이블 하나에, 객체 하나가 행 하나에 대응하므로 SQL을 직접 쓰지 않고도 데이터를 읽고 저장할 수 있습니다. 일대다, 다대다 같은 관계도 Eloquent가 처리합니다.

Laravel에서 Eloquent 관계는 어떻게 작동하나요?

Laravel의 Eloquent 관계는 hasMany, belongsTo, belongsToMany처럼 두 테이블이 어떻게 연결되는지 설명하는 모델의 메서드입니다. 한 번 정의해 두면 조인을 작성하지 않고도 $order->customer처럼 관련 데이터를 읽을 수 있습니다. with 메서드를 이용한 즉시 로딩(eager loading)은 관련 행을 한 번에 불러와 느린 반복 쿼리를 막아 줍니다.

Laravel의 N+1 쿼리 문제란 무엇인가요?

Laravel의 N+1 쿼리 문제는 레코드 목록을 불러온 뒤 관련 데이터를 가져오려고 레코드마다 쿼리를 하나씩 더 실행할 때 생깁니다. 주문 100건을 보여 주는 페이지가 쿼리를 101번 실행하면서 느려질 수 있습니다. with 메서드로 즉시 로딩을 하면 관련 행을 쿼리 하나로 가져와 이 문제가 해결됩니다.

Laravel의 마이그레이션이란 무엇인가요?

Laravel의 마이그레이션은 데이터베이스 테이블을 코드로 만들고 변경하는 PHP 파일입니다. php artisan migrate를 실행하면 적용되므로 모든 개발자와 모든 서버가 같은 데이터베이스 구조를 갖게 됩니다. 마이그레이션은 버전 관리에 함께 저장되므로 테이블이 바뀐 이력이 모두 남습니다.

Laravel의 Blade란 무엇인가요?

Blade는 반복문, 조건문, 레이아웃을 간단한 태그로 작성해 HTML 페이지를 만드는 Laravel의 템플릿 엔진입니다. 출력하는 값을 기본적으로 이스케이프하기 때문에 크로스 사이트 스크립팅으로부터 페이지를 보호합니다. 템플릿은 일반 PHP로 컴파일되어 캐시되므로 요청마다 드는 부담이 거의 없습니다.

Laravel의 인증은 어떻게 작동하나요?

Laravel의 인증은 사용자가 누구인지 확인하는 가드(guard)와 데이터베이스에서 사용자를 불러오는 프로바이더(provider)로 작동합니다. Laravel Breeze 같은 스타터 키트를 쓰면 로그인, 회원가입, 비밀번호 재설정 화면이 바로 추가됩니다. 비밀번호는 bcrypt나 Argon2로 해시되므로 평문으로 저장되는 일이 없습니다.

Laravel Sanctum과 Laravel Passport의 차이는 무엇인가요?

Laravel Sanctum은 싱글 페이지 앱, 모바일 앱, 간단한 API를 위한 토큰과 쿠키 기반 로그인을 제공하고, Laravel Passport는 완전한 OAuth2 서버입니다. Sanctum이 더 가볍고 설정하기 쉬워 대부분의 프로젝트는 Sanctum만으로 충분합니다. Passport는 외부 애플리케이션이 사용자를 대신해 로그인해야 하는 경우에 적합합니다.

Laravel의 미들웨어란 무엇인가요?

Laravel의 미들웨어는 요청이 코드에 도달하기 전에, 또는 응답이 나가기 전에 이를 검사하거나 변경하는 계층입니다. 로그인 확인, CSRF 보호, 요청 횟수 제한, 언어 설정 등이 대표적인 미들웨어입니다. 미들웨어는 개별 라우트, 라우트 그룹, 애플리케이션 전체에 붙일 수 있습니다.

Laravel의 큐는 어떻게 작동하나요?

Laravel의 큐는 이메일 발송이나 보고서 생성처럼 오래 걸리는 작업을 웹 요청에서 떼어 내 백그라운드 작업으로 옮겨 줍니다. 작업(job)은 Redis나 데이터베이스 같은 큐 드라이버에 등록되고, php artisan queue:work로 시작한 워커가 이를 실행합니다. 사용자는 빠르게 응답을 받고 무거운 작업은 백그라운드에서 마무리됩니다.

Laravel 애플리케이션에서 큐는 언제 사용해야 하나요?

Laravel 애플리케이션에서는 이메일, 파일 처리, 결제 웹훅처럼 시간이 조금이라도 걸리거나 외부 서비스와 통신하는 작업이면 큐를 사용하는 것이 좋습니다. 큐를 쓰면 페이지가 빠르게 유지되고 실패한 작업은 자동으로 다시 시도됩니다. Laravel Horizon을 사용하면 Redis 큐를 대시보드에서 지켜볼 수 있습니다.

Laravel에서 작업을 예약 실행하려면 어떻게 하나요?

Laravel에서는 스케줄러에 daily, everyFiveMinutes 같은 메서드로 작업을 정의하고, 서버의 크론 항목 하나로 php artisan schedule:run을 매분 실행하면 됩니다. 그러면 스케줄러가 어떤 작업을 실행할 때인지 스스로 판단합니다. 이렇게 하면 여러 개의 크론 줄 대신 모든 예약 작업을 코드 안에서 관리할 수 있습니다.

Laravel에서 폼 데이터를 검증하려면 어떻게 하나요?

Laravel에서는 요청 객체의 validate 메서드나 규칙을 담은 Form Request 클래스로 폼 데이터를 검증합니다. required, email, max, unique 같은 규칙이 코드에서 사용하기 전에 각 필드를 검사합니다. 검증에 실패하면 Laravel이 오류 메시지와 이전 입력값을 함께 담아 사용자를 원래 화면으로 돌려보냅니다.

Laravel은 흔한 웹 공격을 어떻게 막아 주나요?

Laravel은 폼의 CSRF 토큰, Blade의 출력 이스케이프, 데이터베이스 쿼리의 파라미터 바인딩, 비밀번호 해시로 흔한 웹 공격을 막아 줍니다. 이런 기본 설정만으로도 일반적인 사용에서는 크로스 사이트 요청 위조, 크로스 사이트 스크립팅, SQL 인젝션이 차단됩니다. 그래도 개발자는 입력값 검증, 권한 확인, 프레임워크 업데이트를 꾸준히 챙겨야 합니다.

Laravel 애플리케이션을 서버에 배포하려면 어떻게 하나요?

Laravel 애플리케이션은 서버로 코드를 내려받고, 개발용 패키지를 제외하고 composer install을 실행한 뒤, .env 파일을 설정하고 마이그레이션을 실행하는 순서로 배포합니다. 이어서 설정, 라우트, 뷰를 캐시하고 웹 서버가 public 폴더를 가리키도록 합니다. 많은 팀이 이 과정을 Git에서 자동화해 매번 같은 방식으로 릴리스합니다.

Laravel 애플리케이션에는 어떤 서버가 필요한가요?

Laravel 애플리케이션에는 PHP, Nginx나 Apache 같은 웹 서버, MySQL이나 PostgreSQL 같은 데이터베이스, 그리고 Composer가 설치된 서버가 필요합니다. 캐시와 큐를 위해 Redis를 함께 쓰는 경우가 많고, 프로세스 관리자가 큐 워커를 계속 실행시켜 줍니다. Linkysoft의 호스팅 브랜드인 Hostrena는 Git에서 바로 배포되는 Laravel용 웹 앱 호스팅을 제공합니다.

Laravel 애플리케이션을 더 빠르게 만들려면 어떻게 하나요?

설정, 라우트, 뷰를 캐시하고, 관계를 즉시 로딩하며, 검색하는 데이터베이스 컬럼에 인덱스를 추가하면 Laravel 애플리케이션이 빨라집니다. 느린 작업을 큐로 옮기고 무거운 쿼리 결과를 Redis에 캐시하면 더 좋아집니다. 서버에서 PHP OPcache를 켜는 것만으로도 적은 노력으로 큰 효과를 얻을 수 있습니다.

Laravel 애플리케이션은 어떻게 테스트하나요?

Laravel 애플리케이션은 새 프로젝트마다 미리 설정되어 있는 PHPUnit이나 Pest로 테스트합니다. 기능 테스트는 라우트에 가상의 요청을 보내 응답과 데이터베이스를 확인하고, 단위 테스트는 개별 클래스를 검사합니다. php artisan test를 실행하면 전체 테스트가 한 번에 돌아갑니다.

Laravel로 사용자가 많은 대규모 애플리케이션을 운영할 수 있나요?

캐시, 큐, 데이터베이스 인덱스를 갖추고 로드 밸런서 뒤에 여러 대의 앱 서버를 둔 좋은 환경에서라면 Laravel로 사용자가 많은 대규모 애플리케이션도 충분히 운영할 수 있습니다. 한계가 되는 것은 프레임워크 자체보다 느린 쿼리와 빠진 캐시인 경우가 대부분입니다. 그래서 Linkysoft는 PHP, Laravel, MySQL, Redis로 맞춤형 웹 애플리케이션을 개발합니다.

Laravel 버전은 얼마나 자주 업그레이드해야 하나요?

적어도 현재 사용하는 Laravel 버전의 보안 패치가 끝나기 전에는 업그레이드해야 합니다. Laravel은 대략 1년에 한 번 메이저 버전을 내놓으며, 버전마다 업그레이드 가이드가 함께 제공됩니다. 여러 버전을 한꺼번에 건너뛰는 것보다 작게 자주 업그레이드하는 편이 훨씬 수월합니다.