4.기초 실습


  솔직히 기술자들이란게 이론보다 실기에 강한 법. 그냥함 짜보자.

  • 설 정

      일단 공통적으로 앞장에서 설명한 것처럼 Directory가 다음과 같이 지정되었다고 가정한다.

    Hostwww.deadfire.com 
    Home Directory/user/deadfire/www.deadfire.com/
    CGI Directory/user/deadfire/cgi-bin/www.deadfire.com/cgi-bin/


  • 최초의 CGI 프로그램

      아무생각없이 다음코드를 작성하고 컴파일하기 바란다. 당연히 실행파일은 CGI디렉토리 밑에 있어야 하고, 적절한 경로로 접근해야 한다. 즉, /user/deadfire/cgi-bin/sample1.c라는 파일을 작성한다고 하자.

    #include <stdio.h>

    main()
    {
    printf("Content-type: text/html\n\n"); /* 1 */

    printf(
    "<HTML>\n<HEAD><TITLE>Sample 1 CGI</TITLE></HEAD>\n"
    "<BODY><H1>This is My First CGI Program!!</H1>\n"
    "</BODY>\n</HTML>\n"); /* 2 */
    }


  • 컴파일하기

      UNIX에서 컴파일하는 법은 단순하다. source file이 sample1.c 이므로,

    cc -o sample1 sample1.c
      여기저기 버그가 있는 사람들은 완전한 실행파일을 만들자. 자, 이제는 브라우저로 접근하자. 어떻게? 이렇게,

    http://www.deadfire.com/cgi-bin/sample1
    실행 파일명   이 예에서는 실행파일명을 sample1이라고 했다. 일부의 사람은 뒤에 cgi를 붙여서, sample1.cgi라고 작성하는 사람도 있기도 하다. 뭐, CGI 프로그램의 경우는 특별히 파일명에 의해서 실행되는 것이 아니라, 해당 파일에 대한 실행권한이 있느냐에 따르기 때문에 파일명이 뭐든 상관 없다. 심지어 sample1.jpg라고 해도 잘 수행될 것이다.


  • 분 석

      실행결과는 직접 확인해 본 사람은 알 것이다. 이제 코드부분을 한번 살펴보자. /* 1 */로 마크된 부분 즉,

    printf("Content-type: text/html\n\n");
      이부분은 반드시 필요하다. 이부분을 헤더(header)라고 부르는데, 한글자라도 달라서는 안된다. 즉 웹서버가 특정한 문서를 줄 때 먼저 그 문서의 형태를 전송하고 본문을 전송하게 된다. 즉, HTML문서의 형식은 text/html인 것이다. 이렇게 내려갈 때 브라우저가 알아먹게 되는 것이다.

    개행 문자   위에서는 \n\n을 썼지만 원래는 \r\n\r\n으로 적어야 한다. 그러나 UNIX에서는 \r을 무시하므로 크게 관계는 없다.


      이 헤더부분이 없으면 어떻게 될까? 해봐야 한다. 이 헤더가 얼마나 중요한지 알 게 될 것이다.( 힌트를 주자면 Server Error 메시지를 보게될 것이다. )

      그리고, 나머지 /* 2 */ 부분은 C코드로 좀 희안해 보이겠지만, 사실은 문자열을 내리 출력한 것뿐이다. 겁먹지 말고 찬찬히 들여다보면 이해가 갈 것이다.

  • 별거 아니군!

      그렇다. CGI는 진짜 별 게 아니다. 원리는 간단하다. 즉, 브라우저가 특정한 CGI실행파일을 요청하게 되면( CGI로 지정된 Directory의 파일을 요청하면 ) 웹서버가 일단 CGI실행파일을 실행시키고 출력결과를 모아두었다가 브라우저로 전송하는 것이다.( 대부분의 CGI 실행결과는 HTML이다. )

      단, 이때 브라우저와 웹서버와의 규약인 헤더와 같은 정보를 반드시 보내줘야 한다. 이러한 규약이 바로 CGI(Common Gateway Interface)인 것이다.

- Last Update : 2001.7.9 by Deadfire(http://www.deadfire.net)

CGI with C 기초
서 언
준 비
용어 설명
기초 실습
기초 이론
작동 원리
Form Tag
     - GET METHOD
     - POST METHOD
Common Founction

Copyright ⓒ 1997 ~, Deadfire Program Master