개인/리눅스

아파치 웹 서버의 기본 상식

OmeGa2 2020. 2. 22. 18:00

웹 서버는

웹 서버는 우리가 인터넷에서 흔히 사용하는 웹 페이지가 들어있는 파일을 사용자에게

제공해주는 서버 프로그램으로, 시스템 소프트웨어라 불린다.

 

인터넷 사용자는 웹 브라우저를 통해 여러 페이지를 사용 하는데, 특정 페이지를 클릭할 경우

웹 서버로 HTTP 프로토콜을 이용해 페이지를 요청한다.

 

웹 서버는 클라이언트에게 HTML문서로 된 페이지를 웹 브라우저로 전달한다.

 

즉, 웹 서버의 주된 역할은 사용자가 요청한 페이지를 전달하는 것이다.

여기서 웹 브라우저는 클라이언트가 되며, 웹서버로부터 HTML 문서를 받아 사용자에게

보여줄 수 있는 중간자 역할을 수행한다.

 

웹 서버에는 아파치 웹서버, NginX, IIS 등 여러 종류가 있지만 여기서는 그 중 가장 인기있는

Apache 웹 서버에 대해 알아보려고 한다.

 

웹(Web)

- www(월드 와이드 웹)이라고도 불리며며 인터넷을 통한 정보공간이다.

- URL을 사용하고, HTML언어를 이용해 자원에 접근한다.

- 웹 브라우저를 통해 다른 페이지나 문서를 탐색한다.

- HTTP 프로토콜을 기반으로 운영된다.

 

웹 서버의 사용

1. 사용자 → 웹 브라우저 → HTTP 프로토콜 → 웹서버

2. 웹서버 (HTML문서)  → 웹 브라우저 → 사용자

목차>

1. Apache 웹 서버란?

2. Apache 와 PHP

3. Apache 웹 서버 2.x 버전의 MPM

4. 소스파일 다운로드 및 검증

 

 

1. 아파치(Apache) 웹 서버란?

아파치 웹 서버는 가장 널리 사용되는 웹 서버중 하나로, 초기의 웹 서버인 NCSA httpd를

기반으로 만들어졌으며, 아파치 소프트웨어 재단에서 관리하고 있는 소프트웨어이다.

아파치 라이선스를 따르기 때문에 오픈소스로 공개되며 자유 소프트웨어로 무료로 사용할 수 있다.

 

리눅스나 윈도우 등 거의 모든 운영체제에서 사용할 수 있으며 구축이 쉽고,

다양한 추가기능을 가지고 있기 때문에 현재 가장 인기있는 웹서버로 이용되고 있다.

 

하지만 요청당 스레드를 처리하는 구조인 아파치는 요청량이 많아지면 메모리 사용량이 높아져

성능이 떨어질 수 있다는 단점이 있다. 

 

또한 웹 서버는 정적인 방식과 동적인 방식 두 가지가 있다.

정적인 웹 서버는 단순히 HTML문서만을 사용자에게 제공하기 때문에 아파치 웹 서버 하나면 되지만,

동적인 웹 페이지는 사용자의 요구에 따라 다양한 웹 페이지를 제공한다.

이를 구성하기 위해서 리눅스에서는 주로 PHP라는 웹 프로그래밍 언어와

MySQL 데이터베이스를 연계해서 사용하는데, 이를 LAMP라고도 부른다.

(Linux Apache MySQL PHP)

 

핵심 설정파일

/etc/httpd/conf/httpd.conf

/etc/apache2/apache2.conf

 

 

 

2. Apache HTTP 서버와 PHP

PHP (Php Hypertext Preprocessor)는 서버 측에서 실행되는 언어로,

C언어를 기반으로 만들어진 웹 프로그래밍만을 위한 언어이다. 

 

동적 웹 페이지를 위해 사용되는 PHP는 스크립트 형식으로 되어있어 작성된 HTML코드 안에

추가해주면 서버에서 PHP 코드를 해석해서 웹 페이지를 생성한다.

 

PHP는 아파치서버와 주로 연계해서 사용하는데, 리눅스에 구축한 아파치 웹 서버에서

PHP 코드가 추가된 문서를 해석하기 위해서는 모듈이러는 것을 가지고 있어야 한다.

 

PHP 관련 모듈에는 정적모듈과 동적모듈 두 가지가 있다.

 

정적 모듈

아파치 서버에 정적 모듈을 사용하면 PHP가 아파치에 완전히 고정되고 처리속도가 빠르다.

따라서 사용자가 많은 서버에서는 정적모듈을 사용하는게 효율적이다.

 

단점으로는 아파치 서버나 PHP를 업데이트해야 하는 경우, 두 가지 모두 재설치가 필요하며,

속도는 빠르지만 항상 서버에 상주하고 잇어야 하므로 자원의 불필요한 낭비가 발생한다.

따라서 아파치 2.0버전 이후에는 동적모듈 방식으로만 설치가 가능하다.

 

 

동적 모듈

보통 DSO라 불리는 동적 모듈은 클라이언트의 요청이 있을 때 프로세스에 포함되는 방식이다.

언제든지 다른 모듈이나 라이브러리를 적재할 수 있고, 불필요한 자원의 낭비가 적어

동적 모듈에 비해서는 훨씬 효율적으로 사용할 수 있다.

 

 

▶정리

HTML 코드 안에 PHP언어가 포함

웹 서버에서 PHP코드를 해석하기 위해 정적/동적 모듈 장착

서버에서 PHP코드를 해석해 동적 웹페이지 생성

 

 

 

3. Apache 웹 서버 2.x 버전의 MPM

아파치 웹 서버에서 가장 큰 단점은 클라이언트의 요청당 하나의 프로세스가 처리하는

프로세스기반의 동작방식이다.

 

프로세스 기반의 동작에서 요청이 늘어날 경우 자연스레 프로세스의 수도 늘어나면서

접속자가 많은 웹 서버에서는 속도가 느려지고 지연이 일어나는 문제가 발생할 수 있다.

 

이런 문제를 해결하기 위해서 아파치에서는 멀티스레드 방식이 도입되었다.

스레드는 프로그램 내에서 실행되는 흐름의 단위를 의미하는데,

보통은 프로세스당 하나의 스레드만 가지고 있었다.

 

멀티스레드 방식은 하나의 프로세스가 여러개의 스레드를 가지게 되어 프로세스가

다수의 클라이언트 요청을 처리할 수 있도록 만드는 방법이다.

 

이런 멀티스레드 방식을 아파치 서버에서는 MPM이라고 부르며,

Apache 2.x 버전부터 본격적으로 도입되었다.

 

MPM (Multi-Processing Module)

MPM은 클라이언트의 요청을 여러 프로세스에 분배해주는 모듈로,

아파치서버에서 prefork, worker, perchild, winNT 등 여러 모듈을 제공한다.

 

 

▶ prefork

다중 프로세스 처리 방식으로 불리며, 부모 프로세스 하나가 여러 자식프로세스를 갖는다.

부모 프로세스는 클라이언트의 요청이 들어올 때 마다 자식프로세스를 생성해서 관리한다.

자식 프로세스는 1024개 가지 생성될 수 있고, 서로 메모리를 공유하지 않는다.

하지만 여러개의 프로세스를 생성하기 때문에 메모리 사용량은 많다.

 

 

worker

멀티 프로세스- 스레드 방식으로 prefork보다는 메모리 사용량이 적다.

초기에 정해진 개수대로 프로세스를 생성하며 요청이 들어오면 스레드를 늘려 처리한다.

한 프로세스당 64개의 스레드를 사용할 수 있고 서로 메모리를 공유한다.

prefork에 비해 요청량이 많은 서버에서 사용하기 적절하고, 정해진 스레드를 초과하면

새로운 자식 프로세스를 생성하는 방식이다.

 

 

prefork : 하나의 부모프로세스 아래 여러개의 자식프로세스 (프로세스당 스레드 1개)

worker : 초기에 프로세스의 개수 지정, 프로세스당 다수의 스레드 생성

 

 

4. 소스파일 다운로드 및 검증

아파치를 설치하기 위해서는 먼저 소스파일을 다운로드해야 한다.

 

- Apache HTTP server

http://httpd.apache.org 

 

Welcome! - The Apache HTTP Server Project

The Number One HTTP Server On The Internet The Apache HTTP Server Project is an effort to develop and maintain an open-source HTTP server for modern operating systems including UNIX and Windows. The goal of this project is to provide a secure, efficient an

httpd.apache.org

위 공식 홈페이지에서 아파치 서버 관련 파일을 다운받을 수 있다.

 

리눅스 소스파일 다운로드 명령어

]# wget [URL주소]

]# wget http://mirror.navercorp.com/apache//httpd/httpd-2.4.41.tar.gz

 

▷ 파일의 URL 주소 확인

해당 홈페이지에서 다운받을 파일에 마우스 우클릭 후

링크주소 복사 or url 주소 복사 = 파일의 URL 주소 확인 가능

 

 

소스파일 검증

여러 리눅스 배포판이나, 프로그램 배포판은 보통 공식 홈페이지에서 다운받을 수 있다.

홈페이지에서 파일을 다운로드 받는 경우, 파일링크 옆에 PGP, MD5 같은 클릭메뉴를

나타내는데 이는 파일의 해시값으로, 공식 사이트에서 배포한 파일이라는 의미를 가진다.

 

하지만 공식 사이트가 아닌 다른 홈페이지에서 다운로드받는 경우,

파일이 정상적으로 다운로드 되었는지 확인할 필요가 있으므로 검증이 필요하다.

 

리눅스에서는 sha1sum, md5sum, sha256sum 등의 명령어로 검증할 수 있으며

여러 종류의 해시값은 각종 프로그램을 통해 확인할 수 있다.

 

HashTab에도 종류가 다양하니 파일의 해시값에 맞는 명령어로 조회해야 한다.