ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Undertow & Tomcat
    WAS 2019. 2. 22. 14:40
    반응형

    - Undertow 


    기존의 다수의 개발자들에 친숙한 Tomcat 과 이제 애정을 가지고 사용 해보려는 Undertow 에 대해서 기록해놓으려 한다. 


    내 경력의 대부분은 apache+tomcat 을 사용했고 jboss , Weblogic , Websprire 등은 잠깐 유지보수 혹은 들어본정도 인거 같다. 


    그러다 요즘 가장 많이 사용하는건 nginx + tomcat 을 사용 하고 있다. nginx 는 apache 에 비해 아주 경량화 되있는 웹서버이다. 


    아직도 apache 의 점유율은 아주 높다고 생각하지만 누적된것으로 따질때 이고 지금 현상태 신규로 생기는 시스템들은 nginx 가 더 많지 않을까 싶기도 하다. 실제 경험상 SI 쪽은 아직도 apache 를 사용 하는 곳만 경험 했었다.


    nginx 의 가장 중요한 장점은 적은 자원으로 더 빠르게 이다. 실제로도 둘을 비교했을때도 메모리 사용량이 현저하게 nginx 가 낮다 . 성능이 좋지만 비용은 낮기 때문에 굉장히 효율성은 갑이라고 생각한다. 

    apache 에서 nginx 를 이용하면서 웹서버도 좋은게 있다면 그뒤에 있는 was 도 다른것들을 살펴볼 필요가 있지않을까 ? 라는 생각이 들었다. 


    spring boot 를 사용하기 시작하면서 임베디드된 톰캣을 사용했다. 실제로 별다른 설정없이 쓰기에는 임베디드 톰캣만한게 없었다. 그리고 실제 외장 톰캣과 임베디드 톰캣 경우 성능에서 차이가 나지 않는다. 

     

     톰캣 설정도 외장톰캣 설정하는것 처럼 내장톰캣도 충분히 설정이 가능하다. 얼마전까지만해도 nginx + 내장 톰캣으로 프로젝트를 구현했고 실제 별문제 없이 서비스 중이다. 


    그럼 왜 톰캣 말고 다른걸 살펴볼지에 대한 필요성을 느꼈을까 ? 


    톰캣은 무겁다. 외장때는 정말 무거 웠고 내장버전도 그렇게 라이트하다는 느낌이 들지 않는다.  내장이 라이트 해보이긴 하지만 어쨋든 기본적은 동작 방식은 톰캣이다. 그렇기 때문에  nginx 처럼 좀더 가볍지만 성능이 좋은 것들을 사용해보고 싶다는 욕구가 샘솟았다. 


     일단 상용버전들은 참좋다. weblogic  , 제우스 같은 상용 버전들은 관리도 알아서 해주고 좋다 돈있으면 그냥 사서 쓰고 싶다. 그러나~ 역시 개발자들은 무료부터 찾지 않는가 ! ( 회사의 압박도 있고 .... ) 


     무료 버전도 제법 많다 그중 지인에게 추천 받은 것은 Undertow다 spring boot 에서 설정하기도 아주 쉽고 기존 톰캣 기반이여도 변경하는게 어렵지 않다고 한다. 


     그래서 Undertow 에 대해 간단하게 조사를 해봤다. 


     JBoss EAP 7 에 새롭게 도입됬다고 한다. 기본 자바로 작성된 웹서버이다.  이전 EAP6 가 tomcat 기반의 JBossWeb 을 사용 했다면 EAP7 은 undertow 기반이다. 

     등장 배경은 아주 명확하다. 웹서버에 새로운기능이 요구되는 시대가 왔기 때문이다.  수많은 다양한 요구들을 수용하기위한 유연성과 효율성을 잡기위해 그렇게 설계 되었다고 한다. 일단 아주 가볍다. 가볍다는건 임베디드 하기 좋다는 뜻과 같다고 봐도 될거 같다. 

     기본적으로 Non-bloking 과 Blocking API 를 모두 지원한다. 비동기식이 익숙치않다면 그냥 기존에 사용하던 방식으로 구현해도 문제가 없다.  


     Undertow 는 힙메모리 10mb 이내에도 동작이 가능할정도로 아주 가볍고 코어 라이브러리 용량은 대략 1.3 MB 정도 안될정도 아주 아주 가볍다.  그리고 내부적으로 I/O가 발생시 XNIO 를 이용하여 처리를 한다. 특징으로는  java servlet 3.1 표준을 지원하며 웹소켓( JSR-356) 을 지원한다. 


    찾아보니 참 좋다 !


    - 설정


    spring boot 를 많이 사용하고 있기 때문에 설정방법을 확인하면 maven 에 다음과 같이 정의하면 끝이다 ! 정의후 실행해보면 undertow가 동작한다고 로그에 표시가 된다. 



    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
    <exclusion>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
    </exclusions>
    </dependency>


    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
    </dependency>


    여기서 중요한건 <exclusion> 이다. exclusion 으로 톰캣을 선언해 주지 않으면 기존 다른곳의 의존성이 남아 있어서 톰캣이 우선하여 실행이되고 undertow 설정이 먹히지 않게 된다. 


    -성능


      Undertow 와 tomcat 간의 성능은 결론부터 말하면 undertow가 더 낫다라고 생각한다. 기본동작하는 방식이 성능이 그렇게 날수 밖에 없는 구조로 되어있다. 

     간단한 요청 처리나 평범한 수치의 트래픽이라면 둘다 거의 성능의 차이는 없지만 다수의 복잡한 처리를 할경우 비동기식 을 지원하는 undertow 에 반해 tomcat은 동기식 방식이 때문에 자원적 한계에 도다르게 될것이고 그에 따른 성능차이는 눈에 띄게 차이가 날수 밖에 없다. 

     물론 요즘 나온 최산 tomcat9 의 성능이 많이 좋아졌지만  ( tomcat 도 비동식을 지원한다고 들은거 같은데 기억이 명확하지가 않음...) 

    성능적으로 아무리 둘사이에 차이가 없다고 하더라도 "라이트하다"에서 톰캣이 undertow 보단 좋은 점수를 받을순 없을 것 같다. 

     tomcat 에 비하면 아직 빈약한 자료(빈약한거 맞나?... ㅎㅎ )를 가지고 있지만 충분히 잘 연구해서 사용 할 만한 웹서버라고 생각이 든다. 

    지인분에게 영업(?) 을 당하여 Undertow 를 다음 프로젝트를 할때 쓸 생각이지만 tomcat 도 좋은 웹서버라 본다. 

     한때 회사에서  분란의 원인 이였던 외장톰캣과 내장톰캣중 외장 톰캣이 더 좋다! 라는 논란으로 인해 좀더 undertow 에 정이 가게 되었다. 

     내용을 요약하면 

     [ 아는 형에게 들은바로는 큰시스템은 스프링  프레임워크를 사용 해야하고 작은 시스템은 spring boot 를 사용 해야 한다 . 그리고 톰캣은 외장이 내장보다 안정성이 뛰어나니 내장보단 외장으로 하는게 낫다 ]


     외장이나 내장이나 톰캣 성능은 둘다 동일 하고 내장이 안정성이 떨어지지 않는다 라고 논란은 결론낫지만 개인적으로 이런걸 뭐가 좋다고 강제 하기보다는 무엇을 쓰던 용도에 맞게 쓰면 되는거 아닌가 싶다.  


    나에게 영업을 하신 지인분이 쓰신 글이 있어 링크를 더해놓는다.  Undertow 를 쓰자는 이야기의 글이다 읽다보면 외장 톰캣과 내장 톰캣에 대한 이야기도 나온다. 나중에 충분히 참고 할만 할것 같다. 

     

     https://okky.kr/article/543099 


    그리고 심지어 외장 내장 톰캣 성능 비교도 해놓으셨다 ! 두고두고 써먹을수 있을거 같다. 


     https://zepinos.tistory.com/51


    반응형
Designed by Tistory.