안녕하세요! 시작하기 전에 참고사항... 오랫동안 글을 쓰지 않았습니다. 나는 오랫동안 그렇게 하겠다고 위협해왔고, 마침내 이것이 다른 어떤 주제보다도 시작하기에 좋은 주제라는 것을 깨달았습니다. 조금 녹슬었지만 계속해서 개선해 나가도록 노력하겠습니다.
EventPress는 아마도 제가 작업하는 가장 큰 작업일 것입니다. 저는 처음부터 참여해 왔으며 지난 10년 동안 3가지 주요 버전을 통해 앱이 기하급수적으로 성장했습니다. 버전 4가 현재 준비 중이며 작업하면서 변경하고 싶은 몇 가지 변경 사항이 있습니다.
먼저, 약간의 역사입니다. EventPress는 HotPress Media 소유이며 고객이 Excel 스프레드시트를 대체할 수 있는 이벤트 회신 관리에 대한 간단한 솔루션을 요청했기 때문에 시작되었습니다. EventPress의 첫 번째 버전은 추악했습니다. 스펙도 없었고, 적절한 계획도 없이 프로젝트를 진행했는데 결국 거대한 스파게티 한 그릇이 나왔습니다. 하지만 그것은 효과가 있었고 남아프리카 최대 규모의 회사 중 하나에 발을 들여놓는 데 도움이 되었습니다.
버전 2는 큰 도약이었습니다. 인터페이스 방식은 크게 바뀌지 않았지만, 기본 프레임워크는 큰 변화를 겪었습니다. EventPress는 Laravel(당시 버전 5)로 이전되었으며, 버전 1의 많은 코드가 버전 2에서 나왔지만 구조는 훨씬 더 좋았고 문제도 훨씬 적었습니다. 그 당시에는 아직 어떤 종류의 테스트 스위트도 없었고 기본적으로 "내 컴퓨터에서 작동"하는 방식으로 테스트했습니다. 좋지 않아요.
버전 3에서는 UI가 완전히 개편되었으며 Tailwind가 선호하는 CSS 프레임워크가 되었습니다. 상당량의 버전 1 코드가 여전히 어두운 구석에 숨겨져 있음에도 불구하고 많은 코드가 변경되었습니다. 버전 3의 큰 변화는 완전히 새로운 배포 시스템이었습니다. 우리는 전환 과정에서 대량 메일 발송에 대해 많은 것을 배웠습니다.
대중이 접하는 UI의 대부분은 버전 2에서 직접 복사한 것입니다. 지금도 참석자들이 보는 것의 대부분은 여전히 버전 2 코드입니다. 대신 버전 3에서는 코드 기반에 훨씬 더 많은 구조를 가져왔습니다. 어떤 논리가 나오기 시작했습니다. 우리는 얇은 컨트롤러를 작성하고 서비스 컨테이너에 크게 의존했습니다. 버전 3은 테스트 스위트를 자랑하는 EventPress의 첫 번째 버전이기도 합니다.
저는 오랫동안 PHP 코드를 작성해 왔지만 독학했습니다. EventPress는 수영 방법에 대한 지시 없이 깊은 바다에 던져진 것과 같았습니다. 그것은 엄청난 학습 곡선이었지만 오늘날의 제가 있게 되었습니다. 다른 개발자의 의견을 거의 반영하지 않고 제가 직접 만들었습니다.
이번에는 EventPress 4 개발 과정을 블로그에 올리려고 합니다. 승인을 구해서가 아니라 이번에는 녹음하고 싶어서요. 그리고 어쩌면 내 솔루션이 다른 솔로 개발자에게 도움이 될 수도 있습니다. 저는 대규모 PHP 애플리케이션을 구축하고 실행하는 방법에 대해 많은 것을 배웠습니다.
EventPress 4는 대대적으로 재작성될 예정입니다. 많은 EventPress 3 코드가 버전 4에 포함되지만 단순히 복사하여 붙여넣기만 하면 되는 것은 아닙니다. 이제 버전 1 이후로 남아 있던 모든 오래된 부분을 마침내 제거해야 할 때라고 생각합니다. 나는 좀 더 강력한 테스트 스위트를 원합니다. 그리고 좀 더 새로운 기술을 활용하고 싶습니다.
이 일을 하면서 최소한 한 달에 한 번은 글을 쓰는 것이 제 계획입니다. 억지로라도 지켜보도록 할게요.
그러니 먼저 전투에 참여하세요...
EventPress 4에는 새로운 UI가 제공되지 않습니다. 우리는 버전 3의 거의 모든 인터페이스를 사용할 것이며 아마도 여기저기서 몇 가지 사소한 변경 사항만 사용할 것입니다. EventPress의 UI는 Vue 3를 사용하여 구축되었으며 Tailwind와 Inertia는 우리가 선택한 접착제입니다.
EventPress 4는 버전 3의 일대일 기능 복사본이 될 것입니다. 이는 버전 3이 향후 몇 달 동안 발전함에 따라 버전 4도 함께 성장해야 함을 의미합니다. 하지만 지금은 단지 약간의 계획만 있을 뿐입니다.
우선 버전 3에서 여전히 어려움을 겪고 있는 부분을 살펴보고 버전 4에서 이러한 요소를 어떻게 개선할 수 있는지에 대해 몇 가지 메모를 했습니다. 저는 이 버전의 구축에 어떻게 접근하고 싶은지에 대한 아이디어를 구축했습니다. 이벤트프레스. 친숙한 부분도 있고 완전히 새로운 부분도 있습니다.
여기에는 몇 가지 흥미로운 선택 사항이 있다는 것을 알고 있습니다. Octane은 이전에 그런 것을 사용해 본 적이 없기 때문에 우리에게 큰 것입니다. Octane은 PHP 애플리케이션 서버에서 앱을 실행하는 데 도움이 되는 Laravel용 자사 패키지입니다. Swoole, RoadRunner 및 FrankenPHP가 지원됩니다. 우리는 세 가지 옵션을 모두 살펴본 후 FrankenPHP를 선택했습니다. 다른 두 제품보다 최신이지만 정말 뛰어난 성능을 제공합니다. Swoole의 제안에는 동시 작업자가 있습니다. 이는 좋지만 우리가 필요하다고 생각하는 것은 아닙니다. 그러나 딜 브레이커는 Swoole 확장을 설치해야 한다는 것입니다. 이는 기업 고객이 하기를 기대할 수 있는 일이 아닙니다. 저도 FrankenPHP를 사용해본 경험이 있으니 이해가 되네요.
우리는 수년 동안 Nginx를 사용해 왔습니다. 훌륭하고 충분히 추천할 수 없습니다. 그러나 FrankenPHP에는 자체 Caddy 서버가 포함되어 있으므로 이를 실험하고 있습니다. 우리는 캐디를 고수하지 않을 수도 있지만 지금은 목록에 있습니다.
PHP 8.4는 아직 출시되지 않았지만 EventPress 4는 한동안 출시되지 않을 예정이므로 가능한 최신 버전에서 시작하는 것이 합리적이었습니다. 글을 쓰는 시점에서 PHP 8.4 출시가 한 달 정도 남았기 때문에 최신 출시 후보를 사용하고 있습니다.
InertiaJS 2도 거의 같은 이야기입니다. 베타 버전이기도 하지만 출시까지는 아직 멀기 때문에 아마도 EventPress가 출시되기 훨씬 전에 출시될 것입니다. 게다가 우리는 오랫동안 문제 없이 InertiaJS 1을 베타 버전으로 실행했습니다.
저는 최근 정적 분석으로 전환했습니다. 제가 가장 많이 사용한 것은 PHPStorm이 코딩할 때 제공하는 것입니다. EventPress 4의 경우 우리는 완전히 집중하여 PHPStan을 혼합하기로 결정했습니다. PHPStan은 타사 PHP용 정적 분석기입니다. 구성이 매우 간단하고 다른 여러 프로젝트에서 몇 가지 버그를 제거하는 데 도움이 되었습니다.
EventPress의 크기를 기준으로 여기에서도 의미가 있습니다. 이 작업을 수행하기 위해 원할 때마다 실행할 수 있고 CI 스크립트에 추가할 수 있는 test:types Composer 스크립트를 추가했습니다.
저는 PHP 코드 린터를 실행한 적이 없습니다. 나는 PHP Mess Detector를 몇 번 사용해 보았지만 실제로는 그것에 얽매이지 않았습니다. EventPress 4의 경우 Linter가 코드를 깔끔하고 일관되게 유지하는 데 도움이 될 것이라고 결정했습니다. 우리는 PHP-CS-Fixer를 감싸는 래퍼이자 코드를 깔끔하게 유지하는 간단한 방법을 제공하는 Laravel의 "Pint"를 선택했습니다. 다시 한 번 더 쉽게 실행할 수 있도록 lint 및 test:lint Composer 스크립트를 추가했습니다.
개발 중에는 Mac과 Linux 시스템 모두에서 작업합니다. 내 책상에는 몇 년 동안 사용했던 M1 Max가 있고, 사무실 여기저기에는 Linux 컴퓨터 몇 대가 흩어져 있습니다. 내 주요 드라이버는 Mac이고 대부분의 개발 작업을 Mac에서 수행하지만 모든 코드는 Linux 시스템에서 실행됩니다. 보통 우분투 서버입니다.
EventPress 4는 퍼즐에 몇 가지 새로운 조각을 추가하지만 대부분은 현재 방식대로 계속 개발할 수 있다고 생각합니다. 저는 Homebrew를 사용하여 대부분의 도구를 설치하고 Laravel Valet을 사용하여 로컬 개발 환경을 실행합니다. 저는 Laravel Herd 사용자가 아닙니다(좋습니다. 하지만 저는 Herd Pro 사용자에 더 가깝습니다. 이미 할 수 있는 모든 작업을 조금 더 빠르게 수행하는 도구에 연간 99달러를 지출하는 것을 정당화할 수 없습니다. 좋은 UI).
그래서 내 계획은 내 로컬 컴퓨터에서 MySQL 데이터베이스와 함께 실행되는 eventpress4.test 도메인을 갖는 것입니다. 저는 초기 개발 동안 한동안 이 상태를 사용할 것이며 며칠마다 Octane으로 테스트를 수행할 것입니다. 초기 단계를 마치면 Octane을 더 정기적으로 사용하여 개발을 시작할 것입니다. 프로덕션 환경에서 실행될 예정이므로 앱을 실행하는 테스트 서버를 호스팅할 예정입니다.
EventPress는 컨테이너화된 적이 없습니다. 그러나 EventPress 4는 그런 식으로 진행될 가능성이 높습니다. 우리는 여전히 몇 가지 실험을 하고 있지만 일부 기업 고객과 대화를 나눴으며 이것이 배포 프로세스를 훨씬 더 쉽게 만드는 데 도움이 될 것이라고 생각합니다. Docker 컨테이너에서 EventPress 3을 실행하는 몇 가지 초기 테스트를 진행했으며 이것이 앞으로의 모든 EventPress 릴리스에 적합한 조치가 될 것이라고 생각합니다.
수년 동안 우리는 CI/CD 서비스로 GitLab에 크게 의존해 왔습니다. GitLab은 다수의 복잡한 CI 파이프라인을 실행하고 제가 작업하는 거의 모든 프로젝트에 대한 배포를 수행합니다.
하지만 저는 수년간 GitHub 사용자이기도 했습니다. 나는 주로 오픈 소스 작업에 그것을 사용했지만 최근 일부 소규모 프로젝트를 유료 GitHub 계정으로 옮기기 시작했고 매우 감동 받았습니다. GitLab과 매우 다르게 작동하는 점이 몇 가지 있지만 대부분의 측면에서는 정말 만족스럽습니다.
따라서 EventPress 4 코드는 GitHub에서 호스팅되며 CI 파이프라인 및 모든 배포에 작업을 사용하게 됩니다.
이번 포스팅은 여기까지인 것 같습니다. 아직 진행할 계획이 있지만 일부 코드를 작성하고 테스트를 작성하기 시작했습니다. 나는 이미 기본 인증 레이어를 갖고 있지만(Laravel에게 감사드립니다), 대부분은 EventPress 3과 유사합니다. 다음 코드에서 몇 가지 코드를 보여드리겠습니다. 약속해요!
위 내용은 EventPress 파트 1 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!