Unix/Solaris 관련게시판

2002/04/01(22:09) from 210.117.182.162
작성자 : 강줄기 (jkkang65@hanmail.net) 조회수 : 2568 , 줄수 : 305
Re: [Apache] Apache - DSO 방식이란?



웹서버의 시작 Apache(DSO)

김태호/diver708@netian.com





-들어가면서-

Apache의 어원은 A PAtCH에서 나온 말이다. 세계의 웹서버 시장에서 50% 이상을 점유하고 있는 좋은 웹서버 일뿐만이 아니라, 기능, 보안, 속도와 무료라는 큰 매력을 가지고 있다. 하지만, 가장 큰 단점이 아파치 자체로 인한 서버 장애시 대처방법이 없는 것과, 버전이 올라갈 때 마다 나오는 새로운 내용에 대해서 체계적인 매뉴얼이 부족한 것도 그렇고 GUI방식의 웹서버의 설정이 안되는 것등(첨 리눅스를 접하는 사람은 설정하기가 상당히 까다로울 것이다) 많은 문제점 등에도 불구하고 많은 사람들에게 사랑 받고 있는 이유가 있을 것이다. 지금도 누군가가 끊임없이 개발되고 사용자가 원하는 방향으로 만들어지고 있기 때문에 상용서버보다 훨씬 많이 사용되고 있다고 생각한다. 모든 설치 과정은 독자들이 이해하기 쉽게 설치 순서대로 설치의 과정을 화면 캡쳐 방식을 이용했다. 이 글을 읽고 모든 독자들이 설치시에 어려움이 없이 설치했으면 한다.



DSO(Dynamic Shared Object)

아파치의 설치 방식은 두 가지가 있다. 하나는 DSO(Dynamic Shared Object) 동적 모듈적재 방식이고 하나는 Static Object라고 하는 방식이다. DSO방식은 아파치를 먼저 컴파일하고 다른 모듈들을 추가로 설치할 때는 아파치를 재 컴파일하지 않고 한번 설정되어 컴파일된 아파치를 계속 사용하는 것이다. 즉, DSO방식은 아파치를 단 한번만 컴파일한다는 것이다. 이점은 관리, 설치면에서 커다란 장점이다.
Static 방식은 설치면에서 추가로 모듈을 설치하려고 하면 설정하려는 모듈만 설정하고 컴파일하는 과정이 필요할 뿐만 아니라 아파치 또한 그에 따라 컴파일을 하여야 한다. 이는 관리면에서 단점이 될 수 있다. 시스템 측면에서 이 두 가지의 차이점이 있다.

먼저 DSO는 아파치에 설치된 모듈이 필요할 때 시스템에 적재된다. 이는 클라이언트의 요청에 응답하는 요청시간이 다소 느릴 수 있지만, 하드웨어의 속도가 뒷받침된다면 어느 정도 해결이 될 수 있는 부분이다. 여하튼 이런 방식(DSO)은 시스템의 리소스(메모리, CPU)들을 적절하게 효율적으로 사용한다고 볼 수 있다. 이 방식은 아파치의 1.3.x 버전의 후반 버전에 나온 실험적인 성격을 가졌지만, 이젠 거의 안정 수준에 올라온 것으로 보고 있다.

또 다른 방식인 Static 방식은 이전 방식(DSO)와는 다소 차이가 있다. 이 방식은 아파치에 추가된 모듈이 아파치의 기동과 함께 모든 모듈을 포함하여 시스템에 적재한다. 만약 아파치의 기동과 함께 적재된 어떤 모듈이 클라이언트에 의해 거의 쓰지 않는다면 쓸데없이 시스템 리소스를 점유하고 있으므로 이는 비효율적이라 볼 수 있다. 또한 아파치와 각 모듈들은 설치시 복잡하다. 각 모듈과 설정된 아파치에 또 다시 모듈을 추가하려 할 때 아파치와 모듈을 다시 컴파일하여야 한다.

필자는 Apache+Mysql+PHP+postgresql로 웹서버를 운영하고 있다. 물론 아파치를 재컴파일 하지 않고 DSO 방식으로 PHP추가로 설치했다. 일반적인 Static방식의 설치에 대해서는 많은 문서들이나 자료들이 있기 때문에 Static방식의 설치는 언급하지 않고 DSO방식에 대해서 설치해 보겠다.
그리고 간단하게 나마 PHP의 아파치의 DSO설치시의 설치법과 초보자들이 이해하기 어려운(필자가 첨 유닉스를 접했을 때 상당히 이해하기가 어려웠다) 유저 인증법 mime.types에 대해서도 적어보았다. 아파치 서버중에서 가상호스트 설정, SSI 등 중요한 부분이 많지만, 기존에 나와있는 문서들에서도 설명이 잘 나와있기 때문에 빼기로 하겠다.

Apache (Dynamic shared Object)의 설치

참고로 필자는 리눅스 설치방법을 custom으로 설치했다. 배포본에서 설치된 directory와는 다소 차이가 있다.

우선 최신버전을 다운을 받자(apache_1.3.12)
필자는 /usr/local/src에 모든 소스 파일들을 다운받았다.

1)  아파치를 다운받은 디렉토리로 이동한다.  



2)  apache_1.3.12.tar.Z을 압축을 풀어준다.



3)  소스가 풀린 디렉토리로 이동한다.



4)  ./configure 명령을 수행한다.

--prefix=/usr/local/apache\는 아파치 소스가 컴파일될 디렉토리
   (default Dir /usr/local/apache)를 지정해주는 것이다.
--enable-shared=max 는 DSO컴파일 옵션이다. 이 명령을 주지 않으면 default로 static
   방식으로 설치가 된다.
   APXS방식은 다른 문서를 참조하기 바란다.



5)  make를 해준다.



6)  apache 설치의 마지막인 make install을 실행한다.



이제 아파치 웹서버의 소스 설치가 모두 끝났다. 이제 웹서버를 기동하는 것과 웹서버를 테스트 해보는 것을 해보겠다.

7)  아파치 소스가 컴파일된 디렉토리로 이동한다.

#cd /usr/local/apache

8)  # cd conf 하면 아파치 설정에 관한 모든 파일들이 있다.

  # vi htttpd.conf를 실행해본다.
필자는 DNS가 되어 있지 않아서 ServerName에 필자의 IP주소를 넣어 주었다. 만약 DNS가 되어있을 경우는 주석을 풀어 주면 된다.



ServerName 210.110.144.161 추가했다.

9)  이제 아파치 웹서버를 기동시켜 준다.

 ▷웹서버를 중지 시키려면 ./apachectl stop



10)  초기 html파일이 index.html 인데, 이 파일은 /usr/local/apache/htdocs
      밑에 있다.
      1.3.*버전과 1.3.12버전과의 차이점이다. index.html의 파일명을 고쳐준다.





11)  이제 netscape를 실행 시켜서 자신의 주소(localhost나 자신의 IP)를 넣어 준다.
      이 화면이 정상적으로 보이면 웹서버가 정상적으로 작동이 되는 것이다.



 <그림1> 정상적으로 웹서버가 실행되었을 때의 netscape의 모습



PHP의 설치

PHP를 설치하려면 DB가 기본적으로 설치되어 있어야 한다. 기본적으로 MySQL이 설치된걸로 가정한다. MySQL의 설치 법(본지 99년 5월호에 자세한 내용과 본지 홈페이지에도 있다)은 문서들이 많고 설치가 쉬우니까 문서들과 웹을 참조하면 될 것이다.

아파치를 DSO로 설치되었을 때의 경우이다.

1) PHP의 최신 버전을 다운 받고, 아파치의 설치와 마찬가지로 다운받은 소스 디렉토리로
   이동한다. 아파치의 설치 1번과 같은 디렉토리이다.

#cd /usr/local/src

2) 압축을 풀어 준다.

#tar xzvf php-3.0.16.tar.gz

3) 압축이 풀린 디렉토리로 이동.

#cd /usr/local/src/php3

4) ./configure 명령을 내린다.
 #./configure \
>--with-apxs=/usr/local/apache/bin/apxs\
>--with-config-file-path=/usr/local/apache/bin/apxs\
       >--with-gd=/usr\
       >--with-mysql=/usr/local/mysql\
       >--enable-track-vars

--with-gd=/usr





php는 gd라이브러리가 필요하다. 그래서 --with-gd 옵션으로 명시적으로 설정해 줄 필요가 있다. 보통 리눅스 배포판에 기본으로 깔려 있다.
확인을 위해 /usr/lib파일에 들어간 후 libgd.a를 찾아 본다. 또한 /usr/include 디렉토리에서 ls -al gd*.h 하여 header파일들을 찾아본다.

header화일은 다음과 같다.
  gd.h
gd_io.h
gdfontg.h
gdfontl.h
gdfontmb.h
gdfonts.h
gdfontt.h





또한 gd 라이브러리의 버전도 중요하다. 보통 현재 나와 있는 배포판의 라이브러리는 1.3.* 버전이므로 별로 문제가 되지는 않을 것이다.

--with-gd=/usr 로 옵션을 정해 주면 /usr 디렉토리의 lib 디렉토리와 include 디렉토리를
   알아서 검색을 하여 필요한 파일을 찾아준다.
--with-mysql은 MySQL연동을 위한 옵션이다.

5) php를 위한 기본설정을 해준다.
   httpd.conf에서 다음을 확인 해본다.
 LoadModule php3_module libexec/libphp3.so
AddModule mod_php3.c





httpd.conf에서 다음을 찾아서 수정해준다.
 AddType application/x-httpd-php3 .phtml
AddType application/x-httpd-php3 .html
AddType application/x-httpd-php3 .htm
AddType application/x-httpd-php3-source .phps





6) 마지막으로 php를 test해보자
/usr/local/apache/htdocs 밑에 test.html이라는 파일을 만들어 준 후,
  phpinfo();
?>





을 넣어준 후 웹브라우저를 실행해서 확인해 보면 정상적으로 설치되었을 경우 php의 기본 infomation페이지를 볼 수 있을 것이다.



유저 인증(Authetication)

어떤 특정 페이지에 들어가보면 사용자명과 패스 워드를 묻는 창이 나오는 것을 독자 여러분들은 본적이 있을 것이다. 상업용 사이트를 구현하기 위해서 이 글을 읽는 독자들은 없을 것이라고 본다. 하지만, 이 인증방식을 알아두면 실제 웹사이트를 구현하는데 개념적으로 많은 도움이 될 것이라고 본다.

아파치의 1.3.6이전 버전에서는 세 개의 설정파일(srm.conf, access.conf, httpd.conf)이 있었다. srm.conf 는 네임스페이스와 파일 시스템의 리소스를 관리하는 것이고, httpd.conf는 서버의 전체적인 동작과 관련된 모든 것들이 있었다. 마지막으로 인증 페이지에 관련이 있는 access.conf 파일이 있었다.

지금은 httpd.conf파일에 진정한 하나의 설정파일로 통합되었다.(아직 두 파일이 형식상 있긴 있다) 이유는 간단히 말해서 사용자들이 명확하게 설정할 수 있도록 중복설정을 피하기 위해서 통합된 거라고 할 수 있다. 이유야 더 많이 있겠지만...
httpd.conf 파일에 대해서 세세하게 설명을 하면 좋겠지만, 양이 너무 방대해서 설명이 어려우므로 이해하기 바란다. 이만용씨가 번역한 httpd.conf 파일이 있으니 그걸 참조하면 많이 도움이 될 것이다.

유저 인증의 방법에는 여러 가지가 있다. /etc/passwd를 참조하는 방법이 있고, 데이터 베이스를 참조하는 방법 등이 있다. 이 방법들은 보안을 위해서는 최선의 방법들이다. 하지만 구현하기가 어렵다. 상업용 사이트가 아니라면 아파치의 유저 인증방법이 적절할 것이라고 본다.

http.conf(/usr/local/apache/conf/httpd.conf)를 열어 보자.



이렇게 추가 해주고 ./linux(물론 필자가 임의로 만든)디렉토리에 패스워드를 설정 해준다.

#/usr/local/apache/bin/htpasswd -c /usr/local/apache/htdocs/linux/.htpasswd
- 여기서 ‘-c’는 패스워드를 새로 생성할 때의 옵션이다.



기본설정 부분의 요약 설명


Options Indexes FollowSymLinks    #색인요청 및 심볼릭 링크 허용
Options Includes                           #서버 측 포함(SSI) 허용
AllowOverride All                           #해당 디렉토리의 모든 접근 허용
                       # GET(기입만 가능),POST(열람만 가능) 제한
order allow,deny                           #allow 다음 deny 평가
allow from all                               #해당 디렉토리에 대한 모든 호스트 접근 허용




.htaccess 파일의 유저 인증 기본형식이다.  

AuthType Basic                 #인증 방법(기본)                 
AuthName                        “인증창이 생길 디렉토리 지정”                        
AuthUserFile /usr/local/apache/htdocs/.htpasswd     
                                       #파일 앞에 ‘.’을 붙이는 이유는 브라우저에서 보이지 않기 위해
                                          서 이다.
AuthGroupFile /dev/null      #사용할 그룹의 디렉토리 파일의 경로

require valid-user               #인증된 유저만 통과
                           #...어떤 방식으로 인증하여 어떤 방식으로
                                          유저에게 해제할 것인가를 지정한다.



             <그림2>웹브라우저(Netscape)에서의 인증 창



MIME Type
(usr/local/apache/conf/mime.types)

우리가 netscape로 웹 서핑을 하다 보면 mp3 화일이나 zip, tar같은 것들이 알아서 실행되거나 다운로드 창이 뜨는 것을 볼 수가 있다. 그러나 어느 때에는 바이너리 코드같은 이상한 화면이 출력되는 것을 흔하지는 않지만 본적이 있을 것이다. 이것은 아파치 웹서버에서 mime.types 라는 것을 정의해 줌으로써 그것들을 인식하게 되는 것이다. 1.3.12 버젼에 와서는 현존하는 거의 모든 type들이 정의되어 있다.

mime.types에서 형식을 정의하고 있는 부분은 다음과 같다.

application - application 데이터나 binary 데이터 전송
                  (zip, xml, pdf, ppt, doc, etc)  

audio - audio 데이터의 전송
           (midi, mpeg, mp3, rm, wav, etc)  

image - still image 데이터의 전송
           (jpeg, gif, bmp, etc)  

message - 다른 타입의 내용을 인캡슐레이션하여 전송
               (http, vrml, etc)

multipart - 서로 다른 타입의 데이터를 갖는 여러 “body” 를 하나의 메시지로 조합하여 전송
               (voice-message, report, signed, etc)

video - 동영상 데이터의 전송 (audio를 부분적으로 가짐)
           (mpeg, quicktime, avi, vivo, etc)

text - 특정 문자셋(Charset)으로 구성된 텍스트 정보나, 포스트스크립트 같은 formatted text
        정보 전송에 사용
        (html, etc)     

[참고]  MIME(Multipurpose Internet Mail Extension:다목적 인터넷 우편확장)
          E-Mail 을 통해 송/수신할 수 있는 정보는 7bit로 된 ASCII 코드로 구성된다.
          이와 같은 경우 비디오나 오디오와 같은 멀티미디어 데이터를 전달할 수 없는데,
          이 한계를 극복하고자 MIME 규약이 만들어졌다. MIME은 RFC822 규정의 확장
          표준으로 multipart/multimedia 메세지를 정의하고 있다. MIME 은 E-Mail 뿐만
          아니라, News, WWW 등에도 활용 가능하다.



    <그림3>  mime.types파일의 실제 내용 모습



마치면서.....

이 글을 끝까지 읽은 독자 여러분들이 한번에 설치가 완료되길 바란다. 글의 내용이 두서없고 다소 부족한 점이 있을 지도 모르겠다. 필자가 처음 아파치를 접하면서 이해하기 힘들었던 부분을 나름대로 정리했다. 잘 이해가 안가는 내용이나 틀린 점이 있다면 주저하지 말고 필자에게 멜을 보내 주기 바란다. 이상으로 아파치 웹서버의 설치 및 개념 설명들을 마치도록 하겠다. 다음에 기회가 된다면 좀더 깊은 보안 기법들이나 log 파일들과 module등에 대해서도 설명하도록 하겠다.

<필자 소개>
김태호님은 현재 동명 정보대학교 컴퓨터 공학과 4학년에 재학중이며, 웹서버와 데이터 베이스에 대해서 공부 중이다. 스킨스쿠바(NAUI MASTER DIVER) 보조 강사로도 활동중이다.




▲ top






Modify Delete Post Reply Backward Forward List
Powered by Kang Jul Ki