일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- SSAFY
- bruteforce
- spring
- 구현
- Integer
- Kruskal
- java
- 시뮬레이션
- Disjoint-set
- web
- BFS
- spring-boot
- 그래프
- 완전탐색
- ==
- Graph
- Web-BackEnd
- Floyd-Warshall
- cycle
- 삼성청년SW아카데미
- Spring Framework
- HashMap
- DFS
- ssafy서울
- Prim
- Union-FInd
- MST
- back-end
- 최소신장트리
- equals
- Today
- Total
devlog
🌱Spring Framework : 스프링 프레임워크 구조 본문
1. Spring Framework 란?
스프링 프레임워크는 Enterprise Application 에서 필요로하는 기능을 제공하는 오픈소스 프레임워크로 JEE (Java Enterprise Edition) 에서 제공하는 다수의 기능을 지원하는 Light-weight Application Framework 이다.
Enterprise Application
📌 서버와 클라이언트 같은 분산 환경에서 실행되는 어플리케이션
2. Spring Framework 의 목표
Spring Framework는 Infrastructual Support (Plumbing) 을 통해 Enterprise Java Application 을 개발하기 위한 보안기능, 트렌젝션 처리, 스레드 처리 등과 같은 기본적이고 공통적인 부분들을 제공해 줌으로써 개발자들이 Domain Problem 에만 집중할 수 있도록 하기 위해 만들어 졌다.
Domain Problem
📌 각 Application이 요구하는 특징적인 기능들을 의미한다. 쇼핑몰의 장바구니, 결제시스템과 같은 부분들
3. Components of Spring Framework
Spring Core
📌 Spring Framework의 근간이되는 IoC 또는 DI 기능을 지원하는 영역을 담당하고 있다. BeanFactory를 기반으로 Bean 클래스들을 제어할 수 있는 기능을 지원한다.
Spring Context
📌 Spring Core 바로 위에 있으면서 Spring Core 에서 지원하는 기능 외에 추가적인 기능들과 좀 더 쉬운 개발이 가능하도록 지원하고 있다. 또한 JNDI, EJB 등을 위한 Adaptor 들을 포함하고 있다.
Spring DAO
📌 JDBC 기반 하의 DAO 개발을 좀 더 쉽고, 일관된 방법으로 개발하는 것이 가능하도록 지원하고 있다. Spring DAO를 지용할 경우 지금까지 개발하던 DAO 보다 적은 코드와 쉬운 방법으로 DAO를 개발하는 것이 가능하다.
Spring AOP
📌 Spring Framework에 Aspect Orieneted Programming을 지원하는 기능이다. 이 기능은 AOP Alliance 기반하에서 개발되었다.
Spring Web
📌 Web Application 개발에 필요한 Web Application Context 와 Multipart Request 등의 기능을 지원한다. 또한 Strtus, Webwork와 같은 프레임워크의 통합을 지원하는 부분을 담당한다.
Spring Web MVC
📌 Spring Framework에서 독립적으로 Web UI Layer에 Model-View-Controller를 지원하기 위한 기능이다. 지금까지 Struts, Webwork가 담당했던 기능들을 Spring Web MVC를 이용하여 대체하는 것이 가능하다. 또한 Velocity, Excel, PDF 와 같은 다양한 UI 기술들을 사용하기 위한 API를 제공하고 있다.
4. Spring Framework 사용구조
Spring 에서는 필요한 인스턴스 (클래스, 객체) 를 new
라는 키워드를 통해 새로 생성하는 것이 아니라, Spring Framework에 필요한 객체를 요청한다.
Spring Framework는 해당 객체들에 대한 정보를 Spring 설정파일 (Context.xml)에 저장해 두고 요청할 때마다 미리 생성해둔 객체를 제공한다.
5. Container
Container는 Application에서 필요한 객체를 생성, 관리, 공급 해주는 객체이다. 인터페이스를 이용하여 클래스 사이의 의존 관계를 약화시켜 (Loosly Coupled) 소프트웨어의 재사용성을 증가 시킨다.
아래는 Application에서 Container를 사용하여 객체를 요청하고 사용하는 예제이다.
📃 CoffeeApp.java
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class CoffeeApp {
public static void main(String[] args) {
// ClassPathXmlApplicationContext : class path 위치에서 Application Context를 읽어온다.
ApplicationContext container= new ClassPathXmlApplicationContext("coffee.xml");
// 필요한 객체를 Container에게 요청한다.
Coffee bean = container.getBean("bean", Coffee.class);
bean.info();
}
}
📃 coffee.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- container가 읽어서 객체 한개를 생성하는 태그 -->
<bean id="bean" class="com.coffee3.Americano"/>
</beans>
기본적으로 bean 태그에 아무 옵션도 주지 않으면 Container 는 하나의 객체만을 생성해 놓고 Application이 요청할 때 마다 만들어 놓은 객체를 제공한다.
만약 Application 에서 요청 할 때마다 객체를 새로 만들어서 제공하고 싶다면 scope="prototype"
옵션을 주면 된다.
또한 Container 에서는 미리 객체들을 생성해 놓기 때문에 Application 에서 요청하지 않아도 이미 객체가 만들어져 있다. 하지만 lazy-init="true"
옵션을 준다면 객체를 호출하기 전까지 미리 생성하지 않게 할 수있다.
'Spring > 이론' 카테고리의 다른 글
IoC 컨테이너 : 스프링 IoC 컨테이너와 빈 (0) | 2020.08.11 |
---|---|
🌱Spring Framework : MyBatis (0) | 2020.05.26 |
🌱Spring Framework : Spring Web MVC (0) | 2020.05.19 |
🌱Spring Framework : Aspect-Oriented Programming (0) | 2020.05.19 |
🌱Spring Framework : Dependency Injection (0) | 2020.05.18 |