안녕하세요! 접근성 및 효율성 컨설팅에서 공식적으로 "은퇴"했지만, 여전히 일을 제안하는 사람들이 문을 두드리고 있습니다. 어느 측면에서는 필요로 하는 느낌을 받는 것이 좋지만, 때로는 사람들이 나를 조용히 둬주기를 진심으로 바랍니다. 정말 무엇이 무엇인지는 그 날의 건강 상태에 따라 더 많이 결정됩니다.
이 사람들의 제품 시장을 어느 정도 아는 편이었기에 흥미로워 보였습니다. 실제로 그들은 제가 2000년대 중반에 많은 작업을 한 회사와 경쟁사입니다. 말 그대로 그들은 성인용 실리콘 및 고무 제품을 제조 및 판매합니다.
그들의 창립자/소유자가 직접 나에게 연락을 취했고, 세 가지에 대해 흥미로웠습니다.
- 현금을 선불로 제안하여 상담을 받고 잘못된 점을 평가하고, 수행해야 할 작업에 대한 내 생각을 설명해주는 것. 일자리에 대해 매우 관대한 금액도 제시했습니다. 단순한 변경으로 문제를 해결할 수 있다면 더 많은 돈을 더해줄 의향이 있습니다. 일부 변경이 쉽지 않을 수 있다고 경고했는데도 괜찮다고 하더군요. 도와주면 도와준 만큼 보상을 받는 것이죠.
- 그들은 저에게 이 상담을 위해서 관리자 액세스를 제공하기로 했습니다. 일반적으로 사람들이 이것을 얻기 위해 앞잡이를 해야 하는데, 이는 이 비즈니스가 어떤 랜덤한 사람에게 자유롭게 내주어야 하는 정보가 아닙니다.
- 정말로 패튼에 인용하여 "더러운 쪽으로 두 배로" 주라고 요청했었는데, 그는 "오후 차를 마시는 자리의 노인 아주머니가 아닌데"라며 말했습니다.
기본적으로 그는 자신의 직원들이 그에게서 숨기고 있는 것을 의심하기 때문에 그에게는 어떤 정직한 솔루션이 필요합니다. 지난 몇 달간 그는 특정 직원들이 그에게 거짓말을 하는 것 같다고 느꼈습니다. 찬양만 하는 사람들을 고용하는 문제는, 자신의 부족함을 숨겨야 하는 "프레임워크 개발자"와 같은 업계 때문에 더욱 악화되고 있습니다.
또한 선불 결제 부분과 "구두쇠 장갑을 끼고 부탁하는 자세"는 많은 "전문가"들이 이 업계에 20피트 길이의 딜도로 가지 않는 만큼 어떤 영향이 있는 것으로 보입니다. 저는 그렇게 일률적인 사람은 아닙니다... 아마 조금 유쾌하게 유연하다고 할 수 있을 것 같네요.
그래서... 이건 바로 별이 맞다고 생각해. 내 도움이 필요한 건 아니라고 느끼는 사람이 아니라, 사실 내가 얻고 싶은 사람, 내가 가치를 받을 준비가 되어 있다. 그러지 말았으면 하는 것은 "도움 요청"하는 비즈니스맨이 많은 나 같은 사람처럼, 가짜 미소와 달콤한 시럽 단어로 감싸면 아무거나 믿는 "유독한 긍정" 사이비 요법들이 아니면 좋겠다.
그래서 그 문제에 대해 글을 쓰는 것이 괜찮냐고 물어보니까, 그는 이름은 언급하지 않는 한 괜찮다고 했어. 나는 이야기할 가치가 있는 흥미로운 여정이었어.
가장 흥미로운 부분은 그가 6명의 스태프를 전문적으로 웹 콘텐츠 관리하는 데 일일이 고용하고 있었다는 것이었어. 이것은 1년에 한 번 수정되는 두 개월 전에 수정할 수 있는 한 두명의 사람이 맡을 수 있는 수십 개의 정적 페이지, 오래된 버전의 매젬토 설치, 그리고 문의 양식이라는 내용에서 다소 의아함을 불러일으켰어. 아마도 내가 추천하는 대로 컨텐츠를 전문적으로 관리하고 업데이트하는 전문가와 소프트웨어 업데이트 유지 및 필요 시 새로운 페이지를 만들기 위한 파트 타이머/계약 개발자 한 명 또는 두 명 정도가 처리할 작업일 것 같아서 말이야.
수익이 손해를 보고 있는 일에 더 많은 인력을 요청하는 것은 과거에 그 일을 모두 처리해온 한 명의 사람으로부터 단 3년 전에는 수익성이 있었음에도 불구하고 그의 사기를 자극시켰다. 따라서 IT 담당자가 계속 전문가들을 추가하도록 해두지 않고 내 의견을 듣기 위해 내게 찾아왔던 것이었어.
문제점들
많은 사이트 소유자들이 간과하는 것은 그들이 알고 있는 문제점이 원인이 아니라 증상이라는 것입니다. 내가 그로부터 받은 문제의 목록은 다음과 같았습니다. 대부분의 문제는 실제로 최근 6개에서 8개월 사이에 발생한 것입니다.
- 사이트가 항상 느리며, 페이지 로딩 시간이 40초 이상 걸릴 때가 있습니다.
- 월요일에는 항상 사용 가능하지만 화요일의 첫 절반까지는 좋지만, 수요일부터는 시간초과가 자주 발생할 정도로 점차 나빠집니다. 전에 본 적이 있는 큰 경고 신호입니다.
- 접근성 관련 불평, 공개 및 내부용으로 사용되는 도구이기 때문에 나온 것인데, 줌 기능이 제대로 작동하지 않고 글ꔵ크기가 맞지 않으며, 모바일 친화적인 요소가 전혀 없다는 것도 포함됩니다. 코드베이스의 나이를 고려하면 이 부분이 놀랍지 않습니다.
- 비슷한 사이트를 호스팅하고 있는 많은 사람들이 그가 그 사이트가 어떤 목적을 위해 존재하는지 고려할 때 호스팅 비용을 너무 많이 지불하고 있다고 얘기했습니다.
그래서 나는 그가 가지고 있는 것이 무엇인지 물었더니, 정적 파일용으로 lightppd를 실행하는 저렴한 VPS와 데이터 처리를 위한 비싼 전용 서버(16코어, 32 스레드, 32 기가 바이트 RAM)가 있었습니다.
후자는 당신의 현재 트래픽으로 인해 싓지 않을 것이라고 이해된다. 모든 것을 다 처리할 수 있어야 합니다!
왜 이전에 실제 문제가 발생하지 않았는지 의문이 듭니다. 대답은 간단합니다. 그들의 대부분 판매는 이베이와 아마존을 통해 이루어지고 있고, 자사 웹사이트로부터의 판매는 원래 비슷했지만 두 년전 다른 판매처들이 계속해서 판매량을 올리기 시작했기 때문에 자사 사이트의 우선순위가 낮아졌습니다. 그러나 지금은 웹 존재를 담당할 새로운 매니저를 고용했기 때문에 자사 판매가 감소했습니다. 자사 웹사이트가 "모든 것을 개선했다"고 주장하는데도 불구하고요.
이 매니저가 더 많은 돈을 들이는 두 명의 "신뢰하는 친구"를 요청하고 받아들인 결과는 판매량 증가 없는 더 많은 비용을 지불한 것입니다.
하지만 그것들은 증상일 뿐, 원인은 무엇인가요?
서버 부하 문제
서버에 "전체 액세스"를 획득한 후 가장 먼저 한 일은 CPU 및 IO가 어떻게 동작하는지 확인하기 위해 TOP을 확인하는 것이었습니다. 부하가 실제로 어디서 오는지 살펴볼 때 Top은 중요한 도구입니다. VPS는 아무것도 하지 않았고, 더 이상 이상한 점은 그를 통해 트래픽이 사실상 없었으며, 때때로 다른 서버의 IP에서만 "끌어들였습니다". 그러나 비싼 "전용 서버"가 더 그렇게 BS 경보를 켰습니다.
Top이 "부하"에 대해 4.8/6.4/7.3, 모든 코어의 100%, 더구나 가장 최악은 1시간에 겨우 50명이 통과하는 사이트에서 100% IOWAIT를 보여준다면? 문제가 있습니다! 그리고 이런 것을 이전에 본 적이 있습니다... 그리고 이것의 주요 원인은 새로운 PHP 버전으로 업그레이드할 때 나오는 오류 및 경고를 억제하는 사람들입니다.
PHP가 허용하는 가장 어리석은 일 중 하나는 클라이언트 측 오류를 억제할 수 있게 하는 것입니다. 이것을 억제하는 것이 얼마나 어리석은지 알면, 더 어리석은 개발자가 그것을 인식하지 못한 상태에서 사용한다는 점입니다! 따라서 PHP를 제거하려고 하는 모든 것이 경고를 표시하면 게으른 개발자들은 새로운 기술로 코드를 업데이트하거나 그냥 모든 것 앞에 "@" 기호를 쓸까요?
/var/log으로 가려니 다행히 제 시간에 도착했네요. (주장에 의하면) 거울이 걸린 SSD 스토리지 용량이 2TB 밖에 없었고, 로그 아카이브에는 1.2TB가 있었어요. 그 중 가장 오래된 것은 10개월도 안 된 거예요 — 문제가 시작된 시기쯤, 그가 말한 그 때쯤이죠. 그들 중 한 명이 PHP 5.6 뭐시기로 업데이트한 후 문제가 시작되었대요.
물론이지만, 그들의 게으른 뒷담을 업데이트해서 PHP 4.5에서 PHP 7/최신 버전으로 갱신하는 건 불가능하죠. 물론이지, 그건 당신이 제대로 일을 해야 하는 건데 말이에요!
IOWAIT가 발생하는 이유는 로그 파일이 너무 커져서 페이지 요청당 200건 이상의 오류와 경고를 출력하는 데 영원히 걸리고 동일한 동작을 하는 다른 인스턴스들과 충돌하고 있었기 때문이에요. 더 나아가 어떤 이유에서인지 5분마다 실행되던 이전 세션을 비워내는 크론 작업이 오류를 만들어내고 있었어요!
그래서 그가 저에게 전체 권한을 줘서 현재 로그 파일의 이름을 바꾸고 압축을 했더니, 그가 월요일 아침에 설명한 대로 잘 작동했어요. 알아요, GMT 시간으로 월요일 아침 9시마다 무엇이 예약되어 있었나요? 로그 백업이죠. 매주 월요일 아침에 반 기가 용량의 백업 파일 이름을 변경하고, 압축하고, 새로운 로그를 만들었어요. 새롭고 깨끗한 작은 로그 파일, 빠른 로깅. 로그가 커지면, 기계가 세포투사를 하게 돼요.
그런 다음 한 달 이전의 모든 로그를 다운로드하고 삭제했습니다. 그로 인해 그의 호스팅 공간에 1테라바이트의 공간이 확보되었습니다. 그런 다음 로그를 백업하고 압축하는 크론 작업을 매일로 변경했습니다. 이것은 적어도 사이트를 운영할 수 있도록 일단 해결책입니다. 하루를 평가해보니 백업이 진행되기 전에 여전히 IOWAIT가 60%까지 올라갔습니다. 그렇게 좋은 상황은 아닙니다만, 적어도 사용자들이 필요한 작업을 할 수 있도록 합니다. 더 이상 타임아웃과 408 에러가 발생하지 않습니다.
클라이언트와 서버 부하
충분한 I/O 자원이 있음에도 불구하고 CPU 사용률이 매우 높았고 사이트가 지나치게 느려졌습니다. 그래서 다음으로 Firefox에서 사이트를 열고 네트워크 평가를 수행했습니다.
하나의 파일. 엄청나고 거대한 파일 하나. 그들의 페이지에 대한 모든 것이 단일 거대한 HTML 파일로 공급되고 있습니다. 정적 파일 서버가 그의 엉덩이에 엄지 손가락을 꼽고 앉아 있는 것이 놀라울 것이 없네요. 그리고 이번에 처음으로 그 거북 아이콘을 보는군요, FF가 무언가를 말하려고 하는 것인가요?
그리고 정말 웃긴 것은 모든 것이 압축되어 있다는 겁니다.
사이트를 "더 나은" 상태로 만들기 위해, 그의 주요 웹 개발자는 손잡이 횟수를 줄이고 모든 것을 정적 파일로 저장하는 것이 천재적일 것이라고 생각했던 것 같습니다. 서버 측 캐싱에 대해서는 찬성합니다만, 부수적 서버들 사용, 클라이언트 측 캐싱, 그리고 동시성을 제거하는 방법으로 이를 낭비하지 마십시오. 더 나빠진 점은, 그의 정적 전송이 gzipped 복사본을 저장하지 않았다는 것이고, 그리고, 음… 몇몇분들이 이것을 아시는지 모르겠지만...
HTTP 서버는 파일의 gzip 압축된 복사본을 캐시하지 않습니다!
서버에서 파일을 요청하고 응답이 압축된 경우, 해당 압축은 그 즉시 이뤄집니다. 그러면 IOWait와 CPU 부하가 더 많이 발생합니다! 모든 페이지 접근 시 12 메가바이트 파일을 실시간으로 압축하는 건 조금 고통스럽기도 하죠? 어머나 에어파덥!
하지만 더 나빠집니다...
그 '캐싱'은 실제로는 아닙니다. 문제 시스템에 동적 보안 요소가 마크업에 포함되어 있는 경우, 수행되던 것은 "캐시"가 다른 디렉토리에 파일의 복사본일 뿐이었고 보안 토큰을 정적 시스템이 만드는 것처럼 재현하는 코드로 요청 시에 파일들이 서로 붙여졌습니다. 이미지는 base64로 인코딩되어 추가되며, 최소화는 (제가 사용하는 것보다 훨씬 복잡한) 정규식을 사용하여 적용되며, base64로 인코딩된 이미지가 추가된 후에도 최소화가 진행되어 메모리 부담이 매우 커지게 됩니다.
메모리 사용량은 많은 사람들이 고려하지 않는 부분입니다. 새 문자열을 만드는 모든 작업(두 문자열을 추가하는 것조차도)마다 큰 오버헤드와 CPU에 많은 작업이 발생합니다. 이것이 PHP에서 쉼표로 구분된 echo가 문자열 추가보다 우세한 이유입니다. 소스에서 문자열이 복사되지 않고 그대로 사용되기 때문입니다. 그러나 출력 버퍼링을 사용하면 여전히 복사가 이뤄지기 때문에, 세 개 이상이 아닌 두 개의 복사가 있는 것이 더 나은 방법입니다.
일반적으로 RAM이 저렴하고 빠르기 때문에 이런 문제는 큰 문제가 되지 않지만, 이처럼 혼란스러운 경우에는 문제가 더 커집니다. 개발자로서 우리 중 많은 사람들은 큰 문제가 아닌 것이 된다가 다른 문제들이 발생하면 큰 문제가 될 수 있습니다!
특히 압축과 같은 무거운 CPU 작업이 개입되면 더 그렇습니다. 일반적으로 압축은 느린 대역폭을 적게 사용하여 시간을 절약해 줍니다. 메모리는 빠르고, CPU는 빠르지만 네트워킹은 그렇지 않습니다. 네트워킹을 저장하기 위해 CPU를 희생하는 것입니다. 그러나 이 경우 많은 작업이 이동되고, 조작되며, 그냥 무엇인가를 바꾸는 등 네트워킹을 위한 것이 아닌 CPU를 포기한다는 점 때문에 유일한 해결책은 모두 끄는 것이었습니다.
놀랍게도 기본 웹사이트는 여전히 그대로 유지되었습니다. 이 모든 어리석은 것들은 "compressor.php" 스크립트로 리디렉트 되는 rewriteRule에 의해 동작되는 것이었습니다.
페이지가 거의 신뢰할 수 없거나 사용하기 어려울 정도로 나쁜 상태였기 때문에 제가 한 용기로, 그 리디렉트를 제거하고 원래대로 사이트가 잘 작동하는지 확인해 보았는데, 예상대로 잘 작동했고 급속히 발전했습니다. "최적화"하기 위해 시도한 것을 제거하니, 여러 번 더 빠르게 동작했습니다.
아무것도 하지 않고 있던 정적 파일 호스팅 VPS가 실제로 파일을 제공하기 시작했어요!
더 재미있는 건, 이 "compressor.php" 파일이 PHP 오류의 2/3를 차지했단 거예요. 그 코드가 바보 같은 거 하지 않았을 뿐만 아니라, 속도 최적화를 위한 반대로 동작하는 것이었을 뿐만 아니라, 쓸데없이 작성되어 "꽝" 오류 억제로 가득 차 있었네요... 아무래도 이걸 쓴 바보들에 대한 생각을 표현할 때 예의가 없는 말이 필요한 것 같아요.
솔직히 말해 "바보 같은 두 배, 어이 없는 두 배"라고 자주 언급하는 사이트 이후로 이렇게 어리석은 걸 본 적이 없어요. 부트크랩과 페일윈드를 동시에 사용하려는 바보가 있었던 그 사이트 말이죠.
지금까지는 잘 되고 있어요...
컨텐츠, 마크업, 이미지 또는 실제 기반이 되는 시스템을 직접 건드리지 않은 채로, 평균 페이지 로드 시간을 15초로 줄였어요. 이전에는 몇 번 시간이 초과해서 타임아웃이 되는 경우가 많았는데요. 기존 팀의 "노력"이 모두 개발의 훌륭한 "3i"에서 이루어졌기 때문에 이런 결과가 나왔어요. 에러 로그는 더 빠르게 증가하고 더 적은 문제를 일으키게 하기 위해 더 자주 백업하고 정리하여 로그 파일을 작게 유지했어요. "단일 파일"로 업그레이드 된 정책이 아닌 일반적인 방식으로 사이트를 제공하면 캐싱, 병렬 처리 및 기타 수많은 요소를 활용하여 사이트를 빠르게 제공할 수 있었어요.
그리고 이미지의 간단한 크기 조정과 파일 형식 최적화를 통해 추가로 3~5초 정도를 더 단축했어요.
모든 것이 정말 좋아 보였고 놀랍도록 적은 노동으로 상황이 많이 나아지고 있었어요.
그런데 그 후로 상황이 매우 "의심스러운" 모습을 보였어요
이제 제 역할은 비난을 하는 것이 아닙니다. 조사하는 건 그의 일이에요. 하지만 저는 이러한 실수를 다시 하지 않도록 그의 직원들을 교육하는 것이 나의 일이라고 생각해요.
하지만 더 깊이 파고들어보면, 그의 한 직원... 음... 약간 이상한 증거로 시작해볼까요. 이 문제의 사람 - 일단 Michael이라고 부르겠어요 - 이 분이 크고 비싼 "전용" 서버로 이동시킨 사람이에요. "전용"을 따옴표로 둔 이유가 뭘까요?
왜냐하면 호기심에 밀려 BASH에서 lscpu를 실행했을 때 흥미로운 한 줄을 발견했거든.
모델 이름: AMD EPYC 7R32
EPYC을 모르시는 분들을 위해, 이것은 48개의 스레드와 96개의 코어를 가진 프로세서입니다. 그렇다면 16개 코어와 32개 스레드만 사용하는 이유는 무엇일까요? 위에서 말했던 대로, 이것은 전용이 아니라 다른 사람들과 공유하는 VPN입니다.
이 VPN은 결제가 "마이클"씨에게 이루어졌는데, 그는 "좋은 혜택을 주겠다"고 했습니다. 혜택이 굉장히 크다고 해서인지 "마이클"씨는 그 차액을 주워담았던 것으로 보입니다. 실제 서버 호스트에 연락하니, "마이클"씨가 사용하고 있다고 주장한 전용 플랜보다 훨씬 약한 VPN을 제공했다고 합니다. SOB가 매달 수천 달러를 훔치고 있었네요. 정말, 2023년에 소규모 소매 사이트를 위해 매달 11,000달러나 내는 사람이 누구인가요?
"마이클"씨가 휴가 5일을 요청했는데, 놀라운 일에 저는 여기서 일하고 있는 동안에만 그렇게 한 걸까요? 피드백을 제공하고 질문을 하기 시작한 것으로부터 2일 후에 이번 주에 휴가를 낸다고 해서 우연이라고 할 수 있을까요?
내 생각이 „젠장, 역시 Office Space구나“ 라고 생각할 수밖에 없어요.
소유자의 승인을 받아 모든 암호를 순환하고 모든 것을 백업하며, 기존 코드베이스를 신뢰하지 않을 거예요. 만약 이 사람이 호스팅 요금을 비웃었다면, 그의 „한 파일“ 허튼 소리가 매출을 뺏거나, 망가진 코드가 비슷한 일을 하거나 다른 부정행위를 행하고 있는지 믿을 수 없어요. 제게 위로인 것은 제3자 결제 처리가 공격당하지 않았거나 빼먹히지 않았다는 것이라는 거예요.
그래서 우리는 던지게 돼요:
피해 제어
화요일 늦은 밤, 발렌타인 데이였을 때, 나는 이 최종 발견을 했어요. 다음 아침, 사장과 작업을 검토했어요. 그를 "화가 나 흐르는" 상태라고 표현하는 것이 옳은 말인 것 같아요. 그는 분노와 눈물 사이를 오가면서, 그와 나 모두 미안해했어요. 우리가 직접 만나 있었다면, 저는 그 가난한 사람에게 안아 주었을 거예요. 그는 중요한 비즈니스 부분을 맡기고 있던 사람을 믿었고, 그 사람이 그를 속이고 있었거든요.
몇 분 뒤에, 그는 "어떻게 해야 하지?"라며 물었어요...
그래서 우리는 아래와 같은 조치를 계획하고 실행했어요. 우리는 전체 패닉 상태에 돌입했고, "싹 다 버리고 새로 시작해야 한다!" 라는 두려움이 현실이 된 순간이었어요.
- 저희는 그 사람이 다룬 코드나 호스팅에 대해 아무 것도 믿을 수 없었으므로, 저는 신뢰할 수 있는 서비스를 통해 소유자 명의로 새 VPN을 개설했어요. 회사가 그들에게 직접 지불할 겁니다. 이 VPN에는 모든 것의 최신 버전이 포함될 거예요. 우분투를 선택했는데, 우리 둘 다 데비안을 사용하는 사람들이라서요. 데비안은 "안정"을 유지하려는 욕구로 인해 너무 뒤쳐지고 있다고 생각해요. 저는 "레드햇 레거시"에 대해 아무것도 좋아하지 않아요. 이안은 가까운 친구였어요.
- 웃긴 점은 도메인이 이번 달에 만료되었으므로, 저희는 넷솔에서 네임치프로(넷솔에서... 미친... 넷솔...) 이동하여 마지막 직원들이 액세스를 얻지 못하도록 했어요. 타이밍이 굉장히 좋았죠!
- "마젠토 오픈 소스"의 깔끔한 설치를 사용하여 고객 및 제품 데이터만 이동했어요. 다행히 마젠토는 온라인 도움이 많은 매우 성숙한 제품이기 때문에 데이터 이전은 큰 문제가 되지 않았어요. 그들의 해킹으로 일부 호환되지 않는 변경 사항이 있었지만, 그들의 유일하게 유용한 직원의 도움을 받아 약 두 시간 동안 해결했어요. "브릿지"로 사용할 중간 오래된 버전을 사용해야 했지만, 그건 크게 문제가 되지 않았어요.
- 백업 데이터의 두 세 개의 테스트 포트를 수행하여 프로세스가 올바르게 작동하는지 확인하고 속도를 향상시키기.
- 마젠토의 기이한 해킹을 통해 호스팅되던 정적 페이지를 자체 관리 시스템으로 옮겼어요. 전에 기사에서 언급했던 "Caballero" 시스템을 다시 활용했는데, 나중에 직원들이 유지보수할 수 있도록 더 견고한 시스템이 필요하다고 그에게 말했어요. 이것은 임시 방편일 뿐이에요. 제가 작업한 rewriteRule 요령을 사용하여 모든 기존 링크를 그대로 유지하면서 이 작업을 수행할 수 있었어요.
- 기본 색상을 변경하고 기본 마젠토의 몇 가지 접근성 문제를 해결했어요. 이 과정에서 "브랜딩"에 더 적합한 몇 가지 변경 사항을 가했어요.
- 시간을 당겨 메일 리다이렉트를 설정했어요.
- 이전 서버를 1시에 종료하고, 같은 시간에 새 서버로 DNS를 전환하여 4시에 새 서버를 가동했어요. 3:32AM에 라이브로 전환되었는데, 몇 가지 작은 문제가 발생해서 그렇지만, 그래서 시간 예상치를 넉넉히 잡는 거예요.
- 그의 이전 서버를 완전히 삭제했어요. 모든 것을 삭제했어요. 웃긴 건, 이 비즈니스 용으로 지정된 "전용" 서버에 있는 다른 웹사이트 두 개도 "실수로" 삭제했을 수도 있어요. 그것에 대해 정말 미안해하지만, 사실은 아니죠!
이전 시스템을 고치려는 데 많은 시간을 '낭비'했다고 스스로 바보스러워해요. 하지만 파고들지 않으면 알 수 없어요. 하나의 뿌리를 뽑으면 또 다른 뿌리가 드러나죠. 정원일화에서 말하는 것처럼 말이에요.
여파
몇 주 만 지났을 뿐이라 어떻게 될지 아직 확실히 말하기 어렵지만, 콘텐츠를 위한 새로운 반정적인 사이트와 쇼핑 시스템의 깨끗하고 반짝이는 새 설치 때문에 웹사이트의 평균 페이지 로드 속도가 1.2초로 개선되었어요. 이미지가 많은 제품도 많이 있는 매젠토의 경우에는 페이지 로드 속도가 3초 정도 걸려요.
사장님은 정말 만족하시고, 사이트에 제품을 추가/제거하는 역할을 맡은 분은 현대적인 인터페이스를 좋아하셔요. 마케팅 담당자는 자사의 '브랜드'와 맞지 않아 화가 나잖아요. 그래서 "마이클"은 자신의 추천으로 회사에 들어온 두 명의 "동료"와 함께 퇴사하게 되었어요. 무사히 지내려면 좋은 것이죠. 추잡물과 관련되면 그와 함께 망하기 마련이랍니다!
다음으로 어디로?
저에게 정규직 고용 제안을 했지만 거절해야 했어요. 제 비정상적인 수면 패턴과 다른 건강 문제로 일반적인 9시에서 5시까지 일자리를 할 수 없거든요. 자유로이 일하는 이유 중 하나라고요. 문제는 그 분이 이제 “테크니컬 엔지니어” 세 명을 모두 잃어버렸다는 거예요 — 솔직히 그게 그 분이 생각하는 문제가 아니라고 말했어요.
소프트웨어와 하드웨어 부분에서 그 분은 단순히 파트 타이머가 필요해요, 만약 그 분이 원한다면 제가 할 수 있는 부분이죠. 매젠토를 새로운 버전이 나올 때마다 업데이트하고, 프론트엔드를 그들의 브랜딩에 맞게 조정하고, 접근성 문제를 해결하기 위해 시작한 작업을 계속할 수 있는 누군가. 그리고 서버 부분에서는 매달 한 번 들어와서 업데이트와 업그레이드를 해주는 사람이 필요해요. 이건 매주 40시간을 일할 사람이 필요한 것이 아니에요. 사이트의 템플릿이 완성된 후에는 이 일에 매월 2~4시간을 할 사람이 필요한 거예요.
저의 대답에 그 분이 깜짝 놀랬다는 표현만으론 충분하지 않을 정도로 놀랐지만, 그 분은 이런 제안에 동의하려 합니다.
콘텐츠 업데이트 측면에서 아직 능력있는 직원이 남아 있습니다. 사무실에 있는 모든 사람이 나쁜 것은 아닙니다. 매우 친절하고 소통이 원활한 젊은 여성 한 명, 일단 "셸비"라고 부르겠습니다. 전체 기간 동안 많은 문제들에 대해 안내해 주었습니다. 제품 페이지에 대해 직원만 볼 수 있고 "라이브"로 전환되지 않는 문제들도 포함되어 있었는데, 그 문제들은 그녀의 직무에 지장을 준 것이었습니다. 그녀의 직무는 제품 촬영, 제품 설명을 하는 글쓰기, 상자에 대한 그래픽 작업, 그리고 세 영업 장소에 제품을 넣는 것입니다.
다시 말해, 사무실에서 실제 작업을 하는 유일한 사람입니다!
그녀는 책임을 떠안고 있어요! 내 빠르고 현실적인 "카바올레로" 시스템이 어떻게 페이지를 추가하는지 이해했고 그 결과 스스로 페이지를 추가할 수 있었습니다. 그녀는 MySQL 테이블에 추가된 필드 중 일부가 실제로 필요 없었고 어떤 것이 필요하거나 새로운 시스템으로 다른 방식으로 이전될 수 있는지 설명한 사람입니다. 현재 버전에서 복제된 해당 버전에 존재하는 기능들이 거의 우스꽝스럽습니다.
상사에게 "그녀를 담당으로 지정하고, 조수를 구해주십시오!" 라고 말했어요!
누구? 비서죠?
그의 대답으로 "Ok Boomer" 모드로 완전히 빠졌어요, 비록 우린 둘 다 X 세대이긴 하지만요. 사무실 직원이 열여덟 명이고 생산라인에는 사십 여 명이 있는 회사에서, 사장은 실제 작업을 담당하고 실질적인 공식 대표 이미지를 책임지고 있는 여성이 비서 이상인지 전혀 모르고 있었어요. 회사에서 그녀가 정확히 어떤 일을 하는지에 대해서도 전혀 알지 못했어요.
여성들이 '기업 문화'에서 앞으로 나아가기 어렵다고 하는 건 왜 그럴까요?
그런데 이건 ‘여성’뿐만이 아니라 각종 성별 또는 정체성을 가진 부하 직원들 중에서도 많이 보여왔어요. 실제 작업을 하는 사람들은 목소리도, 인정도 없고 일회용품처럼 대해받는 경우가 많아요. 그녀는 우려를 표명했고, 그 우려가 옳았는데 중간 관리자들은 ‘진짜 상관’에게 자신들의 실패를 숨기려고 힘든 상황에 굴복했어요. 동시에 그 부하들의 일을 대신해서 칭찬을 받았죠.
그래서 많은 시간 동안 사업주들에게 말해왔어요. 중간 관리자들을 모두 해고하고 진짜 일을 아는 사람들 중에서 내부 진급을 하라고 말했어요.
그가 방금 해고한 세 남자들과 그들의 ‘마케팅’을 맡고 있는 여성은 ‘셸비’의 기여를 숨기려고 최대한 노력했던 거예요.
그리고 여기서 ‘마케팅 책임자’에 접근해보려고 해요
주인에게 권고했던 사람이 뭔지 알려줘. 진지한 고찰을 통해 조사를 하고, 검토를 하고, 가이드를 수용하지 않으면 아마 그 사람을 해고해야 할지도 몰라.
나의 마케터와 광고주들과의 갈등은 전설적인 수준이야. 웹을 인쇄 매체처럼 대우하는 사람들이 아직도 많아서, 이미 이겨버린 전투를 또 싸우면서, 웹사이트 관련해서는 전혀 감이 없는 경우가 많아.
그녀는 그들의 브랜딩이 충분히 표현되지 않는다고 불평하는데, 그 브랜딩은 접근성 규범을 위반하고 있는 쓰레기라서, 실제 판매가 진행되는 아마존이나 이베이에서는 실제로 존재하지 않아. 이 예술가 같은 사람들이 마냥 뒤통수를 맞을 필요가 있는 곳 중 하나인데요, 신발 밑창 안에서 부러져 남은 형태로 말이죠.
하지만 더 나쁜 것은 그녀가 상급 경영진을 "통계"로 상호 찬양하고 있는 걸 밝혀냈을 때야. 그런 통계도 좋아하지 않지만 지워 버린 전투 추적 스크립트 대신 웹앨라이저를 사용하도록 지시하면 마케터들이 미쳐버리는 걸 볼 수 있어. 실제로, 이런 말을 한 것이 다른 기사 댓글에서 놀라워서 보여줘서 웃겼어. 정말, 그들이 그런 정보를 "필요로 한다면", 그들이 기만을 위해 통계적 난장판을 벌이는 거야. 다른 사람들로 하여금 그들의 똥 같은 일이 실제로 중요하다고 생각하도록 속이려고!
한 가지 질문으로 이 모든 것이 결정되었어요: 회의에서 좋은 소리를 내거나 멋진 그래프를 자랑하는 것 이외에, 그녀가 실제로 비즈니스에 기여하는 게 뭐가 있지? 마케팅 임원들과는 자주 그런 경험을 해왔는데, 그들은 입으로는 잘 말하지만 회사의 이익에 실질적인 가치를 거의 기여하지 않아요. 광고 감독과 마케터를 구분하는 건데, 전자는 실제로 실적을 끌어올릴 뿐 아니라 사용자에게 매력을 느끼게 하거나 적어도 조작을 하는 게 중요한 거예요.
그녀는 생산 매니저가 떠나면서 업무를 맡아서 협상하며 공급업체와 선적업체와의 거래를 재조정했어요. 홀로서도 회사의 이익을 개선시켰는데, 원자재의 가격을 싸게 구하고 그 원자재를 고객과 유통업체/도매상에게 배송하는 비용을 줄였어요. 그녀는 또한 다른 회사들이 제품을 그들을 통해 제조하도록 하는 문제를 해결하고, 다른 소매업체에서 제품을 판매할 수 있는 거래도 체결했어요.
그건 마케팅이 아니라, 물류와 판매죠!
그래서 나는 그녀와 화상 회의를 열었어요. "솔직하게 말해 줘요. 당신의 일 중에서 가장 싫어하는 부분은 뭐에요?"
대답은?
그 일의 일부를 싫어했고, 그것은 말이 안 된다고 느꼈어요! 사실, 그 일에 대한 부분을 다른 책임으로 맡게 된 이유도 있었어요. 그녀는 마케팅에서 보다 더 많은 데이터나 어떤 빠진 데이터 포인트가 있다면 모든 것이 잘 풀릴 것 같다고 생각하지만, 정보를 얻을수록 더 혼란스럽게 느꼈어요.
하아, 고용주에게 사람을 해고하라고 하는 건 진짜 싫어.
호스팅 비용이 감소하고 사기꾼들을 해고함으로써 30만 달러의 급여를 절약했으니, 그는 "비서"로만 생각했던 여성에게 웹 존재를 담당하게 하고, 이제는 이전 직원이었던 마케터가 실제로 즐기고 능숙한 일을 할 수 있도록 승진과 급여 인상을 해줄 여유가 없다고 말하는 것은 아니다!
결론
몇 주 동안 문제를 해결한 후, 그들은 현재 온라인 판매량이 1주에 2건이었던 끔찍히 낮은 수준에서 하루에 대략 10~12건으로 증가하며 매일 계속 상승하고 있습니다. 검색 엔진 최적화가 일하는 대로 다행히 더 올라가고 있어요.
그들의 매출에서 아직 놀라운 부분이나 중요한 부분은 아니지만, 이제 호스팅 비용이 적고 운영에 필요한 스태프가 줄었기 때문에 70배에서 100배로 증가했다는 사실은 타당한 것이죠? 시간이 흘러감에 따라, 나 혹은 실제로 작업을 하는 사람들에게 지불한 금액보다 이러한 변화는 확실히 가치가 있을 것입니다. 그리고 직원들이 스스로 사기를 치고 있다는 사실을 발견하고 시간을 들였던 것 또한 많은 가치가 있었습니다.
저의 경험 상, 지난 4-6년 동안 안타까우면서도 고통스러운 일이 많이 있었습니다.
수 년 전에 사이트가 하루에 수백 건의 매출을 올리던 것과는 다르게, 오랜 기간 동안 사이트가 그리 나쁜 상태였기 때문에 발생한 피해는 급속히 해결되지 않습니다. 이는 만성 질병과 같습니다. 수십 년간 그 질병과 함께 살아온 경우, 질병 자체가 치유된 것은 첫걸음에 불과합니다. 이를 해결한다고 해서 수십 년간의 기능 장애로 인해 손실 된 정신과 손상된 관계가 즉시 복구되지는 않습니다.
몇 가지는 회복하는 데 시간이 오래 걸릴 수 있다는 것을 명심해야 합니다!
우리가 볼 수 있는 것은 회복이 진행 중이라는 것이며, 솔직히 내 예상보다 더 빨리 진행되고 있다는 것입니다. 기억해 둘 점은 절망적인 하향세로 2~3년 동안을 보내고 나면 터널 끝의 빛을 볼 수 있다는 것입니다.
추가로, Magento와 다시 다루는 것은 오랜만입니다. 아마 Adobe 제품이 되었다는 사실을 까먹거나 알아차리지 못했던 것 같습니다(조사한 결과 2018년?). 그들이 보통 하는 행동과 달리, 무료/오픈 소스 버전을 삭제하지 않았다는 점을 보니 다행스럽습니다. 여전히 10년 전에 가지고 있던 것과 같은 앞단에서의 결함을 대부분 가지고 있지만, 내 클라이언트가 이미 (웹 용어로는) 고대 CE 1.4 버전을 사용하고 있었기 때문에 최소한의 조치로 신속하고 쉬운 해결책이었습니다.
패닉 수리에 반대할지라도 때때로 당신이 할 수 있는 일일 수도 있어요.
그들 쪽에서의 변화인지, 제 경험이 더 많아진 것인지 확신하지는 못하겠지만, 결함을 얇은 진흙으로 덮고, 평활하게 다듬어서 좋은 프라이머와 페인트를 바르는 일이 지나치게 어렵지 않다는 것을 증명하고 있어요.
내가 손대고 있는 일부 백엔드 시스템과는 달리 내가 당구 해머, 디스크 커터, 플라즈마 커터, 시트 금속 재고, 그리고 아크 웰더와 함께 있어야 하는 경우들에 비하면 말이야.
큰 부가적인 이야기: 그들이 생산하고 판매하는 제품의 양에 놀랐어요. 순수한 숫자적 측면과 그들이 해당 분야에서 "작은" 제조업체라는 사실을 고려하면, 미국에는 총보다 고무 화물이 더 많을지도 모르겠다는 생각이 들어요.
정말 많은 것을 설명할 것 같아요...