본문 바로가기

study/Laravel

Laravel Framework 라라벨 시작

라라벨 공부 시작. [라라벨 실전 웹 애플리케이션 개발] 책을 보고 개인적으로 다시 보기 위해 정리하는 글입니다. 틀린 정보가 있다면 댓글 부탁 드립니다.


라라벨은 PHP 프레임워크

라라벨 특징

  • Façade: 파사드를 사용하면 php 정적 클래스 메소드를 호출하는 방식으로 여러 기능을 사용할 있다.

) Session::get("name");

  • 라라벨은 기능의 의존성과 패키지 관리에 composer 사용한다.
  • MVC패턴을 이용한 개발을 있고,
  • ADR이나 레파지터리 패턴을 사용할 수도 있다.
  • 레이어드 아키텍쳐, 헥사고날 아키텍쳐 같은 도메인 주도 설계 컨텍스트의 아키텍처도 이용할 있다.

환경 구축을 위해서는 라라벨 세일이나 홈스테드를 이용한다. 라라벨 세일은 라라벨 실행에 필요한 기본 기능과 캐시용 미들웨어인 레디스, 메일혹, 셀레니움, 노드를 포함하고 도커 이미지로 제공된다

  • 홈스테드는 라라벨 세일에 포함된 소프트웨어 외에 엔진엑스, PostgreSQL 같은 rdb 등을 포함한 노드 등으로 구성되었다.
  • 라라벨 세일이 필수적인 것만을 제공해 가볍다.

 

라라벨 세일을 사용하려면 도커를 사용해야 한다.

  • 도커는 컨테이너라 불리는 가상 환경을 만들고 실행할 있는 소프트웨어. VirtualBox보다 가볍게 동작함. 인프라 리소스, 미들웨어, 각종 환결 설정들을 코드로 관리할 있다.
  • 구조를 이용하면 개발환경, OS, 미들웨어 설정 등을 쉽게 재현할 있다.

도커 다운로드

https://www.docker.com/products/docker-desktop

 

 

 

인터넷 사용 허용 해주고, 동의하라는 동의 해주고

짠!

만약 윈도우를 사용한다면 WSL 등을 같이 설치해줘야 한다.

 

이제 라라벨 세일을 다운로드 해준다. 자신만의 디렉토리를 만들어 이동해서 다운로드 한다.

Curl -s https://laravel.build/sample | bash

cURL은 다양한 통신 프로토콜을 이용하여 데이터를 전송하기 위한 라이브러리 명령  도구를 제공하는 컴퓨터 소프트웨어 프로젝트이다. cURL 프로젝트는 libcurl cURL이라는 2개의 제품을 만든다. 1997년에 처음 출시되었다. 이 이름은 "client URL"을 대표한다.(출처: 위키백과)

명령을 다시 보면 http 요청을 보낸 것인데, 응답값을 커맨드 창에서 확인할 있다.

 

 

설치가 완료되면 sample 디렉토리가 생긴다. 라라벨 세트가 생겼다.

Sample에서 ./vendor/bin/sale up -d 명령어를 실행하면 컨테이너와 함께 라라벨이 실행된다.

그리고 브라우저 검색창에 "localhost" 입력하면 라라벨 웰컴 페이지가 노출된다.

 

경우엔 도커를 띄우는 에러가 발생했다.

Error: Version file is missing or the previous MeiliSearch engine version was below 0.24.0. Use a dump to update MeiliSearch.

당장 라라벨을 띄우는데는 문제는 없지만, 버전 문제인 같다. 문제해결을 못했다. 추후 해결하는 글을 올려야지

 

다시 ./vendor/bin/sale down 명령어를 실행하면 도커가 내려간다.

 

Sale 앨리어스로 등록하면 편하게 사용할 있다.

alias sail = "./vendor/bin/sail"

 

도커 명령어 실행 "-d"옵션을 추가하면 백그라운드 실행이 된다.

 

컨테이너가 올라가 있을 , sail shell 이라고 실행하면 컨테이너 가상환경에 접속할 있다.

Sail ps -> 실행되고 있 컨테이너 목록을 보여준다.

 

Sail mysql -> mysql 접속

 

Sail 명령어는 docker-compose 대체될 있다.

 

라라벨이 설치되면 생성되는 디렉토리 구조에 대해 알아보자

App:/ : Console, Exceptions 등의 디렉토리를 포함. 컨트롤러나 미들웨어, 예외 클래스, 콘솔, 서비스 프로바이더 등의 주요한 처리 클래스가 들어있다.

Bootstrap/ : 애플리케이션에서 가장 먼저 실행되는 처리나 자동 로딩 설정을 포함.

Config/ : 애플리케이션 설정값

Database/ : DB 관련 파일 포함. Migration 파일이나 초기 입력 데이터를 배치함.

Public/ : 앱으로 공개할 디렉터리를 문서 루트로 설정함. 엔트리 포인트가 된느 index.php 포함한 그대로 공개하는 파일을 배치함.

Resources/ : view 템플릿 파일 같은 메타 언어 파일 언어 파일을 배치

Routes/ : 애플리케이션 루트 정의 파일 배치.

Storage/: 프로그램 실행시 라라벨이 만든느 파일의 출력 위치.

Test/: 테스트 코드 파일 배치

Vendor/ : composer 이용 다운로드 다양한 패키지 디렉토리. Vendor 하위에 laravel 디렉토리 하위에 라라벨 본체 코드가 배치됨.

 

 

처음 라라벨을 띄우고 http://localhost/ 접속의 과정을 알아보자.

 

1. 엔트리 포인트 public/index.php

http://localhost 접속하면 public 디렉토리를 참조한다. 클라이언트로부터 요청을 받아 기능 들을 준비하거나 설정값을 로딩하느 ㄴ등 전처리를 수행한 라우팅 처리를 한다.

 

2. 라우팅 routes/web.php

라우팅은 "A URL 접속하면 XX처리를 호출한다" 같은 관계를 부여하는 것이다.

"http://localhost/ 접속하면 웰컴페이지를 표시한다"

라우팅 처리는 routes 디렉터리 파일에서 정의한다.

 

Routes 하위에 web.php에서 애플리케이션 라우팅을 정의한다.

 

3. 뷰

Resources/views 디렉토리가 있다. Welcome.blade.php 있을텐데 Blade라는 템플릿 엔진이 사용된다.


테스트코드

라라벨의 대표 테스트 프레임워크는 phpunit이다. Sail artisan make:test HomeTest 명령어를 사용해서 HomeTest 코드를 생성할 있다.

앞에 sail 붙인 것은 컨테이너에 접속하지 않고 컨테이너 안의 artisan 명령어를 실행하기 위해서다.

컨테이너에 접속해서 artisan 명령어를 실행해도 결과는 같다.

./vendor/bin/sail make:test HomeTest == sail shell; php aritsan make:test HomeTest

 

 

테스트 클래스는 Tests/TestClass 클래스를 상속 받는다.

테스트 메서드 이름 앞에는 test 붙인다.

 

테스트 코드를 작성하면 루트 디렉토리로 돌아가 명령어를 실행한다. 결과가 나온다.

Sail test tests/Feature/HomeTest.php

 

라라벨 세일에서는 "sail test" 해도 컨테이너 내부에서 "php artisan test" 실행한다. 만약 sail test 뒤에 아무것도 붙이지 않는다면 해당 디렉토리에 있는 모든 테스트 코드를 실행한다.