2016년 11월 30일 수요일

Apache 2.4 MPM(prefork, worker, event)



  1. MPM(Multi-processing Module): Apache가 받아 들인 요청을 처리하기 위해 'child processes'에게 분배하는 방식
    -확장성이 필요한 사이트는 worker방식을 택하고, 안정성과 소프트웨어와 호환성이 필요한 사이트는 Prefork를 보편적으로 사용
    -Linux의 경우, Prefork 방식이 기본 설정이며, Worker방식을 사용하기 위해서는 설치시에 -with-mpm=worker옵션을 사용하여 설치
  2. Prefork
    1)실행중인 프로세스를 복제하여 실행(메모리 영역까지 같이 복제)
    2)프로세스가 소비하는 메모리가 많음
    3)응답프로세스를 미리 띄워놓고 클라이언트 요청 시 자식 프로세스가 반응하게 되는 방식
    4)안전하지 않은 제 3자가 만든 모듈 사용 가능
    5)디버깅이 빈약한 플랫폼에서 쉬운 디버깅 가능
    6)일반적으로 single CPU 또는 Dual CPU에서 성능이 좋음
  3. Worker
    1)자식 프로세스들이 각각 여러 스레드를 사용하여, 각 스레드는 한번에 한 연결을 담당
    2)Worker 방식은 일반적으로 멀티 CPU 시스템에서 성능이 좋다.
    3)요청을 스레드 단위로 처리 (최대 64개의 스레드 처리가능)
    4)지정된 만큼의 프로세스와 각 스레드를 준비하여 클라이언트의 요청을 받아들이는 설정
    5)기본 사용 메모리는 prefork보다 낮으면 스레드간에 메모리를 서로 공유함
    6)동시접속자가 많은 사이트에 적합
  4. Prefork와 Worker 방식의 차이점
    1)Worker가 Prefork에 비해 적은 메모리를 사용한다.
    2)Worker: 통신량이 많은 서버에 적절한 형태를 가진다.
    3)Prefork: 안전하지 않은 제 3자가 만든 모듈을 사용할 수 있다.
    4)Prefork: 디버깅이 빈약한 플랫폼에서 쉽게 디버깅 할 수 있다.
    5)'Worker'와 'Prefork'의 속도는 비슷하다.
  5. Event
    -요청과 Keep Alive한 아파치 요청을 그대로 맺는 것이 아니라, 요청을 처리하는 스레드를 따로 두도록 하여 분산된 처리를 할 수 있게 하는 목적을 둠 2.4.x 버전부터 설정이 추가되었음

  1. 설정
    1)httpd.conf 수정
      -vi httpd.conf
      -"include conf/extra/httpdmpm.conf" 설정의 주석을 제거
    2)Prefork 방식
      -한개의 자식 프로세스는 한 개의 연결을 담당한다.
      -프로세스가 생성되는 구조이므로 당연히 worker보다 많은 메모리를 사용한다.
      -프로세스간 메모리를 직접 공유하지 않으므로, 메모리 공간이 독립적이어서 안정적이다.
      -conf/extra/httpd-mpm.conf 파일 수정
        <ifModule mpm_prefork_module>
            StartServers    5
            MinSpareServers    5
            MaxSpareServers    10
            MaxRequestWorkers  250
            MaxConnectionsPerChild  0
        </ifModule >
      <옵션 설명>
       -StartServer: 시작시에 생성되는 서버 프로세스의 개수
       -MinSpareServers, MaxSpareServers: 부하가 적어서 MinSpareServers 개수 보다 적었을 경우 최소한 이 개수 만큼 아파치가 유지하려 하며, 부하가 증가하여 프로세스 개수가 많아질 경우에 MaxSpareServers개수 이하로 줄이려고 아파치가 구동
       -MaxConnectionsPerChild: 클라이언트들의 연결을 제한.(만약 자식 프로세스가 값만큼 요청을 받았을때 자식 프로세스는 자동으로 kill, 0인경우 무한대)
    3)Worker 방식
      -자식 프로세스들이 여러개의 스레드를 갖을 수 있으며, 각 스레드는 한번에 한 연결을 담당
      -Prefork보다 메모리 사용량이 적으며, 통신량이 많은 서버에 적절
      -스레드 간에 메모리 공간을 공유하며, 리소스 경합이 발생하지 않도록 주의 필요.
      -conf/extra/httpdmpm.conf 파일 수정  
        <ifModule mpm_worker_module>
            StartServers    5
            MinSpareThreads  75
            MaxSpareThreads  250
            ThreadsPerChild  25
            MaxRequestWorkers  400
            MaxConnectionsPerChild  0
        </ifModule >
    <옵션 설명>
       -StartServer: 시작시에 생성되는 서버 프로세스의 개수
       -MinSpareThread: 최소 thread 수
       -MaxSpareThreads: 최대 thread 수
       -ThreadPerChild: 자식 프로세스별 지속적으로 가질 수 있는 thread의 수
       -MaxRequestWorkers: 자식 스레드의 최대 수
       -MaxConnectionsPerChild: 자식 프로세스가 서비스할 수 있는 최대 요청 개수

2016년 11월 27일 일요일

Apache VirtualHost

-하나의 서버가 여러개의 도메인을 운영하고 싶을 때 사용하면 편리하다.
Linux(centos7)기반 설정
  1. /etc/hosts 파일 osc.jyson.kr 도메인 등록
    -테스트 서버에 DNS등록이 되어 있지 않기 때문에 직접 /etc/hosts파일에 도메인을 작성한다.
    예) 127.0.0.1 osc.jyson.kr
  2. APACHE_HOME/conf/httpd.conf 파일 설정
    2.1 default로 주석처리 되어 있지만 virtualhost를 사용할 것이기 때문에 주석해제
    # Virtual hosts
    Include conf/extra/httpd-vhosts.conf <-- 주석해제
    2.2 Apache 웹서버에 접근을 허용 하기 위한 설정
     - Order 속성은 수행 순서를 결정 하는 옵션이다.
     - allow, deny 순으로 수행한다.
     - Deny from all: 모두 접근을 거부한다.
     - Allow from all: 모두 접근을 허용한다.
    <Directory /> AllowOverride none Require all denied Order allow,deny Allow from all #Deny from all </Directory>
  3. APACHE_HOME/conf/extra/httpd-vhosts.conf 파일 설정
    -default 내용은 주석처리 또는 삭제 (주석처리 권장)
    <VirtualHost *:80>
    DocumentRoot "/was/httpd-2.4/htdocs"
    ServerName osc.jyson.kr
    </VirtualHost>
    -virtualhost 추가하려면 httpd-vhosts.conf 파일 아래에 추가가 가능하다.
  4. 아파치 웹서버 기동
    -APACHE_HOME/bin/apachectl start
  5. 웹브라우저를 실행하여 결과 확인

*추가적으로 다른 PC or 다른 IP device로 접근을 하려면 접근하려는 device의 hosts 파일에 osc.jyson.kr을 등록 해주어야 한다.
예) {serverIP} osc.jyson.kr

Apache Web Server 개념, 설치, 설정

<개념>
-웹서버: 웹브라우저와 같은 클라이언트로부터 HTTP요청을 받아들이고, HTML문서와 같은 웹페이지를 반환하는 컴퓨터 프로그램이다.
-Client/Server 2tier 구조에서 Client요청을 받아서 요청을 정적으로 처리하는 서버이다.
-정적이란? HTML, JPG, CSS, JAVA script와 같은 파일을 웹클라이언트에 제공할때 웹서버를 사용하며, 동적 페이지 처리가 필요하다면 WAS에 처리를 넘긴다.

-종류: Apache, Nginx, IIS, WebtoB, OHS, iPlanet

<설치>
  1. 다운로드
    -인터넷이 가능한 PC에서 http://httpd.apache.org/download.cgi 접속한다.
  2. 요구사항
    -디스크 여유공간이 최소 50MB 이상인지 확인한다. 설치 후 아파치는 약 10MB의 디스크 공간을 차지한다.
    -ANSI C 컴파일러가 설치 되어있는지 확인한다. Free Software Foundation(FSF)의 GNU C compiler(GCC)를 추천, GCC가 없다면 최소한 사용하는 컴파일러가 ANSI 호환인지 확인한다. 추가로 PATH 환경변수는 make와 같은 기본적인 컴파일 도구를 포함해야 한다.
  3. 압축풀기
    -압축파일의 압축을 OS명령어를 통해 압축을 푼다.
    $ gunzip httpd-{버전}.tar.gz
    $ tar xvf httpd-{버전}.tar
  4. 소스 트리 구성하기
    -아파치웹서버를 구성하기 위해 $APACHE_HOME 디렉터리 안에 ./configure를 명령을 실행한다.
     > 가장 중요한 옵션은 --prefix다 --prefix는 아파치를 동작하기 위해 아파치를 구성하고 설치할 디렉터리이다.
     > 추가적인 옵션을 확인하기 위한 URL: https://httpd.apache.org/docs/current/ko/programs/configure.html#installationdirectories
    $ ./configure --prefix={디렉터리}
  5. 컴파일
    -make 명령어를 통해서 컴파일 한다.
    $ make
  6. 설치
    -4번에서 PREFIX옵션에 지정한 디렉터리에 설치한다.
    $ make install
  7. 설정
    -$PREFIX/conf/httpd.conf 파일을 vi로 열어 설정한다. 
  8. Apache 웹서버 기동
    -PREFIX/bin/apachectl start
     > httpd라는 데몬 프로세스가 기동된다.

  9. Apache 웹서버 종료
    -PREFIX/bin/apachectl stop
<설정>
-아파치 설정 파일: $APACHE_HOME/conf/httpd.conf
  1. ServerRoot "/was/httpd-2.4"
    : Apache의 홈디렉터리를 지정하여 절대경로로 지정한다. 
  2. Listen 80
    : 시스템의 기본값 이외에 다른 IP 주소와 포트에 대해서도 연결할 수 있도록 해준다. 주로 가상호스트(Virtual Host)부분에서 기본 80번 이외에 다른 포트를 이용하여 가상호스트를 설정하고자 할 때에 필요하다.
  3. ServerAdmin
    : 웹문서 로딩시 에러가 발생했을 경우와 같이 에러페이지에 보여질 관리자 메일 주소이다.
  4. ServerName
    : 클라이언트에게 보여주는 호스트이름을 지정한다. 
  5. <Directory> ~ </Directory>
    : 지정한 디렉터리이하의 모든 웹문서들에 대하여 어떤 서비스와 기능을 허용/거부 할 것인지를 설정하는 매우 중요한 지시자이다. 현재 루트 디렉터리에 대한 심볼릭링크를 허용하고 .htaccess파일을 사용을 거부한다. <Directory> 설정 목적에 맞게 사용한다. 
  6. DocumentRoot "/was/httpd-2.4/htdocs"
    : 서버의 웹문서가 있는 경로를 지정한다. 경로의 마지막에 '/'를 추가해선 안되고 심볼릭 링크나 Alias를 사용하여 다른 위치를 가리키도록 할 수 있다.
  7. ErrorLog "logs/error_log"
    : 아파치 웹서버의 에러로그파일의 위치를 지정하는 것으로 가상호스트설정에서 별도의 에러로그파일의 위치를 지정하지 않았다면 이곳에 모두 저장된다. 
  8. LogLevel warn
    : 에러로그파일의 기록내용을 자세하게 기록할 것인가를 결정하는 지시자이다.


Apache Tomcat 개념, 설치, 설정

<개념>
  1. WEB Server, WEB Application Server의 차이
    -WEB Server: 정적인 Data를 처리한다.
    -WEB Application Server: 동적인 Data를 처리한다.
    분류
    WEB Server
    WEB Application Server
    방식정적 Data동적 Data
    문서HTML, 이미지JSP, Servlet
    종류Apache, Nginx, IIS, WebtoB, OHS, iPlanettomcat, jboss, weblogic, jeus, jetty
  2. WAS정의: WAS는 웹서버와 웹컨테이너의 결합으로 다양한 기능을 컨테이너에 구현하여 다양한 역할을 수행할 수 있는 서버를 말한다. 클라이언트의 요청이 있을 때 내부의 프로그램을 통해 결과를 만들어내고 이것을 다시 클라이언트에 전달해주는 역할을 하는 것이 바로 웹 컨테이너이다. HTTP를 통해 애플리케이션을 수행 해주는 미들웨어로써,3tier 구조에서 비지니스로직을 담당하여 동적 데이터를 처리하는 서버이다.
  3. WAS 구성
    -웹 브라우저: 웹서비스를 요청하고 결과를 제공받는 클라이언트
    -웹 서버: 클라이언트의 요청을 처리하도록 프로세스를 관리
    -웹 애플리케이션 서버: JSP 프로그램을 실행시키고 결과를 웹 서버에 전달
    -데이터베이스: 웹 서비스 수행에 필요한 데이터를 저장
  4. WAS 동작 방식
    (1)사용자 요청(웹 브라우저) -> (2)웹서버 -> (3)WAS(동적처리) -> (4)웹서버 -> (5) 사용자 응답 메시지(웹브라우저)
     **위 내용은 DB가 없다고 가정하였으나 만약 DB가 있다면 (3)~(4)에서 동작함
      

<설치>
  1. JDK 다운로드
    -Oracle JDK 설치파일 URL: http://www.oracle.com/technetwork/java/archive-139210.html
    -설치 버전 다운로드 후 압축풀기
     예) $gunzip jdk-7u79-linux-i586.tar.gz
           $tar xvf jdk-7u79-linux-i586.tar
    -JAVA 환경변수
    -vi $HOME/.bash_profile 파일에 추가
      export JAVA_HOME={디렉터리}
      export PATH=$JAVA_HOME/bin:$PATH
    -JAVA_HOME path, version 확인
     예) java -version
  2. Tomcat 다운로드
    -Tomcat 설치파일 URL: http://tomcat.apache.org/index.html
  3. 압축풀기
    -압축파일의 압축을 OS명령어를 통해 압축을 푼다.
    $ gunzip apache-tomcat-{버전}.tar.gz
    $ tar xvf apache-tomcat-{버전}.tar
  4. Tomcat 환경변수
    -vi $HOME/.bash_profile 파일에 추가
      export CATALINA_HOME={디렉터리}
      export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/jsp-api:$CATALINA_HOME/lib/servlet-api.jar
    -환경변수 적용 source $HOME/.bash_profile
  5. Tomcat 기동 및 종료
    $ cd $CATALINA_HOME/bin
    $ ./startup.sh (기동)

    $ ./shutdown.sh (종료)
<설정>
-톰캣 설정 파일 $CATALINA_HOME/conf/server.xml 
-server.xml 구조는 Server > Service > Engine > Host > Context 이다

  1. <Server>
    -최상위 컴포넌트로서, 톰캣의 인스턴스와 동일하다.
    -1개 이상의 <Service>를 포함한다.
    -기본으로 8005 포트가 설정되어 있다
    -shtdown 속성: TCP 소켓으로 SHUTDOWN 텍스트를 실행하면 톰캣 서버가 종료된다.
  2. <Listener>
    -특정 이벤트를 리스닝하고 이벤트 발생시 응답한다.
  3. <GlobalNamingResources>
    -<Resource> 등을 통해서 전역 리소스를 설정한다.
  4. <Service>
    -1개 이상의 <Connector>와 <Engine>를 포함한다.
  5. <Connector>
    -톰캣은 기본적으로 HTTP(8080), HTTPS(8443), AJP(8009) 커넥터를 제공한다.
  6. <Engine>
    -커넥터로 수신한 클라이언트의 요청을 처리하고 응답한다.
  7. <Host>
    -VirtualHost를 의미하며, name 속성으로 설정된 호스트명으로 웹 애플리케이션을 제공한다.
  8. <Context>
    -웹 애플리케이션의 의미한다.
  9. <Valve>
    -요청을 처리하는 파이프라인 사이에 추가되어 특별한 처리를 수행하는 컴포넌트이다.

2016년 11월 23일 수요일

서버응답코드

• 200 OK – 클라이언트 요청이 성공적으로 끝남

• 400 Bad Request – 잘못된 요청

• 401 Unauthorized – 인증 오류

• 403 Forbidden – 사용자 허가 모드 오류

• 404 Not Found – 요청한 문서가 존재하지 않음

• 405 Method Not Allowed – 요청한 method를 지원하지 않음

• 500 Internal Sever Error – 서버에서의 실행 오류

• 503 Server Unavailable – 일시적으로 요청을 처리할 수 없음

just 하게 500대 코드는 서버 에러
just 하게 400대 코드는 디플로이(deploy) 문제
just 하게 300대 코드는 리다이렉션(redirection) 정상이라고 판단코드
just 하게 200대 코드는 성공