DNS는 인터넷 브라우저를 사용하여 웹페이지에 접근 할 때 문자열을 가진 도메인으로 접근하는데, 이러한 도메인은 각각의 고유 주소인 IP를 가지고 있다. 우리가 주로 URL에 웹 브라우저 주소창에 www.naver.com 형식으로 작성을 할 것이다. 이는 우리가 외우기 쉽고, 쉽게 접근할수 있도록 되어 있는것이다. DNS를 조회하면 IP가 있고 그 IP의 주소안에 Port의 안내의 따라 웹 사이트에 접근이 가능하다.
CDN는 콘텐츠 전달 네트워크의 약자로 말 그대로, 컨텐츠를 전달하는 네트워크를 구성하는 것이다. 보통 웹 서버에 HTTP 요청을 하여 리소스를 가져오지만 웹 서버가 아니라 현재 사용자가 접속한 위치에서 가장 가까운 서버에 리소스를 캐싱 해놓고 보다 빠르게 가져오는 기법이다. 물론 네트워크를 구축하는데 비용이 들긴 하지만 만약 구축하게 되면, 정적 리소스를 보다 빠른 속도로 서비스할 수 있다.
1. 사용자는 웹 브라우저를 통해 url 주소 입력
2. DNS 캐시에 해당 url의 ip주소가 없다면 DNS 서버에 질의
3. DNS 서버는 가장 가까운 또는 트래픽이 적은 CDN 서버의 IP주소 반환
4-1. CDN 서버에 클라이언트 HTTP 요청
4-2. CDN에 콘텐츠가 존재하지 않는 경우 본 서버에 요청
5. 본 서버에서 CDN 서버에 콘텐츠 전송(Response). CDN은 해당 콘텐츠를 캐싱하여 복사본 저장 다음 방문자는 본 서버에 요청하지 않고 CDN 서버에 요청하여 CDN 서버에서 응답을 보낸다.
6. 브라우저는 Response를 받음
7. 사용자가 보기 편하도록 렌더링 하여 정보 제공
NginX
Nginx는 Apache의 보완하고자 나왔고 Apache앞에 Nginx를 두어 동시에 커넥션을 관리 하지 못하는 Apache 대신 Nginx가 관리해서 Apache한테 전달 하는 방식이다.
출처 : https://www.youtube.com/watch?v=6FAwAXXj5N0
Apache는 동시에 Connection이 들어오면 Proess관리가 제대로 안되는 단점이 있다고 위에서 설명을 했다.
그럼 Nginx는 어떻게 관리를 할수 있는것일까?? 바로 NginX에 있는 Woker Proess에 있다
- Nginx는 Event-Driven 방식으로 동작한다. 즉, 프로그램 흐름이 이벤트에 의해 결정이 된다
- 한 개 또는 고정된 프로세스만 생성하고, 그 내부에서 비동기로 효율적인 방식으로 task를 처리한다.
- Apache와 달리 동시접속자 수가 많아져도 추가적인 생성비용이 들지 않는다.
- 비동기 이벤트 기반으로 요청하여 적은 양의 스레드가 사용되기 때문에 CPU소모가 적다
- Apache와 달리 CPU와 관계없이 I/O들을 전부 Evnet Listener로 미루기 때문에 흐름이 끊이지 않는다
- Context Switching 비용이 적다
- Context: 스레드가 작업을 진행하는 동안 작업정보를 보관 O/S는 A작업을 진행할 때 A스레드의 Context를 읽어오며, B스레드로 전환 할 때 A스레드의 Context를 저장하고 B스레드의 Context를 읽어오는 일련의 반복작업이다.
- 즉, 스레드가 갯수가 많아질 수록 Context Switching 작업은 더 빈번하게 일어나고 이 때문에 성능이 저하될 수 있다.
Nginx Woker Proess
Nginx는 하나의 Master Process와 다수의 Worker Process로 구성되어 실행된다. Master Process는 설정 파일을 읽고, 유효성을 검사를 하며 Worker Process를 관리를 한다. 모든 요청은 Worker Process에서 처리한다. Nginx는 이벤트 기반 모델을 사용하고, Worker Process 사이에 요청을 효율적으로 분배하기 위해 OS에 의존적인 메커니즘을 사용한다. Worker Process의 개수는 설정 파일에서 정의되며, 정의된 프로세스 개수와 사용 가능한 CPU 코어 숫자에 맞게 자동으로 조정을한다.
출처 : https://icarus8050.tistory.com/57
Nginx의 장점과 단점
- Nginx 장점
- 수많은 커넥션을 처리할 수 있고 가볍다
- 동적 설정 변경이 가능하다
- 정적Nginx 단점
- 개발자가 기능을 추가할 시 잘못 추가하거나 삭제하면 WokerProess가 멈추는 현상이 자주 발생한다
총 정리
--------------------------------------------------------------------------------
맨 처음 고객이 가장 먼저 접근하는건 DNS, Nginx, apache 라고 알고 있으면 된다. 그럼 CDN은 없는건가?
Nginx가 apache, cdn 둘다 가지고 있다고 생각하면 된다. cdn은 말 그대로 네트워크를 통해 정적인 요소를 캐싱을 해두었다가 was 까지 가지않고 바로 보여주기 때문에 Nginx가 그 역할을 대신 해주고 있다.
apache가 관리하기 어려웠던 동시 커넥션을 Nginx가 대신해주기 때문에 Nginx를 apache 앞에 두는것이 맞다.
참고자료
----------------------------------
https://www.youtube.com/watch?v=_kcoeK0ITkQ
https://www.akamai.com/ko/glossary/what-is-a-cdn
https://diatomicc.tistory.com/95