-
'얄팍한 코딩사전 - 아파치, NginX, 톰캣이 뭔가요?' 요약프로그래밍 지식/Web 2022. 3. 9. 22:14
https://www.youtube.com/watch?v=Zimhvf2B7Es&t=4s
Q. Client? Server?
같은 컴퓨터도 서비스를 해주느냐 제공받느냐에 따라 서버와 클라이언트로 나뉜다. (역할에 따라 나뉘는 분류)
웹 서버 : 어떤 컴퓨터로 하여금 서버의 역할을 하게끔 하는 것 (아파치, 엔지넥스)
웹사이트는 브라우저에서 돌아간다.
HTML, CSS, 이미지 등 각종 데이터는 서버 컴퓨터에 저장된다.
각각의 데이터를 특정 디렉토리에 담은 후 외부에서 받아갈 수 있게끔 하는것이 웹서버의 역할
(cf. IIS → 윈도우에서 쓰는 웹 서버)
Q. 아파치, NginX는 정적 웹에만, WAS는 동적 웹에만?
아파치나 NginX의 모듈로 동적 웹 프로그래밍도 가능하긴 하다. (PHP)
아파치에 PHP를 해석할 수 있게끔 하는 모듈을 설치해놓게 하면 아파치가 처리해서 클라이언트에 보낸다.
톰캣 : 대표적인 웹 어플리케이션 서버다.(WAS)
웹과 서버 사이에 어플리캐이션이 들어가서 (W)A(S)가 들어간다. 동적 사이트를 전문적으로 처리한다.
톰캣 사용 방법 : 스프링으로 코딩한 웹앱을 war 파일로 빌드하면 그 안에 모든 파일들(html, css, 바이트 코드..)이 압축된다.
톰캣의 디렉토리 중 특정 폴더에 war 파일을 넣고 명령을 실행하면 스프링 서비스가 톰캣을 사용해서 돌게 된다.
요즘엔 반대로 스프링을 톰캣이 내장된 jar파일로 빌드하여 배포하기도 한다.
(WAS는 주로 자바 프로그래밍에서 쓰이는 방식이다.)
톰캣 또한 정적 리소스를 전해주는 일을 할 수 있음.
Q. 그럼 왜 분리될까 ?
→ Web server를 WAS 앞에 두는 이유 ?
1. reverse proxy : 프론트에 서버의 정보를 감추는 것.
(물론 웹 서버의 주소를 알고 오긴 하지만, 모두 웹 서버를 거치게 됨으로써 그 뒷단의 서버의 내부 구조를 숨길 수 있다).
한 서버에서 다양한 쇼핑몰을 돌리는 상황이라고 가정할 때, 어떤 쇼핑몰을 찾아서 왔는지를 보고 웹 서버가 어떤 곳으로 갈지 지시를 해둘 수 있다.
(보안 측면에서 좋다.)
2. 로드 밸런싱 : WAS 여러개 돌리는 상황에서, WAS들에게 분산을 해서 일을 분담하는 것.
하나의 어플리케이션에 여러 WAS를 사용하는 이유 → 지속성을 위해서다.
만약 업데이트를 한다고 가정할 때, 하나의 WAS만 가지고 있다면 업데이트 시간에는 오류가 뜬다.
다수의 WAS를 차례 차례 업데이트(하나는 아직 업데이트 안하고 클라이언트에 정보 전달, 다른 것들은 업데이트) 하며 사용자 입장에서 끊기지 않게 서비스를 이용하도록 한다.
물론 성능 측에서도 좋다.
3. 캐싱 : 한 번 꺼내온 것들을 다시 가져오지 않아도 되게끔 근처에 두는 것.
서버로 자주 찾을 만한 리소스들을 캐시에 둠으로써 궁극적으로 클라이언트도 좋은 성능의 서비스를 받는다.
4. 웹서버의 모듈을 사용하여 뒤의 WAS들이 잘 작용하는지 관리하는 역할을 수행한다.
서비스를 안정적이고 안전하게 돌리게 하기 위한 역할을 수행
결론 : 보안, 운영 잘하는 웹서버가 클라이언트 요청 상대, WAS는 동적 요소를 만들어내는데에 집중
Q. Apache 와 NginX의 차이?
1. Apache : MPM(Multi-Process Module) 방식
- MPM의 두 가지 방식
1) PreFork MPM
손님이 올 때 마다 프로세스를 두는 방식 (다중 프로세스) : 손님이 올 때마다 개인 테이블을 주는 것. 테이블을 돌아다니며 요청을 처리
- 메모리 공유가 없기에 안정적이지만 메모리 소모가 크다.
2) Worker MPM
한 프로세스 안에서 쓰레드를 만드는 방식 (멀티 프로세스-스레드) : 원테이블에 손님들을 차례로 앉힌 후에 움직이면서 손님들의 요청을 처리 - 공유 자원을 사용하는 문제
Worker MPM 낫기는 하지만, 컨텍스트 스위칭(테이블이나 손님 사이를 오가는 것.. 비용이 크다)이 많이 일어난다.
2. NginX : Event-Driven (이벤트) : 창구를 하나만 두고, 손님들을 중요도에 따라 한 줄로 서게끔 한 후에 순차적으로 일을 처리.
움직이지 않아도 되며 성능이 좋다.
결론 : 성능/ 가벼움이 중요하다면 NginX, 다양하고 검증된 기능들을 필요로 한다면 전통이 있는 Apache
'프로그래밍 지식 > Web' 카테고리의 다른 글
React component names must start with an uppercase letter react-hooks/rules-of-hooks (0) 2022.08.01 HTML? HTTP? (+ HTTP의 특징) (0) 2022.03.13