BoostCource/Back-end

#03. BE - Spring Framework 기초

칸타탓 2018. 7. 20. 20:16

<3. 웹 애플리케이션 개발 - 스프링 프레임워크>

http://www.edwith.org/boostcourse-web




* Spring Framework란?


  • 엔터프라이즈급 어플리케이션을 구축할 수 있는 가벼운 솔루션

  • 원스-스탑-숍(One-Stop-Shop): 모든 과정을 한번에 해결할 수 있음

  • 원하는 부분만 가져다 사용할 수 있도록 모듈화가 잘 되어있다.

  • IoC 컨테이너

  • 선언적으로 트랜잭션을 관리할 수 있다.

  • 완전한 기능을 갖춘 MVC Framework를 제공한다.

  • AOP 지원

  • 스프링은 도메인 논리 코드와 쉽게 분리될 수 있는 구조로 되어있다.


- 프레임워크
반제품. 반만 완성된 제품으로 조립만 하면 되는 것.
애초에 처음부터 만드는 것이 아닌 반제품을 가지고(중요하고 어려운 부분은 이미 구현이 되어있음) 필요한 제품을 만들어낼 수 있도록 하는 것이다.





프레임워크 모듈


스프링 프레임워크는 약 20개의 모듈로 구성되어 있으며 이중에서 필요한 모듈만 가져다 사용할 수 있다.







AOP 와 인스트루멘테이션 (Instrumentation)

  • spring-AOP : AOP 얼라이언스(Alliance)와 호환되는 방법으로 AOP를 지원한다.

  • spring-aspects : AspectJ와의 통합을 제공한다.

  • spring-instrument : 인스트루멘테이션을 지원하는 클래스와 특정 WAS에서 사용하는 클래스로 더 구현체를 제공한다. 


- BCI(Byte Code Instrumentations)

런타임이나 로드(Load) 때 클래스의 바이트 코드에 변경을 가하는 방법

 



메시징(Messaging)


- spring-messaging

스프링 프레임워크 4는 메시지 기반 어플리케이션을 작성할 수 있는 Message, MessageChannel, MessageHandler 등을 제공한다.

해당 모듈에는 메소드에 메시지를 맵핑하기 위한 어노테이션도 포함되어 있으며, Spring MVC 어노테이션과 유사하다.





데이터 엑서스(Data Access), 통합(Integration)


데이터 엑세스/통합 계층은 JDBC, ORM, OXM, JMS 및 트랜잭션 모듈로 구성되어 있다.

  • spring-jdbc : 자바 JDBC프로그래밍을 쉽게 할 수 있도록 기능을 제공한다.

  • spring-tx : 선언적 트랜잭션 관리를 할 수 있는 기능을 제공한다.

  • spring-orm : JPA, JDO및 Hibernate를 포함한 ORM API를 위한 통합 레이어를 제공한다.

  • spring-oxm : JAXB, Castor, XMLBeans, JiBX 및 XStream과 같은 Object/XML 맵핑을 지원한다.

  • spring-jms : 메시지 생성(producing) 및 사용(consuming)을 위한 기능을 제공, Spring Framework 4.1부터 spring-messaging모듈과의 통합을 제공한다.

 



웹(Web)


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

  • spring-web : 멀티 파트 파일 업로드, 서블릿 리스너 등 웹 지향 통합 기능을 제공한다. HTTP클라이언트와 Spring의 원격 지원을 위한 웹 관련 부분을 제공한다.

  • spring-webmvc : Web-Servlet 모듈이라고도 불리며, Spring MVC 및 REST 웹 서비스 구현을 포함한다.

  • spring-websocket : 웹 소켓을 지원한다.

  • spring-webmvc-portlet : 포틀릿 환경에서 사용할 MVC 구현을 제공한다.




컨테이너(Container)


Servlet을 실행해주는 WAS는 Servlet 컨테이너를 가지고 있다.

WAS는 웹 브라우저로부터 서블릿 URL에 해당하는 요청을 받으면, 서블릿을 메모리에 올린 후 실행한다.

개발자가 서블릿 클래스를 작성했지만, 실제로 메모리에 올리고 실행하는 것은 WAS가 가지고 있는 Servlet컨테이너이다.

Servlet컨테이너는 동일한 서블릿에 해당하는 요청을 받으면 또 메모리에 올리지 않고 기존에 메모리에 올라간 서블릿을 실행하여 그 결과를 웹 브라우저에게 전달한다.

컨테이너는 보통 인스턴스의 생명주기를 관리하며 생성된 인스턴스들에게 추가적인 기능을 제공하는 것이다.





IoC (Inversion of Control) 

작업의 흐름 제어를 개발자가 하는 것이 아니라 다른 프로그램이 하는 것

제어의 역전이라는 뜻을 가지고 있다.

서블릿 클래스는 개발자가 만들지만 그 서블릿의 메소드를 알맞게 호출하는 것은 WAS이다.

이렇게 개발자가 만든 클래스나 메소드를 다른 프로그램이 대신 실행해주는 것을 제어의 역전이라고 한다.

 

DI (Dependency Injection)

DI는 Dependency Injection의 약자로, 의존성 주입이란 뜻을 가지고 있다.

DI는 클래스 사이의 의존 관계를 빈(Bean) 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말한다.

 

- DI가 적용 안 된 예

개발자가 직접 인스턴스를 생성한다.

class 엔진 {

}

class 자동차 {
     엔진 v5 = new 엔진();
}

 

- Spring에서 DI가 적용된 예

엔진 type의 v5변수에 아직 인스턴스가 할당되지 않았다.

컨테이너가 v5변수에 인스턴스를 할당해주게 된다.

@Component
class 엔진 {

}

@Component
class 자동차 {
     @Autowired
     엔진 v5;
}



Spring에서 제공하는 IoC/DI 컨테이너


Spring이 가진 공장(=컨테이너)

  • BeanFactory : IoC/DI에 대한 기본 기능을 가지고 있다. (정말 기본적인 기능만 가지고 있음)

  • ApplicationContext

      • BeanFactory의 모든 기능을 포함하며, 일반적으로 BeanFactory보다 추천

      • 트랜잭션처리, AOP등에 대한 처리를 할 수 있다.

      • 어플리케이션 이벤트 등을 처리할 수 있다.

      • BeanPostProcessor, BeanFactoryPostProcessor등을 자동으로 등록하고 국제화 처리한다.

      • BeanPostProcessor : 컨테이너의 기본로직을 오버라이딩하여 인스턴스화와 의존성 처리 로직 등을 개발자가 원하는 대로 구현하도록 한다.

      • BeanFactoryPostProcessor : 설정된 메타 데이터를 커스터마이징 할 수 있다.


'BoostCource > Back-end' 카테고리의 다른 글

#03. BE - Java Config로 의존성주입 설정하기  (0) 2018.08.02
#03. BE - xml파일을 이용하여 의존성주입 설정하기  (0) 2018.08.02
#02. BE - Web API  (0) 2018.07.18
#02. BE - Rest API  (0) 2018.07.18
#02. BE - JDBC  (0) 2018.07.17