파이썬에 대해 다시 본격적으로 공부하기로 마음먹으면서 바로 생활코딩의 파이썬 코스를 수강하기 시작했다.
블로그의 첫 시리즈에서는 해당 코스를 수강하면서 가장 많이 공부한 개념인 CGI에 대해 다루고자 한다.
CGI를 알려면 공부할 개념들이 몇가지 있는데, 일단 웹서버에 대해서만 간략하게 알아보자.
웹 서버의 기본적인 개념은 mozllia.org에서 잘 설명해놓아서 그 내용을 참고했다.
소프트웨어 측면에서, web server는 기본적으로 웹 사용자가 어떻게 호스트 파일들에 접근하는지를 관리합니다. 여기서 web server는 HTTP서버로 국한합니다.
HTTP 서버는 URL(Web address)과 HTTP(라우저가 웹 페이지를 보여주기 위해 사용하는 프로토콜)의 소프트웨어 일부입니다.
브라우저가 웹 서버에 있는 파일을 필요로 할때, 브라우저는 HTTP를 통해 파일을 요청합니다.
요청이 올바른 웹 서버(하드웨어)에 도달하였을 때, HTTP 서버(software)는 요청된 문서를 HTTP를 이용해 보내줍니다.
웹 서버는 정적 웹서버와 동적 웹서버로 나뉜다.
정적 웹 서버 :
동적 웹 서버
프로세스 :
WAS가 웹 서버로부터 처리 요청을 받으면, 프로그램의 실행결과를 웹 서버에 전달 → 웹 서버는 해당 결과를 웹 클라이언트에 전송
클라이언트 ↔︎ WAS 프로세스를 잘 정리한 글을 참고하면 좋을 것 같다.
대표적인 웹서버로는 Apache HTTP Server, nginx가 있고, AS에는 Apache Tomcat이 있다.
그렇다면 이제 CGI에 대해 정리해보자.
CGI에는 '인터페이스'라는 개념이 들어가기 때문에 인터페이스에 대해서도 간단하게 찾아보았다.
인터페이스 = 상호 간의 소통을 위해 만들어진 물리적 매개체나 프로토콜
그럼 프로토콜이란? : 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계
아래는 CGI를 잘 표현해놓은 이미지이다.
여기서 HTTP(Protocol)이란 인터넷 통신규약 중 하나로서 브라우저에서 HTML 파일을 전송해주는 규약을 말합니다.
이렇게 보면, CGI는 위에서 설명한 AS(어플리케이션 서버) 개념과 유사하다고 볼 수 있다.
나는 기본적으로는 웹서버가 클라이언트에게 응답을 보내기 위해 사용자가 만든 애플리케이션과 통신 해야 하는데, 그것을 도와주는 인터페이스라고 이해했다.
실제 CGI를 통해 동적인 콘텐츠를 전달하는 걸 간단하게 살펴보자.
좀 더 깊게 보려면, 아래 링크에 있는 이미지를 간략하게 보면 도움이 될 것 같다.
CGI의 특징을 이해하는데 이 글의 도움을 많이 받았다.
CGI는 가장 오래된 인터페이스이고, 거의 모든 웹서버를 지원 가능.
CGI를 구동하는 방법이 한가지는 아니지만, 대표적인 방법이 Apache HTTPd.
웹서버와 통신하기 위해 CGI를 사용하는 프로그램은 매 리퀘스트마다 서버를 재시작해야 함.
모든 리퀘스트는 파이썬 인터프리터를 새롭게 구동하기 때문에 CGI는 부하가 적은 상황에서만 쓸모 있는듯.
CGI의 장점은 간편하다는 것. CGI를 사용하는 프로그램을 작성할 때 세줄 정도만 추가하면 됨.(그러나, 이러한 간편성은 댓가를 치를 수 있음.)
단점도 명확한 편. 파이썬 스크립트가 처음부터 실행 가능하지 않음. CGI 스크립트가 실행 가능하지 않은 상태이면, 웹서버는 유저에게 이 스크립트를 실행시키고 결과를 전송하는게 아니라 다운로드 하게 함. 그래서 파일 생성시 매번 파일의 실행 권한을 얻을 수 있는 chmod a+x your_script.py
를 실행 시켜주어야함.
스크립트 첫 라인은 무조건 Unix-type이여야 한다고 함.(shebang)
나는 Mac OS 환경이어서 많이 귀찮진 않았지만 윈도우 환경은 Unix line endings으로 변환이 필요하다고 함. (다행히 대부분의 에디터가 이 변환을 지원한다고 함.)
또한 shebang 안의 path가 항상 정확해야함. shebang은 간단히 말하면 Python path를 찾는 코드인데, 정의해놓은 path에 Python이 설치가 안 되어있으면 코드가 동작 하지 않음. 그래서 항상 #!/usr/bin/env python
등의 경로를 숙지하고 있어야 함.
웹서버가 파일을 읽을 수 있어야 하기 때문에 파일을 항상 읽기 가능한 권한으로 만들어야 함.
스크립트 파일이 Byte Order Mark를 포함하지 않아야 함. (BOM은 UTF-16 관련 개념인 것 같은데, 좀 더 공부해야봐야겠다.)
CGI 이후에 WSGI라는 개념이 나왔는데, 현재는 WSGI를 통해 CGI를 구동하는 프로그램을 작성하는게 가능함. 더 나은 옵션이 없을 때 WSGI를 통해 CGI를 구동하면 된다.
CGI를 공부하다보니 웹서버에 대해서도 많이 알게 되었다. CGI 이후에도 발전을 위해 mod_python, FastCGI, SCGI, WSGI 라는 개념도 나왔는데 후속 글에서 다루어보고자 한다.
참고 글 :
개발 도서 스터디 자료 만들던 중에 우연히 들어오게 되었습니다 ^&^ 좋은 자료 감사합니다 ㅎㅎ