50문 50답 - 9(아파치, 톰캣은 각각 멀티 프로세스인가 멀티 쓰레드인가?)

개발 공부 중·2022년 10월 11일
0

Spring 50문 50답

목록 보기
2/4
  1. 아파치, 톰캣이란?

우리가 사용하는 웹페이지는 아파치와 톰캣으로 이루어져있다. 리눅스 서버를 만들거나 웹서버를 만들다보면 아파치 톰캣을 설치하라고 한다. 그 아파치와 톰캣의 기능과 차이를 아는 것 또한 중요하다.

  • 아파치 (Apache)
    아파치 소프트웨어 재단의 오픈소스 프로젝이다. 일명 웹서버로 불리며, 클라이언트 요청이 왔을때만 응답하는 정적 웹페이지에 사용된다.

    • 웹서버 = 80번 포트 클라이언트 요청(POST, GET, DELETE)이 왔을때만 응답함.
    • 정적인 데이터만 처리한다. (HTML, CSS, 이미지 등)
  • 톰캣 (Tomcat)
    dynamic(동적)인 웹을 만들기 위한 웹 컨테이너, 서블릿 컨테이너라고 불리며, 웹서버에서 정적으로 처리해야할 데이터를 제외한 JSP, ASP, PHP 등은 웹 컨테이너(톰캣)에게 전달한다.
    WAS(Web Application Server)

    • 컨테이너, 웹 컨테이너, 서블릿 컨테이너라고 부른다.
    • JSP,서블릿처리,HTTP요청 수신 및 응답
    • 아파치만 쓰면 정적인 웹페이지만 처리하므로 처리속도가 매우 빠르고 안정적이다.

하지만 톰캣(WAS)를 쓰면 동적인 데이터 처리가 가능하다. DB연결,데이터 조작, 다른 응용프로그램과 상호 작용이 가능하다. 톰캣은 8080포트로 처리한다.

  1. 아파치 톰캣으로 부르는 이유?

기본적으로 위처럼 아파치와 톰캣의 기능은 나뉘어져 있지만,
톰캣 안에 있는 컨테이너를 통해 일부 아파치의 기능을 발휘하기 때문에
보통 아파치 톰캣으로 합쳐서 부르곤 한다.

  1. 멀티 프로세스와 멀티 스레드의 차이
  • 프로세스
    프로세스는 코드로 작성된 프로그램이 메모리에 적재되어 사용할 수 있는 상태가 된 것입니다. 프로그램 자체는 생명이 없습니다. 프로그램은 보조 기억장치에 존재하며, 실행되기를 기다리는 명령어(코드)와 정적인 데이터의 묶음입니다. 즉, 프로세스는 실행 중인 프로그램이라 말할 수 있습니다.

  • 스레드
    스레드(thread)란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미합니다. 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행하고, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 부릅니다.

  • 멀티 프로세스(Multi process)
    두 개 이상 다수의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)을 동시에 처리하는 것입니다. (병렬처리)각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용합니다.

  • 멀티 스레드(Multi Thread)
    개념 - 하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것입니다.

  • 멀티 스레드 vs 멀티 프로세스

    • 멀티 스레드는 멀티 프로세스보다 작은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 위험을 갖고 있습니다.
    • 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지하는 단점이 있습니다.
    • 두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만, 각각의 장단이 있음으로 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용해야 합니다.
  1. 아파치, 톰캣은 각각 멀티 프로세스인가 멀티 쓰레드인가?

아파치는 기본적으로 멀티 프로세스로 구현되어 있다. 하지만 설정에 따라 멀티 쓰레드를 같이 운용할 수 있다.
톰캣은 요청을 처리하기 위한 쓰레드 풀을 관리하고 있다. 그리고 요청이 오면 해당 쓰레드 풀에서 쓰레드를 꺼내 요청을 처리하도록 한다.

참고 자료 :
https://namu.wiki/w/%EC%95%84%ED%8C%8C%EC%B9%98%20HTTP%20%EC%84%9C%EB%B2%84
https://byul91oh.tistory.com/65
https://velog.io/@kdhyo/Apache-Tomcat-%EB%91%98%EC%9D%B4-%EB%AC%B4%EC%8A%A8-%EC%B0%A8%EC%9D%B4%EC%A7%80
https://livenow14.tistory.com/67
https://mangkyu.tistory.com/95

profile
개발 공부 중

0개의 댓글