티스토리 뷰

반응형

2019/09/18 - [Programming/Java] - Spring Boot 을 언제 써야 할까? (1) Spring Boot 는 어떤 구조일까?

사실 대부분의 경우 Spring Framework 을 사용하게 되는 이유는 웹페이지 개발을 하기 위해서입니다. 지금은 다른 형태의 개발방법들도 소개되고 있지만, Spring Framework 을 이용해 궁극적으로 만들려고 하는 제품은 웹페이지인 경우가 많고, Spring 은 MVC 을 제공하고 있기 때문에 Spring 에는 MVC 만 있다고 오해할 수 있지만, 사실 Spring 은 MVC 만 존재하는 Framework 는 아닙니다. 초장기(2.5 미만인 시절)에는 MVC 부분에서 Controller 은 Struts 와 같은 다른 Framework 을 연동해서 사용하는 방법이 더 널리 이용되었습니다. Spring 은 전 영역을 소화할 수 있는 Framework 였고, 지금도 MyBatis 등과 연동해서 사용하는게 널리 이용되는 것도 이와 같은 확장성이 우수하기 때문입니다.

서론이 길었지만, 어쨌든 웹페이지 개발을 위한 대명사처럼 알려진 Spring Framework 을 이용하기 위해서 반드시 외장 WAS 가 필요한지부터 생각해봐야 합니다. 왜냐하면, Spring Boot 은 내장 WAS 을 이용하기 때문에 대형 프로젝트에서 사용되기 힘들다는 주장이, 외장 WAS 을 써야만 대형 프로젝트를 운영할 수 있다는 이야기로 비칠 수 있으며, 외장 WAS 가 반드시 필요한지 여부에 따라 쉽게 이 말의 옳고 그름을 가릴 수 있을꺼라 생각하기 때문입니다.

 

요즘은 잘 이야기 하지 않지만, Java 라는 언어는 크게 J2EE, J2SE, J2ME 라는 세 개의 스펙(SPEC)으로 나뉘어져 있었습니다. Enterprise Edition, Standard Edition, Micro Edtion 인데, 딱 봐도 왠지 J2EE 을 써야 대형 프로젝트를 개발할 수 있을 것 같은 느낌이 들지 않나요? 맞습니다. Sun 에서는 J2EE 에 J2SE 에 있는 Servlet, JSP 등을 포함하여 EJB, RMI 등 기업 환경용 기술을 추가한 기술들을 포함시켰습니다. 그리고 이러한 기술을 이용할 수 있도록 하는 처리 시스템의 규격을 정했습니다. 그게 Web Application Server, 줄여서 WAS 입니다. (그래서 엄밀히 말하면 nginx, IIS 등을 WAS 라 부르는건 잘못되었다고 할 수도 있습니다)

그럼 Tomcat 도 WAS 일까요? 정답은, 사실은 아니다...입니다. 위에서 언급했듯이 J2EE 스펙을 만족하지 않기 때문에 J2SE 스펙을 만족하는 Servlet Container 역할만 하는 Tomcat 은 WAS 라고 부를 수 없습니다.

그런데, 현재 많은 기업에서 서비스 용으로도 Tomcat 을 많이 쓰고 있습니다. J2EE 기술을 쓰지 못하는데도 말이죠. 왜 그럴까요?

 

사실, J2EE 은 기업을 위한 기술을 많이 포함하고 있지만, 너무 무거웠습니다. J2SE SDK 을 설치하고 다시 J2EE SDK 을 설치한 뒤 WAS 에 의존하여 개발해야 했고, WAS 제조사마다 독자적인 기술들도 있어서 개발할 때에도 너무 불편했습니다. 그래서 재야의 실력있는 개발자들이 무거운 J2EE 을 쓰지 않고 J2SE 의 Servlet/JSP 등의 기술만을 이용해서 경량화된 J2EE 처럼 사용하는 것을 만들어보고자 했습니다. 그 중 하나가 바로 Spring Framework 입니다. 그리고 유용한 J2EE 기술은 J2SE 에서 비슷하게 구현도 해두었습니다.

그래서 Spring 은 J2EE 스펙을 모두 구현한 WAS 가 필요 없습니다. 굳이 WebLogic, JEUS, JBoss 뿐만 아니라 TomEE (Java Enterprise Edition of Apache Tomcat, Tomcat + Java EE = TomEE) 와 같은 것을 이용할 필요가 없다는 것이죠. 즉 Servlet Container 기술만 다 구현이 되어 있다면 무겁디 무거운 WAS 을 설치할 필요가 없습니다.

위에서 언급했듯이 WAS 은 J2EE 규격을 지원해야 하기 때문에 Spring 에서 사용하지 않는 많은 기술을 구현해두어야 합니다. 대표적인 것이 EJB (Enterprise Java Beans) 입니다. 혹시 개발 경력 5년 이내의 분들 중, EJB 아시거나 해보신 분이 얼마나 되실지 모르겠네요. 심지어 저 조차도 한 번도 프로젝트에서 사용해본 적이 없습니다. 즉, Spring Boot 에 포함된 내장 WAS 라 불리는 그 작은 Server 은 J2SE 을 만족하는 Servlet Container 이고, 이 기능을 모두 구현하고 있으며 코드 상 차이도 없기 때문에(tomcat embed, undertow, jetty 모두) 별도로 설치하는 Tomcat, JBoss(or Wildfly), Jetty 와 성능 차이는 없습니다.

 

그러므로 사실 WAS 을 이용해야 대형 프로젝트를 개발할 수 있고, 그 구현 자체를 Spring Framework 기반으로 한다면 앞뒤가 맞지 않다고 봐야 합니다. 물론 무료로 제공되던 Tomcat 에 비해 WebLogic 와 같은 상용 WAS 은 Servlet Container 의 구현을 더욱 튼튼하게 하여 부하 상황에서도 서비스 불가 상태가 된다던지 하는 문제가 적었기 때문에 이런 용도로 비싼 WAS 을 구입하던 경우도 있었지만, 이건 개발과는 별개의 문제이고 요즘은 Tomcat 조차도 이런 문제로 서비스가 불가능해지는 문제는 거의 없습니다. 그래서 서비스에서도 Tomcat 을 쓰고 있는 것입니다.

 

2019/09/21 - [Programming/Java] - Spring Boot 을 언제 써야 할까? (3) 외장 WAS 만이 할 수 있는 것

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함