티스토리 뷰
반응형
Nginx는 왜 점유율이 1등일까?!
Ngnix는 Naver, Kakao, NETFLIX, GitHub등 많은 대기업에서 사용하고 있다. 그만큼 인증된 서비스라는것이다!
설명흐름은 아래와 같다
- WHAT : Ngnix란 무엇일까?
- WHY : Ngnix는 왜 써야하는가?
- HOW : Ngnix는 어떻게 적용하면되는가?
1. WHAT : Ngnix란 무엇일까?
전체적인 흐름은 브라우저에서 클라이언트 요청이 있으면 WebServer(Ngnix)는 WAS에 해당요청을 보내고 DB를 조회하여 WebServer에서 페이지를 클라이언트에게 전달해주는 흐름입니다.
그렇다면 WebServer와 WAS의 차이점이 뭘까요?!
WebServer ?
정적인 파일(HTML, CSS, JS)을 응답해주는 것으로 Ngnix, Apache 등을 예시로 들 수 있다.
WAS(Web Application Server) ?
클라이언트 요청에 대해 동적페이지(DB와 연동된)를 응답
ex) 로그인정보를 가지고 동적인 처리를해주어 WAS를 거친 후 페이지를 응답해주는 것
2. WHY : Ngnix는 왜 써야하는가?
가. 웹서버를 별도로 운영하는 이유는?
WAS의 부담을 줄이기 위해 WAS는 동적인 페이지, DB연동 및 처리등 할일이 많기에 Ngnix가 정적인 페이지를 주는 등 간단한 역할들을 해줌으로써 WAS의 부담을 줄일 수 있다.
나. 굳이 Ngnix를 사용하는 이유는 뭘까?
- 빠르다.
- 리버스 프록시로 사용가능 (Reverse Proxy)
- SSL을 지원해준다.
- 비동기처리
나-1. 빠르다
)
그림은 메모리 사용량인데, Nginx는 동시요청이 많아도 메모리 사용량은 낮고 일정하다.
그림은 초당 처리그래프인데
Ngnix는 동시요청수가 많아져도 빠르게 처리 가능함을 알 수 있다.
나-2. 리버스 프록시로 사용가능 (Reverse Proxy)
프록시란? 무언가를 대신 처리해주는 대리역할을 한다.
)
- forward Proxy :
- ①
- 위치 : [Client] - [forward Proxy] - [Internet] - [WAS]
- 클라이언트의 요청을 forward Proxy 서버가 대신 받아서 인터넷에 연결 요청한다.
- 예제: 보안이 매우 중요한 기업환경에서 내부망을 설정해서 정해진 인터넷 사이트만 연결하여 설정하여 웹 사용 환경을 제한한다.
- 사용자가 naver.com 사이트에 접속하는경우 PC에서 직접 연결하는것이 아닌, forward Proxy 서버에서 요청을 받아 naver.com사이트에 연결한 후 그 결과를 반환환다.
- 위치 : [Client] - [forward Proxy] - [Internet] - [WAS]
- reverse Proxy :
- ②
- [Client] - [Internet] - [reverse Proxy] - [WAS]
- Internet과 appServer사이에 존재하는 서버로써 (ex: nginx)
- 사용자가 naver.com을 입력하면 해당 사이트 기업에서 설정한 Reverse Proxy WEB 서버를 통한 뒤,
내부망에 접근하여 데이터를 받아온 다음 Proxy Server가 데이터를 받아 다시 클라이언트에게 전달해준다. - 요청에따른 처리를 어떤 서버로 할지 밸런싱있게 조율해주는 로드밸런싱이 가능하다.
- 캐시서버가 가능하다
- 자주 요청되는 클라이언트 요청을 저장(캐싱)해둘 수 있다.
- 한번 더 요청있는 경우 백단까지 안가고 바로 응답 가능
- 재미있는 사실
- apach는 forward proxy와 reverse proxy둘다 존재
- ngnix는 reverse proxy만 존재
나-3. SSL을 지원해준다.
- ssl인증서인 certbot과의 연결을 가능하도록 도와준다.
- 위 인증서를 제공할 수 있도록 도와준다.
나-4. 비동기처리
- 클라이언트의 요청을 비동기방식으로 처리 가능하도록해준다
- 이벤트루프 라는 녀석을 사용함!
3. HOW : Ngnix는 어떻게 적용하면되는가?
* 기본지식
http 요청은 무조건 80포트로 요청간다
https 는 무조건 443포트로 요청된다.
// Linux Ubuntu
$ cd /etc/ngnix/sites-enabled
$ sudo rm defalut -- 기존에 있던것 지우고
$ sudo vi default -- 새로 생성
- 클라이언트가 HTTP로 접속 시 80번 포트로 접속된다.
Ngnix가 80번 포트로 오면 443으로 우회시켜준다.
server {
listen 80: //80번 포트로 접속 시
server_name idu-market.shop;
//ngnix로 로그관리
# access_log /var/log/nginx/reverse-access.log
# error_log /var/log/nginx/reverse-error.log
// $host : 클라이언트 요청 도메인
if($host = idu-market.shop) {
// 301 : https(443)로 우회시켜라
return 301 https://$host$request_uri;
}
}
- 클라이언트가 HTTPS로 접속 시 443번 포트로 접속된다.
백엔드 서버로 연결된다.
server {
listen 443 ssl; //443포트로 왔을 경우
server_name idu-market.shop;
# access_log /var/log/nginx/reverse-access.log
# error_log /var/log/nginx/reverse-error.log
location / {
proxy_pass http:127.0.0.1:5000; // 5000번 포트로 우회시켜라
}
}
참조
우리밋_woorimIT [Nginx] 도대체 뭐길래 카카오, 네이버에서 사용할까
https://www.youtube.com/watch?v=ZJpT-Wa-pZ8
포워드 프록시(forward proxy) 리버스 프록시(reverse proxy) 의 차이
https://www.lesstif.com/system-admin/forward-proxy-reverse-proxy-21430345.html
https://sujinhope.github.io/2021/06/13/Network-%ED%94%84%EB%A1%9D%EC%8B%9C(Proxy)%EB%9E%80,-Forward-Proxy%EC%99%80-Reverse-Proxy.html#title3
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- stream
- 자바8
- MAC
- docker
- elasticsearch
- java
- springboot
- Vuex
- 중간연산
- vscode
- lambda
- 람다
- container
- Vue
- 최종연산
- ApplicationContext
- NPM
- 스트림
- mvn
- install
- JPA
- map
- 차이
- webpack
- 영속성 컨텍스트
- nginx
- AnnotationConfigApplicationContext
- BeanFactory
- Intellij
- ngnix
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함