본문 바로가기

자격증/리눅스 마스터 1급

Part3) 네트워크 및 서비스의 활용 - 네트워크 서비스 | 웹 관련 서비스

I. 웹 관련 서비스


웹 관련 서비스의 이해

1) 웹 관련 서비스의 정의

*HTTP(Hyper Text Transport Protocol)
  • 웹의 시작은 조직내의 정보교환을 빠르게 하기 위해서 시작되었다
  • 인터넷에서 하이퍼텍스트문서를 교환하기 위해 사용되는 통신규약이다.
  • 1989년 CERN(유럽입자 물리학 연구소) "팀 버너스 리"에 의해 처음 설계 되었다.
  • 인터넷을 통한 World-Wide-Web 기반에서 전 세계적인 정보공유를 이루는데 큰 역할을 했다.
  • 초기 웹 서비스는 정적인 HTML 페이지로 구성되어서, 주로 텍스트와 이미지로 작성되었다.


*웹 브라우저
  • WWW(World Wide Web): 최초의 브라우저로, 넥스트(Next) 플랫폼용 브라우저이며, 현재 W3C 컨소시엄에서 주관하고 있다.
  • 모자이크(Mosaic): 1993년 일리노이 대학에서 개발한 무료 웹 브라우저로 인터넷 대중화 시대를 연 선두주자이며, 윈도우 3.1에서 실행 되었다.
  • 넷스케이프(Netcape): 미국 넷스케이프 커뮤니케이션사가 만든 최초의 상업용 웹 브라우저이다.
  • 인터넷 익스플로어(Internet Explorer): 마이크로소프트에서 개발한 윈도우 기반의 웹 브라우저이다.


2) 웹 관련 서비스에 필요한 구성 요소 및 작동 원리

    *정적인 HTML 페이지
    • 웹 서버는 정적인 컨텐츠(HTML 파일, 이미지, 동영상 파일, js, css 파일 등)을 클라이언트의 요청에 의해 보낼 수 있다.


      *CGI(Common Gateway Interface)
      • 웹 서버 확장의 하나로 외부 프로그램을 실행시켜 그 결과를 HTML로 돌려주는 방식이다.
      • 사용자의 요구에 따라 다르게 반응하는 동적인 컨텐츠를 생산할 수 있다.
      • 기업의 DB와 연동하여 웹으로 정보를 제공할 수 있다.
      • 어떤 언어로도 코딩 될 수 있으며 프로토콜이 단순하여 사용하기가 쉽다.
      • CGI 스크립트용 언어로 C, C++, Perl, PHP, ASP 등이 있다.
      CGI가 점차 사용량이 줄어가는 이유
      -프로세스의 생성과 초기화에 상당한 시간이 필요하다.
      -여러 개의 CGI 스크립트를 계속해서 동작시키면 프로세서가 많이 생성된다.
      -대용량 서비스 구현 시 서버 내의 메모리자원 부족을 야기할 수 있다.


        *자바 서플릿(Java Servlet)
        • 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램으로, 자바 EE의 일부분이다.(자바로 구현되어, 다양한 플랫폼 동작)
        • CGI에 비해 외부 요청마다 프로세스보다 가벼운 스레드로써 응답하여 가볍고 자원관리면에서 효율적이다.

        *작동 원리




        [1] HTTP의 동작

        -HTTP는 요청/응답 프로토콜로, 클라이언트는 웹서버의 요청 방식과 URI와 프로토콜 버전 및 MIME과 비슷한 추가 자료들을 서버로 전송한다.

        -서버는 이러한 클라이언트의 요구에 대해 상태값과 에러값, 메타데이터 및 실제 자료로 응답한다.


        [2] HTTP 요청(Request)

        -요청은 메소드(GET/POST) + URI + 프로토콜 버전 + 추가 헤더 정보들을 전송한다.


        요청 메소드

         메소드

         설명 

         GET 

         지정된 리소스를 가져오는 메소드(쿼리 스트링으로 데이터를 보낼수 있음) 

         HEAD 

         GET과 같지만, HTTP 헤더만 가져옴(웹 서버 모니터링 시) 

         PUT

         주어진 URL에 데이터 저장 

         DELETE 

         주어진 URL에 해당하는 리소스를 삭제 

         POST 

         웹 서버로 데이터를 보냄(GET과 함께 사용) 

         TRACE

         이전에 들어온 요청들을 보여줌 

         OPTIONS 

         웹 서버에서 지원하는 메소드들을 응답 



        [3] HTTP 응답(Response)

        -서버로 부터 응답은 HTTP 프로토콜 버전, 상태코드, 상태 문자열 형태로 응답하고, 정상적인 응답의 경우 Body부분은 MIME형식으로 데이터를 리턴한다.


        응답 오류코드

         코드 

         메세지 

         설명 

         1** 

         Informational 

         정보교환 

         2** 

         Success 

         성공(ex. 200 OK: 오류 없이 전송 성공) 

         3** 

         Redirection 

         위치가 바뀜 

         4** 

         Client Error 

         클라이언트 측 오류(ex. 404 Not Found: 찾을 수 없음, 403 Forbidden: 접근 권한 X) 

         5** 

         Server Error 

         서버 측 오류(ex. 500 Internal Server Error: 서버 내부 오류) 




        웹 관련 서비스의 운영

        1) APM 웹 서버 설치

        *apache(아파치)
        • 아파치 웹 서버 단독으로 사용하기 보단, APM(Apache, PHP, MySQL)을 연동하여 사용한다.
        • NCSA httpd를 기반으로 시작되었다.
        • 1.3 버전부터 시작하였다.
        • 2.0버전 부터는 PHP 연동 설치시 동적 모듈 방식인 DSO만 지원한다.
        • 소스가 공개되어 있는 공개 소프트웨어이다.
        • 멀티스레딩을 지원한다.
        • PHP, JSP 등 다양한 웹 프로그래밍 언어를 지원한다.


          apache 설치 순서


          [배포판에서 제공하는 패키지 설치 ▶ # yum install httpd]


          [1] 사이트에서 직접 받은 후 압축 해제

          # tar xvfp httpd-2.2.24.tar.bz2


          [2] 소스 디렉터리로 이동 후 컴파일 설치 설정(configure)

          # ./configure \


            ※설치 시 옵션

            -아파치 프로세스를 Thread방식으로 동작되도록 설정할때: --with-mpm=worker (prefork=아파치 프로세스 방식일 경우)


          [3] 웹 서버 컴파일

          # make -j 1 | more


          [4] 웹 서버 설치

          # make install


          [5] 설치 확인 - /usr/local/apache

          # tree -d -L 1 /usr/local/apache


            *MySQL
            • 데이터 관리를 효율적으로 하기 위해서 사용하는 DBMS중 하나이다.
            • 5.x 버전 부터는 내장함수 등 다양한 기능을 가지게 되었다.

            MySQL 설치


            [5.5.x 이전 버전은 make 과정으로 설치하고, 그 이후 버전 부터는 cmake를 설치해야한다]

            make → make install → ./mysql_install_db → ./safe_mysqld& (데몬 테스트 까지 수행과정)


            [1] 압축 해제

            # tar xvfp mysql-5.6.25.tar.gz


            [2] 소스 디렉터리로 이동 후 컴파일 설치 설정

            # cd mysql-5-6.25

            # cmake . 


            [3] 컴파일

            # make -j 1 | more


            ※컴파일 옵션

              --prefix: MySQL 설치 디렉터리 지정

              --with-charset: DB에서 지원할 언어 설정(euc_kr: 한국어)

              --with-mysqld-user: MySQL 보안 강화 관련

              with-tcp-port: 포트 번호 지정

              --localstatedir: MySQL 데이터들을 /usr/local/mysql/data에 저장(DB저장경로)


            [3] 설치

            # make install




            *PHP(Hypertext Preprocessor)

            • 웹 개발에 적합하고 HTML에 삽입할 수 있는 범용 스크립팅 언어이다.
            • 속도, 개발 편의성, 확장성이 매우 우수하다.
            • 윈도우 운영체제의 ASP와 같은 역할을 수행한다.
            • 다양한 데이터베이스 연동을 위한 API를 지원한다.

            configure 옵션

            --with-apxs2: 공유된 아파치 모듈을 함께 연동하기 위한 컴파일 옵션

            --with-apache: php와 연동하기 위한 아파치 웹 서버의 설치 디렉터리

            --with-mysql: php와 연동하기 위한 mysql 설치 디렉터리

            --with-config-file-path: 아파치 웹 서버의 설정파일의 위치 

            --with-gd: GD관련 라이브러리 함수를 사용하여 GD를 지원




            2) 웹 서버 설정하기

            *httpd 명령어
            • httpd -t : httpd.cof의 파일설정을 점검
            • httpd -S : 가상호스트 리스트를 보여줌
            • httpd -l : 현재 컴파일된 모듈에 대한 리스트를 보여줌



              *아파치 환경 설정


              아파치 디렉터리 - /usr/local/apache

               디렉터리명 

               용도 및 내용 

               bin/ 

               아파치 서버프로그램 실행파일이 들어있음

               build/ 

               아파치 개발에 관련된 라이브러리 및 도구 

               cgi-bin/

               CGI 스크립트 파일이 존재

               icons/

               아파치 서버에서 사용하는 아이콘들이 들어있음  

               conf/ 

               아파치 서버의 여러 설정 파일이 들어있음

               logs/

               아파치 로그 파일이 저장 

               error/ 

               아파치 에러코드에 따른 문서

               htdocs/ 

               아파치 웹문서들이 들어가는 위치 

               include/ 

               아파치 웹 서버에 필요한 C 헤드파일

               lib/

               여러가지 라이브러리 

               man/

               도움말 파일 

               manual/ 

               매뉴얼파일 

               modules/ 

               DSO방식의 아파치에서 로드할 모듈파일 위치 




              메인 아파치 설정파일의 일반적인 위치 - /etc/httpd/conf/httpd.conf


               메인 설정

               ServerRoot "/usr/local/apache"

               아파치서버의 홈디렉터리를 지정하며 절대경로로 지정

               LISTEN 80

               포트 번호 지정

               LoadModule

               동적 공유 객체방식(DSO)으로 아파치에서 모듈 형태로 추가하거나 제거하는 방식 

               DocumentRoot "/usr/local/apache/htdocs"

               웹 문서의 기본경로를 설정

               DIrectoryIndex 

               가장 먼저 읽어들이는 파일명 지정 

               MaxClients

               동시에 접속할 수 있는 클라이언트의 수를 지정 

               ServerSignature

               정보 노출을 막기 위해 설정 




               해당 디렉터리 이하 웹 문서 제어 설정

               <Directory />

                  Options FollowSymLinks

                  AllowOVerride None

                  Order allow, deny

                  Deny from all

               </Diretory>

              Options 

               None

               어떤 옵션도 이용 할 수 없으므로 모든 접근을 거부

               ALL 

               MultiViews를 제외한 모든 접근을 허용 

               Indexes 

                웹서버 디렉터리 접근 시 DirectoryIndex에서 지정한파일이 존재 안할시 파일목록 리스트를 보여줌

               Includes 

               SSI사용 허용

               IncludesNOEXEC

               SSI사용은 허용되지만, #exec와 #include는 허용X

               FollowSymlinks 

               심볼릭 링크를 허용

               ExecCGI 

               CGI 스크립트를 사용할 수 있도록 허용 

               MultiViews 

               웹 브라우저 요청에 따라 적절한 페이지로 보여줌

              Allow Override

                어떻게 접근을 허락할 것인지에 대한 설정 - [None, ALL, AuthConfig, FileInfo, Indexes, Limit, Options]

              Order allow, deny

               접근 제어의 순서를 명시 - [(뒤→앞)모든 접근을 막고 지시자에 의해 허용]

              Deny from all

               모든 접근으로 부터 거부 


               아파치 접근로그 파일의 로그 포맷 

               LogFormat [변수] ... [변수]

               %l

               원격 로그 이름 

               %t

               시간 

               %b 

               전송량 

               %r

               첫번째 요청라인

               %h 

               요청 보낸 원격 호스트 



               웹 서버의 기본설정 사항

               Timeout 300

               클라이언트 요청을 아파치가 기다리는 시간

               KeepAlive On 

               한번 연결에 대하여 한번이상의 요청을 허용할 것인가의 여부 

               MaxKeepAliveRequests 100 

               지속적인 접속동안에 허용할 최대 요청횟수를 지정 (최대성능향상: 높은값) [조건: keepAlive On]

               KeepAliveTimeout 5 

               지정한 시간만큼 요청없이 지속될때 그연결을 끊기 위해 timeout시킴 [조건: KeepAlive On]

               UseCanonicalName Off

               자기자신 URL, Servername, Serverport 값들을 어떤 방식으로 설정하여 결정에 대한 지시자 

               AccessFileName .htaccess 

               특정페이지에 암호화 패스워드로 로그인 할 수 있또록 하기위한 설정 

               ServerTokens Full 

               아파치 웹 서버의 HTTP로 응답할 헤드를 설정 

               ServerSignature On 

               에러페이지에 표시할 수 있는 추가정보를 보여줌 여부 

               HostnameLookups Off 

               웹로그파일에 방문자에 대한 주소의 기록 방법 [Off=IP / On=도메인명] 




               MPM specific에 대한 설정

               prefork - 복사 프로세스 방식

               StartServer 5

               웹 데몬 구동시 자식프로세스의 개수

               MinSpareServers 5 

               스페어서버가 5개보다 적게되면 추가 생성 

               MaxSpareServers 10 

               스페어서버가 10개보다 많게되면 서버 죽임 

               MaxClients 150

               실행 가능한 아파치 자식프로세스 개수 

               MaxRequestsPerChild 30

               자식프로세스들이 생성할 수 있는 클라이언트들의 요청 개수를 제한하는 설정

               worker - 쓰레드 방식

               StartServers

               시작 시 초기화 되는 서버 프로세스의 개수 

               MaxClients 

               동시 연결 가능한 클라이언트의 최대 개수 

               MinSpareThreads 

               새로운 방문자를 바로 처리하기위하여 대기하고 있는 최소 스레드 수

               MaxSpareThreads

               새로운 방문자를 바로 처리하기위하여 대기하고 있는 최대 스레드 수 

               ThreadsPerChild 

               개별 자식 프로세스가 지속적으로 가질 수 있는 스레드의 개수 

               MaxRequestsPerChild 

               자식 프로세스가 서비스 할 수 있는 최대 요청 개수


              사용자 홈디렉터리에 관한 설정

               UserDir public_html

                http://도메인명/~계정명 으로 개인 홈페이지를 서비스 할 경우

                http://도메인명/~계정명/index.html 로 요청 시 ▶ /home/계정명/public_html/index.html 로 접근




               가상호스트 설정 - 아파치 웹서버에 여러개의 도메인이나 호스트네임을 설정하여 관리하고자 할 경우 (확인 옵션 = httpd -S)

               *

               설정할 IP 주소 

               ServerAdmin

               가상호스트를 관리하는 관리자 Email주소

               DocumentRoot 

               가상호스트의 홈페이지 디렉터리 위치

               ServerName 

               가상호스트의 도메인 명 

               ServerAlias 

               도메인에 대한 별칭 

               ErrorLog 

               가상 호스트의 웹 에러파일 위치 

               CustomLog 

               가상 호스트의 웹 로그파일 위치(액세스로그)



              *PHP 설정하기 - /usr/local/php/lib/php.ini

              설정내용

               short_open_tag = Off 

               Off: <?php 코드?> / On: <?코드 ?> [하위호환] 

               max_execution_time = 30

               php프로그램을 실행 할 수 있는 최대 시간(넘을 시 timeout오류)

               memory_limit = 128M 

               하나의 php프로그램에서 사용할 수 있는 최대 메모리양 

               display_errors = Off 

               php 프로그램 실행 시 오류를 화면에 보여 줄 것인지에 대한 설정 

               post_max_size = 8M 

               php가 받아들일 수 있는 POST데이터의 최대 용량 

               upload_max_filesize = 2M

               업로드 파일 사이즈 지정 

               max_file_uploads = 20 

               한번의 요청시 동시에 업로드 할 수 있는 파일들의 수 

               allow_url_fopen = On 

               URL을 이용하여 파일을 오픈할 수 있음(보안상 Off) 




              3) 웹 서버 작동 확인


              *APM 시작 및 테스트

              아파치 웹 서버 시작

              # /usr/local/apache/bin/apachectl start


              아파치 웹 서버 작동 확인

              1. #Include conf/extra/httpd-info.conf ◀주석제거

              2. httpd-info.conf 파일에서 http://localhost/server-status에 대한 접속 허용

              3. 아파치 상태 확인 # /usr/local/apache/bin/apachectl status

              4. apached 프로세스 점검  # ps -ef | grep httpd

              5. 아파치 포트 리스닝 # netstat -anp | grep httpd

              6. 웹 브라우저를 통한 확인


              PHP 정상 연동 확인

              <?php      
                phpinfo();
              ?>           



              데이터베이스

              1) 데이터베이스 종류

              *MySQL
              -데이터 관리를 효율적으로 하기 위해 사용하는 DBMS
              -빠르고 강력한 DBMS를 목표로 개발되어 왔으며, 5.x버전 부터는 내장함수 등 다양한 기능을 가지게 됨.

              *postgressSQL
              -차세대 객체-관계형 데이터 모델과 풍부한 데이터 타입
              -고수준의 확장성과, PostQuel질의 언어를 확장된 SQL의 부분 집합으로 대체한다.

              *MongoDB(NoSQL)
              -SQL 인터페이스를 제공하지 않는 경량 관계형 데이터베이스
              -관계형 데이터 모델이 아닌 키-값 또는 이를 응용한 데이터 모델인 칼람, 문서, 그래프 모델이다.
              -안정적이고 싼 하드웨어를 이용할 수 있는 빠른 DB
              -데이터는 분산된 노드에 파티션, 복제되어 저장된다.
              -데이터의 정합성에 대한 요구보단 단절내성에 대한 요구 사항이 더 중요하다.
              -2단계 커밋 수준의 트랜잭션보다는 정족수 기반의 트랜잭션을 선호한다.