아파치, NginX는 다양한 기능들을 제공합니다.

 

 

그 중에 먼저

1. revers proxy 가 있습니다.

- 그런데 여기서 웹서버가 해주는건 revers proxy입니다.

- 이건, 손님들에게서 서버의 정보를 감추는 거죠.

- 질문 : 손님들이 서버가 어딨는지 다 알고 찾아왔는데 거기에 프록시로 감출거가 뭐가 있어여?

답변 : 서버란 집의 관리자도 보안상 내부 구조를 감출 필요가 있잖아요.............,

"정적 리소스"들이 진열된 방은 어디인지??, 톰캣같은 요리사들이 동적 요소를 요리하는 주방은 어디인지??

 

이런 것들을 드러내지 않고, 아파치나, NginX응접실에서 대신 손님들을 맞이하고 요리를 내오는 거죠.

 

서버 내부적으로 파일들이 어느 폴더에 들어 있는지, 서비스가 몇 번 포트로 돌고 있는지 등을 감추는거에요

 

한서버에서 이러쿵닷컴 저럿쿵닷컴 요이요닷컴이 제공된다 치면,

이들 중 어느 주소로 사람들이 접속하든

이 웹서버가 손님을 맞아서,

어떤 닷컴으로 찾아서 왔는지를 보고,

진열된 걸 가져오든 톰캣한테 주문 전달해서 요리 받아오든,

자기가 PHP로 라면 끓여서 내오든 하는거에여.

 

- 질문 : 어떤 웹 프레임워크든 앞단에 아파치NginX를 두는게, 이런 보안 측면에서의 이유가 큰거네요!?!!!!

- 답변 : 그렇죠, 구글에 '아파치 보안 설정' 등을 검색해보면 아시겠지만,

웹서버가 다양한 보안 기능들을 제공하기 때문에

뭘 사용해서 웹이나 API 만들든 그 앞 단에는 

웹서버(아파치, NginX)를 둬서 방문객을 맞도록 하는거에요.

 

- 웹서버를 사용하는 또다른 이유로

역시 revers proxy의 기능으로 치지만, "로드벨런싱"이 있어요

- 로그벨런싱

톰캣이 여러개 돌고 있을 때, 그것들을 발란스를 맞춰주는거 입니다.

- 톰캣으로 하는 자바 서비스들 뿐 아니라, 다른 종류의 WAS들도 마찬가지죠. 손님들이 여럿 몰릴 때 여러 요리사들에게 분산해서 주문을 넣어주는 역할을 하는거에요.

 

- 질문 : 근데 서버 한 대에서 이러쿵닷컴 사이트 하나를 돌릴 때, 그 같은 사이트를 돌리는 톰캣을 여러개 두는거는 왜 그렇게 하는 건가여?????????????

답변 : 먼저 지속성을 위함이에요. 스프링으로 만든 웹등의 서비스에 새 기능을 추가해서 종적부분까지 업데이트를 해줘야 하는 경우에는 돌던 서비스를 종료하고 다시 실행을 해줘야 하잖아요!!!!!!!!!!!!!!!!!!!!!!

짧은 찰나지만 그 동안에 사용자가 해당 서비스에 접근하면 다시 켜지고 있는 중이라 오류가 뜨게 돼죠.

 

톰캣이나 이런 걸 여럿을 두고 서비스를 돌리게 되면,

이것들을 순서대로 차례차례 업데이트를 해서

하나가 재부팅되는동안에는 웹서버가 다른 톰캣들로 

주문들을 분산해줘서,

사용자의 입장에서 서비스를 끊김 없이 이용할 수 있도록 할 수 있죠.

 

- 그리고 환경에 따라 CPU 수나 메모리 등 변수들이 있지만, 톰캣 등의 인스턴스를 여럿 돌려서 작업을 분산하는게 성능 측면에서 나은 경우들이 있기 때문에 

(참고 - 인스턴스란게 프로그램이 돌아가고 있는 상태를 말한다고 지금은 생각하시면 됩니다.. 하나의 프로세스죠 ㅋ)

이런 조건들을 감안해서 다수의 인스턴스로 

서비스를 돌리고 이를 웹서버로 밸런싱하는거에여.

 

웹서버의 또 다른 중요 기능으로 "캐싱"이 있어요!!!!!!!!!!!!!!!!!!!

(참고 - 캐싱은 한 번 꺼내온 것들은 다시 힘들게 안 꺼내도 되게끔? 어디 가까운데 따로 마아두는거?)

여기서 말하는 캐싱은 revers proxy의 캐시인데요.

밑에 있는 포워드 프록시(forward proxy)의 캐싱 기능이 사용자 관점에서 

한번 받아온 이미지 등 정적 파일이 사용자와 서버 사이에 있는 

프록시 서버란 곳, (="정류장 수하물센터"?)에 쌓였다가 다음 요청때

서버까지 다시 찾아갈 필요 없이 바로 받아와지는거라면

 

웹서버가  revers proxy로써 제공하는 이 캐시는 

서버 단에서의 캐시에요.

서버로 찾아오는 손님들이 자주, 반복적으로 찾을 만한 리소스들을 

응접실에 쌓아뒀다가 바로 건내주는거죠.

어느쪽이든 사용자 입장에서 빨라지는 건 마찬가지에요!!!!!!!!

 

이 외에도 웹서버(아파치, 엔진엑스)는 수많은 모듈들을 사용해서

뒷단 WAS 들이 정상동작하는지 주기적으로 헬스체크를 하는 등 서비스를 안정적이고 안전하게 돌리기 위한 다양한 기능들을 제공합니다.

 

 

그러니깐 정리를 하자면,

이  웹서버(아파치, 엔진엑스)WAS의 역할이 겹치는 부분도 있지만은

각자가 특화된 부분들을 활용해가지고다가

보안이랑 운영같은거를 더 잘 하는 웹서버가 

응접실에서 손님을 직접 상대하고

WAS나 다른 비슷한 어플리케이션들은 

뒤에서 동적요소들을 만들어내는데 집중을 하는거네요.

그럼 이 웹서버중에 아파치엔진엑스가 있다고 그랬는데.

이 둘은 뭐가 다른 건가요?

 

이 둘은 작동방식에 있어 근본적인 차이가 있어요.

아파치다중프로세스

NginX이벤트로 일을

처리한다는 거입니다.

 

 

먼저 아파치는 MPM, 멀티 프로세스 모듈 방식으로 일하는데요.

손님이 올 떄마다 프로세스 새로 생성하는 방식이 있고,

한 프로세스 안에서 스레드를 새로 생성하는 방식이 있어요.

mpm_prefork, 즉 손님마다 프로세스를 두는 방식은 

말하자면 손님이 새로 올 떄마다 상담 테이블을 따로 가져와서 앉히는 거에요.

그리고 이 테이블들을 계속 돌아다니면서 여러 손님들을 동시에 상대하는거죠.

그리고

mpm_worker는 한프로세스에서 손님마다 스레드를 생성한다는 건,

가로로 길다란 테이블 하나 두고, 손님이 올 때마다 나란히 앉힌 다음

역시 좌우로 돌아다니면서 동시에 업무를 처리해드리는거에요.

 

 

컨텍스트 스위칭? 이라고 하죠.

= 프로세스나 스레드가 이거 하다 저거하러 가는거?

 

그래서 이런 방식들은 컴퓨터의 자원들을 많이 소모합니다.

 

 

 

반면 NginX의 event driven방식을 비유하자면,

작은 데스크 하나만 두고 손님들을 한 줄로 쭉 세우는거에여.

그리고 다음 손님이 오는대로 업무결로 집중해서 일을 처리하는거죠.

 

 

여튼,

성능과 가벼움을 중요시하는 서비스는 = NginX

다양하고 검증된 기능들을 필요로 하는 곳에서는 오랜 기간 사용되며 안정성을 갖춰온 = 아파치

사용합니다.

 

 

 

 

0. 포워드 프록시(forward proxy)

- 뭐 대신한다는 뜻??

- 사용자들이 사이트나 어디 접속할 때, 자기 아이피 주소 숨기려고,

중간에 프록시라는거 둬서 그걸 통해서다가 데이터 주고 받는다

- 우리 서버에 방문하는 손님들이 자기네 집 주소를 감추는 거에요

예를 들어

대절버스를 proxy라는 정류장에서 타고오는 식으로요.