nginx
nginx 높은 성능과 안정성으로 가장 많이 사요되고 있는 웹서버
아파치와 비교시 더 빠르고 가볍고 대규모 어플 처리에 적합하다는 장점이 있다고함
nginx 를 이해하기전 알아야 할 용어
클라이언트
- 서비스를 이용하기 위해 네트워크를 통해 요청을 보내주는 주체 (크롬, 사파리 ...)
웹 서버
- 클라이언트의 요청에 따라 HTML, CSS, JS 이미지 파일과 같은 정적 파일을 응답하여 제공하는 소프트웨어
http 프로토콜을 사용하여 클라이언트와 통신. 대표적은 웹 서버는 Nginx, Apache
WAS (Web Appliction Server)
- 클라이언트 요청에 대해 동적인 처리를 담당하는 영역
웹 서버와 달리 애플리케이션 로직을 실행할 수 있도록 구성
ex. 회원가입이나 로그인 등의 로직 처리 영역, DB연동, 트렌젝션 관리, 보안, 로기 등의 기능을 제공하는 영역
대표적인 WAS Tomcat, JBoss ...
웹 서버와 WAS 는 역할의 차이가 있지만, 현업에서는 웹 서버로 퉁치는중 Node.js 는 웹 서버 또는 WAS 로 사용가능
DB
DB는 조직이나 개인이 필요한 정보를 체계적으로 저장, 관리, 검색할 수 있는 시스템, 관계형(RDBMS), NoSQL..
관계형 - 데이터를 테이블로 구성, 테이블 간의 관계를 정의하여 데이터를 저장하는 방식
SQL 과 같은 쿼리 언어를 사용, CRUD 가능
DBMS - 쿼리를 해석하고 실행하는 시스템. Postgres, Mysql ..
NoSQL - Not only SQL, 관계형 데이터베이스의 한계를 극복하기 위해 만들어진 시스템
스카마로부터 자유로운 구조로 데이터를 저장, 분산 처리 및 고성능 처리를 위해 설계됨
관계형과 다르게 테이블이 아닌 컬렉션이나 도큐먼트(document) 단위로 젖아
컬렉션은 테이블과 유사한 개념, 도큐먼트는 일반적으로 JSON의 구조를 가진 문서, 데이터를 유연하게 처리하고 확장성이 높음
MongoDB, Redis ...
*보통 웹 서비스는 클라이언트 > 웹 서버 > WAS > DB 순으로 요청, 응답은 그 반대
웹 서버를 사용하는 이유?
1. WAS 부담을 줄이기 위해 - 로그인, 회원가입 등 동적 작업을 처리하는 것 만으로도 작업량이 많음
HTML, CSS, JS 등 정적인 파일을 클라에게 전달하는 역할을 웹 서버에 위임 함으로서 부담 줄임
2. 보안 기능 제공 - 웹 페이지에 대한 접근 제어, SSL/TLS 프로토콜을 사용하여 데이터 암호화, 엑세스 제어, 방화벽 등의 보안 기능을 제공하여 웹 사이트를 보호
3. 높은 성능 제공 - 웹 서버는 대부분 비동기 처리 방식을 사용, 높은 성능을 제공
Nginx, Apache 등의 웹 서버는 이벤트 기반, 멀티 프로세싱, 스레드 풀 등의 기술을 사용, 수천대의 클라 요청을 동시에 처리
여러 웹들 중 Nginx 를 사용하는 이유?
1. 높은 성능과 적은 메모리 사용
Nginx는 비동기 I/O 처리 방식을 사용, 높은 성능 제공 - 대규모 웹 사이트에서도 빠른 응답 시간을 보장
적은 메모리 사용량으로 높은 성능 제공, 운영 비용 절감
2. 리버스 프록시(Reberse Proxy) 사용
*프록시: (대리) - 인터넷 접속을 할 때 보안상의 문제로 직접 통신을 주고 받을수 없을 때 그 사이의 중계기로 대리로 통신을 수행하는 기능
프록시 서버 - 이런식으로 동작하는 중계 서버 (포워드 프록시, 리버스 프록시)
포워드 프록시 - 클라이언트와 인터넷 그 사이에 있는 영역
-클라가 정보를 요청하면 포워드 프록시가 대신 받아서 서버에 전달, 후의 서버 응답 또한 포워드 프록시가 대신 클라에게 전달
-보안 강화 : 포워드 프록시를 사용하면 클라의 IP 주소가 웹 서버에 노출되지 않음, 클라의 위치나 신원 식별의 어려워짐
-접근 제어 수행 : 접근 제어를 수행, 특정 IP 주소, 도메인 또는 URL에 대한 접근 제한 가능
-미디어 스트리밍 지원 : 일반적으로 큰용량을 가지고 있는 미디어 파일을 웹 서버에 직접 전송하는 것을 비효율적, 포워드 프록시를 사용하여 미디어 파일을 캐시하고 클라에게 빠르게 제공
리버스 프록시 - 인터넷과 백엔드 그 사이에 있는 서버 영역
-로드 밸런싱 : 어플을 지원하는 리소스 풀 전체에 네트워크 트래픽을 균등하게 배포 하는 방법
-캐싱 서버 가능 : 인터넷 서비스 속도를 높이기 위해 사용자와 가까운 곳에 데이터를 임시 저장, 재 요청시 빠르게 제공하는 프록시 서버
-보안 강화 : WAS가 데이터 응답시 가지고 있는 민감 데이터를 중간에서 숨겨줌
3. SSL 지원
SSL : 웹 사이트와 브라우저 사이 or 두 서버 사이에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 기술
HTTPS : http 의 암호화 버전, SSL 을 사용하여 양측의 보안 연결을 설정하고 SSL 인증서를 사용하여 서버의 신원을 확인하여 기밀 정보를 보호, Nginx 는 HTTPS 인증서를 제공할 수 있음
4. 데이터 압축 - 클라의 요청이 text일 경우 gzip 을 사용하여 압축
5. 비동기 처리
Nginx는 이벤트 루프방식을 사용하여 높은 성능을 제공 : 많은 트래픽을 동시에 처리, 빠른 응답시간 보장