이번 학원 팀 프로젝트에서 사용한 nginx..
그리고 도메인을 묶질 못하는 무료 오라클 클라우드를 위한 nginx proxy manager..
잘 생각해보면 여태 난 nginx를 그저 "엄청 빠르고 리버스프록싱을 가능하게 해주는 웹서버" 정도로만 알고 있었고
그렇게 쓰고 있었다
문득 새벽에 생각난 내용.. nginx가 무엇인지 알아보자
--
https://ko.wikipedia.org/wiki/Nginx
위키피디아 사랑해요..
정확한 내용들은 아니겠지만 그래도 대강적인 내용은 알 수 있다
일단 만든 목적은 "아 왜 처리를 못하는데 답답하네" 하면서 자기가 만든 게 nginx라 한다
조금 더 있어 보이는 명칭을 쓰면 C10k problem이라는데 아래의 글을 참고하자
https://ja.wikipedia.org/wiki/C10K%E5%95%8F%E9%A1%8C
본문에 나와있듯
" 아파치 http서버나 웹서버 소프트웨어와 클라이언트 간의 통신에 있어서, 클라이언트가 약 1만 대에 달할 경우 웹서버의 성능이 남아있지만 이와 상관없이 response성능이 크게 저하되는 문제"라고 적혀있다
1만 대.. 1만 대를 비동기 처리한다 왠지 당연할 것 같다
지금 시대에 10기가 광랜의 시대라지만 옛날에 그 느린 통신속도로 1만 개의 처리를 비동기 형식으로.. 처리하면
느려지는 게 당연한 것 아닐까?
또한 이미 19년 전에 이 주제에 대해 말이 있는 걸 찾아냈다
https://www.gpgstudy.com/forum/viewtopic.php?t=2097
저 당시 기준 20년 전의 이야기도 막 오고 가는데.. 그러면 대체 ㄸ..
여하튼 이것을 해결했다 하면 비동기 I/O가 아닌 방식의 웹 서버 프로그램이라 이해할 수 있다
이런 영상도 있으니 참고
https://www.youtube.com/watch?v=JKxlsvZXG7c
여하튼 nginx와 아파치 웹서버를 비교하면
아파치 : 1:1 전담 마킹 택배서비스, 차량 한 대가 택배 하나를 담당한다
nginx: 우리가 아는 택배서비스, 일단 물류창고에 싹 다 들여놓고 급한 택배부터 싸악 처리한다
라고 생각할 수 있겠다
사설이지만.. 중학교 시절 xampp 쓸 때 그 아파치가 그리 무겁게 느껴졌는데.. 무거운 이유가 이런 이유 아닐까??
자, 여기서 또 알아보자 그럼 nginx로 어떤 것을 할 수 있을까
대표적인 것들을 나열해보자면
1. 정적 웹 파일 배포
2. 프록싱
3. 리버스프록싱
4. 로드밸런싱
이 정도이지 않을까
1번 정적 파일 배포는 뭐.. /etc/nginx/con.f/default or /nginx/nginx.conf였나;? 여기 적힌 경로의 파일들을 잘 배포해준다
물론 기본 포트는 80번으로.. 아주 잘해준다
2번 프록시도 다 아는 프록시다
역시 세팅 파일에서 ~ /example { proxy_pass : 주소 } 설정해두고
example로 요청한 내용을 nginx가 주소로 둔갑해 자기가 받아와준다
요런 식으로 CORS문제도 해결이 가능해진다 사랑해요 nginx..
3번 리버스프록시는 말 그대로 프록시의 반대 기능이다
내부에서 외부로 가는 것을 상정했다면 이건 외부에서 내부를 찍어준다
예를 들어 내가 :8090 포트를 공개하고 싶은데 이걸 다르게 바꾸고 싶다
혹은 도메인의 특정 주소로 받고 싶다! 이럴 때 쓴다
예를 들어 외부에서 ex.example.com 이라는 서브도메인을 가진 주소를 요청하면 :8090의 주소로 보내는.. 그런 개념이다
이렇게 하면 nginx가 털리지 않는 이상 내부 서버들을 nginx를 이용해서 감쌀 수 있게 되어 보안성도 올라가게 된다
nginx 본체에서는 리버스프록시 세팅을 해본 적은 없고.. nginx를 이용한 nginx proxy manager라는 녀석이 있다
https://nginxproxymanager.com/
무려 GUI!! 외부 접속도 가능해서 매우 편하다 서버 하나 열고 리버스 프록시 필요할 때 항상 이 친구로 설정해준다
무려 SSL 인증서까지 let's encrypt에서 바로 해준다!
흑흑 너무 좋아 nginx..
4. 로드밸런싱
이번에 구글 좀 돌다가 연관검색에서 자꾸 떠있길래 알게 되었다
뜻을 풀어서 기능을 설명하면.. " 같은 여러 개의 서버에 한 주소를 묶어서 각 서버의 부하에 따른 요청을 분기해주는 기능"이라고 이해했다
처음에 딱 읽었을 때는 " 아니 이걸 그럼 로직을 하나하나 다 짜야한다는 거야? 트래픽 들어오는 거 다 계산하고 알맞게?? "
라고 생각하고 그럼 nginx와 무언가의 프로그램이 필요할 줄 알았는데.. 그런 거 없다 갓-nginx는 이미 그런 것들도 다 만들어놨다
nginx설정들을 구글링 하다 보면 간간이 나오던 upstream.. 여기다 로드밸런싱 타입을 쓰고 그냥 저장만 하면 nginx가 자기가 알아서 다 해준다
너무 감격적이다.. 왜 이 프로그램이 무료인 거지.. 흑흑하면서 눈물을 흘렸다
.. 여하튼 여기까지 nginx가 무엇인지, 어떤 기능이 있는지를 알아봤다
마지막으로 한마디..
사랑해요 nginx!
'프로그래밍 > 이론복습' 카테고리의 다른 글
[이론 복습] OSI 7 계층 (0) | 2022.10.10 |
---|---|
[이론 복습] 자료 구조 (0) | 2022.08.14 |