Just Do IT!
Nginx란 무엇인가? 본문
728x90
반응형
- 트래픽이 많은 웹사이트의 서버(AWS)를 도와주는 비동기 이벤트 기반 구조의 경량화 웹 서버 프로그램
- 클라이언트로부터 요청을 받았을 때, 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용된다
- Reverse Proxy Server로 활용하여 WAS의 부하를 줄일 수 있는 로드밸런서 역할을 수행할 수 있다
이러한 특징을 이해하기 위해서는 아래의 흐름을 먼저 이해해야 한다.
클라이언트
- 서비스를 이용하기 위해 네트워크를 통해 요청을 보내는 주체
- 웹 개발 영역에서는 보통 크롬, 사파리, 익스플로러 등 웹 브라우저를 의미한다.
웹 서버
- 클라이언트와 서버 간의 통신을 처리하며 웹 애플리케이션을 호스팅할 수 있게 해주는 소프트웨어
- 클라이언트의 HTTP 요청을 받아 정적 or 동적으로 웹 페이지를 제공해주는 소프트웨어
- Appach Tomcat, Nginx, Mocrosoft IIS 등이 있다
WAS (Web Application Server)
- 클라이언트 요청에 대해 동적인 처리를 담당하는 영역
- 웹 서버와 달리 애플리케이션 로직을 실행할 수 있도록 구성되어 있다.
- (예) 회원가입, 로그인 등의 로직을 처리하는 영역
- 데이터베이스 연동, 트랜잭션 관리, 보안, 로깅 등의 기능도 제공
- Tomcat, JBoss, WebLogic, WebSphere 등이 있다.
DB (Database)
- 조직이나 개인이 필요한 정보를 체계적으로 저장, 관리하고 검색할 수 있는 시스템
- 대규모 데이터의 저장과 검색을 처리할 수 있다.
- 가장 많이 사용되는 유형으로는 관계형(RDBMS), NoSQL 등이 있다.
웹 서비스에서 클라이언트 > 웹 서버 > WAS > DB 순으로 요청이 되고,
DB > WAS > 웹 서버 > 클라이언트 순으로 응답이 된다.
웹 서버를 사용하는 이유?
- WAS 부담을 줄여주기 위해 사용
- 정적 파일을 클라이언트에게 전달하는 역할을 웹 서버에게 위임함으로써 WAS 작업 부담을 줄일 수 있다.
- 보안 기능을 제공
- SSL/TLS 프로토콜을 사용하여 데이터를 암호화하고, 액세스 제어, 웹 방화벽 등 보안 기능을 제곻하여 웹 사이트를 보호할 수 있다.
- 높은 성능을 제공
- 대부분 비동기 방식을 사용하여 높은 성능을 제공
- Nginx, Apache 등의 웹 서버는 이벤트 기반, 멀티 프로세싱, 스레드 풀 등의 기술을 사용하여 수천 대의 클라이언트 요청을 동시에 처리할 수 있다.
Apache란?
- 쓰레드 / 프로세스 기반 구조로 요청 하나당 쓰레드 하나가 처리하는 구조
- 사용자가 많으면 많은 쓰레드 생성, 메모리 및 CPU 낭비가 심함
- 하나의 쓰레드 : 하나의 클라이언트 라는 구조
- Apache 서버의 프로세스가 blocking되면 요청을 처리하기 못하고 처리가 완료될 때 까지 계속 대기해야 한다.
- Keep Alive(접속 대기)를 이용해 해결이 가능하지만, Keep Alive 때문에 대량 접속 시 효율이 떨어짐
Ngnix를 사용하는 이유
- 높은 성능과 적은 메모리 사용
- 비동기 I/O 처리 방식을 사용하여 높은 성능을 제공
- 대규모 웹 사이트에서도 빠른 응답 시간을 보장할 수 있다
- 적은 메모리 사용량으로 높은 성능을 제공하여 서버 운용 비용을 절감할 수 있다
- 리버스 프록시 사용이 가능
- 프록시 : 인터넷 접속할 때 대리로 통신을 수행하는 기능
- 포워드 프록시 : 클라이언트와 인터넷 그 사이에 있는 영역
- 클라이언트가 어떠한 정보를 요청하면 포워드 프록시가 대신 받아서 서버에게 전달,
- 서버의 응답 또한 포워드 프록시가 대신 받아 클라이언트에게 전달
- 클라이언트의 IP 주소가 웹 서버에 노출되지 않는다.
- 포워드 프록시를 활용하면 특정 IP 주소, 도메인 또는 URL에 대한 접근을 제한할 수 있다.
- 미디어 스트리밍을 지원할 수 있다. (미디어 파일을 캐시하고, 클라이언트에게 빠르게 제공할 수 있다)
- 리버스 프록시 : 인터넷과 백엔드 사이에 있는 서버 영역
- 캐싱 서버로도 이용 가능
- 보안 효과도 있음
- SSL 지원 (Secure Sockets Layer)
- 웹 사이트와 사용자 간의 통신을 암호화하고 보안을 유지하는 데 사용되는 프로토콜
- SSL은 HTTPS로 알려진 보안 HTTP 프로토콜 기반 기술이다.
- SSL 프로토콜을 통해 웹 서버와 클라이언트 간에 보안 연결을 설정하고, SSL 인증서를 사용하여 서버의 신원을 인증
- 중간자 공격과 같은 보안 위협을 방지하고 사용자의 개인 정보와 웹 사이트 기밀 정보를 보호할 수 있다.
- nginx는 HTTPS 인증서를 제공해줄 수 있다
- 데이터 압축
- 비동기 처리
- 이벤트 루프 방식을 사용하여 높은 성능을 제공하여 동시에 여러 요청이 들어와도 많은 트래픽을 동시에 처리할 수 있다
Apache와 Nginx, 어느 것을 선택해야 할까?
Apache 는 Nginx 에 비해 모듈이 다양하고, 안정성, 확장성, 호환성이 장점이고,
Nginx는 속도가 빠르고 안정성이라는 장점이 있다. (컨텐츠가 많은 인기있는 사이트를 운영하는 경우 nginx를 선호)
이러한 각 장단점을 인지하고, 특정 요구사항과 우선 순위에 따라 선택을 하면 된다.
도커와 컨테이너에 대한 실습을 하면서,
왜 Nginx를 쓰는지 이게 뭔지 너무 궁금해서 직접 구글링을 통해 정리해봤다.
도커 관련도 블로그에 정리하고 싶은데, 이부분은 우선 나중에...
우선은 위의 내용을 복습하면서 내것으로 만들어야 할 것 같다.
참고
https://blog.naver.com/gi_balja/223028077537
https://medium.com/@limstar/spring-docker-nginx-%EB%9E%80-bde33c252789
https://velog.io/@deannn/Apache%EC%99%80-NginX-%EB%B9%84%EA%B5%90-%EC%B0%A8%EC%9D%B4%EC%A0%90
728x90
'개발 공부 > DevOps' 카테고리의 다른 글
Docker와 Docker Compose (5) | 2024.09.27 |
---|---|
Docker, Docker-compose 이용해서 가상머신에서 프로젝트 빌드하기 (2) | 2024.09.27 |