▶ Server

Apache와 Tomcat이란?

SieunLim 2019. 4. 6. 23:32
728x90

Apache는 웹서버 이다.

Tomcat은 웹어플리케이션 서버 (WAS) 이다.

 

우리가 흔히 개발할때 사용하는 Apache Tomcat 은 Tomcat(WAS) 을 의미한다

앞에 붙은 Apache는 아파치 재단에서 만들어서 그냥 붙여놓은 것이다.

 

그러면 웹서버와 WAS 의 차이점은 무엇인가?

 

인터넷에서 검색을 하여 찾아보면 

Apache는 정적데이터를 담당하고 (HTML , 이미지 등)

Tomcat은 동적데이터를 담당한다고 나와있다. ( JSP , SERVLET , DB를 통한 데이터 등)

 

말은 쉽지만 , Tomcat 만 사용하고 Apache를 쓰고 있지 않다면 정확히 이해가 가지 않을것이다.

 

Tomcat 만 사용하는 사람들에게 간단히 결론만 말하자면,

Tomcat에는 Apache 기능이 포함되어 있어서 

정적이든 동적이든 모든 데이터를 보여줄 수 있다고 한다 

그렇기 때문에 굳이 Apache를 설치하여 정적데이터를 위한 서버를 가지고 있지 않아도 된다.

 

그렇다면 Apache는 왜 존재하고 

또 듣기로는 Apache 와 Tomcat을 구분해서 서비스하는 기업이 있다고하는데

그 이유를 살펴보자.

 

첫번째 기본이 되는 이유는 아래와 같다.

  • Apache(웹서버) 에서는 웹문서(정적데이터) / Tomcat(WAS) 에서는 동적데이터만 처리하도록 분배하여 서버의 부담을 줄인다.

하지만 이 이유는 잘못 알고있는 미신이 되었다.

그이유는 아래 토비님의 글을 보면 이해될것이다


http://toby.epril.com/?p=1125

얼마전에 성철이 형이 물어봐서 답해줬던 내용이다.

많은 개발자들이 애플리케이션 서버로 톰캣을 사용하는 경우에 스태틱 파일(html, css, js, 이미지)은 톰캣 앞에 아파치 웹 서버(Httpd)를 두어서 처리하게 하는 것이 좋다고 생각한다. 외부의 요청은 일단 Apache Httpd가 받고, 톰캣 내에서 처리할 자바 애플리케이션만 톰캣으로 다시 전달해서 처리하고 그 외의 리소스는 Apache Httpd가 직접 처리하게 만들어야 성능이 좋다고 생각한다. 자바로 만든 서버인 톰캣은 스태틱 파일 처리에서 Apache Httpd만 못하다는 것이 그 이유다.

하지만 톰캣과 Httpd의 개발자에 따르면 이는 개발자들이 잘못 알고 있는 미신이다. 아직도 톰캣 3를 사용하고 있는 것이 아니라면 말이다.

자세한 내용은 Myth or truth: One should always use Apache httpd in front of Apache Tomcat to improve performance?에 잘 나와있다. 지금은 스프링 소스의 직원이 된 아파치 톰캣과 Httpd 의 핵심 개발자들이 직접 작성한 내용이다.

톰캣은 5.5부터 Httpd의 native 모듈을 사용해서 스태틱 파일을 처리하는 기능을 제공한다. 이 경우 Httpd와 톰캣이 같은 모듈을 사용하는 셈이니 성능에서 차이가 날 이유가 없다. 실제 테스트 한 결과를 봐도 톰캣에서 아파치 Native 모듈을 사용하는 것이 순수하게 아파치 Httpd만 사용하는 것과 비교해서 성능이 전혀 떨어지지 않는다.

따라서 단지 스태틱 파일 처리의 성능만을 위해서라면 굳이 톰캣 앞에 Apache Httpd를 두는 것은 불필요하다. 오히려 메모리만 많이 먹고, 관리부담은 커지고, 불필요한 부하만 걸릴 뿐이다.

물론 Httpd의 다른 기능이나 모듈을 사용해야 할 필요가 있다면 그때는 Httpd를 앞에 두고 사용해야겠지만. 예를 들어 하나의 서버에서 PHP 애플리케이션과 자바 애플리케이션을 함께 사용하거나, Httpd 서버를 간단한 로드밸런싱을 위해서 사용해야 하는 경우라면 Httpd를 앞에 두고 톰캣을 연결해서 사용하도록 하면 될 것이다.

 


그렇다면 진짜 이유는 무엇일까

 

토비님 글에서 마지막 부분에서 정확한 이유를 알수있다.

 


물론 Httpd의 다른 기능이나 모듈을 사용해야 할 필요가 있다면 그때는 Httpd를 앞에 두고 사용해야겠지만. 예를 들어 하나의 서버에서 PHP 애플리케이션과 자바 애플리케이션을 함께 사용하거나, Httpd 서버를 간단한 로드밸런싱을 위해서 사용해야 하는 경우라면 Httpd를 앞에 두고 톰캣을 연결해서 사용하도록 하면 될 것이다.


 

1. 보안 강화 (Apache에서 해킹을 당하여도 WAS 에서는 정상 작동)

2. 로드밸런싱 (2번과 같은경우를 대비 - 특정서버에서 에러/과부화가 발생하였을경우 다른 서버에서 정상적으로 서비스하기 위함)

3. 하나의 Apache (웹서버) 에서 다른언어의 어플리케이션을 함께 사용할때

 

https://round1tko.tistory.com/64

 

http://toby.epril.com/?p=1125

https://okky.kr/article/243427

https://round1tko.tistory.com/64

로드밸런싱 https://nesoy.github.io/articles/2018-06/Load-Balancer

반응형