내 다섯 가지 최악의 WordPress 개발 실수
게시 됨: 2022-03-11또는, 내가 전에 탱킹한 모든 서버에게: 내가 저지른 5가지 최악의 WordPress 실수에 대한 공포의 뒤돌아보기
개발자로서 우리는 경력의 다양한 지점에서 다양한 유형의 실수를 저지릅니다. 특히 워드프레스 개발에서는 워드프레스 코드베이스에 익숙해지면서 다양한 유형의 실수를 저지릅니다.
몇 년 전에 나는 Matt Mullenweg가 대부분의 사람들이 실수를 반복하고, 똑똑한 사람들은 실수로부터 배우고, 우리 중 가장 똑똑한 사람들은 다른 사람들의 실수로부터 배운다는 내용의 선언을 들었습니다. 나는 이것이 오히려 마음에 들고 결론을 덧붙이고 싶습니다. 누구나 실수를 하고, 겸손한 사람들은 그 실수를 개인적으로 공유하고, 우리 중 가장 대담한 사람들은 그것을 적어서 블로그에 게시합니다!
그러나 나중에 생각할 시간이 있습니다. 당신은 기차 사고에 대해 듣고 싶어 이 기사를 읽고 있습니다. 저는 엔지니어입니다. 더 이상의 서문 없이, 제가 WordPress 개발자로서 저지른 가장 창피한 실수 다섯 가지를 공포에 떨며 되돌아보는 시간에 함께 해주세요.
WordPress Core의 해킹된 버전을 업데이트한 시간
나는 아주 잘 알려지지 않은 CraigsList 코딩 공연에서 졸업하고 실제 라이브 에이전시에서 일하게 되었습니다. 도착했어! 소파가 아닌 다른 곳에서, 잠옷이 아닌 다른 곳에서 일하는 것이 긴장되었습니다. 그러나 그때도 나는 WordPress Doing It Wrong에서 WordPress Right를 일반적으로 알고 있었고 "핵심 해킹"이 절대 아닌 것과 같이 WordPress 모범 사례에 대해 자랑하는 것이 유쾌하게 자급 자족한다는 것을 알았습니다.
이 에이전시에서 나의 첫 번째 WordPress 개발 작업은 중단된 프로젝트를 재개하는 것이었습니다. 당시 제 기술로는 다소 복잡한 프로젝트였습니다. WordPress 등록 및 로그인 흐름에 대한 많은 사용자 지정이 포함되었습니다. 이전 개발자는 핵심 wp-login
파일을 편집하는 것만으로 상당한 진전을 이루었다고 합니다.
나는 이것이 지속 가능하지 않다는 것을 알고 있었기 때문에 나의 첫 번째 업무는 백업/복원 플러그인을 설치하고 WordPress 코어를 새로 다운로드한 버전으로 교체하는 것이었습니다. 나는 아직 프로젝트에서 엄청나게 인상적인 것이 수행되지 않았으며 필터를 통해 기존 기능 세트를 모방할 수 있다고 확신했습니다.
그 시점에서 내가 가지고 있었거나 없었을 수도 있는 코딩 능력이 무엇이든, 나의 새 고용주가 미친듯이 화를 내면서 순식간에 무의미해졌습니다. 그녀는 '해킹 코어'의 의미를 이해하지 못했고, 나는 그것을 소화할 만큼 충분히 성숙하지 못했다. 그녀의 이마를 일시적으로 식힌 유일한 것은 내가 설치한 백업/복원 플러그인을 통해 되돌릴 수 있다고 그녀에게 확신했을 때였습니다.
이것이 어디로 가는지 짐작할 수 있습니까?
그 플러그인은 운명처럼 wp-content
폴더만 백업했습니다. 그 핵심 파일에 있던 워드프레스 해킹은 영원히 사라졌습니다. 나는 그녀에게 보낸 이메일을 아직도 기억한다.
얘들아, 난 백업을 할 수 없어.
나는 필터와 액션을 통해 그녀가 원하는 기능 세트를 완성할 준비가 되어 있었지만 그녀는 그것을 듣지 않았습니다. 그녀는 나를 그 자리에서 해고하고 고소하겠다고 위협했으며 2주간의 매우 힘든 일에 대해 돈을 주지 않았습니다. 나는 너무 굴욕을 당했다.
내가 이 경험에서 배울 수 있었던 (지금은 명백한) 많은 것들이 있습니다. 백업은 리허설과 확인을 거치기 전까지는 백업이 아니라는 일반적인 교훈은 좋은 것입니다. 하지만 더 마음에 들었던 것은 WordPress에서, 특히 WordPress 코어에서 백업을 수행 하는 방법 에 대한 구체적인 교훈입니다.
저는 강력한 백업/복원 시스템을 갖춘 WP-Engine과 같은 관리 환경을 정말 소중히 여기는 법을 배웠습니다. 많은 부티크 호스트에는 백업을 수행하기 위한 다양한 명령줄 도구 및 기타 개발자 중심 기능이 있지만 WP-Engine이 가장 좋습니다. 매우 큰 네트워크가 없는 한 매우 빠릅니다. UI는 간단합니다. UI 가 있습니다 . 기간: WordPress 사용 방법을 아는 사람은 누구나 이 작업을 수행할 수 있습니다. 즉, 훨씬 더 빠른 일부 CLI 접근 방식이나 Plesk에 묻혀 있는 모호한 것과는 대조적으로 내 클라이언트는 이것을 사용하고, 이해하고, 모니터링하고, 내가 사용하고 있는지 확인할 수 있습니다. 나는 열렬한 팬이다.
전체 플랫폼을 형제 디렉토리로 끌어온 시간
나는 여전히 전문적인 직장에 익숙하지 않았고 항상 Windows 사용자였습니다. 그러나 나의 새 직장은 Mac 매장이었고 나는 그것에 관한 모든 것을 정말 빨리 사랑하는 법을 배웠습니다. 거의 모든 것. '마우스' 때문에 고민이 많았던 것 같다. Bluetooth 연결이 끊어지는 경향이 있어서 다시 연결되면 실수로 끌어서 놓기 작업을 하는 경우가 종종 있었습니다. 더군다나 나는 새로운 소근육 운동에 서툴렀을 뿐이었다.
요즘에는 WordPress 개발 흐름에 FTP를 통해 프로덕션에 배포하는 작업이 포함되었습니다. 내 데스크탑에서 Cyberduck이 프로덕션 환경에 열려 있는 상태에서 근무일 내내 코드를 작성하고, 채팅하고, 이메일에 응답하고, 일반적으로 새로운 매직 마우스를 통해 이리저리 빙글빙글 맴돌며 보내는 것은 드문 일이 아닙니다. 고쉬는 나쁜 소리를하지 않습니다! 하지만 그렇게 되었습니다.
어느 날 우리의 전체 플랫폼이 사라졌습니다. 우리 시스템 관리자는 그것이 일종의 DDoS이거나 일반적으로 그의 수준에 있다고 가정했습니다. 우리 개발자들은 그의 직감을 믿었고 그가 곧 알아낼 것이라고 생각했습니다.
시간이 흘렀다. 하루가 왔다가 갔다. 아직 다운.
다음 날 아침이 되자 상황이 복구되었고 CTO가 부드럽게 회의실에 함께 가자고 했습니다. 시스템 관리자가 문제를 식별했습니다. 그는 FTP 로그를 가져와 내 사용자가 전체 플랫폼을 형제 디렉터리로 이동한 것을 관찰했습니다. 즉, wp-content
는 wp-includes
아래에 중첩되었습니다.
나는 낙담했지만 우리 CTO는 그것에 대해 훌륭했습니다. 그녀는 내가 일반적으로 도움이 되고 책임감 있는 직원이라는 것을 알 수 있었지만 단순한 통회를 넘어서 다시는 이러한 일이 일어나지 않도록 방지할 방법을 강구하라고 나에게 도전했습니다. 정말 도움이 되는 두 가지를 찾았습니다.
첫 번째는 Cyberduck이 원격에서 원격으로 파일 이동을 전혀 허용하지 않도록 CLI 명령을 찾는 것이었습니다. 이것은 좋은 안전 조치였으며 즉시 회사 정책으로 채택했습니다.
두 번째는 Git을 통한 배포에 큰 관심을 가졌다는 것입니다. 결국 Bitbucket 버전 관리를 일반 wp-admin
업데이트 흐름에 통합하기 위해 WordPress 플러그인을 작성하게 되었습니다. 그 이후로 우리는 프로덕션에 FTP 액세스 권한을 가질 이유가 거의 없었습니다. 이 플러그인은 내가 가장 좋아하는 전문 업적 중 하나입니다. 물론 Git에 대한 선호도는 오늘날 개발자의 전제 조건입니다.
add_filter()
를 통해 모든 프런트 엔드 콘텐츠를 제거한 시간
이 시점에서 WordPress 관행으로 꽤 똑똑해 졌다고 생각했습니다. 요청은 특정 카테고리의 게시물에 "배지"를 추가하는 것이었습니다. 어떤 이유로 나는 멍청한 놈만이 이와 같은 템플릿 파일에 또 다른 조건부를 추가할 것이라는 점을 염두에 두고 있었기 때문에 큰 자부심을 가지고 다음 필터를 구현했습니다.
add_filter( 'the_content', 'myprefix_add_a_badge' ); function myprefix_add_a_badge( $content ) { global $post; if( ! has_category( 'sponsored', $post ) ) { return false; } $out = $content . myprefix_get_badge(); return $out; }
이것에 문제가 있습니까? 필수 게시물에 배지가 적용되었는지 확인하기 위해 준비 단계에서 빠르게 테스트했습니다. 그런 다음 배포하고 당일 작업을 종료했습니다. 짐작하시겠지만 우주가 폭발했습니다.
특히 결과는 배지가 없는 게시물이 콘텐츠 없이 프런트 엔드에서 렌더링된다는 것이었습니다! 이유를 알 수 있습니까? 문제는 내 가드 조건에서 $content
를 반환하는 대신 false
를 반환했다는 것입니다. 그러나 실제로 여기에는 여러 층의 실수가 있습니다.
게시물이 배지를 받았다는 것만 테스트하는 것으로 만족한 이유는 무엇입니까? 다른 게시물이 손상되지 않은지 테스트하지 않은 이유는 무엇입니까? 내가 왜 이렇게 늦게 프로덕션에 배포하고 있었습니까? 왜 우리의 품질 관리가 내가 약간 클릭하고 페이지를 새로고침하는 것으로만 구성되었습니까?

이 모든 질문에 대한 답은 성숙함 으로 요약될 수 있습니다. 시각적 회귀 테스트 및 단위 테스트와 같은 것에 투자하기 전에 이러한 종류의 실수를 저지르는 데 시간이 걸립니다. 이 특별한 실수는 수백 가지 중 하나의 빨대였습니다. 결국 낙타의 등을 부러뜨리고 phpUnit과 xDebug에 많은 투자를 하게 되었습니다. 결과적으로 이러한 도구는 테스트 가능한 코드를 작성하는 방법을 가르쳐 주었고 테스트 자체보다 더 많은 버그를 예방할 수 있었습니다.
무한 루프 내에서 내가 0으로 나눈 시간
클라이언트 요청은 날짜가 "2011년 11월 10일"이 아닌 "XYZ 전"이 되도록 WordPress 블로그 게시물의 형식을 다시 지정하는 것이었습니다. 나는 이것을 어떻게 달성하는지 정확히 확신하지 못했지만 그것이 인기를 얻고 있는 것처럼 보이는 날짜 형식이라는 것을 알고 있었고 실제로 Dr. Google이 매우 빨리 스니펫을 제공했습니다. 그것은 내 지역에서 작동했습니다! 수학, 특히 나눗셈 이 많았습니다. 나는 그것이 작동하는 이유를 정확히 알지 못했습니다. 많은 중첩 루프, 나머지, 반올림 등이 있었습니다. 하지만 Google에 있었고 작동하는 것 같았고 프로덕션에 배포할 수 있을 정도로 만족했습니다.
약 30분 후 시스템 관리자로부터 불친절한 Skype를 받았습니다. 생산이 중단되었습니다. 물 속에서 죽었다. 그는 내가 최근에 0으로 나눈 적이 있는지 물었고 그가 말하는 것이 무엇인지 전혀 몰랐습니다. 여기 무슨 일이 있었는지.
믿거 나 말거나, 내가 찾은 읽을 수 없는 "worked on my local" 스니펫은 충분히 큰 샘플 크기에서 일부 비정상적인 동작이 가능했습니다. 몇 가지 불행한 일, 시간 및 분 조합이 제공되면 Rube Goldberg 루프는 때때로 숫자를 0으로 나누려고 시도합니다. 고등학교 수학에서 회상:
일반 산술에서 표현식은 의미가 없습니다. 0을 곱하면 a(≠ 0로 가정)가 되는 숫자가 없으므로 0으로 나누는 것은 정의되지 않습니다. - 위키피디아
그렇다면 이것이 컴퓨터에 의미하는 바는 무엇입니까? 일반적으로 로그에 오류 메시지만 표시되지만 제 경우에는 더 심각했습니다. 수학 오류가 내 루프 논리를 방해하여 내 중첩 루프가 완료되지 않고 실행되도록 했습니다. 무한 루프는 죽음의 흰색 화면으로 이어지는 것입니다. 그리고 그것은 더 나빠진다! 루프를 반복할 때마다 0으로 나누는 오류가 기록되었기 때문에 오류 로그는 엄청난 비율로 증가했고 파일 시스템을 방해하기 시작했습니다. 이것은 비록 터무니없이 자초한 것이지만 DDoS 공격의 효과를 가졌습니다.
이 실수의 나쁜 점은 트래픽이 많은 사이트를 중단했다는 것입니다. 이 실수에 대한 좋은 점은 그것이 나의 일에 대한 접근 방식을 극적으로 변화시켰다는 것입니다. 무엇보다 이해도 없이 실행에 옮기는 내 자신이 부끄러웠다. 나는 모든 줄을 이해하기 위해 가능한 모든 노력을 기울이지 않고 스니펫에 다시는 붙여넣지 않겠다고 맹세했습니다. 필요한 경우 스니펫 작성자에게 후속 조치를 취하더라도 말입니다.
뿐만 아니라 초보 개발자가 읽기 어려운 코드를 다시는 출시하지 않겠다고 다짐했습니다. 나는 WordPress 코딩 표준, 텍스트 편집기 확장, 인라인 주석 및 docblocks, 심지어 탭 대 공백, 그 고전적인 통과 의례에 집착하게 되었습니다! 요컨대, 나는 코드를 작성 하는 것이 얼마나 쉬운지보다 코드를 읽는 것이 얼마나 쉬운지에 더 관심을 갖기로 결정했습니다. 이해 없이 붙여넣기에 대한 이러한 반항으로 인해 제3자 종속성을 관리하는 데 전문적인 깊은 관심을 갖게 되었으며, 이 주제는 이후 10년 동안 저에게 다양한 글쓰기 및 말하기 기회를 제공했습니다.
아, 그리고 이 실수에 대한 정말 웃긴 점은? WordPress 코어에는 한 줄짜리 솔루션이 있습니다.
모두가 질릴 때까지 내가 프로젝트를 통제 불능 상태로 두었던 시간
정말 매력적인 프로젝트를 수주했습니다. 저는 기술 책임자이자 WordPress 개발 엔지니어였으며 Amazon AWS Lambda 개발자와 JavaScript 보고에 대한 심층 전문가가 있었습니다. 여러 사람이 나에게 보고한 것은 이번이 처음이었고 지금까지 작업한 프로젝트 중 가장 복잡한 프로젝트였습니다. 워드프레스 프로젝트라고 하는 것조차 너무 과소평가된 것이었지만, 워드프레스는 모든 것을 하나로 묶는 접착제였기 때문에 제가 기술 책임자로 활동하는 것이 합리적이었습니다.
내 주요 역할은 일반적으로 엄격하게 기술자였습니다. 또한 미니멀리즘에 대한 선호도가 있기 때문에 Jira나 Basecamp 또는 작업 관리를 위한 실제 플랫폼과 같은 것을 구현하려는 생각은 전혀 하지 못했습니다. 프로젝트의 첫 번째 반복에서는 상황이 꽤 잘 진행되었습니다. 우리는 개별 구성 요소에 대해 작업할 수 있었고, 클라이언트 사양 문서를 제품 로드맵으로 참조하고, 함께 연결해야 할 때 Slack을 통해 서로 ping할 수 있었습니다.
문제는 우리가 클라이언트에게 진행 상황을 보여주고 그의 피드백을 구현하기 시작했을 때 시작되었습니다. 3명으로 구성된 팀으로 시작한 팀은 즉시 새로운 차원으로 발전했다고 느꼈습니다. 누가 어떤 피드백을 담당했는지, 해당 피드백을 구현하는 상태가 무엇인지, 실제로 누가 누구와 이야기하고 있는지 불분명했습니다. . 우리는 스레드당 100개 응답의 Gmail 제한을 여러 번 초과했습니다!
상황이 불편해지기 시작했습니다. 내 생각에 클라이언트는 프로젝트 방향에 대한 통제력을 잃은 것처럼 느꼈고 마찬가지로 중요한 것은 프로젝트 상태에 대한 가시성을 잃은 것처럼 느꼈습니다. 내 Amazon 개발자는 언젠가 "Trello를 사용해야 하는지 궁금합니다."라고 말했습니다.
허 , 나는 생각했다. 3인 팀에 그런 플랫폼이 필요한가요? 다시 말하지만, 나의 일반적인 경향은 더 적은 수의 도구, 더 적은 오버헤드, 덜 복잡한 것을 선호하는 것입니다. 그러나 그 프로젝트는 이미 우리 모두를 흙으로 끌어들이고 있었습니다. 그래서 그것을 시도하는 것이 해가 되었습니까?
나는 우리의 모든 이메일, 모든 사양 문서, 모든 이질적인 댓글 스레드를 샅샅이 뒤져 Trello 보드에 모두 매핑했습니다. 훨씬 적은 정신적 부담으로 의사 소통할 수 있었기 때문에 프로젝트는 즉시 디지털 무덤에서 부활했습니다. 내 이메일 받은 편지함이나 거의 사용되지 않는 사양 문서에서 텍스트를 검색하는 대신 멋진 보드, 목록 및 카드가 있었습니다. 모든 기능의 상태를 확인하고 피드백을 통합하고 새로운 작업을 수행하는 것은 쉬웠습니다. 우리는 점차 눈이 멀어서 눈치채지 못하다가 갑자기 다시 볼 수 있게 된 것 같았습니다.
물론 코드 자체는 작성되지 않았고 여전히 매우 어려운 프로젝트였으며 여전히 모든 기술을 동원해야 했습니다. 그러나 그것은 일종의 요점입니다. 마침내 우리는 프로젝트를 이해할 수 있는 인프라를 갖게 되었기 때문에 이제 우리의 기술을 자유롭게 적용할 수 있었습니다.
나는 그 프로젝트가 클라이언트의 완전한 만족으로 완성되었다고 말할 수 있어서 기쁩니다. 요즘은 Trello 또는 Jira가 둘 이상의 팀에 대한 사실상의 요구 사항이라고 생각합니다.
앞으로 나아가 다른 사람들의 실수로부터 배우십시오
군 복무 중 내가 들었던 가장 똑똑한 것 중 하나는 다음과 같습니다. 대위가 중위 실수를 하거나 중위가 개인 실수를 하는 것은 옳지 않습니다.”
다시 말해, 현재의 책임 수준에 따라 당연할 수 있는 일반적인 실수는 하는 것이 좋습니다. 더 중요한 것은 당신이 그들로부터 성장하는 방법입니다.
나는 개발자로서 다른 사람들이 우리와 함께했던 것처럼 다른 사람들이 실수를 했을 때 그들에게 자비를 베푸는 법을 배우기를 바랍니다. 나는 내가 실수를 해도 계속해서 혁신할 수 있도록 호기심과 책임감을 잃지 않기를 바랍니다. 나는 항상 영감을 주는 WordPress 전문가 커뮤니티에 둘러싸여 있기를 바랍니다. 실수를 통해 배울 수 있고 나 자신을 만들지 않을 수 있는 사람들입니다. 그리고 무엇보다도, 내가 여기서 공유한 WordPress 실수와 같이 다른 사람들이 내 경험에서 배울 수 있기를 바랍니다.