본문 바로가기
tip

PHP , JSP , PHP , Extension , JNI 소개

by [김경민]™ ┌(  ̄∇ ̄)┘™ 2013. 10. 24.
728x90


[출처] http://seed.kisa.or.kr/iwt/ko/bbs/EgovFaqList.do


 

1. PHP

1994년에 처음 개발되었으며, 처음에는 ‘Personal Home Page Tools’이라 불렸 으나 현재 공식적으로 Personal Hypertext Preprocessor의 약자를 의미한다. 하이퍼텍스트 생성 언어(HTML)에 포함되어 동작하는 스크립팅 언어 중 하나이며 공개된 무료 소스이며 공개된 소스답게 보통 LAPM (Linux- Apache-MySQL-PHP/Perl/Python)환경에서 쓰인다.


비록 PHP HTML의 처리를 위해 탄생했으나 웹 프로그래밍이 아닌 다른 분야에도 사용될 수 있다. 많은 서버 측 오픈 소스 소프트웨어는 PHP로 구현 되었다.


PHP를 바탕으로 하는 프로그램 중 대표적인 예로 phpBB와 위키백과를 구동시키는 미디어위키를 들 수 있다. 대한민국의 PHP로 만든 게시판 중 유명한 것에는 제로보드, 미니보드 등이 있다.


PHP는 별도의 실행 파일을 만들 필요 없이 HTML 문서 안에 직접 포함되어 실행되며, C, 자바, 펄 언어 등에서 많은 문장 형식을 준용하고 있어 동적인 웹 문서를빠르고 쉽게 작성할 수 있다. 마이크로소프트에서 개발한 ASP(Active Server Pages)와 같이 스크립트에 따라 내용이 다양해서 동적 HTML 처리 속도가 빠르며,PHP 스크립트가 포함된 HTML 페이지에는 .php, .php3, .phtml이 확장자로 붙는 파일 이름이 부여된다. PHP는 텍스트, 특히 HTML의 처리에 강점을 가지고 있다.


URL의 파싱이나 폼 처리, 정규 표현식 등이 그 한 예이다. 또한 다양한 데이터베이스를 지원하므로 데이터베이스와 사용자간의 다리 역할도 잘 수행한다. PHP의 기능 확장을 위하여 다양한 모듈들이 기본적으로 제공될 뿐만 아니라 사용자가 직접 작성하여 PHP에 확장 모듈을 생성 및 포함시킬 수도 있다. 현재 가장 최신 버전은 2008 2월에 발표된 5.2.5이다.


2. JSP


Java Server Pages(JSP)
는 웹 클라이언트의 요청에 동적으로 HTML, XML, 또는 다른 형태의 문서를 응답해주는 기능을 제공한다. , JSP HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어이다.


클라이언트가 서비스를 요청하면, JSP의 실행을 요구하고, 웹 애플리케이션 서버의 JSP 컴파일러는 서블릿 컨테이너에서 JSP 코드를 서블릿 원시코드로 변환된다.


그 후에 JSP 컴파일러는 서블릿 원시코드를 컴파일한 후 바이트 코드로 만들어 실행 결과를 HTML 형태로 클라이언트에 돌려준다. 이러와 같은 프로세스가 한번 진행된 후에, 코드는 컴파일 되어 메모리 로드되어 있으므로 (그림 C-1)과 같이 2번째 요청부터는 응답이 매우 빨라지게 된다.





(그림 C-1) JSP 실행과정

 

3. PHP Extension

PHP 대부분의 함수들은 Extension 모듈에 그룹화 되어 들어 있다. 이 많은 함수들을 표준 Extension이라 불리며 총 400개 이상이며 Extension을 사용하는 경우는 아래와 같다.


o PHP로 직접적인 호출 할 수 있는 라이브러리가 없는 경우

o PHP의 특별한 사용

o PHP 코드의 성능개선

o PHP 코드의 특정 부분을 숨기기 위해


PHP Extension
의 실행과정을 이해하기 위해서는 Core를 이루고 있는Zend Engine(ZE) PHP Core를 이해해야 한다.


PHP
Core는 크게 ZE PHP Core, 두 부분으로 구성되어 있다. 하위 레벨에 자리 잡고 있는 ZE는 사람이 읽을 수 있는 스크립트를 컴퓨터가 읽을 수 있는 토큰으로 분리 하고, 각 토큰들을 프로세스 영역에서 실행하는 것을 담당한다. 또한 메모리 관리, 변수 영역, 함수 호출 등이 모두 ZE의 관리를 받는다. 다른 절반인 PHP Core SAPI(Server Application Programming Interface, also commonly used to refer to the host environment - Apache, IIS, CLI, CGI, etc) 레이어와의 통신과 바인딩을 담당한다. 그리고 safe_mode open_basedir 확인을 위한 일관성 있는 Control Layer뿐만 아니라 파일과 네트워크 I/O관련된 fopen(), fread(), fwrite() Userspace 함수를 제공한다.


PHP Extension
의 실행과정은 다음과 같다. SAPI가 시작 할 때, PHP는 각 Extension의 코드를 로드하고 Module Initialization 루틴(MINIT)을 호출한다. 이 과정에서 각 Extension은 내부 변수 초기화, 자원할당, 리소스 핸들러 등록과 ZE에 함수를 등록을 완료한다. 그래서 만일 스크립트에서 이 함수중 하나를 호출한다면, ZE 는 어떤 함수가 실행되어야 할지 알 수 있다.


PHP
는 페이지 처리 요청을 하기 위해서 SAPI 레이어를 기다린다. 처리 요청 메시지가 발생하면 PHP ZE에게 스크립트를 실행 시킬 수 있는 환경을 만들도록 요청한다. 이 때 PHP는 각 Extension 모듈의 Request Initialization(RINIT) 함수를 호출한다. RINIT는 특정 환경 변수를 셋팅하고, 특정 자원 할당, 또는 검사 같은 다른 작업을 수행하기도 한다.


일단 요청이 초기화 되면, ZE PHP 스크립트를 토큰으로 나누어, 결국 opcode 까지 나누어지면 opcode를 실행시킨다. opcode에서 Extension 함수를 호출하면ZE은 함수에 파라미터를 넘기고, 임시적으로 제어권을 Extension 모듈로 넘긴다.


4. JNI

Java Native Interface(JNI) Native 프로그래밍 인터페이스이다. JNI, Java Virtual Machine(JVM)에서 실행되는 Java 코드가 C, C++, 어셈블리 언어 등 다른 프로그램 언어로 작성된 어플리케이션이나 라이브러리와 상호 운용할 수 있다.


Java로 어플리케이션 전체를 기술할 수 있는 경우도 있겠지만, Java만으로 어플리케이션을 구성할 수 없는 상황도 있다. Java로 어플리케이션 전체를 구성할 수없는 경우, 프로그래머는 JNI를 사용하여 이와 같은 상황을 대처할 수 있다


또한 이미 존재하는 어플리케이션에 Java 어플리케이션이 접근할 수 있도록 하기 위해서도 사용된다. , JNI Java 프로그래밍 언어만으로 구성할 수 없거나 다른 프로그래밍 언어로 작성된 어플리케이션에 접근하기 위해 네이비브 메서드를 작성하는 역할을 수행한다. 그러므로 JNI는 두 가지 인터페이스로서 두 가지의 Native 코드 (Native Libraries, Native Applications)를 지원한다.


o JNI Native Libraries에 구현되어 있는 함수를 Java 어플리케이션이 호출하기 위한 Native 메서드를 작성한다. Java 어플리케이션은 Java로 구현된 메서드를 호출하는 것과 같이 Native 함수를 호출한다. 하지만 그 뒷면에는 Native Libraries에 다른 프로그래밍 언어로 구현된 Native 메서드가 구현되어 있다.


o JNI Native 어플리케이션에 JVM을 끼워 넣을 수 있도록 해주는 Invocation 인터페이스를 지원한다.






(그림 C-2) JNI의 역할




728x90

'tip' 카테고리의 다른 글

포토샵 없이 포토샵 사용하기  (0) 2013.10.31
중국 프로그램 설치 방법  (0) 2013.10.31
Version Schema Difinitions 버전정보표기방법  (0) 2013.10.24
윈도우7에서 IE8 설치하기  (0) 2013.10.23
리눅스 관리 기법  (0) 2013.09.30

댓글