라라벨 공부 시작. [라라벨 실전 웹 애플리케이션 개발] 책을 보고 개인적으로 다시 보기 위해 정리하는 글입니다. 틀린 정보가 있다면 댓글 부탁 드립니다.
라라벨은 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 뒤에 아무것도 붙이지 않는다면 해당 디렉토리에 있는 모든 테스트 코드를 실행한다.