PHP/고도몰

고도몰5 에서 쿼리 로그 디버깅

개발폐인 2023. 1. 11. 13:26

고도몰5 특유의 폐쇄성으로 내부 코드를 모두 확인할수 없습니다.

고도몰5 소스를 분석하다보면, 은 CI3.0 + Templete_ 를 커스텀하여 개발한것으로 추정됩니다.(가비아 퍼스트몰도 동일)

분명 CI3.0 엔 디버깅을 위한 로깅 기능이 있는데, 고도몰5 개발시에 이를 활용할수 있다면, 많은 잇점이 있겠지마,

고도몰5 에선 애초에 이 기능이 모두 막혀 있거나, 소스상에 노출되어 있지 않아 사용이 불가능합니다.

 

그중 제일 짜증나는게 쿼리 로그입니다.

고도몰5는 커머스 솔루션의 특성상 테이블이 많고, 컬럼수도 많고, 테이블구조와 의존관계가 복잡합니다.

(테이블과 테이블 컬럼에 주석을 달아둔건 정말 칭찬합니다. 빠짐없이 들어간거 개발팀에 감사드립니다.)

실행된 쿼리로그만 추적할수 있어도 기능 개선과 추적이 가능해집니다.

 

 

 

쿼리 로그 출력함수는 

$db->query_log() 입니다. 

Compnent 에서 선언된  $db 객체나, controller 에서 load 시킨 DB 객체 둘다 사용 가능합니다.

query_log() 를 그냥 호출하면 아무런 데이타도 출력하지 않습니다.

query_log 는 개발모드(development) 에서만 동작하도록 되어 있습니다. 

(아마 고도몰5 내부 직원들만 이 기능을 사용하는게 아닐까 의심해봅니다.)

 

개발모드를 강제로 설정하기 위해선

App:: 객체에서 다음과 같이 설정합니다. 쿼리를 추적할 컴포넌트나 컨트롤러의 생성함수에서 호출하는게 좋겠죠.

public function __construct()
{
    parent::__construct();
    App::setEnvironment("development");

}

개발중인 서버에만 사용하세요.

 

고도몰5 관리자에서 작업모드로 설정하면 개발모드가 강제로 활성화 될것으로 기대했는데, 안되더라구요. 위와 같이 강제로 지정해야 합니다.

 

위와 같이 생성자에 강제로 개발모드로 설정한후, 필요한 메소드에서 아래와 같이 호출해줍니다.

$this->db->query_log();

그러면 아래와 같은 화면이 나옵니다.

개발자를 위한 화면이라  이쁘지도 않고, 좀 정신없긴하지만 필요한 정보는 다 들어가 있습니다 .특히 실행속도 표시해주는게 아주 좋습니다.

고도몰 성능 튜닝시 참고가 됩니다.

 

 

이것말고도 고도몰5는 파일로그를 따로 기록하고 있습니다.

그런데 이걸 개발자는 조회해서 볼수 없습니다.(내부 cs용도로 쓰고 있을거라 생각되네요)

로그 핸들러를 조작하여 커스텀하여 로그를 볼수 있는 방법도 제공해주지 않습니다.

 

 

다른건 보안이나 안정성을 위해 막아두더라도 쿼리 로그는 표시해주는게 좋지 않을까합니다. 개발자만 쿼리 로그 찍어볼텐데, 숨겨둘 정보는 아닌것 같네요. 플랫폼을 확장시킬려면 이런 부분들을 오히려 더 권장해야 한다는게 제 소신입니다.

 

 

그럼.