웹 서버 (Web server) 란

하드웨어 측면과 소프트웨어 측면에서 정의 가능합니다.

1. 하드웨어 측면에서는,

웹 서버 소프트웨어와, 웹사이트를 구성하는 파일들(예를 들어 HTML 문서, 이미지, CSS, JavaScript 파일 등)을 저장하고 있는 컴퓨터입니다.

2. 소프트웨어 측면에서는,

HTTP 서버입니다. HTTP 서버는 URL(웹 주소)와 HTTP 프로토콜을 이해하는 소프트웨어입니다. HTTP 서버는 도메인 네임을 통해 접속 가능하며, 요청된 URL에 해당하는 호스팅된 웹사이트의 컨텐츠를 최종 사용자의 장치에 전달합니다.

 

웹 서버 역할

  • HTTP 통신: HTTP 통신을 통해 사용자와 서버간 데이터 교류
  • 정적 데이터 제공: HTTP 프로토콜을 통해 정적 콘텐츠를 클라이언트에게 제공
  • 로깅: 보안 및 통계 목적으로 로그파일에 클라이언트의 요청 및 서버 응답 정보 로깅
  • 가상호스팅: 하나의 IP주소를 사용해 많은 웹사이트(DNS)를 제공 가능
  • 권한 부여: 웹 리소스 일부에 대해 접근 제어 가능
  • 캐싱: 서버 응답 속도를 높이기 위해 정적 및 동적 컨텐츠 캐시 가능
    • 정적 데이터는 파일을 복사한 후 캐시서버에 저장해뒀다 사용
    • 동적 데이터는 요청에 대한 결과를 짧은 시간동안 캐시했다가 사용
  • 대역폭 조절: 네트워크 포화를 방지하고 서버 다운을 방지하기 위해 응답 속도 제한

 

웹 서버의 종류

Apache, NGINX, IIS, Google Web Server, CloudFlare 등.. 다양한 종류가 있습니다. 전통적으로 Apache와 IIS가 강자였는데, 2019년 이후로는 Nginx가 Apache, IIS보다 점유율이 향상되는 등 꾸준히 업데이트를 진행하며 발전중에 있습니다.

 

Apache

무료 오픈소스 크로스플랫폼 웹 서버 소프트웨어입니다.

  • 프로세스 기반 접근 방식으로 하나의 스레드가 하나의 요청을 처리하는 구조
  • 매 요청마다 스레드를 생성 및 할당해야 하기 때문에 리소스를 많이 잡아먹음

 

NGINX

아파치의 C10K (Connection 10000 Problem) 문제를 해결하기 위해 만든 웹 서버 소프트웨어 입니다.

  • 이벤트 중심 접근 방식으로 하나의 스레드 내에서 여러 요청을 처리하는 구조
  • 비동기 Event-Driven 구조 : Event Handler에서 비동기 방식으로 먼저 처리되는 요청을 진행 
  • 코어 모듈이 Apache보다 적은 리소스로도 많은 트래픽을 효율적으로 처리 가능
C10K 문제란,
서버 트래픽량이 높아져서 서버에 동시 연결된 커넥션이 많아졌을 때 더 이상 커넥션을 형성하지 못하는 문제.

아파치에서는 커넥션마다 프로세스를 할당 하기에, 동시 연결된 커넥션이 10000개인 경우, 10000개의 프로세스가 할당되어야 하고, 프로세스마다 1M의 메모리를 사용한다면 10000M의 메모리 = 약 9.76G의 메모리가 필요해지는 등 메모리 부족 현상이 나타나 커넥션을 연결할 수 없는 문제가 발생함.

이러한 구조적 문제를 해결하기 위해 적은 메모리와 프로세스로 대량의 동시 연결을 처리할 수 있는 비동기 이벤트 기반 구조의 NGINX 서버를 개발함.

 

어떤 서버를 사용할까?

.htacess 파일을 활용하거나 NGINX에게 없는 핵심 모듈을 사용할 경우 Apache를 사용하며, 빠른 정적 컨텐츠를 처리하고 싶고 대용량 트래픽을 처리하는 웹 사이트인 경우는 NGINX를 사용하면 됩니다.

 

또한, 두 서버를 함께 사용해도 된다. Apache 앞단에 NGINX를 프록시 서버로 활용할 수 있습니다.

  • NGINX에서 동시 커넥션 유지를 해주고 + static 리소스를 바로 제공해주면서, 동적 리소스가 필요한 요청만 Apache로 보낼 수 있음
  • NGINX와 Apache가 같은 네트워크 안에 있는 경우, NGINX의 SSL 터미네이션 기능 활용이 가능. 클라이언트와 NGINX서버까지는 https 통신을 하고, NGINX와 Apache 사이에는 http 통신을 함으로써 Apache 서버가 복호화 과정을 감당하지 않도록 하여 부하를 줄임

 

참고

https://daram.tistory.com/532

https://bentist.tistory.com/80

https://ssdragon.tistory.com/60

https://sorjfkrh5078.tistory.com/289

https://idchowto.com/web-server-program-apache-vs-nginx/

https://jungyu09.tistory.com/12

https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/What_is_a_web_server

goaccess

오픈 소스로된 실시간 웹 로그 분석기

GoAccess is an open source real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems or through your browser.

 

1. 설치

1-1. 소스 다운받아서 수동 설치

https://goaccess.io/download

$ wget https://tar.goaccess.io/goaccess-1.9.1.tar.gz
$ tar -xzvf goaccess-1.9.1.tar.gz
$ cd goaccess-1.9.1/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
$ make install

 

1-2. 패키지 매니저로 설치

패키지 매니저로 설치 시, 최신버전 설치가 안될 수 있음. 최신버전 설치를 위해서는 소스 다운받아서 수동 설치하기

CentOS

$ yum install goaccess

 

 

2. 실행

https://goaccess.io/get-started

2-1. 터미널 Output

1) goaccess 실행

goaccess /var/log/httpd/access.log -c

 

2) 로그 포맷 선택 화면이 나옴. 화살표로 본인에게 맞는 설정으로 이동 후, 스페이스바 눌러 선택 (내 경우는 맨 처음 나오는 NCSA Combined Log Format 선택) 

 

3) 로그 포맷이 다르면, 해당 메뉴로 이동하여 수정

 

4) 엔터 누르면 goaccess 실행됨

 

5) 내용 살펴보기

- 위/아래 화살표로 화면 이동

- 원하는 메뉴 자세히 보고 싶으면 해당 숫자 누름

- 해당 메뉴에서 다음 페이지 정보 보고 싶으면 Page Up/Down 버튼 누름

- 해당 메뉴에서 빠져 나오려면 q

2-2. Static HTML Output

goaccess /var/log/httpd/access.log -o report.html --log-format=COMBINED

 

2-3. Real-Time HTML Output

goaccess /var/log/httpd/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html

 

 

 

참고

로그 툴 모음 : https://www.oss.kr/info_techtip/show/93661cc3-1f20-413e-b80c-c80164342b9b?page=6

https://m.blog.naver.com/jogilsang/222123572581

 

 

'서버,데스크탑 > Apache' 카테고리의 다른 글

웹 서버(Web Server)란  (0) 2024.02.16

SSL.com에서 Yubikey를 구입하면 인증서가 이미 설치되어 온다고 하는데, 가격이 비싸다.

Yubico에서 Yubikey를 직접 구입하면 1/3 정도의 가격으로 구매 가능하나, Yubikey용 인증서를 생성하고, import하는 작업을 해주어야 한다.

 

0. 사전작업

1) certmgr.msc 실행해서, 개인용 > 인증서에서 SSL.com 관련된 인증서 모두 삭제 후 재부팅한다.

(인증서 충돌 피하기 위함. 그냥 했더니 yubikey로 코드사인 안됨. 기존 eSigner용 인증서가 남아있어서, yubikey 인증서가 제대로 설치 안되었다 함)

1. Key Generation and Attestation with Yubikey

https://www.ssl.com/how-to/key-generation-and-attestation-with-yubikey/#install

 

1) Yubikey manager에서 attest, intermediate cert를 생성한다

2) SSL.com 로그인 > Order > attest manage에서 해당 cert를 입력하여 주문에 연결시킨다

3) SSL.com에서 해당 정보로 인증서 발급해주면, 다운받는다. (이미 인증서가 발급 되어 있었으면, chat 등을 통해 재발급 요청하면 다시 발급해줌)

4) 새로운 인증서 다운받고, Yubikey에 import 한다

- yubikey용 der로 설치해야 함

 

 

2. Install SSL.com Root and Intermediate Certificates on YubiKey

https://www.ssl.com/how-to/install-sslcom-root-and-intermediate-certificates-on-yubikey/

 

>> 가이드에 나온 명령어는 deprecated 되었다 함. 아래 명령어 사용

 

1) root 인증서를 설치한다

./ykman piv certificates import 82 "SSLcomEVRootCertificationAuthorityECC.pem" -m managementKey

 

2) intermediate 인증서를 설치한다

./ykman piv certificates import 83 "SSLcom-SubCA-EV-codeSigning-ECC-384-R2.pem" -m managementKey

 

 

3) 인증서가 제대로 설치되었는지 확인한다

./ykman piv certificates export 82 -
./ykman piv certificates export 83 -

 

4) Yubikey를 reject 했다가 다시 연결한다. certmgr.msc 화면 리프레쉬 해서, 컴퓨터에 Yubikey에서 인증서가 제대로 설치되었는지 확인한다.

3. Using Your Code Signing Certificate

https://www.ssl.com/how-to/using-your-code-signing-certificate/

 

1) 아래 명령을 통해 코드사인 진행한다.

signtool.exe sign /fd sha256 /tr http://ts.ssl.com /td sha256 /n "발급대상명(회사명)" "사인할.exe"

 

2) 코드사인이 제대로 되었는지 인증서 확인한다.

Pinpoint PHP-Agent를 설치하는 중에, make 과정에서 에러가 나는 경우가 있다.

다양한 원인이 있는데, 이때 아래와 같이 해서 해결했다.

 

문제 1. pecl이 없다고 나오는 경우

pecl을 설치한다.

yum install php-pear
pecl channel-update pecl.php.net

 

문제 2. gcc 버전이 낮은 경우

CentOS의 기본 gcc에 필요한 정의가 부족하고 gcc PECL을 업그레이드한 후에도 이전 컴파일러를 찾는 것이다. 드라이버를 설치하려면 먼저 다음과 같이 devtoolset 컬렉션을 설치하여 gcc를 업그레이드해야 한다고 한다.

아래 과정을 거친다.

yum install centos-release-scl
yum-config-manager --enable rhel-server-rhscl-7-rpms
yum install devtoolset-8
scl enable devtoolset-8 bash
pecl download sqlsrv-5.2.0RC1

 

문제 3. sql.h 파일을 못찾는 경우

sqlsrv-5.2.0RC1 xplat.h fatal error: sql.h: No such file or directory  어쩌구 에러가 나오는 경우 아래 명령을 실행한다.

yum -y install unixODBC-devel

 

참고

https://ryotta-205.tistory.com/50https://github.com/grpc/grpc/issues/17812

CentOS 7에 Go를 설치하는 방법은 아래와 같다.

 

01. Go binary tarball 다운로드

wget https://dl.google.com/go/go1.13.linux-amd64.tar.gz

 

02. tarball 검증

다운로드가 끝나면, 아래 sha256sum 명령어를 실행해서, 체크썸이 동일한지 검증한다.

sha256sum go1.13.linux-amd64.tar.gz
// output
68a2297eb099d1a76097905a2ce334e3155004ec08cdea85f24527be3c48e856  go1.13.linux-amd64.tar.gz

 

03. tarball 압축 해제

/usr/local 디렉토리 안에 압축 해제한다.

sudo tar -C /usr/local -xzf go1.13.linux-amd64.tar.gz

 

04. 환경변수 등록

go 명령어를 어디서든 사용할 수 있게 profile 파일에 등록한다.

- 모든 사용자가 사용하게 하려면 /etc/profile 파일에 아래 내용을 추가해주고

- 현재 사용자만 사용하게 하려면 $HOME/.bash_profile 파일에 아래 내용을 추가한다.

예) ~/.bash_profile에 추가하는 경우

export PATH=$PATH:/usr/local/go/bin

변경한 파일을 저장하고, 변경 내용을 shell에 반영하기 위해 아래 명령어를 실행해준다.

source ~/.bash_profile

 

05. Go 실행해보기

go가 제대로 설치되었는지 테스트해본다. (hello 출력)

 

- $HOME/go 폴더를 만들어 기본 워크스페이스로 사용한다.

mkdir ~/go

- 간단한 "Hello World" Go 파일을 만든다.

a. 워크스페이스 안에, src/hello라는 폴더를 만든다.

mkdir -p ~/go/src/hello

b. src/hello 폴더 안에 아래 내용으로 hello.go 라는 파일을 만든다.

// ~/go/src/hello/hello.go
package main

import "fmt"

func main() {
    fmt.Printf("Hello, World\n")
}

c. ~/go/src/hello 디렉토리로 이동해서, go build 명령을 실행한다. hello라는 이름의 실행파일이 생성된다.

cd ~/go/src/hello
go build

d. 생성된 실행파일을 실행한다.

./hello

e. 아래와 같이 출력되면 성공!

Hello, World

 

 

참고

https://linuxize.com/post/how-to-install-go-on-centos-7/

Composer란

Composer(컴포저)란 PHP에서 사용되는 프로젝트 기반 의존성 관리 툴이다. 이는 프로젝트의 의존성 라이브러리들을 기술하고, 관리(설치/업데이트)한다.

 

의존성 관리

컴포저는 Yum이나 Apt같은 패키지 매니저가 아니다. 물론, 컴포저가 '패키지'나 라이브러리들을 다루지만, 이는 프로젝트 기반의 매니징을 하고, 의존성 라이브러리들을 프로젝트 안의 디렉토리에 설치한다. 기본적으로, 컴포저는 어떤 것도 전역 위치에 설치하지 않는다.

 

가정:

  • 여러 라이브러리에 의존성을 가지는 프로젝트가 있고
  • 어떤 라이브러리는 또 다른 라이브러리에 의존성을 가진다

Composer:

  • 의존성을 가지는 라이브러리를 명시할 수 있게 해준다.
  • 어떤 패키지의 어떤 버전이 필요한지 찾아서, 프로젝트 폴더 안에 설치해준다.
  • 모든 의존성 라이브러리들을 하나의 명령으로 업데이트 할 수 있다.

 

최소 요구사양

최신버전의 Composer는 PHP 7.2.5를 요구한다.

파일 압축 해제를 위해, 7z(또는 7zz), gzip, tar, untar, unzip, xz을 사용한다.

 

설치

Composer 실행파일 다운로드 페이지 : https://getcomposer.org/download/

(composer.phar 파일을 다운받으면 된다.)

phar 파일이란?
배포를 쉽게 하기 위해 php 파일들과 관련 리소스들을 하나로 묶어 놓은 파일이다.

 

사용

Composer를 프로젝트에 사용하려면, composer.json 파일이 있어야 한다.

 

Composer.json

{
    "require": {
        "monolog/monolog": "2.0.*"
    }
}
  • 이파일에 프로젝트에서 사용하는 의존성과, 다른 메타데이터들을 기술한다. 
  • composer.json은 보통 프로젝트의 최상위 디렉토리 안에 위치해야 한다.
  • "require" 키 : require 키에 의존성 라이브러리들 정보를 기술한다.
    • 패키지 이름 : vendor 이름과 프로젝트 이름의 조합으로 이루어진다. (예: json 라이브러리를 만든 vendor가 둘일 경우, 패키지 이름은 igorw/json 또는 seldaek/json 등이 될 수 있다.)
    • 패키지 버전 제한 : 패키지 버전을 2.0.* 이라고 기술 하는 경우, 2.0 브랜치의 어떤 버전도 사용 가능하다.  (>=2.0 <2.1 사이의 버전을 사용함)

 

의존성 설치

의존성 라이브러리들을 업데이트 하기 위해, 프로젝트 폴더 안에서 update 명령을 사용한다.

 

php composer.phar update

 

  • 위 명령을 수행하면, composer.json 파일 안의 모든 의존성 관련 정보를 파악하여 해당 버전의 composer.lock 파일을 생성한다. (이 composer.lock 파일을 버전관리 시스템에 commit 하는 것을 권장함)
  • 그 후 암시적으로 install 명령을 수행하여 해당 의존성 라이브러리들을 다운받는다.

이미 composer.lock 파일이 존재 하는경우(버전관리 시스템에 커밋된 lock 파일을 받은 경우), install 명령을 해주면 된다.

php composer.phar install

끝. 프로젝트 폴더의 vendor라는 폴더 하위에, 의존성 라이브러리들이 설치된다.

 

 

참고

https://getcomposer.org/doc/00-intro.md

'개발 > PHP' 카테고리의 다른 글

[PHP] OPcache 정보 보기  (0) 2024.02.24
[PHP] PHP의 철학  (0) 2024.02.22
PHP opcache 적용  (0) 2023.02.20
[PHP] PHP-FPM 적용하기 (Centos7)  (0) 2023.02.17
[PHP] 윈도우에서 php 7.4로 업그레이드 및 VScode 디버깅 설정  (0) 2023.02.07

centos 7에서 yum으로  cmake를 설치하면, 오래된 버전이 설치된다. (2.x 대 버전)

프로젝트에서 3.x 이상의 cmake 버전을 요구하면, 해당 버전의 소스파일을 받아서 컴파일 해주어야 한다.

 

1. 기존 CMake 가 있다면 삭제

yum remove cmake

 

2. 새로운 CMake 설치

01. tar 파일 다운로드

현재 최신버전이 3.27.0 이다.

sudo su
cd /usr/local/src
wget http://www.cmake.org/files/v3.27/cmake-3.27.0.tar.gz

02. 압축해제

tar -zxvf cmake-3.27.0.tar.gz

03. 설치

cd cmake-3.27.0
./bootstrap --prefix=/usr/local
make
make install

04. 설치확인

버전정보가 잘 나오면 설치 성공.

cmake --version

 

참고

https://hgko1207.github.io/2021/01/25/linux-11/

AWS EC2 Ubuntu 20.04 서버에, 도커를 사용하여 Pinpoint를 설치하는 방법이다.

Pinpoint란?
네이버에서 개발한 오픈소스 웹 어플리케이션 모니터링 툴

 

0. 준비 : EC2 서버에 ssh 접속

 

1. docker와 docker-compose를 설치

>> 설치 방법은 다음 글 참고 https://life-coding.tistory.com/141

 

2. 적당한 위치에 pinpoint-docker.git을 클론할 폴더 생성

(아래는 홈 디렉토리 안에 repos라는 폴더를 만들어 그 안으로 이동하는 예)

cd ~
mkdir repos
cd repos

 

3. pinpoint-docker git repository를 복제

git clone https://github.com/naver/pinpoint-docker.git

 

4. pinpoint-docker 폴더 안으로 이동

cd pinpoint-docker

 

5. pinpoint 도커 이미지 다운 & 설치 & 실행

docker-compose pull && docker-compose up -d
※ 참고
위 명령 돌리기 전에, 사용중인 포트를 먼저 체크해보자.
- 3306 포트는 미사용중이어야 한다. (이미 3306 포트로 DB가 실행되고 있다면 포트 binding을 못해서 pinpoint가 실행 안됨. 기존에 사용중이던 mysql을 stop 하고 다시 docker-compose up -d를 해주어야 한다.)
- 그 외에도, 설정에 기록된 포트들은 모두 미사용 중이어야 한다.

 

6. 현재 실행중인 도커 이미지 확인

docker ps

 

7. 본인의 서버주소:8080으로 접속되면 성공! (아래와 같이 PINPOINT 화면이 나오면 된다.)

 

참고

https://m.blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=bokmail83&logNo=221861896820

+ Recent posts