-
Tomcat과 Nginx란?프로그래밍 기초 공부 2022. 10. 2. 17:23
열 한 번째로 포스팅하게 된 내용은 Tomcat과 Nginx에 대한 내용입니다.
웹 서버
- 컴퓨터를 웹사이트를 제공할 수 있게 서버로 만들어주는 서비스
- 대표적으로 아파치, NginX, IIS 등
웹 서버의 기본적인 역할
- 웹 서버가 운영하는 웹사이트를 방문한 클라이언트가, HTML, CSS, JSP 등의 파일을 볼 수 있도록 디렉토리를 개방
- 클라이언트가 특정 주소 입력 시 원하는 화면을 브라우저에서 출력하게 도와줌
- 기본적으로 정적인 웹 사이트를 제공
- 아파치나 Nginx의 모듈을 이용해 동적인 웹사이트를 제공할 수 있음
- 아파치랑 PHP, MySQL을 연동해 PHP 웹사이트를 제공할 수 있고, 이러한 방식을 APM방식(Apache, PHP, MySQL)
[ 톰캣(Tomcat)이란 ]
톰캣(Tomcat)
- Tomcat이란 아파치 재단에서 만든 오픈 소스 WAS(Web Application Server)
- Tomcat은 Java Servlet과 JSP가 실행할 수 있는 환경을 제공하여 동적인 페이지를 생성
- DB 연결 및 데이터 조작, 다른 응용프로그램들과 상호 작용이 가능
WAS(Web Application Server)란
- Web Application Server의 약자
- WAS란 웹 서버와 웹 컨테이너의 결합으로 이루어진 소프트웨어
- 웹 서버를 포함하고 있기 때문에 웹 서버처럼 사용할 수도 있음
- 자바, JSP 등으로 만든 웹 또는 API 애플리케이션을 실행할 때 사용
- 웹과 서버 사이의 어플리케이션
- DB 와 연결되어 트랜잭션 처리를 하거나 다른 시스템과의 연동 기능 또한 포함
- 웹 서버와 달리 요청에 대해 동적인 페이지를 만들어 유연하게 응답할 수 있음
- WAS의 핵심적인 역할
- 클라이언트가 사이트에 동적인 요청 ->
- WAS를 통해 동적인 요청을 처리 ->
- 아파치나 Nginx와 같은 웹서버가 처리된 요청을 제공
- WAS의 핵심적인 역할
WAS와 웹 서버를 같이 사용하는 이유
톰캣과 같은 WAS 프로그램은 단독으로 정적인 리소스나 동적인 요청에 대한 처리가 가능
웹 서버 역시 정적 페이지뿐만 아니라 동적인 페이지의 처리도 가능
그렇지만 보통 웹 서버와 WAS를 같이 사용하는데 그 이유는 웹 서버의 몇 가지 기능들 떄문1. Reverse Proxy
- 프록시는 자신의 아이피(ip) 주소를 숨기는 것
- 서버와 클라이언트 사이에 프록시를 두고 프록시를 통해 데이터를 주고받음
- Forward Proxy는 서버에 방문하는 클라이언트의 주소를 감춤
- Reverse Proxy는 클라이언트에게 서버의 주소를 감춤
- Reverse Proxy를 사용하는 것은 서버가 보안의 이유로 서버 내부 구조를 감추기 위함
- 이러한 Reverse Proxy를 웹 서버가 담당
2. 로드 밸런싱
- 클라이언트의 요청에 따른 처리를 동작 중인 여러 WAS에게 적절히 분배하는 것
- 톰캣과 같은 WAS 서비스를 하나만 운영하면 WAS 프로그램이 다운되거나,
업데이트되는 등 WAS 프로그램의 사용이 불가할 때 문제가 발생 - 문제를 방지하기 위해 여러 개의 WAS 프로그램으로 서버를 운영
- 로드 밸런싱, 즉 WAS의 자원 분배는 웹 서버가 담당
3. 캐싱
- Reverse Proxy의 캐시를 의미
- 서버로 찾아오는 클라이언트들이 자주, 반복적으로 요청하는 리소스들을 프록시 서버에 저장하고 제공하는 것
- 이러한 캐싱을 웹 서버가 담당
4. 주기적인 체크
- 웹 서버에 존재하는 수많은 모듈을 사용해 WAS 서비스가 정상적으로 동작하고 있는지 체크
웹 서버는 정적인 컨텐츠만 제공하기 때문에 클라이언트의 요구에 유연하게 대처할 수 없음
다양한 클라이언트의 요구에 유연하게 대처하기 위해 DB와 연결해 데이터를 주고받거나
데이터 조작을 하여 동적인 페이지를 생성해 응답하기 위해 WAS를 사용하고 있음
Tomcat의 디렉토리 구조
- Bin: 톰캣 서버의 동작을 제어할 수 있는 스크립트 및 실행 파일
- Conf: 톰캣의 기본적인 설정 파일
- Lib: 아파치와 같은 다른 웹 서버와 톰캣을 연결해주는 바이너리 모듈들
- Webapps: 톰캣이 제공하는 웹 애플리케이션의 기본 위치
- Logs: 서버의 로그 파일이 저장
- Work: jsp 컨테이너와 다른 파일들이 생성하는 임시 디렉토리
- Temp: 임시 저장 폴더
[ Nginx란 ]
- Nginx는 간단하게 말하면 경량 웹 서버
- 클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용
- Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용
- Apache와 같은 웹서버는 클라이언트로부터 받은 요청을 처리할 때 새로운 프로세스 또는 쓰레드를 생성하여 처리
- 요청마다 쓰레드가 생성되므로 접속하는 사용자가 많으면 그만큼 쓰레드가 생성되어 CPU와 메모리 자원의 소모가 커짐
- Nginx는 Event-Driven 구조로 동작하기 때문에 한 개 또는 고정된 프로세스만 생성하여 사용하고, 비동기 방식으로 요청들을 Concurrency 하게 처리할 수 있음
- Nginx는 새로운 요청이 들어오더라도 새로운 프로세스와 쓰레드를 생성하지 않기 때문에 프로세스와 쓰레드 생성 비용이 존재하지 않고, 적은 자원으로도 효율적인 운용이 가능
- Nginx의 장점 덕분에 단일 서버에서도 동시에 많은 연결을 처리할 수 있음
Nginx의 구조
- Nginx는 하나의 Master Process와 다수의 Worker Process로 구성되어 실행
- Master Process는 설정 파일을 읽고, 유효성을 검사하고, Worker Process를 관리
- 모든 요청은 Worker Process에서 처리
- Nginx는 이벤트 기반 모델을 사용하고, Worker Process 사이에 요청을 효율적으로 분배하기 위해 OS에 의존적인 메커니즘을 사용
- Worker Process의 개수는 설정 파일에서 정의되며, 정의된 프로세스 개수와 사용 가능한 CPU 코어 숫자에 맞게 자동으로 조정
Nginx 설정
- 설정 파일 구조
- Nginx는 지시어에 부여하는 값에 의해 작동
- Nginx의 메인 설정 파일 경로는 /etc/nginx/nginx.conf
- /etc/nginx/nginx.conf 에 없다면 /usr/local/nginx/conf/nginx.conf 또는 /usr/local/etc/nginx/nginx.conf 에 위치
- Nginx 모듈의 동작은 configuration 파일에 있는 directives(지시어)에 의해 제어
- directive는 simple directive와 block directive 두 가지 종류가 있음
- simple directive : 이름, 값이 있고 세미콜론(;)으로 끝남
- block directive : simple directive의 구조에 블록("{", "}")을 감싼 형태의 지시어
'프로그래밍 기초 공부' 카테고리의 다른 글
커넥션풀(DBCP)이란? (0) 2022.10.06 Spring이란? (0) 2022.10.03 프레임워크란? (0) 2022.10.02 HTTP의 메서드 GET과 POST의 차이 (0) 2022.09.30 Maven과 gradle (0) 2022.09.26