본문 바로가기
☕Java/Spring

스프링 프레임워크를 사용하는 이유

by 캔 2022. 5. 30.

필자는 회사에서 스프링 프레임워크를 사용해서 웹 개발을 하고 있다. 그러다 문득 든 생각이 "스프링으로만 개발하고 있는 나는 자바 개발자가 맞는가'였다. 그래서 스프링 이전에는 무엇이 있었는지, 어떻게 해서 스프링이 나오게 되었는지에 대해 생각해보고 또 조사해보았다. 저번에는 Java EE에서 스프링 프레임워크로 넘어가는 과정에 대해 이야기해봤고, 이번에는 스프링 프레임워크를 사용하는 이유에 대해 좀 더 알아보려고 한다.

 

우선, 프레임워크를 사용하는 이유부터 간단히 살펴보자. 프레임워크를 이용한 개발은 이름에서 알 수 있듯이 소프트웨어의 '뼈대'가 되는 부분은 미리 만들어놓고 필요한 부분들을 추가하거나 수정해서 사용하는 개발 방식이다. 그러다 보니 개발 기간이 단축되고, 오류가 적어지며, Java EE만을 이용하는 개발보다는 이해가 더 쉽기 때문에 신규 개발자들이 쉽게 개발을 시작할 수 있다.

 

자바의 프레임워크에는 스트러츠와 스프링 프레임워크 등이 있다. 그중에 스프링 프레임워크는 자신의 강력한 특장점들을 바탕으로 (적어도 대한민국에서는) 사실상 표준이 되어 있다.

 

앞선 글에서 다뤘듯이 자바 언어를 사용하는 웹 개발은 Java EE의 사양을 이용하게 된다. 그중 EJB를 사용하여 개발을 할 경우 간단한 기능을 만들고자 할 때에도 EJB 객체를 상속 또는 구현해야 해서 코드가 복잡해지고 애플리케이션도 무거워졌다. 그에 비해 스프링 프레임워크는 EJB 객체를 전부 구현할 필요 없이 일반 자바 객체(Plain Old Java Object)만으로 개발이 가능하다.

 

스프링 프레임워크는 가벼울 뿐만 아니라, 개발을 쉽게 만들어주는 여러 특징과 기능들을 갖고 있다.

 

스프링은 스프링 컨테이너에 객체 생성에 대한 권한을 위임함으로써 스프링 IoC 컨테이너가 객체에 필요한 의존성을 주입(Dependency Injection)하게 된다. 이를 제어의 역전(Inversion of Control, IoC)라고 한다. 의존성을 객체가 아니라 스프링 컨테이너가 결정하니 객체 간의 결합도를 줄일 수 있다.(loose coupling)

 

또한 로깅, 세션, 보안(인증, 인가), DB 접속 등 공통 관심사(cross-cutting concern, 또는 횡단 관심사)를 코드에서 분리하고 애너테이션을 이용하여 반복되는 작업들을 줄여준다. 이를 AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)라고 한다.

 

마지막으로, 같은 종류지만 여러 방식의 기술들을 추상화하여 모든 기술들을 지원할 수 있는 PSA(Portable Service Abstraction) 개념이 도입되어 있다. 트랜잭션의 경우 JDBC Connection, JTAUserTransaction, HibernateTransaction과 같이 여러 방식에 따라 사용하는 객체가 달랐는데 이를 추상화하여 어떤 기술이든 사용할 수 있도록 해놓았다.

 

그 외에도 스프링을 사용하면 유지보수성, 테스트 용이성을 높일 수 있다는 장점이 있다.

 

결국 스프링을 사용하게 되면 개발을 간편하고 코드를 간단하게 만들어 주게 되니 개발자들에게 Java EE만을 사용하는 개발보다 스프링을 사용하는 개발을 선호할 수밖에 없다.