본문 바로가기
☕Java/Spring

Java EE(또는 Jakarta EE)에서 Spring Framework로

by 캔 2022. 5. 24.

Java를 이용한 웹 개발을 공부하다 보면, 처음에는 Java SE를 사용하다가 어느 순간 Java EE를 공부하게 된다. 특히, Eclipse IDE를 사용하여 자바를 공부했다면, 처음에는 Eclipse IDE for Java Developer를 쓰다가 어느 순간 Eclipse IDE for Enterprise Java and Web Developers를 쓰게 된다. 전자가 일반적인 Java 개발용 IDE이고, 후자가 Java EE 개발을 위한 IDE이다. 그렇다면 Java EE란 무엇일까?

 

자바 언어의 플랫폼은 자바의 기본 기능을 탑재한 Java SE, 웹 개발을 위한 Java EE, 모바일 디바이스 앱 개발을 위한 Java ME, 데스크톱 앱이나 리치 웹 애플리케이션 개발을 위한 Java FX, 4가지로 나뉜다. 각각의 플랫폼들은 개발을 위한 API와 애플리케이션 실행을 위한 환경인 JVM를 포함한다. 즉, Java EE라고 하면 '웹 개발을 위한 API와 웹 애플리케이션 실행을 위한 환경인 JVM을 포함하는 플랫폼'을 말한다. 다른 한편으로는 '웹 개발을 위한 컴포넌트(또는 기술들)와 그 컴포넌트들에 대한 사양(스펙)'을 의미하기도 한다.

 

Java EE에는 JSP, Servlet, JSF, EJB, JPA, JTA 등 웹 개발을 위한 여러 기술들이 담겨 있다.

Java EE의 하위 컴포넌트들

자바 웹 개발에서 JSP나 서블릿은 빠질 수 없는 컴포넌트 중 하나이다. 그 외에도 HTTP 통신을 통해 요청을 받고 DB를 조회하여 동적으로 만든 웹페이지를 응답으로 전달하는 과정에는 모두 Java EE의 하위 기술들이 관여한다. 

 

Java EE는 웹 개발을 위한 컴포넌트들의 사양이라고 앞서 말했다. 이러한 공개된 사양을 바탕으로 자바 웹 애플리케이션이 실행될 수 있는 여러 웹 애플리케이션 서버(WAS)들이 등장할 수 있었다. 아파치 톰캣, 웹로직, 웹스피어, 제우스 등 수많은 WAS들은 웹 애플리케이션을 빌드하고 배포한 war 파일만 있으면 동일하게 이를 실행시킬 수 있다. 하지만, Java EE 사양을 구현하는 과정에서 특정 벤더에 종속될 수밖에 없는 경우가 발생하고 불필요하게 EJB 객체를 상속받아야 하는 등 애플리케이션이 무거워지거나 개발이 어려워지는 단점이 발생하게 되었다.

 

이러한 단점들을 개선하기 위해 Spring Framework(이하 스프링)가 등장하게 되었다.  스프링은 EJB 객체를 상속받거나 하지 않고 그냥 자바 객체인 POJO(Plain Old Java Object) 객체를 사용하여 개발을 할 수 있게 만들어 준다. 또한, 제어의 역전(Inversion of Control, IoC)을 통해 객체가 다른 객체를 직접 참조하지 않고 스프링 컨테이너가 의존성을 직접 주입해주기 때문에 객체 간의 결합도를 약하게 만들어준다.(loosely-coupled) 게다가 로깅, 세션, 인증, 인가, JDBC 커넥션 등 작업의 전후에서 실행되는 반복적인 작업(횡단 관심사, cross-cutting concern이라고 함)을 AOP(Aspect Oriented Programming) 기술을 사용하여 코드를 간결하게 만들어 준다.

 

이렇게 말하면, 스프링이 Java EE를 완전히 대체하는 기술인가 하는 생각이 들겠지만, 그렇지는 않다. 앞서 말했듯이 자바에서 웹 개발을 위해서 Java EE는 필수적이라고 했다. 즉, 스프링 프레임워크로 웹 개발을 하기 위해서는 Java EE의 컴포넌트들을 사용한다. 다만, 스프링은 컴포넌트들을 좀 더 쉽고 간편한 방법으로 사용할 수 있게 도와주는 역할인 것이다.

 

이상으로 Java EE에서 Spring Framework로 발전해 나가는 과정을 대략적으로 훑어보았다. 자세하고 정확한 내용에 대해서는 다른 자료들을 찾아보는 것을 권한다. 하지만 웹 개발의 대세가 Java EE에서 Spring Framework로 넘어가는 과정과 Spring Framework가 기존 Java EE에 비해 가지는 장점들에 대해서는 대부분 설명을 한 것 같다. 이를 바탕으로 다음에는 '스프링 프레임워크를 사용하는 이유'라는 주제를 다뤄보려고 한다.