티스토리 뷰

1. Spring framework 가 도대체 뭔데?

 

"자바 엔터프라이즈를 위한 오픈소스 애플리케이션 프레임워크" 라 정의하고 외워 두자! 간단히 Spring이라고 부른다.

  • 오픈소스 : 소스가 공개되어 여러 개발자가 플랫폼을 함께 개발, 구축, 보완해 나가는 시스템
  • 프레임워크 : 설계 기본이 되는 뼈대나 구조 및 환경 

자바 객체(POJO)를 자바EE에 의존적이지 않게 연결해 주는 역할을 한다.

  • POJO(Plan Old Java Object) 로 특별한 뜻을 담고 있는 용어는 아니라고 한다.
  • 상속 및 인터페이스가 필요없는 단순하고 가벼운 객체로 그냥 평범한 자바빈즈(JavaBeans) 객체를 의미한다.
  • 스프링 프레임워크에서 POJO 만으로 어떻게 동작 하지? 내부에서 어떤 서블릿 클래스들이 동작하지? 라는 의문이 든다면 아래 그림을 참조 하자 ! 

 

 

2. Spring Framework 가 좋은점은??


일단 대부분의 자바를 사용하는 기업은 스프링 프레임워크를 쓰고 있다고 보면 된다. 

(스프링부트도 스프링 프레임워크 프로젝트 중 일부라는 사실!)

일단 스프링에 대해서 한줄로 요약하면 아래와 같이 할 수 있겠다.

IoC 와 AOP 를 지원하는 경량급 컨테이너 프레임워크 

 

2-1. 경량급 컨테이너로서 자바 객체를 직접 관리. 

  • 컨테이너는 특정 객체의 생성과 관리를 담당하며, 객체 운용에 필요한 다양한 기능을 제공 한다.

  • 스프링 컨테이너는 객체의 LifeCycle을 관리하며, 컨테이너로부터 필요한 객체를 가져와 사용할 수 있다.

  • 경량급의 의미는 Spring 자체가 아주 가볍거나 작은 규모의 코드로 이루어 졌다는 의미가 아니라, 불필요하게 무겁지 않다는 것을 의미한다.

2-2. IoC (Inversion of Controll) - 제어의 역전

비즈니스 컴포넌트를 개발할 때 항상 신경쓰는 것이 바로 낮은 결합도높은 응집도 이다.

스프링은 제어의 역전을 통해 애플리케이션을 구성하는 객체간의 느슨한 결합, 낮은 결합도를 유지 한다.

스프링의 IoC는 객체 생성을 자바 코드로 직접 처리하는 것이 아니라 컨테이너가 대신 처리하게 한다.

그리고 객체와 객체 사이의 의존관계 역시 컨테이너가 처리 한다.

 

2-3. DI (Dependency Injection) - 의존성 주입

의존성 관계란 객체와 객체의 결합 관계 이다.

예를들어 Product 클래스 생성자에서 new Author() 를 했다면 Product 는 Author 클래스에 의존하게된다.

주입이란 외부에서라는 뜻을 내포하고 있으며, 즉 Product 라는 객체에서 Author를 생성하는 것이 아니라, 

외부에서 생성된 Author를 Product 에 주입함으로써의존관계를 제거할수 있다.

 

2-4. AOP (Aspect-Oriented Programming)- 관점지향 프로그래밍

DI가 의존성 주입 이라면, AOP는 로직 주입 이라고 할 수 있다.

코드를 작성하다보면 다수의 모듈에 공통적으로 나타나는 부분이 존재하는데 이것을 횡단 관심사(cross-concern) 라고 한다.

그리고 모듈 각각 고유한 로직을 핵심 관심사 라고 한다. 즉 모듈을 구성하고 있는 코드는 핵심 관심사횡단 관심사

합쳐진 것이다.

 

AOP는 횡단 관심사에 관심이 있다. 모듈마다 중복되는 부분을 걷어내는 것이 주 목적이다.

핵심 비즈니스 로직과 각 비즈니스 메소드 마다 반복해서 등장하는 공통 로직을 분리함으로써 응집도가

높게 개발될 수 있도록 지원한다. 해당 기능을 잘 사용하면 공통 로직을 제외한 비지니스 로직에만 집중 할 수 있습니다.

 

2-5. 트랜잭션 관리 프레임워크

추상화된 트랜잭션 관리를 지원하며 설정파일(xml, java, property 등)을 이용한 선언적인 방식 및 프로그래밍을 통한 방식을 모두 지원한다.

2-6. 모델-뷰-컨트롤러 패턴

웹 프로그램밍 개발 시 거의 표준적인 방식인 "Spring MVC"라 불리는 모델-뷰-컨트롤러(MVC) 패턴을 사용한다. 

DispatcherServlet이 Controller 역할을 담당하여 각종 요청을 적절한 서비스에 분산시켜주며 이를 각 서비스들이 처리를 하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있다.

 

2-7. 배치 프레임워크

스프링은 특정 시간대에 실행하거나 대용량의 자료를 처리하는데 쓰이는 일괄 처리(Batch Processing)을 지원하는 배치 프레임워크를 제공한다. 기본적으로 스프링 배치는 Quartz 기반으로 동작한다.

 

3. Spring Framework 의 구성


 

  • Core Container 중 Bean Container는 POJO 객체를 관리한다.

  • Spring에서 제공하는 다양한 기능 중 필요한 것을 선택적으로 사용한다.

4. Spring Framework Module


스프링 프레임워크는 20개 이상의 다른 모듈(경계가 명확)을 갖고 있는 고도화된 모듈이다.

  •  코어 (빈즈 / 코어 / 컨텐스트 / SpEL)

  •  횡단관심 (AOP / ASPECT / Instrumentation)

  •  웹 (Web / Servlet / WebSocket / 포틀릿)

  •  비즈니스 (트랜잭션)

  •  데이터 (JDBC / ORM / OXM / JMS / 메시징)

4-1. 스프링 코어 컨테이너

Spring Core Container는 스프링 프레임워크 의존성 주입, IoC 컨테이너 및 Application Context의 핵심 기능을 제공한다.

  • spring-core: 다른 스프링 모듈이 사용하는 유틸리티

  • spring-beans: 스프링 빈을 지원하며 spring-core 와 함께 스프링 프레임워크의 핵심 기능인 의존성 주입을 제공한다. BeanFactory의 구현을 포함

  • spring-context: BeanFactory를 상속하는 Application Context를 구현하고 리소스 로드 및 Localization 지원을 제공.

  • spring-expression: EL을 확장하고 Bean 속성(배열 및 컬렉션 포함) 및 접근, 처리를 위한 언어를 제공한다.

4-2. 횡단 관심

횡단 관심은 로깅/보안과 같은 모든 Layer에 걸쳐 적용할 수 있다. 단위 테스트와 통합 테스트는 모든 레이어에 적용할 수

있으므로 이 카테고리에 적합하다.

  • spring-aop: 메서드 인터셉터와 포인트 컷을 사용해 관점지향 프로그래밍에 대한 기본적인 지원을 제공

  • spring-aspects: 가장 인기있는 AOP 프레임워크 AspectJ와 통합을 제공

  • spring-instrument: 기본적은 instrumentation을 제공.

  • spring-test: 단위 및 통합 테스팅에 대한 기본 지원 제공.

4-3. 웹

스프링은 Struts와 같은 대중적인 웹프레임워크와 훌륭한 통합을 제공하는 것 외에도 자체 MVC 프레임워크인

스프링 MVC를 제공한다. 중요한 모듈/아티팩트는 다음과 같다.

  • spring-web: 멀티파트 파일 업로드와 같은 기본 웹기능을 제공한다. 스트럿츠와 같은 다른 웹프레임워크와의 통합을 지원

  • spring-webmvc: 모든 기능을 갖춘 웹 MVC 프레임워크를 제공한다. 스프링 MVC에는 REST 서비스를 구현하는 기능도 포함

4-4. 비즈니스

비즈니스 레이어는 애플리케이션의 비즈니스 로직을 실행하는데 초점을 맞춘다. 스프링에서는 일반적으로 비즈니스 로직이 POJO로 구현된다. spring-tx는 POJO 및 다른 클래스에 대한 선언적 트랜잭션 관리를 제공한다.

 

4-5. 데이터

애플리케이션의 데이터 레이어는 일반적으로 데이터베이스 또는 외부 인터페이스와 통신한다.

데이터 레이어와 관련된 중요한 스프링 모듈/아티팩트들은 아래와 같다.

  • spring-jdbc: 상용구 코드를 방지하기 위해 JDBC를 추상화.

  • spring-orm: ORM 프레임워크 및 스펙(JPA 및 하이버네이트 등)과의 통합을 제공

  • spring-oxm: XML 매핑 통합 객체를 제공. JAXB, Castor 등과 같은 프레임워크를 지원

  • spring-jms: 상용구 코드를 방지하기 위해 JMS를 추상화.

 

References

- https://gmlwjd9405.github.io/2018/10/26/spring-framework.html 

- https://12bme.tistory.com/459

- https://goddaehee.tistory.com/156

- https://asfirstalways.tistory.com/334

- https://12bme.tistory.com/157

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday