'Programming/Spring Framework'에 해당하는 글 12건



Spring Framework 는 Core Container, Data Access/Integration, Web, AOP, Instrumentation, Messaging, Test 로 그룹화 된, 약 20 개의 모듈로 구성된다.



1. Core Container


Core 컨테이너는 spring-core, spring-beans, spring-context, spring-context-support, spring-expression (Spring Expression Language) 모듈로 구성된다.

모듈 이름은 의존성 관리 도구에 사용되는 artifact ID 가 된다. (spring-<module>:<version> 형식)


spring-corespring-beans 모듈은 IoC 및 DI 기능을 포함하여 프레임워크의 기본적인 부분을 제공한다. 

BeanFactory 는 factory 패턴을 정교하게 구현하여, 프로그래밍 방식의 singleton 패턴을 없애고 실제 프로그램 로직에서 종속성의 구성과 사양을 분리할 수 있다.


spring-context 모듈은 Core 와 Beans 모듈에서 제공하는 견고한 기반 위에 구축되어, JNDI 레지스트리와 비슷한 프레임워크 스타일 방식으로 객체에 액세스하는 수단이다. Beans 모듈에서 기능을 상속하며, 국제화 (예: resource bundles 사용), 이벤트 전달(propagation), 리소스 로드 및 서블릿 컨테이너 같은 컨텍스트의 생성과 EJB, JMX 및 기본 원격 처리을 지원한다.

spring-context-support 는 캐싱(EhCache, Guava, JCache), 메일링(JavaMail), 스케줄링(CommonJ, Quartz) 및 템플릿 엔진(FreeMarker, JasperReports, Velocity) 을 위한 Spring 어플리케이션 컨텍스트로 일반적인 third-party 라이브러리를 통합할 수 있게 한다.


spring-expression 모듈은 런타임시 객체 그래프(특정 시점의 객체들의 참조 관계) 를 쿼리하고 조작하기 위한 강력한 표현식 언어(EL: Expression Language) 로, JSP 2.1 사양에 명시된 대로 통합 표현식 언어 (unified EL) 를 확장하였다. EL 은 속성 값 설정, 가져오기, 할당 / 메소드 호출 / 배열, 콜렉션, 인덱서의 내용 / 논리 및 산술 연산자 / 변수 / Spring 의 IoC 컨테이너에서 이름으로 객체를 조회하고, 일반 리스트의 projection, selection, aggregations 를 지원한다.



2. AOP / Instrumentation


spring-aop 모듈은 AOP Alliance 와 호환되는 관점 지향 프로그래밍(AOP) 구현을 제공한다. 예를 들어 분리되어야 하는 기능 구현 코드를 완전히 분리하도록 메소드 interceptors 와 pointcut 을 정의할 수 있다.


spring-aspects 모듈로 AOP 프로그래밍인 AspectJ 와 통합할 수 있다.


spring-instrument 모듈은 JVM 부트스트랩핑을 위한 Instrumentation 에이전트로, 특정 애플리케이션 서버에서 사용되는 instrumentation 지원 및 클래스 로더 구현을 제공한다. 

spring-instrument-tomcat 모듈은 Tomcat 용 Spring instrumentation 에이전트를 포함한다.



3. Messaging


spring-messaging 모듈은 메시징 아키텍처와 프로토콜을 지원하며, 메시징 기반 어플리케이션에 사용되는 Message, MessageChannel, MessageHandler 등의 주요 추상화를 제공한다.



4. Data Access/Integration


Data Access/Integration 계층은 JDBC, ORM, OXM, JMS 및 Transaction 모듈로 구성된다.


spring-jdbc 모듈은 JDBC 코딩과 데이터베이스 벤더의 특정 에러 코드를 분석할 필요가 없도록 JDBC 추상화 계층을 제공한다.


spring-tx 모듈은 특별한 인터페이스를 구현하는 클래스와 모든 POJO 를 위한 프로그래밍 및 선언적 트랜잭션 관리를 지원한다.


spring-orm 모듈은 JPA, JDO 및 Hibernate를 포함하는 ORM(Object-Relational Mapping) API를 위한 integration 계층을 제공한다. 


spring-oxm 모듈은 JAXB, Castor, XMLBeans, JiBX, XStream 같은 Object/XML 매핑 구현을 지원하는 추상화 계층을 제공한다.


spring-jms 모듈은 JMS(Java Messaging Service) 엑세스와 메시지 리스너 컨테이너를 지원하며, spring-messaging 모듈과의 통합을 제공한다.



5. Web


Web 계층은 spring-web, spring-webmvc, spring-websocket, spring-webmvc-portlet 모듈로 구성된다.


spring-web 모듈은 서블릿 리스너와 웹 어플리케이션 컨텍스트를 이용한 IoC 컨테이너 초기화와 multipart 파일 업로드 기능 같은 기본적인 웹 지향 통합 기능을 제공한다. 또한 HTTP 클라이언트와 Spring 원격 지원의 웹 관련 부분을 지원한다.


spring-webmvc 모듈(Web-Servlet) 은 도메인 모델 코드와 웹 폼을 깔끔하게 분리하는 MVC(Model-View-Controller) 와 REST Web Service 구현을 지원한다.


spring-webmvc-portlet 모듈은 spring-webmvc 모듈의 기능을 반영하고, Portlet 환경에서 사용될 MVC 구현을 제공한다.



6. Test


spring-test 모듈은 JUnit 나 TestNG 를 사용하여, Spring 구성 요소의 유닛 테스트 및 통합 테스트를 지원하며, 코드를 독립적으로 테스트할 수 있는 모의(mock) 객체를 제공한다.




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret



가장 지루한 Spring Framework 서론.


Spring Framework 는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서, 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다.

모듈 별로 구분되어 있어서 모듈 전체를 가져오지 않고 않고 필요한 부분만 가져와 사용할 수 있기 때문에, 경량의 어플리케이션도 구축할 수 있다.

트랜잭션 관리, RMI 나 웹 서비스를 통한 로직으로의 원격 액세스, 데이터를 유지하기 위한 다양한 옵션도 지원한다. 



Spring Framework 특징


POJO (Plain Old Java Object)

일반적인 J2EE 프레임워크에 비해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 사용하기 편하고 객체가 가볍다.

POJO 어플리케이션을 빌드하는 것도 가능하고, POJO 에 비-침입적(non-invasively) 으로 엔터프라이즈 서비스를 적용하는 것도 가능하다.


DI (Dependency Injection)

각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.


IoC (Inversion of Control)

컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서, IoC 컨테이너가 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 이 객체를 bean 이라고 한다.


AOP (Aspect-Oriented Programming)

로깅이나 보안, 트랜잭션 등 핵심적인 비즈니스 로직과 관련이 없으나 여러 곳에서 공통적으로 쓰이는 기능들을 따로 분리하여 개발하고 실행 시에 다시 조합할 수 있다.


Data Access

JDBC, iBATIS(MyBatis), Hibernate 등의 데이터베이스에 접속하고 자료를 저장 및 읽어오기 위한 인터페이스를 제공한다.


MVC Pattern

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

DispatcherServlet 이 Contoller 역할을 담당하여 각종 요청을 적절한 서비스에 분산, 이를 각 서비스들이 처리, 그 결과를 다양한 형식의 View 서비스로 화면에 표시할 수 있다.


Batch

Quartz 기반으로 특정 시간대에 실행하거나 대용량의 자료를 처리할 수 있다.



Spring Framework vs Spring Boot


Spring 을 처음 시작한다면, Spring Boot 기반의 어플리케이션을 생성하여 Spring Framework 를 사용할 수 있다.

Spring Boot CoC(Convention over Configuration: 설정 이상의 관례) 를 선호하며, 코딩/설정 등을 최소화 할 수 있고 가능한 빠르게 작동하도록 설계되었다.

https://spring.io/guides 에 Spring Boot 를 기반으로 한 많은 예제가 있으며, 특정 문제를 해결할 때 고려해야 할 Spring 의 다른 프로젝트들도 포함되어 있다.


Spring Boot 를 사용하는 것이 훨씬 편리하고 간단하다. 추세도 그러하다.

이 시점에 Spring Boot 를 사용하지 않고 Spring Framework 로 개발하는 것은 회칼을 옆에 두고 과도로 횟감을 뜨고 있는 모양새와 같을 수 있다.

그럼에도 불구하고 Spring Framework 를 계속 보고 있는 이유는, 

어찌됐든 Spring Framework 를 간편화 한 프로젝트이므로 그 근간을 모르고서는 방식/동작 등에 대해 이해가 부족할 것 같아서 이다.

그렇게 따지자면 java1 부터 공부를 해야 맞는 것이 겠지만; 선택은 하고 싶은 사람들 마음이다.

꼭 필요해서 한다면 Spring Boot 를 먼저 봐도 좋을 것이고, 알고 싶다면 Spring Framework 부터 봐도 좋을 것이고...




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret