Spring

이재현·2024년 8월 6일

Spring

목록 보기
1/13

🩵 Spring

Spring Framework 는 Java 기반 애플리케이션 개발을 지원하는 오픈소스 애플리케이션 프레임워크로 이를 간단히 Spring 이라고 한다.

Spring 사용 이전에는 초기 기업에서 EJB(Enterprise Java Bean) 방식의 기술을 이용해서 Web Application을 서비스했다.

  • EJB (Enterprise Java Bean)

기업환경의 시스템 구현을 위한 서버 측 컴포넌트 모델이다. 일반적으로 업무 로직을 갖고 있는 서버 어플리케이션을 EJB라고 한다.
이는 독립한 부품이 아닌, 미국 Sun Microsystems사가 제창한 규약으로, EJB는 서버 어플리케이션의 개발을 용이하게 해 다중다양한 Platform과 제품 간의 이동성을 실현하기 위하여 비즈니스 로직과 시스템 서비스를 이용하는 로직을 분산해 그 사이의 규약을 규정하고 있다.

특정 회사의 EJB 컨테이너(Oracle Weblogic, IBM WebSphere 등)가 없이는 기술이 구현이 어렵고 프로그래밍 모델이 복잡하며, 자동화된 테스트가 거의 불가능하다는 치명적인 단점을 가지고 있다.

스프링은 이러한 EJB의 단점을 해결하여, 순수 자바 객체(POJO)만을 사용하여 복잡성을 제거하고, 단순하고 가벼운 코드로 기업용 애플리케이션을 개발하기 위한 목적으로 개발된 프레임워크이다.


🩵 Spring 특징

💙 제어 역전

스프링은 객체의 생명 주기 및 의존성 관리를 담당하는 IoC 컨테이너를 제공한다.
개발자는 객체의 생성과 관계 설정을 스프링에 위임할 수 있으며, 스프링 컨테이너가 객체의 생명 주기를 관리하고 필요한 의존성을 주입한다.

💙 의존성 주입

스프링은 의존성 주입을 통해 객체 간의 관계를 설정하는데, 의존성 주입은 애플리케이션의 결합도를 낮추고 유연성과 테스트 용이성을 향상시킨다.

💙 AOP 지원

스프링은 AOP를 지원하여 애플리케이션의 핵심 비즈니스 로직과 부가적인 기능(로깅, 트랜잭션 관리 등)을 분리하여 모듈화 할 수 있다.

  • AOP (Aspect Oriented Programming)
    관점 지향 프로그래밍으로, 부가 기능을 핵심 기능에서 분리해 한 곳으로 관리하도록 하고, 이 부가 기능을 어디에 적용할지 선택하는 기능을 합한 하나의 모듈을 의미한다.

💙 웹 개발 지원

스프링은 웹 애플리케이션 개발을 위한 다양한 기능과 웹 프레젠테이션 계층을 제공한다. 스프링 MVC는 유연하고 확장 가능한 웹 애플리케이션을 개발할 수 있는 MVC(Model-View-Controller) 아키텍처를 지원한다.

  • MVC (Model-View-Controller)
    디자인 패턴의 일종으로, 소프트웨어를 Model, View, Controller 세 부분으로 나누는 개발 방법론이라고 할 수 있다. 추후 디자인 패턴에서 다룰 예정.



🧡 문제점

❤️ 설정의 복잡함

Spring은 위에서 설명한 것과 같은 강력한 기능을 제공하기 위해서 많은 설정과 구성이 요구된다.
결과적으로 초기 설정의 복잡성이 증가될 수 있으며, 어렵게 느껴질 수 있다.


❤️ 높은 학습 난이도

다른 프레임워크에 비해서 학습이 요구되는 부분이 많다.
다양한 개념과 기능을 이해하는데 많은 시간과 노력을 소모해야 할 수도 있다.


❤️ 의존성 관리 문제

Spring Legacy에서는 의존성 주입을 구현하기 위해서 XML 설정 파일에 많은 수의 Bean을 등록해야 한다.
결과적으로 이는, 코드의 가독성을 떨어뜨리고, 의존성 관리가 어려워질 수 있다.

  • Spring Legacy
    기존 Spring Framework 프로젝트가 띄는 형태이다. 다만, 차로 말하면 노 옵션 수준의…
    여러 초반 설정의 어려움이 있는 프로젝트이다.
  • Bean
    bean은 스프링에서 객체를 가리키는 개념이다.

❤️ 별도의 WAS 서버 구성

웹 상에서 Spring을 사용하기 위해서는 별도의 Web Application Server를 설치하고 설정해야 한다.
또한, 서비스하기 위해서 별도의 서버에 수동으로 배포해야 한다는 번거로움이 있다.

0개의 댓글