UI와 API
UI는 User Interface의 약자다. 이것은 시스템과 사용자 사이의 접점을 의미하는데, 사용자의 의지를 시스템에게 전달하면서, 시스템의 상태를 사용자에게 알려주는 장치, 그래픽, 명령어들을 포괄적으로 UI라고 부른다. 다음 그림은 php의 현재 상태를 보여주는 페이지이다. 사용자가 브라우저의 주소창에 localhost/i.php라고 입력하면 서버는 이 페이지를 사용자에게 보여준다. 이 맥락에서 브라우저의 주소입력창과 php의 정보를 보여주고 있는 웹페이지가 UI라고 할 수 있다.
API는 Application Programming Interface의 약자로 (운영체제나 언어 같은) 플랫폼과 그 플랫폼 위에서 동작하는 응용 프로그램이 상호작용하는 접점이라고 할 수 있다. 말이 어렵다. 아래 코드를 실행하면 현재 설치된 php에 대한 다양한 정보를 볼 수 있다.
1.php
<?php phpinfo(); ?>
여러분이 위와 같은 코드를 통해서 php에 대한 정보를 출력했다고 해보자. 그럼 이 정보 페이지를 만든 것은 여러분일까? 아닐까? 이 질문에 대해서 생각해보자.
위의 코드를 통해서 여러분이 시스템에게 지시한 것은 아래와 같다. 2행의 phpinfo();를 통해서 php의 현재 상태를 출력하라고 한 것이다.
반면에 시스템에 지시한 적이 없는데 내장 함수인 phpinfo가 자체적으로 가지고 있는 기능들은 아래와 같다.
- php의 버전과 같은 정보들
- php에 설치된 확장 기능들
위에서 열거한 것처럼 여러분은 단지 phpinfo();를 실행했을 뿐인데 아주 많은 정보가 출력되고 있다. 이 프로그램이 우연히 생길리는 만무하다. 이 페이지는 phpinfo라는 이름의 함수로 이미 만들어져서 준비되어 있는 것이다. 여러분이 이것을 사용할 때는 단지 phpinfo()를 호출하면 되는데 이 함수와 같은 것을 API라고 한다. 사용자가 UI를 이용해서 응용프로그램이 제공하는 기능을 사용하듯이 여러분은 API를 이용해서 플랫폼(여기서는 PHP엔진)이 제공하는 기능을 자신이 만들고 있는 응용 프로그램에서 사용할 수 있게 되는 것이다. phpinfo와 같은 함수를 언어에 기본적으로 내장되어 있다고 내장함수라고도 부른다.
아래 예제는 현재 시간을 출력하는 예제다.
<?php echo date('Y-n-j H:m:s'); ?>
만약 아래와 같은 에러가 발생한다면
Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in D:\BitNami\wampstack-5.4.12-0\apache2\htdocs\library\1.php on line 2
php.ini 파일에서 아래의 코드를 data.timezone = UTC로 변경한 후에 웹서버를 재시작한다.
;date.timezone =
실행결과는 아래와 같은 형식으로 현재 시간을 출력할 것이다.
2013-11-7 10:11:33
내장 함수 date를 호출함으로서 현재 시간을 알아낼 수 있었다. 자신의 응용 프로그램에서 현재 시간을 알아야 한다면 date라는 API를 사용해야 한다는 것을 알아야 한다. 응용 프로그램의 개발자에게 응용 프로그램의 플랫폼이 제공하는 API를 폭넓고 깊게 이해하는 것은 매우 중요하다.
라이브러리
코드를 작성하다보면 자주 사용되는 로직이 있다. 그럼 이 로직을 재활용하고 싶은 마음이 생기기 마련인데, 재활용 가능하도록 만든 로직을 라이브러리(library)라고 한다. 라이브러리는 자기 자신이 사용하기 위해서도 만들 수 있고, 불특정 다수가 사용할 수 있도록 공개할 수도 있다. 라이브러리를 사용하면 필요한 로직을 직접 구현할 필요가 없이 라이브러리에서 제공하는 API를 호출하는 것을 통해서 원하는 기능을 사용할 수 있게 된다.
PHP의 표준 라이브러리 문서
PHP는 웹개발에 필요할만한 수 많은 내장함수를 제공한다. 이 내장함수들은 빠르게 웹에플리케이션을 구축하는데 도움을 주고, 직접 구현하는 것보다 실행속도가 빠르기 때문에 어떤 기능을 구현하기에 앞서서 API가 있는지 찾아보는 것이 바람직하다.