그때 | 지금 | 이후에
Source: Dev.to
tūm (pronounced /tuːm/) — “그때”, “그 순간”; 한때였던 것과 시작을 형성한 순간들을 되돌아보는 시선.
mŏdō (pronounced /ˈmɔ.doː/) — “지금 막”, “바로 지금”; 현재에 뿌리를 두고, 모든 것을 평가하는 명확함의 지점.
postĕā (pronounced /ˈpɔs.tɛ.aː/) — “그 후에”, “나중에”; 이 순간부터 앞으로 펼쳐질 가능성을 바라보는 전향적인 시각.
제가 이 작은 블로그에 다시 흥미를 불러일으킨 것도, 그리고 거의 크리스마스가 다가온 것도, 조금은 찰스 디킨스적인 분위기로 과거·현재·미래를 살펴볼 좋은 시점이라고 생각합니다. 이 글을 다시 꺼낸 이유 중 하나는 몇 년째 일하고 있던 직장에서 어느 정도 안착했고, 이제는 모두를 따라잡으려 애쓰지 않아도 되는 여유가 생겼기 때문입니다. 따라잡기 루프에 있었던 것이 나쁜 일은 아니었어요—그 덕분에 톤 만큼 배우고 웹 개발자로서 실력을 크게 늘릴 수 있었거든요. 그래서 제가 처음 시작했을 때와 현재를 솔직히 평가하고, 그다음에 어떤 길을 걸어갈지 살펴보는 것이 의미 있는 연습이라고 생각합니다.
Then
2023년 11월, 저는 Fusions PIM Ltd에서의 첫 교육을 받기 위해 업무 차 영국으로 첫 비행을 했습니다. 이미 몇 년간 웹 개발과 Laravel을 해왔기 때문에 완전히 초보자는 아니었습니다. 당시 제 이력서에는 다음과 같은 핵심 기술이 적혀 있었습니다:
-
Laravel (경력 2년)
- 기존 프로젝트에 고객이 요청한 기능 추가
- 구독 기반 소매 회사를 위한 CRM 및 지식 베이스를 처음부터 구축
-
Docker
- 개발 컨테이너 작업에 익숙함
- 베어 서버에 Docker화된 웹 애플리케이션 호스팅
- 컨테이너를 이용해 다양한 기술 스택 요소를 “시도”
-
Open Source
- 초보자에게 OSS를 체험할 기회를 제공하는 작은 웹 크롤러 프로젝트 시작 및 관리
솔직히 말하면, 제가 이 분야에 처음 발을 들인 것은 2021년에 첫 Laracasts 튜토리얼을 했을 때였으니 나쁜 시작은 아니었습니다. 하지만 실제 현장에서의 경험과 산업에 미친 영향은 미미했겠죠. 돌아보면, 이렇게 오래된 회사가 저에게 기회를 줬다는 것이 아직도 조금 놀랍고, 정말 감사하게 생각합니다.
경험이 부족한 대신 저는 부드러운 스킬, 즉 명확한 커뮤니케이션, 어리석은 질문을 두려워하지 않는 자세, 그리고 끊임없이 수준을 끌어올리려는 자세로 보완하려 했습니다. 이전 직장들에서는 스스로와 업무량을 관리할 자유가 많았고, 여기에서도 상황은 달라지지 않았습니다. 회사가 고객 투명성과 협업을 위해 더 “조직화”돼야 했지만, 저는 언제든지 새로운 동료에게 조언이나 도움을 요청할 수 있었고, 여전히 읽고 또 읽을 시간이 있었습니다.
제가 현재 작업하고 있는 코드베이스는 제가 PHP 함수를 하나도 배우기 전부터 존재했습니다. 몇몇 클래스는 수년 전 문법을 그대로 사용하고 있었는데, 진정한 레거시 괴물이라 할 수 있었습니다. 대부분은 Laravel 앱으로 전환됐지만, 비즈니스에 너무 근본적인 오래된 특이점들은 변경 위험이 커서 그대로 남아 있었습니다. 마치 시간 균열에 갇힌 느낌이었지만, 그때는 깨닫지 못한 장점이 많았습니다.
진행 중인 전환 작업의 맥락
- 애플리케이션은 처음부터 Laravel 앱과 매우 유사한 구조를 가지고 있었습니다.
- Laravel이 기반으로 삼고 있는 Symfony 컴포넌트들이 이미 사용되고 있었습니다.
- 가장 큰 차이는 오래된 보안 관행들이었습니다.
Now
몇 년이 흐른 뒤, 그 신비롭고 거대한 PHP 애플리케이션은 동료들의 노력(오래된 동료와 새로운 동료 모두)과 저 덕분에 거의 100 % 현대적인 Laravel 앱으로 전환되었습니다. 이 전환에 참여하면서 가장 크게 얻은 교훈은 남은 부분이 가장 도전적이었기 때문에 Laravel 프레임워크에 대한 깊은 이해가 필요했다는 점이었습니다. 제가 가장 많이 파고든 영역은 Eloquent와 Commands였지만, 프레임워크 전체 코드베이스를 거의 다 탐색했습니다.
Eloquent
오래된 코드베이스는 다음과 같은 고전적인 PHP 구문을 사용했습니다:
$sql = "SELECT * FROM `some_table` WHERE `x` = 'y'";
덕분에 원시 SQL을 읽고 이해하며 Eloquent 쿼리로 다시 작성하는 연습을 많이 했습니다. 애플리케이션의 많은 부분이 모델 관계를 기반으로 한 검색 필터링을 포함하고 있었기에, 관계 정의와 쿼리 사용을 마스터해야 했습니다. 연도마다 Eloquent 관계 쿼리 메서드가 개선되었고, 저는 성능 및 개발자 경험을 동시에 향상시킬 방법을 계속 제시받았습니다.
Eloquent에서 제가 가장 사랑하는 점은 특히 관계 부분에서 가독성이 뛰어나다는 것입니다. 다음과 같은 메서드가 있으면:
withWhereHas('relation', fn ($query) => $query->condition())
무슨 결과가 나올지 정확히 알 수 있어 별로 고민할 필요가 없습니다.
Commands
Symfony에 대한 제 애정은 한계가 없습니다. 저는 문서 트렌치를 콘솔 부분만이라도 파고들었고, 그 단순함이 얼마나 근본적으로 유지되고 있는지 정말 멋지다고 생각합니다. 제 생각에 Laravel은 차용한 부분에서 그 단순함을 어느 정도 가려버렸습니다. 예를 들어, 테스트 헬퍼를 결합할 때:
$this->artisan(Command::class)->expectsTable([...])
Laravel은 테이블 스타일링을 정의했을 것이라고 크게 가정합니다. 정의하지 않았다면, Laravel의 기본 테이블 스타일이 Symfony와 다르기 때문에 테스트가 왜 실패하는지 순간적으로 당황하게 됩니다 🫤.
이러한 작은 특이점들을 제외하면, 커맨드의 기능은 환상적이며 나중에 탐구할 몇 가지 추측적인 생각을 불러일으키기도 했습니다.
Overall
코드를 작성하고, 높은 품질의 코드를 많이 읽고 리뷰하면서 문제 해결 시 제 스타일과 사고 과정이 크게 향상되었습니다. 현재 위치에 만족하지만, 스스로 개선할 여지가 있다는 점을 분명히 인식하고 앞으로도 계속 추구할 것입니다.
업무 외에도 CodeWars와 같은 활동으로 꾸준히 연습하고 있으며, PHP와 SQL 외에도 Bash와 Go, 최근에는 C++까지 언어에 대한 흥미를 유지하려고 노력하고 있습니다. 이런 편안한 수준에 도달했기 때문에 작은 사이드 프로젝트를 시작했고, 다시 글을 쓰는 일을 유지하고 싶습니다. 이는 제 이해도를 높이는 데 확실히 도움이 되었으니까요.