양일등 / FBISKR@orgio.net
|
|||||||||||
1. 웹 프로그래밍 안녕하세요, 새해가 밝아서 벌써 4월입니다. 많은 기대 속에서 2000년을 맞아 이제는 담담히 새 천년을 살고 있습니다. 컴퓨터 역사는 이제 반 백년을 갓 넘었습니다. 하지만 많은 사람들은 그 어떤 것보다도 많은 발전을 이루었다고 합니다. 수많은 운영체제와, 컴파일러, 응용프로그램, 그리고 게임까지. 수 많은 프로그램이 시장에 나와서, 또 우리의 기억 속에서 잊어졌습니다. 요즘을 살펴 보면 데스크탑용으로는 폭넓은 사용자 층을 확보하고 있는 비주얼 베이직, 클라이언트/서버 환경의 구축에 용이한 파워필더, 게임개발에 용이한 비주얼 씨, 그리고 사용자들의 특성에 맞는 여러 가지 언어들이 사용되고 있습니다. 또, 그 분야 또한 아기자기 한 프로그램에서부터 1, 2년씩의 개발기간을 가지는 프로그램들도 있습니다. 우리는 여기서 웹프로그램이라는 영역을 살펴보고자 합니다. 몇 년 전 만해도 우리에게 생소한 단어인 CGI라는 제목으로 서점의 한 자리를 차지하던 책들이 있었습니다. 그 부류의 책들은 유닉스 상에서 씨를 이용해 어떻게 웹에서의 프로그램을 작성하는가 하는 방법들을 설명했습니다. 그리고 아주 인기있는 펄이라는 언어가 CGI 프로그램의 도구로써 사용 되왔습니다. 소프트 웨어 공학에서 보면 어떤 것이 가장 훌륭한 도구인가하는 질문을 던집니다. ‘망치’,‘톱’,‘드라이버’ 혹은 ‘전기톱’ 까지 살펴보면 어느 것이 가장 훌륭한 도구인가 하는 질문은 그리 합당하지 않습니다. 왜냐하면 나사를 조이는데 전기톱을 사용할 수 없고, 못을 박는데 드라이버를 사용할 수 없으며, 나무를 자르는데, 망치를 사용할 수 없기 때문입니다. 그래서 다시 질문을 던지면 "어떠한 작업에 어떠한 도구가 가장 훌륭한가?" 라는 질문을 던질 수 있습니다. 우리가 말하는 CGI는 사용자 인터페이스에서 전달되는 자료를 서버에서 처리하는 그야말로 게이트였습니다. 하지만 웹의 특성상 디자인과 프로그램간의 독립은 불가능했습니다. 프로그램 안에서 디자인된 요소들(테그)를 출력해야 했기 때문입니다. 하지만 이러한 작업 패턴에도 변화가 일었습니다. 바로 PHP의 등장이 그 것입니다.
2. PHP PHP는 Rasmus Lerdorf<rasmus@lerdorf.on.ca>씨가 만든 스크립트 언어입니다. 초기에는 웹에서 자기만의 동적인 페이지를 만들기 위해 약간의 기능을 가지고 있었습니다. 그 당시의 이름은 PHP/FI이 였습니다. 지금은 PHP4로 업데이트 되고, 윈용과 리눅스용 두 가지 모두 개발되고 있습니다. PHP의 가장 큰 특징이라고 할 수 있는 것은 무엇보다도 엄청난 포용성이 아닌가 생각됩니다. PHP를 컴파일 해본 분은 아시겠지만, 지금 인기를 끌고 있는 제품들과의 지원입니다. 수 많은 데이터베이스 제품들은 말할 것도 없고, GD라이브러리와 수많은 다른 제품들의 함수 군을 보유하고 있습니다. 또 언어적인 관점에서 보면 지금 인기있는 언어들의 특징들을 모두 수용하고 있습니다. 대표적으로 각각의 문장은 ;(세미콜론으로 끝나고) 변수명은 펄과 유사하며 거기에 자바 스크립트의 문법과 각각의 제어문들은 C와 유사합니다. 또 개발이 윈도우와 유닉스 모두에서 신속하게 개발되고 있습니다. 이것은 윈도우와 유닉스 계열의 개발이 용이하다는 것입니다. 지금 운영되고 있는 많은 사이트들이 PHP로의 컴버전을 하고 있고 앞으로도 계속될 것입니다. 도큐멘트의 원문을 보면 “PHP is a server-side HTML-embedded scripting language.” 라고 되어있습니다. 이것은 필자나름대로 풀이하면 디자인 요소와 프로그래밍 요소가 독립될 수 있습니다. 이것은 윈도우 계열의 ASP와 유사합니다. 더 이상 HTML테그가 주는 공포에서 벗어날 수 있고 디자인 툴을 이용해서 디자인한 것을 가지고 거기에 동적인 프로그램을 삽입할 수 있습니다. 가령 10개의 테이블을 출력하는 것을 하나의 테이블만 디자인하고 나머지 10개는 그 특성에 맞게 프로그램밍하면 되기 때문입니다.
3. 알아야 할 기본개념 3-1 프로그래밍 환경 먼저 우리는 웹프로그래밍을 한다는 것을 알아야 합니다. 이것은 어쩌면 프로그램 개발 환경에서 보면 거의 불모지나 다름 없다는 것을 또한 인지 해야 합니다. 데스크탑용으로 프로그램을 개발하면서 우리는 개발툴들이 가져다 주는 엄청난 자유에 빠져있습니다. 하지만 웹프로그램에서는 우리에게 만족할 만한 기능을 제공하는 툴들도 드물고, 찾기도 힘듭니다. 필자도 PHP로 프로그램밍을 하기 위해 처음에는 에디터부터 찾아야 했습니다. 그러다가 자동으로 FTP서버에 접속해서 실행해서 디버깅까지 해주는 툴을 찾았지만 그다지 효과적이지 못해서 전통적인 방법을 아직도 사용하고 있습니다.(단지 줄 번호만 나오는 것으로 만족하고 있음) 3-2 오타에 관해서 또 PHP의 문법적인 오류와 다른 사용자의 실수(주로 오타)에 관한 사항을 알아야 합니다. PHP는 변수명에 대해서 앞에 ‘$’만 붙여 사용하면 되도록 했습니다. 어떠한 선언도 필요 없고 사용하고 싶을 때 바로 사용합니다. 과거의 GW-BASIC에서처럼 사용하면 되지만 이것은 또한 우리에게 엄청난 버그로의 길을 열어 주었습니다. 바로 오타의 문제입니다. 가령 $valriable이라고 사용하다가 $veriable이라고 한다면 PHP파서는 우리에게 아무런 경고도 알려 주지 않습니다. 단지 실행이 안돼서 “어 이게 왜 이러지?”라는 의문과 버그와의 싸움에 놓이게 될 것입니다. 3-3 자료 전송 먼저 자료의 전송, 즉 서버로 전송될 자료는
HTML태그의 submit버튼을 클릭하면서 이루어 집니다. <form></form>태그안에
<input>타입으로 정의된 모든 변수들이 전송되며 이것은 자동적으로
PHP에 의해서 변수명으로 전환됩니다. 이것은 우리에게 엄청난 고뇌에서
벗어날 수 있는 기쁨을 줍니다. 이유는 브라우져는 post와 get이라는
두 가지 타입의 전송방법을 가지고 있습니다. 우리가 흔히 <test.htm?a=1>이라고
했을 때 전송되는 a는 get형식으로 전송되는 것입니다. 그리고 <input
type=hidden name=a value=a>는 post로 전송되는 것입니다. 또
각각의 자료들은 브라우져가 인코딩해서, CGI프로그램이 디코딩해야
하는 번거러움이 있었습니다. 그래서 씨로 CGI프로그램을 작성할
때는 cgi.c와 cgi.h를 사용해서 변수들의 자료를 전송했고, 펄을
사용할 때는 cgi-lib.pl이라는 라이브러리를 사용해서 프로그래밍을
했습니다. 하지만 PHP에서는 PHP가 알아서 디코딩까지 해줍니다.
그래서 위의 변수명들을 사용할 때는 앞에
3-4. 쿠키? 쿠키? 컴퓨터를 사용하다보면 꽤 괴상하거나 전혀 의미 부합이 안되는 것을 발견할 수 있습니다. 대표적으로 자바가 있죠. 자바는 선의 프로그래머들이 잘가는 커피숍 이름을 따서 지었다고 합니다. 또 우리에게 유명한 아파치 서버가 있습니다. 그것은 NCSA서버의 후예이면서 원래의 이름은 A PACHE였습니다. 하지만 붙여 읽으면 아파치가 됩니다. 그래서 그 용명성을 생각하면서 점점 더 친근해지는지 모르겠습니다. 쿠키란 무엇일까요? 웹 프로그래밍의 제약 중에 위에서 설명한 여러 가지가 있지만, 자신이 설정한 변수가 사라져 버린다는 것, 또한 문제 아닌 문제였습니다. 이유는 웹서버는(아파치의 경우) 기본적으로
하나의 요청에 하나의 프로세서를 띄워서 서비스를 합니다. 즉 100명이
요청을 하면 100개의 서버가 실행되고 있는 것입니다. 하지만 이것은
요청이 끝나면 즉 사용자가 보고자 하는 홈페이지의 내용을 다 읽으면
서버는 바로 종료됩니다. 이것은 아주 심각한 상황이 될 수 있습니다.
우리는 프로그램밍을 하면서 전역변수는, 혹은 지역변수니 하는
말을 듣는데, 전역변수는 프로그램의 전반적인 상황을 저장하는
역할을 주로 합니다. 웹 프로그램도 마찬가지인데 문제는 이것을
구현할 수가 없다는 것입니다.
; 3-5 데이터 베이스 앞서 설명드렸지만 PHP에서 사용할 수 있는 데이터베이스
제품들은 참으로 많습니다. 우리나라에서는 아직 오라클이나 사이베이스
같은 제품과 같이 연동하는 사례를 찾아보지 못했지만, 외국의 경우에는
상업적인 목적의 사이트들이 이러한 제품과 연동해서 구축하는 사례를
많이 볼 수 있습니다. 우리나라의 경우는 보통 APM이라는 말을 합니다.
A는 아파치 P는 PHP 그리고 M은 MySQL입니다. 우리가 여기서 SQL이라는 공통의 단어를 볼 수가
있는데, SQL은 구조화된 질의 언어로, 쉽게 말해서, 데이터 베이스에게
우리가 원하는 형태의 자료를 어떻게 요청할 것인지에 대한 것들을
우리가 일상적으로 사용하는 말처럼 사용하는 것입니다. 사실 소프트웨어
공학에서 보면 데이터베이스라는 영역이 있습니다. 그 만큼 광범위하고
체계적이며 그 이론 또한 엄청나게 많습니다. 하지만 우리는 여기서
우리가 원하는 정보를 입력/수정/삭제하고 가장 중요한 우리가 필요한
자료를 요청하는 방법을 알아야 합니다.
4. 언어적 관점에서의 PHP 4-1 PHP스크립트로 진입방법 ·진입방법에는 4가지가 있습니다. ① <? echo (“this is the simplest, an SGML processing instruction\n”); ?> ② <?php echo(“if you want to serve XML documents, do like this\n”); ?> ③ <script language=”php”> ④ <% echo (“You may optionally use ASP-style
tags”); %> 하지만 주로 많이 사용하는 방법은 <? ?>를 사용하는데 이것은 나모웹에디터에서 인식을 못하는 문제를 발생시킬 수 있습니다. 그래서 대안으로 4번째 방법인 ASP태그를 사용하는 방법을 생각할 수 있습니다. 이것을 사용하려면 php의 설정파일에서 ASP TAG를 ON시켜야 합니다. 그러면 나모에서도 편집을 할 때 쓰레기 태그 취급을 받지 않습니다. 하지만 드림위버에서는 <? ?>테그도 모두 보존합니다. 4-2 주석 처리 PHP는 ‘C’, ‘C++’ 와 Unix shell 형식의
주석을 지원합니다.
4-3 변수 PHP는 많은 아래와 같은 종류의 변수를 다룰 수 있습니다. Integers $a = 1234; # 십진수 이중에서 우리가 주목할 것은 변수들은 상황에
따라서 자동으로 형 변환을 합니다.
위의 결과는 3입니다. 이것은 전통적인 프로그램밍
언어에서는 찾아보기 힘든 현상입니다.
이라면 위의 것은 $a[0]부터 $a[2]까지의 배열로 존재합니다. 또 배열을 다루는 함수도 많이 있습니다. 몇 가지만 예를 들면 array -- 배열을 생성합니다. 사용법 array array(...); 매개 변수의 배열을 생성합니다. 매개 변수는
‘=>’ 연산자를 이용한 색인으로도 주어질 수 있습니다.
count -- 변수의 원소의 개수를 돌려줍니다 사용법 int count(mixed var); var의 원소의 개수를 돌려줍니다. 일반적으로 var는 배열입니다. 변수가 없으면 0을 돌려줍니다. 그리고 배열이 아니면 1을 돌려줍니다. list -- 변수를 배열인 것처럼 해줍니다 사용법 void list(...); array()와 같이 이것은 실제 함수가 아니라 언어적
개념입니다. list()는 한번에 변수들의 list를 할당합니다.
4-4 제어문 제어문은 C와 유사하기 때문에 따로 설명을 드리지 않겠습니다. if 여기서는 아주 특이한 if문과 for문이 있는데 그것은 해당 구역을 지정하는 것입니다.
위의 것은 해당 코드당 어떤 태그들을 사용할 때 아주 유용합니다. 보통 for문은 테이블을 출력할 때 많이 사용합니다. 4-5 함수 보통 C와 아주 유사한 함수 구조를 갖고 있습니다.
함수는 반드시 사용하기 전에 선언되어 있어야 합니다.
PHP는 또한 클래스를 지원합니다.
하지만 상속에서, 부모클래스의 생성자는 자동적으로 파생되는 생성자를 자동으로 호출하지 않습니다. 이것으로 PHP에 대한 전반적인 내용을 살펴 보았습니다. 지면 관계상 그다지 폭넓은 내용을 다루지 못했습니다. 다음에는 실전 예를 들면서 각각의 쓰임새에 대해서 설명하겠습니다. |