ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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를 같이 사용하는데 그 이유는 웹 서버의 몇 가지 기능들 떄문

     

    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
Designed by Tistory.