라라벨 시작하기 6 – docker

이렇게 어이없게도 /var/run/docker.sock 의 모드를 666(rw) 로 변경하는 것만드로 실행이 됐다. 잠깐. 사용자를 추가하는것은 아무 영향도 못미쳤을까?

이건 내가 잘못했다. 도커그룹에 사용자를 추가하는 것만으로도 충분했다. 그런데 왜 실패했을까? 그건 변경된 설정이 적용되기 위해선 재접속을 해야했기 때문.

나에게 답을 알려준 https://thxxyj.tistory.com/42 여기에도 재접속을 하라고 나와있다. 그런데 내가 이를 무시하고 기존 접속을 유지한체 도커를 실행시켰기 때문에 문제가 발생한 것이다.

굿!

라라벨 시작하기 5 – bootcamp

public/index.php가 시작점이다.

  1. HTTP/Console 커널
  2. 서비스
  3. 라우팅

구조 자체는 코드이그나이터랑 비슷한거 같다. 그럼에도 라라벨만의 특징이 있겠지. 설명만 봐선 잘 이해가 안간다. 한 번 사용을 해 보면서 어떤 구조인지 파악하는 과정이 필요하다. 의존성 주입도 있고 해서 마치 스프링부트 같기도 하고.

부트캠프

라라벨은 부트캠프를 제공하고 있었다. 한번 따라 해보자.

우분투의 경우 설치 과정에서 extension을 추가로 설치 해줘야 한다. php-xml, php-curl 을 설치해주자. env는 code를 실행하여 수정해주자.

막히는 중

The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: The stream or file "/var/www/html/storage/logs/laravel.log"

권한 문제인데 storage에 있는 logs의 권한이 root 인데 php는 sail로 실행하고 있어서 로그를 저장할 수 없다. 해당 디렉토리의 권한을 변경하거나 사용자그룹을 변경하면 되긴 하는데 이게 맞는건지 모르겠다. 좀더 조사중.

라라벨 시작하기 4 – Sail

Sail

라라벨은 Framework인데 기존 내가 아는 Framework가 아니다. 내가 생각하는 Framework는 특정 언어에서 개발을 시작할 때 MVC처럼 미리 틀을 만들어 놓고 그 틀에 맞춰 개발을 하면 되는 그런걸 생각하고 있었다. 내가 접한 대부분의 Framework가 그랬다.

codeigniter도 그랬고 Django, Flask도 그랬다. Node의 Express도 그렇고. 그런데 가만 생각해보니 스프링부트는 https://start.spring.io/ 라는걸 만들어놓고 Dependency를 추가하여 확장 가능하게 했다. 그러더니 라라벨은 Sail이란 커맨드 툴을 만들어 docker-compose 에 필요한 것들만 추가할 수 있게 했다. 실제 배포과정에선 이 부분을 어떻게 풀어나갈지 궁금하다.

사용 가능한 서비스는 mysqlpgsqlmariadbredismemcachedmeilisearchminioseleniummailpit 가 있다고 한다.

이중 meilisearch, minio, mailpit은 처음 보는 서비스라 여기에 정리해보자.

meilisearch

검색엔진이다. elastic search처럼 문서들로부터 빠른 검색을 해준다. 보통 elastic stack이라 해서 elastic search, logstash, kibana를 한데묶어 msa환경에서 로그통합을 하는데 이 meilisearch도 그런 용도로 사용할 수 있는건가? 슬쩍 봐선 그런 내용은 없는데.

찾아보니 meilisearch 서비스는 실시간 검색, 타이포에 특화되어 있어 사용자 경험에 맞춰져있다. 그리고 왠만한 언어를 지원해서 기존 서비스에 통합하기도 쉽다. 만약 내 서비스가 사용자 검색을 할 일이 있고 타이핑 와중에도 검색 내용이 시시각각 변하게 하고 싶으면서 오타가 발생해도 비슷한 내용을 검색결과로 보여주고 싶다면 이 서비스를 사용하는게 직접 개발하는 것보다 나을것이다. 그렇다곤 해도 이걸 실제로 써보지않으면 어떤 느낌인지 모르겠다. 이것도 나중에 알아보는걸로.

minio

오브젝트 관리 서비스이다. AWS S3와 완벽하게 호환된다. 오브젝트는 파일이다. 이미지, 문서 모든 것들이다. 이들을 관리하는 서비스이다. 당장은 쓸일이 있을까 싶다.

mailpit

메일 테스팅 도구라는데 이것도 뭔지 모르겠다.

WSL

라라벨을 쓰기 위해 WSL이 필요하다해서 정리한다.

이건 현재 설치된 리눅스이다. 내용을 보니 docker를 설치하며 두 개가 추가 됐고 Ubuntu, Ubuntu-22.04 이렇게 두 개가 추가됐는데 나의 행적을 생각해보니 뭣모르고 스토어에서 Ubuntu-22.04를 설치했고 나중에

wsl --install

이 명령어로 Ubuntu가 설치됐나보다.

그럼 Ubuntu는 버전이 뭐지?

버전이 같네. 그냥 두 개가 설치됐다. 스토어를 통해 설치한 Ubuntu-22.04는 삭제했다.

도커데스크탑을 설치하면 리눅스 두 개가 설치된다는걸 처음 알았다.

오늘은 여기까지.

라라벨 시작하기 3 – wsl

윈도우에서 시작하기

사실 윈도우에서 시작하기를 하지 않아도 얼마든지 위 커맨드만으로도 시작할 수 있다. 그런데 왜 윈도우에서 시작하기를 따로 만들었을까?

라라벨에서는 OS별 실행 방법을 별도로 알려주고 있다. 그리고 모두 도커가 설치되었다는걸 전제로 설명한다. 프로젝트 생성은 컴포저를 통해 할 수 있지만 이를 실행하려면 상황에 따라 디비도 있어야 할 것이고 기타 부가기능들이 필요할 것이다. 이를 모두 한 번에 해주는게 도커 커맨드라고 유추해보자. redis도 본거 같은데. mac도 결국은 도커로 돌린다. 로컬에서는 도커만한게 없는거 같다. 그리고 메모리를 많이 사용한다. 32G로 가고싶다.

curl -s "https://laravel.build/example-app" | bash

도커를 설치하고 나서 위 커맨드를 실행하면 example-app이란 폴더에 샘플프로젝트가 생성된다.

wsl2를 활성화 하라는데

https://learn.microsoft.com/en-us/windows/wsl/install

라라벨 설명서에도 있지만 먼저 여기 링크에 나온데로 실행하자

wsl --install

그럼 ubuntu가 설치되었다고 나오고 재시작하라고 나온다. 글 쓰는 도중 무심결에 재시작버튼을 눌렀더니 이미지가 날라가버렸.

wsl을 사용해보니 모르는게 너무 많았다. 이 부분은 따로 다루기로 한다.

오늘은 여기까지.

라라벨 시작하기 2 – composer

php를 배포하는건 아주 쉽다. 서버에 그냥 올리면 된다. 파일을. 빌드를 하는 과정이 없다. 파일을 변경해도 서버를 재시작 하지 않아도 된다. 이점은 서버를 유지보수하는 측면에서는 굉장한 강점이 있다. 특히 소규모에서 더더욱 그렇다. 또한 개발중일때도 빌드를 하지 않는점은 빌드시간 자체가 없어 개발속도가 매우 빠르다.

물론 좋은쪽으로 보면 그렇지. 모든건 상대적이라고 했던가. 컴파일, 빌드과정을 거치지 않으니 더 신경써야 한다. 빌드가 없다는건 컴퓨터의 도움을 받지 못한다는 말도 된다. 컴퓨터가 해주는 최소한의 검토과정이 없다는 말과도 같다. 그래도 요즘은 IDE가 잘돼있어 이부분은 어느정도 상쇄가 된다.

서버에서 직접 코드수정이 가능하다. 이것도 장점이면서 단점이 될 수 있다. 아니 PHP라는 언어의 특징이다. 장단점이라기엔 너무 호불호가 갈린다.

IDE를 서버에 연결하여 언제든지 코드 수정을 할 수 있는데, 개발중이라면 이는 그렇게 나쁘지 않으나 운영중에는 아주아주 위험하다. 언제든지 바꿀 수 있다는건 언제든지 바뀔 수 있다.

라라벨 설치

나는 윈도 환경에서 라라벨을 시작한다. php와 컴포저는 윈도 버전이 있으니 그걸 설치하면 된다.

라라벨을 커멘드로 실행하자 그럼

이런 에러가 난다. extension이 없어서 그런거 같다.

extension=zip
extension=fileinfo를 주석 해제했다.

설치가 완료 됐다.

라라벨을 글로벌로 설치하고 라라벨커맨드로 프로젝트를 실행시키면 이런 화면이 나온다.

컴포저로 생성하면 이렇게 할 거 같은데 확인은 다음에.

컴포저에서 바로 설치한 것과 글로벌설치후 커맨드로 설치한 것의 결과물이 다르다. 버전도 다르고. 커맨드에서 눈치챘어야 했는데 최초 내가 실행한 커맨드에 ^9.0이라는 버전이 있어 9.대 버전이 설치되었다. 글로벌 설치후 라라벨 커맨드로 실행한 신규프로젝트 생성은 최신버전이었고. 나중에 9.대와 10.대의 차이점도 찾아봐야겠다.

오늘은 여기까지.

라라벨 시작하기 1 – install

회사에서 PHP로 된 서버로 서비스중인 프로젝트가 있다. 그런데 이 코드는 그야말로 레거시. 이제 겨우 코드가 눈에 익어 어느 정도는 만질수 있는 수준이 됐다. 그럼에도 너무 복잡하다. 예전에 코드이그나이터를 사용하여 이것 저것 만들어 봤는데 이번엔 명성이 자자한 라라벨로 마이그레이션을 했으면 하는 원대한 꿈이 있다.

그래서 라라벨을 한번 경험해보고자 마음 먹었고 이왕이면 이 내용을 기록하여 미래의 내가 위기에 처했을때 도움이 되지 않을까 막연한 기대를 하며 시작한다.

https://laravel.kr/docs/9.x/installation

라라벨은 PHP의 프레임워크의 일종이다.

PHP는 참 거시기한 언어이다. 처음 배웠을땐 이거만큼 좋은 언어가 없었다. 너무 쉬웠다. 자바를 배우고 나서 PHP를 접했는데 몇 줄 적지 않아도 탁탁 되는게 신기했다. 그러다 여기저기서 문제점이 발생하기 시작했다. 변수를 할당하지 않았는데 에러가 나지않아 한참을 디버깅 해야 했다. 필요한 곳마다 Ctrl + c Ctrl + v로 코드를 복사해서 유지보수를 할 때 중복코드를 찾아 전부 바꿔야 했다. 나중에 안 거지만 시작이 쉽다고 좋은게 아니었다. 에러가 나지 않았던 이유는 귀찮다고 에러리포트를 전부 막아서였다. php도 클래스가 가능하단걸 나중에서야 알았다. 사용방법을 모르고 그냥 사용해서 생긴 문제들이었다.

다시 PHP를 사용할 기회가 되어 느낀점은 소규모 환경에선 이거만한 언어가 없다. 회사 프로젝트를 하며 그걸 피부로 느낀다. 물론 그 편리함에 기대에 무분별하게 사용하면 대참사가 예고되어 있으니 조심해서 사용해야 한다.

쓸때없이 이야기가 샜다.

설치 방법이야 저 위 링크에 다 있으니 나는 내가 겪으며 느낀점을 정리하려고 한다. 다음에.