Legacy PHP로 개발할 때의 안 좋은 습관들

다음은 내가 Legacy PHP로 개발할 때 쓰던 안 좋은 습관들이다.

 

register_globals 설정을 켜거나 extract() 함수를 사용한다.

PHP에서 사용자로부터 입력 받은 값은 $_GET, $_POST, $_REQUEST, $_COOKIE 변수에 저장된다. 매번 $_GET['parameter']와 같은 형태로 사용하기 귀찮기 때문에 register_globals를 On으로 설정하거나 extract() 함수로 일반 변수로 변환해서 사용했다.

개발하기에는 편리하지만, 다른 변수를 덮어쓸 수 있는 심각한 보안 문제가 있어서 좋지 않은 습관이다.

 

SQL문을 Raw Query로 작성한다.

프레임워크를 사용하지 않으면 어쩔 수 없는 부분이긴 하다. 사실 나는 아직도 Eloquent ORM이나 Query Builder를 사용하는 것 보다 Raw Query를 사용하는게 더 편하다. 간단한 쿼리는 상관없지만, JOIN이나 Sub Query같은 복잡한 구문의 쿼리는 Raw Query가 작성하기에 더 편리하기 때문이다.

하지만, Raw Query를 사용하게 되면 데이터베이스 엔진을 교체하거나 하는 Issue가 발생할 경우 모든 쿼리를 수정해야 한다는 치명적인 단점이 있다.

 

비즈니스 로직에서 HTML, CSS 문자열을 출력한다.

MVC 프레임워크를 사용하는 가장 큰 이유이기도 하다. 비즈니스 로직에서 화면 단에 출력되는 HTML 태그나 CSS 스타일 구문을 아무 생각 없이 문자열로 출력하는 경우가 대표적이다. 당연히 개발 결과물의 일관성이 없어지고 유지보수하기가 까다로워진다. 협업이 힘들어지는 것은 두말할 필요도 없다.

 

Controller 함수와 Helper 함수를 한 파일에 몰아넣는다.

나는 globals.php 같은 파일을 만들어서 거기에 Helper 함수와 Controller 함수를 구분없이 몽땅 집어넣고 모든 PHP 파일에서 include하는 형식으로 개발했다. 구 버전의 제로보드와 Tattertools에서 이런 방식을 활용했다. 당연히 안티패턴에 해당되며 모든 변수와 함수가 공유되기 때문에 보안에 취약한 개발 방법이다.

 

더 있을지도 모르지만, 대충 생각해서 정리해 본 것이 이 정도 되는 것 같다.

지난날을 반성하고 디자인 패턴과 소프트웨어 공학을 열심히 공부 해야겠다.

Develop Framework Legacy PHP Software Engineering Anti Pattern Design Pattern