지난 몇 년 동안 나는 흥미로운 프로젝트를 진행할 수있는 기회를 가졌으며, 지속적인 개발, 지속적으로 업그레이드, 리팩토링 및 새로운 기능을 추가하면서 본질적으로 복잡한 흥미로운 프로젝트를 수행 할 기회가있었습니다.
이 기사는 중간 및 대규모 프로젝트를 다룰 때 대부분의 PHP 개발자가하는 가장 큰 코딩 감독을 다룰 것입니다. 개발 환경을 구분하지 않거나 캐싱 및 백업을 구현하지 않는 것과 같은 감독.
아래 예제는 PHP에 있지만 각 문제의 아이디어는 일반적입니다.
이러한 문제의 근본은 주로 개발자의 지식과 경험, 특히 부족에 있습니다. 나는 아무도 강타하려고하지 않습니다. 나는 모든 것을 아는 완벽한 개발자라고 생각하지 않습니다.
내 경험에서 우리는 이러한 문제를 디자인 수준, 응용 프로그램 수준 및 데이터베이스 수준 감독의 세 가지 주요 그룹으로 분류 할 수 있습니다. 우리는 각각을 따로 분해 할 것입니다. 키 테이크 아웃
개발 중에 항상 오류보고가 문제를 일찍 잡고 수정하여 강력한 애플리케이션 기능을 보장합니다.
성능 및 사용자 경험을 향상시키기 위해 다양한 수준 (서버, 응용 프로그램, 데이터베이스)에서 전략적으로 캐싱을 구현하십시오.
휠 재창조를 피하고 응용 프로그램에 불필요한 위험을 도입하지 않도록 모범 사례와 확립 된 설계 패턴을 준수하십시오.
는 코드 품질을 유지하고 매끄러운 배포 프로세스를 용이하게하기 위해 자동 테스트 및 지속적인 통합을 통합합니다.
문제가 발생하기 전에 일관성을 보장하고 잠재적 인 버그를 포착하기 위해 팀 내에서 정기 코드 검토 및 감사를 수행하십시오.
가능한 오류, 위반 및 실패를 효과적으로 예상하고 처리하는 방어 코드를 작성하여 최악의 시나리오를 준비하십시오.
응용 프로그램 수준 감독
오류 보고서로 개발중인
내가 물어볼 수있는 유일한 질문은 다음과 같습니다. 왜? 응용 프로그램을 개발할 때 오류보고를 전환하지 않는 이유는 무엇입니까?
PHP에는 여러 수준의 오류보고가 있으며 개발 단계에서 모든 것이 켜져 있어야합니다.
오류가 발생하지 않을 것이라고 생각되면 이상적인 세상에서만 발생하는 이상적인 시나리오를 코딩하고 있습니다.
오류보고 및 표시 오류는 동일하지 않습니다. Error_Reporting ()은 오류 수준 (예 : 통지, 경고, 치명적인 오류)을 설정하고 Display_Errors는 이러한 오류가 출력 될지 여부를 제어합니다.
오류보고는 항상 개발에서 가장 높은 설정에 있어야합니다. Error_Reporting (e_all); and ini_set ( 'display_errors', true); 참고 : E_STRICT 오류는 PHP 5.4에서 E_ALL의 일부가 되었기 때문에 E_ALL은 PHP 5.4 이후 가장 높습니다. 5.4보다 이전 PHP 버전을 사용하는 경우 error_reporting (e_all | e_strict)을 사용하십시오. 엄격한 오류 경고도 포함합니다
오류 억제
오류를 사용하여 오류를 억제하는 것은 카펫 아래에서 의식적으로 흙을 쓸어 내기 때문에 전혀 켜지 않는 것보다 더 나쁩니다. 당신은 오류가 발생한다는 것을 알고 있습니다. 당신은 그것을 숨기고, 과제를 닫고, 일찍 집에 가고 싶습니다. 당신이 깨닫지 못하는 것은 흔들리는 기초에 무언가를 만드는 것이 나중에 훨씬 더 큰 결과를 가져올 것이라는 것입니다.
당신은 여기에 대한 심도있는 설명을 읽을 수 있습니다.
코드의 어느 곳에서나 로깅하지 않음
프로젝트 개발은 처음부터 로그를 염두에두고 발생해야합니다. 마지막에 로깅을 볼 수는 없습니다. 대부분의 개발자는 로깅을 어떤 식 으로든 사용하지만, 그 중 어느 것도 실제로 해당 로그를 오류인지 확인하는 데 시간을 할애하지 않습니다. 아무도 로그를 보지 않으면 로깅의 요점은 무엇입니까? PSR 권장 사항은 로깅, PSR-3은 정확하며,이 훌륭한 기사는 PSR-3 로깅을 구현하는 방법을 설명합니다.
캐싱을 구현하지 않음
캐싱은 서버 레벨, 애플리케이션 수준, 데이터베이스 레벨 등과 같은 응용 프로그램의 여러 레벨에서 여러 가지 방법으로 수행 할 수 있습니다.
캐싱도 처음부터 구현해야합니다. 개발 중에 항상 비활성화 할 수 있지만 생산 환경으로 밀면 모든 것이 작동하는지 확인하십시오.
서버 레벨에서 리버스 HTTP 프록시 인 Varnish를 사용할 수 있으며 파일을 메모리에 저장하고 웹 서버 앞에 설치해야합니다.
.
PHP 속도를 높이려면 Opcode 캐시를 설치/활성화하여 컴파일을 PHP 스크립트의 바이트 코드로 최적화합니다. PHP 5.5 이상의 경우 Opcode 캐시는 이미 Opcache라는 코어에서 컴파일되어 있습니다.
당신은이 기사에서 그것에 대해 읽을 수 있습니다 : itepoint php-nisestanding opcache.
PHP 5.5 이전에는 사용자 캐시 기능이있는 APC를 사용할 수 있습니다.
애플리케이션 수준에서 APC에서 추출한 사용자 캐시 인 APCU를 사용할 수 있지만 APCU와 유사한 기능을 갖거나 분산 된 캐싱 시스템이며 PHP 지원이 강한 Memcached의 다른 캐시를 사용할 수 있습니다. MemCached는 데이터베이스 쿼리를 캐시하는 데 사용될 수도 있습니다
응용 프로그램에서 캐싱을 구현할 때 몇 가지 기술이 있습니다. 모범 사례는 자주 변경되지는 않지만 반복적으로 쿼리하는 데이터를 캐시하는 것입니다.
데이터베이스는 모든 PHP 애플리케이션에서 항상 가장 큰 병목 현상이기 때문에 캐시 데이터베이스가 크게 쿼리합니다.
모범 사례 및 디자인 패턴을 무시합니다
누군가가 자신의 암호 암호화 알고리즘을 구현하는 것을 몇 번이나 보았습니까? 슬프게도, 이것은 여전히 오늘날에도 발생합니다.“나는 그것을 더 잘 알고있다”는 태도로 인해 지식이 부족하거나 더 위험하기 때문에. 글쎄, 나는 당신에게 나쁜 소식을 가져 오는 것을 싫어하지만, 당신이 그것을 더 잘 모르는 시간의 99%.
이러한 모범 사례와 디자인 패턴은 소프트웨어 엔지니어가 당신과 나보다 더 똑똑한 이유로 생각하고 만들어졌으며, 개발자의 유일한 직업은 작업에 대한 올바른 패턴을 선택하는 것입니다.
.
이 주제에 대한 많은 책과 자원이 있습니다. 두 가지를 언급하겠습니다 :
Martin Fowler의 엔터프라이즈 응용 프로그램 아키텍처 패턴
Matt Zandstra의 PHP 객체, 패턴 및 연습
자동화 된 테스트를 사용하지 않음 테스트는 웹 응용 프로그램의 모든 기능에 대해 추가되어야하지만 테스트는 로그와 마찬가지로 아무도 없을 것입니다.
수동으로 테스트 실행은 지루한 프로세스입니다. 다행히도,“ 도구가 있습니다”. 실제로, 테스트를 자동화하는 데 도움이되는 많은 도구, 지속적인 통합이라는 전체 관행이 있습니다.
PHP 커뮤니티에서 널리 사용되는 이러한 도구 중 하나를 Jenkins라고하며 CI 서버이며 응용 프로그램을 테스트하는 것 이상을 수행 할 수 있습니다. Sebastian Bergmann은 PHP 프로젝트와 함께 일하기 위해 특별히 구성된 Jenkins를위한 훌륭한 템플릿을 만들었습니다.
이것을 너무 압도적으로 발견하면 phpunit, behat 또는 phpspec을 사용하여 응용 프로그램에 대한 단위 테스트를 적어도 작성하십시오. 처음에는 많은 작업이 보일지 모르지만 테스트가 장기적으로 프로젝트를 돕는 수많은 시간이 입증되었습니다.
검토 / 감사 코드
팀에서 일하는 것은 특히 모든 팀 구성원이 다양한 스타일의 프로그래밍에 사용되는 경우, 좋은 사양없이 프로젝트가 옆으로 빨리 갈 수 있습니다.
검토와 감사의 차이점은 코드를 검사하는 시간입니다. 검토는 일반적으로 코드가 코드 기반에 병합되기 전에 발생하고 코드가 병합 된 후 감사합니다.
검토는 코드에 대해 이야기 할 기회가 있기 때문에 다른 팀원의 코드와 합병되기 전에 개선 또는 수정 사항을 제안하기 때문에 훨씬 더 나은 일입니다.
검토의 단점은 모든 병합이 (모든 테스트 후에 녹색 이후) 코드에 대해 논의해야하기 때문에 개발을 차단한다는 것입니다. 이곳에서 감사가 시작되는 곳입니다. .
감사는 합병 후 발생하며 차단하지 않지만 버그를 일찍 잡을 수있는 기회를 놓치기 때문에 훨씬 덜 강력합니다.
감사는 코드를 전혀 검사하지 않는 것보다 여전히 낫습니다.
이 프로세스가 가능한 한 원활하게 진행되도록하기 위해 Facebook의 훌륭한 엔지니어 가이 목적을 위해 특별히 만들어진 Phabricator라는 도구를 사용할 수 있습니다. 코드 검사 전략을 모두 지원합니다
이상적인 시나리오를 코딩합니다
는 자신을 찾거나 소음이없는 상용구 코드가 합병되고 모든 지옥이 느슨해 졌던 경우에 대해 들어 본 적이 있습니까? 나는 확실히했다.
위 내용은 18 웹 개발의 비판적 감독의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!