저의 목적은 어디 까지나 가볍고 빠르고 영문 메뉴얼의 디테일한 설명을 기준으로 말씀을 드린다면.. zend / symfony / cakePhp 등이 있겠으나..
http://codeigniter.com 의 CI가 최고 인듯합니다. 지금 현재 이녀석으로 개발중이지만 FancyURL과 mod_rewrite의 부분이 처음에 좀 문제였지만 역시나 활용도나 확장성은 나물랄때가 없었습니다..
또한 Php4와 php5를 모두 지원하고 Db와 템플릿 등 확장성에는 제 입맛에 가장 좋았습니다. 그리고 뭐니 해도 영문 메뉴얼... PDF로 Reference 한장에 쫘악 보기 쉽게 나열 한거 부터며 상세한 메뉴얼등이 좋았구요.. 포럼과 wiki를 통해 공개 라이브러리가 쓸만한게 많더군요..
동영상으로 블로그 제작 기법등 소개 하는 메인 메뉴얼을 보시면 어떻게 구현이 되는지 충분히 이해가 되실겁니다.
프레임워크에 관심이 있으신분은 한번 보시구요.,.
가장 뭐니 뭐니해도 자신(=회사)에게 가장 필요한 부분을 제공하는 프레임워크가 최고의 프레임워크가 아닐까 합니다.
요즘 정신없이 개발을 하다가 문득 개발자의 코딩 스타일에 많은 관심을 가지게 되면서 DBA 직종의 분들의 소스를 가끔 훔쳐 봅니다. 긴 SQL의 내용은 가로 80라인을 넘어서 New Line 보단 아래로 풀어서 쓰는게 소스 가독성면에서는 뛰어 나다는 것을 깨우치고 작년 부터 SQL 구문은 아래와 같이 사용합니다.
요즘 소리바다 웹하드 서비스인 파일바다 개발에 한참 열을 올리고 있습니다. 스토리지 이전 때문에 정신없이 시간 가는줄 모르는데 벌서 4월 중반이 되어 버렸습니다. ^^;
요즘 제가 DEBIAN LINUX에서 CGI 개발 한다고 5년만에 다시 GCC를 이용해 C 프로그램밍을 하는데 참 이거이 .. --; PHP가 참 개발 하기 편하구나라고 새삼 또 느끼게 되었습니다. 이놈의 Pointer와 메모리 선언.. 변수형등.. 그리고 함수라고는 몇개 안되고.. SI업체의 라이브러리를 사용해야 하기 때문에 문자열 함수등은 모두 자체개발을 통해 이용해야 하는데 Path경로 자르기 하나 만드는데 머리 터지는 줄 알았습니다.
기존에 PERL로 만든 FILE SYSTEM CGI만들 때도 궁시렁 궁시렁 했지만 PERL 또한 참으로 발전한 언어라고 생각이 들 정도 C의 보수적인 개발 환경.. LINUX 콘솔에서 MAN PAGE와 VI를 통한 개발은 WINDOG XP 와 EDITPLUS의 단축키에 익숙한 저로선 너무나 힘든 개발이었습니다.
하지만 여기서 중요한 것은 까탈스럽고 건조한 GCC의 환경과 C의 메모리 관리체계야 말로 시스템 개발에 가장 안정적인 환경과 메모리 누수를 막기 위한 가장 엄격하다고 할 수 있을거 같습니다. 사실 PHP로 개발을 하다 보면 에러와 Warring만 안뜨면 그냥 넘어 가지만 사실상 효율적인 코딩 스타일이 아니면 향후 Debuging 할때 많은 시간이 소요 되기 마련입니다. 사실 설계와 코딩 시간은 얼마 되지 않지만 디버깅 할때 아무리 부라우져에 찍어봐도 원인 모를 오류 때문에 시간을 많이 빼긴적이 한두번이 아니거든요...
서론이 너무 길었네요.. 본격적인 남구스의 Coding Style #1
그래서 오늘은 저의 코딩 습관에 대해 말씀 드리고 싶습니다. 제가 표준은 아니지만 나름대로의 철학(?)과 해외 유명한 코더들의 습관을 배울려고 많은 노력해서 오늘 여전히 이런 습관을 가지고 개발을 하고 있습니다. 그 중에 몇가지만 소개 하겠습니다.
IF문 비교
가장 많이 사용하시는 제어문은 IF문이 아닐까 합니다. 하지만 좀더 신경을 쓰면 디버깅 오류의 확율을 줄일 수 있습니다.
ex1) if ( TRUE === empty($val) ) { echo '$val의 값이 비어 있습니다'; }
제가 문자열 함수를 자주 사용하는 이유는 리턴값이 TRUE와 FALSE로 표현되는 것이 많은지라 IF문을 사용할 때 자주 이용합니다. 위의 보시면 PHP에서의 비교연산자 '===' 가 나오는데 생소하시는 분들도 계시고 기존의 '=='와 차이가 없을꺼라고 하실지 모르지만 분명한 차이가 있습니다.
'===' 형과 값이 같을 경우 TRUE/FALSE '==' 값이 같을 경우 TRUE/FALSE
ex2) $intValue = 1;
if ( '1' === $intValue ) { echo '$intValue = str 1'; } if ( 1 === $intValue ) { echo '$intValue = int 1'; } if ( 1 == $intValue ) { echo '$intValue = int 1'; } if ( '1' == $intValue ) { echo '$intValue = str 1'; } //print out $intValue === int 1 $intValue == int 1 $intValue == str 1
무슨 차이가 있으신지 아시겠죠..? if ( '1' === $intValue ) 부분은 '1'이 int형이 아닌 str형이라서 FALSE라 결국 거짓으로 다음 IF행을 실행하겠죠..? 형선언이 없고 자동 형변환이 PHP의 장점이긴 하나 이런 부분을 이해 없이 개발을 하다보면 어디서 버그가 생겼는지 찾기가 힘듭니다.
그러면 여기서 하나 더 보시죠.. 제가 즐겨 쓰는 변수 비교 형태입니다. 위에 보시다 시피 비교문에서 보통
if ( $intValue == '1' )
이렇게 쓰는게 보편적인것인데..
if ( '1' == $intValue )
라고 쓴 이유는 초보 분들이 간혹 이런 실수를 하시는데 '==' 비교 연산자를 '=' 대입연산자(변수 복사 연산)로 오타를 낼 경우에 값이 바뀌게 되어 버리는 경향이 있습니다.
if ( $intValue = '1' )
그래서 왜 값이 변했는지 찾기가 힘들 경우가 종종 있는데요.. 이럴때 변수 대입을 방지 하기 위해서 상수를 왼쪽에 두개 되면 상수에 변수를 대입을 할 경우 즉,
Parse error: parse error, unexpected '=' in /var/www/Process/namgoos.php on line 66
이라는 에러와 함께 종료 되기 때문에 66째 라인에가서 '=' 로 되어 있는 녀석을 '==' 로 수정 하면 금방 버그를 찾을 수 있겠죠..?
해외 phpFrameWork소스를 분석 중에 클래스와 함께 이런 형태로 많이 구현을 하고 있는 것을 보았습니다. PHP에 적절히 장점과 단점을 함께 활용한 사례라 생각되어 오늘까지 줄기차게 쓰고 있는데 혹시라도 개발자 여러분들 중에서 필요하시다면 이런 습관을 지금부터라도 바꾸신다면 디버깅하는 시간이 다소 줄어들 것이라 생각됩니다.
너무 길어서 사람들이 외우기 힘들겠죠..? 웹서버는 cyworld.com/ 이후의 값을 _GET형태로 변수로 저장을 합니다. ID = namgoos 이니깐 user db 에 namgoos를 쿼리를 날려서 user의 member.seqno를 받아 /pims/main/pims_main.asp?tid=UID_CODE 형태로 새창을 열어 로드를 하고 로드가 되면 처음에 열었던 Parent Window는 cyworld.com 초기 화면으로 넘어 가게 되는 것이죠.
자..그러면 왜 TT(*테터)외 기타 블로그에서 FancyUrl을 쓰는 목적이 무엇이냐..?? 물론 Article의 주소를 쉽게 기억하기 위함도 있지만 한글 처리의 문제가 있겠죠? 그래서 사실상 외국 블로깅툴을 보면 FancyUrl의 목적은 검색엔진의 노출에 관련이 깊습니다. 즉 SEO TOOL로서 비중이 크다고 할 수 있겠습니다.
야후 및 구글은 URL에 ?/& 형태의 파라미터 연결 기호의 URL을 검색 INDEX에서 제외를 시켜 버럽니다. 그래서 FancyUrl은 마치 파일의 URL처럼 검색엔진 크롤러가 인식하기 때문에 IDNEX에 추가가 되겠죠? 하지만 프로그램을 돌려 상위에 위치하고 싶은 몇몇 분들의 장난을 원천 봉쇄하기 위함이나 기존에 돈내고 스폰서 링크에만 신경쓰는 국내 기업에서는 크게 와닿지 않는 부분이나 해외의 경우 절대적인 마케팅 수단입니다.
EX)구굴의 SITEMAP 크롤링 통계 내용
이 통계는 크롤링한 페이지에 대한 배포 정보를 제공합니다. PageRank 배포는 홈페이지뿐 아니라 사이트 내의 모든 크롤링된 페이지를 반영합니다.
그럼 이런 형태의 FancyUrl을 Apache의 Mod_Rewrite없이 구현을 해볼까요..? 저도 값을 받는 것을 몰라 miniwini.com에 물어 봤더니 바로 답변을 주셔서 그걸 가지고 응용해서 만든 것입니다.
// fancy url - 넘겨 받은 값을 archiv 배열로 모두 치환 $realUrl = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['REQUEST_URI']); $arrFancyUrl = explode('/', $realUrl);
만약에 블로그 엔트리의 주소가 http://www.namgoos.com/index.php/archive/32 라면 index.php 는 $arrFancyUrl[1] 에 저장 되고 archive는 $arrFancyUrl['2'] 32는 $arrFancyUrl['3'] 에 순서 대로 저장이 되겠죠? 이런 형태로 값을 받은 것을 각각의 변수에 할당 하여 사용하면 됩니다.