이번에 주제는 Nginx 입니다.
1. Nginx란
Nginx는 높은 성능과 안정성으로 현재 가장 많이 사용되고 있는 웹 서버입니다. Apache(아파치)와 비교했을 때 더 빠르고 가벼우며 대규모 어플리케이션 처리에 적합하다는 장점이 있습니다.
여기서 웹 서버란 클라이언트 요청에 따라 HTML, CSS, JS 같은 정적인 파일을 응답해 제공하는 소프트웨어 입니다.
웹 서버는 HTTP 프로토콜을 사용해 클라이언트와 통신합니다.
WAS(Web Application Server)란 것도 존재하는데 WAS의 경우 동일하게 클라이언트의 요청을 처리하지만 동적인 요청을 처리 하고 애플리케이션 로직을 실행할 수 있도록 구성되었다는 점에서 웹 서버와 차이점이 있습니다.
예를 들어 Database CRUD, 회원가입 , 트랜잭션 관리, 보안, 로깅 등의 로직을 처리할 수 있습니다.
보통 웹 서비스는 클라이언트 -> 웹 서버 -> WAS -> DB 순으로 요청을 보내고
DB -> WAS -> 웹 서버 -> 클라이언트 순으로 응답을 전송합니다.
2. 왜 Web Server 인가?
1. WAS에 부담을 줄이기 위해 사용합니다. WAS에 로그인, 회원 가입 등의 동적인 작업을 모두 처리하게 되면 작업량이 너무 많아지게 됩니다. 그래서 HTML, CSS, JS 등 정적인 요청에 대한 응답을 웹 서버에게 위임해 WAS의 작업 부담을 줄입니다.
2. 보안 기능을 제공할 수 있습니다. 웹 서버는 SSL/TLS 프로토콜을 사용해 데이터를 암호화하고 액세스 제어, 웹 방화벽 등의 보안 기능을 제공해 웹 사이트를 보호할 수 있습니다.
SSL:보안 소켓 계층(Secure Socket Layer) : 웹 페이지와 브라우저 사이(또는 두 서버 사이)에 전송되는 데이터를 암호화해 인터넷 연결을 보호하기 위한 표준 기술입니다.
TLS:전송 계층 보안(Tranport Layer Security) : SSL의 업데이트 버전이며 명칭만 다르다고 볼 수 있다.
SSl/TLS 를 사용하는 웹사이트 URL은 HTTP 대신 HTTPS가 사용된다.
3. 이벤트 기반, 멀티 프로세싱, 스레드 풀 등의 방식으로 대부분 비동기 처리 방식을 사용해 높은 성능을 제공합니다.
3. 왜 Nginx 인가?
1. Nginx는 비동기 I/O 처리 방식을 사용하여 높은 성능을 제공합니다. 이를 바탕으로 대규모 웹 사이트에서도 빠른 응답 시간을 보당하고 적은 메모리 사용량으로 높은 성능을 제공해 서버 운용 비용을 절감할 수 있습니다.
2. 리버스 프록시(Reverse Proxy) 사용 가능
프록시(Proxy)란 인터넷 접속을 할 때 보안상의 문제로 직접 통신을 주고 받을 수 없을 대 그 사이의 중재인으로써 통신을 수행하는 기능을 말합니다. 프록시는 포워드 프록시, 리버스 프록시로 구분됩니다.
포워드 프록시는 클라이언트와 인터넷 사이에 있는 영역을 말합니다. 클라이언트가 데이터를 요청하면 포워드 프록시가 이를 받아 서버에게 전달 후 서버의 응답을 받아 클라이언트에게 전달합니다.
포워드 프록시를 사용하면 클라이언트의 IP 주소가 웹 서버에 노출되지 않습니다. 따라서 클라이언트의 위치나 신원을 식별하는 것이 어려워 보안이 강화되고 특정 IP 주소 또는 도메인, URL 에 대해 접근 제어를 수행할 수 있습니다.
리버스 프록시는 인터넷과 서버 사이 영역에 위치해 클라이언트의 요청을 가로채 대신 전송합니다
최종 적으로 프록시는 어떤 클라이언트도 원본 서버와 직접 통신하지 못 하도록 합니다.
3. 캐싱 서버로 이용할 수 있습니다. 캐싱 서버란 클라이언트가 이전과 동일한 요청을 할 경우 캐시 서버에서 가져와 클라이언트에게 전송함으로써 사이트의 접속 속도를 향상시킵니다.
4. 동작 방식
1. Nginx는 실제 동작을 수행할 worker Processer와 설정 파일을 읽고 worker Process을 생성하는 master Processor 이루어졌습니다.
2. 초창기에는 nginx + Apache를 연동해 앞단에서 각각 동작, 정적 요청을 처리했습니다.
3. Worker Processor 생성 → Listen Socket 생성 → Client Request → Connection 생성 → Event가 없으면 새로운 커넥션을 형성 OR 다른 Event를 받아옵니다. 여기서 Event란 nginx에서 connection에 관한 요청입니다.
4. 이벤트는 OS Kernel이 Queue 형태로 worker Process에 전달하여 비동기로 처리합니다.
5. 오래 걸리는 작업에 대해서는 스레드 풀을 생성해 전달합니다.
5. Nginx 설치
1. Nginx 다운로드 및 확인(빠져 나오려면 end 입력)
sudo apt-get update // 반드시 해주자 제대로 설치가 안된다.
sudo apt-get install nginx
// 2023/11/17 update
// apt-get : command not found 발생시
// sudo yum install nginx
sudo systemctl start nginx.service
sudo service nginx status
2. aws 인바운드 규칙 설정
3. 명령어
* 상태 확인
systemctl status nginx
* 웹서버 정지(STOP)
sudo systemctl stop nginx
* 웹 서버 시작(START)
sudo systemctl start nginx
* 웹 서버 재시작(RESTART)
sudo systemctl restart nginx
* 설정 리로드
sudo systemctl reload nginx
'Android' 카테고리의 다른 글
Android Network Programming 1 (0) | 2023.12.13 |
---|---|
Android Studio MySQL 연동 6 (0) | 2023.12.08 |
Android Studio MySQL 연동 5 (0) | 2023.12.08 |
Android Studio MySQL 연동 4 (0) | 2023.12.08 |
Android Studio MySQL 연동 3 (0) | 2023.12.08 |