[EJB의 단점]
1. 많은 기능 중 자원관리 및 트랙잭션정도로만 사용.
2. 기타 외 기능들은 굳이 EJB가 아니여도 구현 가능.(DB매핑 or MDB의 메시지 처리 등)
3. EJB 스펙에 정의된 인터페이스에만 따라 코드를 작성하도록 제약이 존재
4. 기존에 작성한 POJO를 변경해야한다.
ㄴ POJO는 지금까지 써왔는 클래스라고 생각하면 됨
5. 컨테이너(서버) 없이는 단일 테스트가 어렵다.
ㄴ 단일테스트 :잘게 단위를 쪼개서 테스트 하는 것.( DAO를 만들고 기능을 만들게 되면 그 기능을 테스트하기 위해 웹을 기동하고 테스트를 했는데, 웹을 실행하지 않아도 메소드를 호출하여 되는지 안되는지 확인 가능하다.)
6. 하나의 업체가 아닌 여러 벤더 업체들의 압력에 의해 주체성이 적다.
EJB를 단점을 보완하게 위해 스프링을 사용하게 되었다.
[Spring 주요 기능 및 특징]
1. 스프링은 경량 컨테이너이다. (라이브러리처럼 사용할 수 있고 자원관리를 효율적으로 할 수 있다.)
- 스프링은 자바 객체를 담고 있는 컨테이너이다. 스프링 컨테이너는 자바 객체의 생성, 소멸과 같은 라이프 사이클을 관리하며, 스프링 컨테이너로부터 필요한 객체를 가져와 사용할 수 있다.
2. 스프링은 DI(Dependency Injection)을 지원한다.
- 스프링은 설정 파일이나 어노테이션을 통해서 객체 간의 의존 관계를 설정 할 수 있도록 하고 있다.
따라서 객체는 의존하고 있는 객체를 직접 생성하거나 검색할 필요가 없다.
-클래스와 클래스의 관계 의존성을 떨어뜨리는 것. 확장성의 용이를 위해.
3. 스프링은 AOP(Aspect Oriented Programming)을 지원한다.(관점지향 프로그래밍)
- 스프링은 자체적으로 AOP를 지원하고 있기 때문에 트랙잭션이나 로깅, 보안과 같이 여러 모듈에서 공통으로 필요로 하지만 실제 모듈의 핵심은 아닌 기능들을 분리해서 각 모듈에 적용할 수 있다.
- 내가 만든 클래스의 역할에 따라 공통인지 핵심인지 확인후 자동으로 핵심이면 수행되는 기능 (인터셉트)
프로그램을 공통 관심 사항으로 바라볼건지 핵심으로 바라볼건지 경력에따라 보는 관점이 다름.
4. 스프링은 POJO(Paling Old Java Object)를 지원한다.(클래스의 재활용이 가능하다)
- 스프링 컨테이너에 저장되는 자바 객체는 특정한 인터페이스를 구현하거나 클래스를 상속받지 않아도 된다. 따라서, 기본에 작성한 코드를 수정할 필요없이 스프링에서 사용할 수 있다.
5. 스프링은 트랙잭션 처리를 위한 일관된 방법을 제공한다.
JDBC를 사용하든, JTA를 사용하든, 컨테이너가 제공하는 트랙잭션을 사용하든, 설정 파일을 통해 트랙잭션 관련 정보를 입력하기 때문에 트랙잭션 구현에 상관없이 동일한 코드를 여러 환경에서 사용할 수 있다.
6. 스프링은 영속성과 관련된 다양한 API를 지원한다.
-스프링은 JDBC를 비롯하여 iBatis,하이버네이트 등 데이터베이스 처리를 위해 널리 사용되는 라이브러리와의 연동을 지원하고 있다.
7. 스프링은 다양한 API에 대한 연동을 지원한다.
-스프링은 JMS, 메일, 스케줄링 등 엔터프라이즈 어플리케이션을 개발하는데 필요한 다양한 API 설정 파일과 어노테이션을 통해서 손쉽게 사용할 수 있도록 지원하고 있다.
==>확장성이 용이하다.
확장이 용이한 프로그램이란?
- 기존의 코드를 최소한으로 건드리지 않는것.
프레임 워크는 확장성을 높이는데,
클래스와 클래스의 의존 관계를 떨어뜨리는데 목적을 가지고 있다.
의존성이 높아지면 높아질수록 나를 수정해야하기 때문이다.
-의존성을 떨어뜨릴 수 있는 인터페이스를 생성한다.
스프링 개발자는
1. 사용자의 요청은 수정이 아닌 확장으로 가야한다.
2. 인터페이스부터 생성한다.
3. 내가 써야하는 객체는 있다는 전제로 출발한다.(+ 내가 있다라고 하는 자원은 멤버 변수로 선언되어있어야한다)
스프링 워크의 장점 : 자원관리 ( 내가 사용할 객체들을 스프링이 관리해준다)
[스프링 생성 과정]
1. sts플러그인이 탑재되어있는 이클립스를 다운(spring>xml파일을 이용할 수 있는 sts 설치된 버전)
2. 교육용 통합 라이브러리 (자료실)
3. 압출 풀고 1의 sts 실행.
4. bulid path > Add External Archives > 2번의 lib파일들 선택
5. New > Other > Sping 생성
6. 인터페이스 생성
* 스프링의 이름은 모든 이름 가능하나 알아볼 수 있게 applicationContext로...
[스프링 XML 설정파일<<bean>태그 속성들]
ㄴ(자바빈 처럼 생각하기)

[스프링의 장점]
-필요한 객체를 스프링에서 미리 생성해준다.(자원관리에 효율적이다.)
-클래스 사이의 결합도를 느슨할 수 있다.
ㄴ 재활용이 높은 유연한 프로그램을 작성하기 쉽다.
-개별 테스트도 쉽다.
[스프링의 특징]
-스프링은 어플리케이션 프레임워크로 불리며, 웹 어플리케이션은 물론, 콘솔 어플리케이션이나 스윙(AWT)같은 GUI 어플리케이션 등 어던 어플리케이션에도 적용 가능한 프레임 워크이다.
-스프링은 EJB와 같이 복잡한 순서를 거치지 않아도 간단하게 이용할 수 있기 때문에 경량(Lightwright) 컨테이너 라고도 부른다.
-스프링은 Dependency Injection( DI) 와 Aspect Oriented Programming(AOP)를 가장 중점적인 기술로 사용하지만, 이외에도 여러가지 기능을 제공하고 있다.
-스프링의 7개 모듈
ㄴ Spring Core : 스프링의 근간이 되는 loc (또는 DI)기능을 지원하는 영역 담당. BeanFactory를 기반으로 Bean클래스들을 제어할 수 있는 기능을 지원한다.
ㄴSpring AOP : 스프링에 Aspect Oriented Programming을 지원하는 기능이다. 이 기능은 AOP Alliance기반하에서 개발됨
ㄴ Spring ORM : ORM(Object Relational Mapping)기능을 제공하는 모듈이다. ORM 프레임워크인 하이버네이터, 아이바티스, JDO를 지원
ㄴ Spring DAO : DAO기능을 제공하는 모듈. JDBC에 의한 데이터베이스 액세스를 지원하고 트랜젝션 관리의 기반이 된다.
ㄴSpring Web : 웹 어플리케이션 개발에 필요한 WebApplicationContext와 MultipartRequest등의 기능을 지원한다.
또한 스트럿츠, 웹워크와 같은 프레임워크의 통합을 지원하는 부분을 담당한다.
ㄴ Spring Context : SpringCore 바로 위에 있으면서 SpringCore에서 지원하는 기능 외에 추가적인 기능들과 좀 더 쉬운 개발이 가능하도록 지원하고 있다. 또한, 유저 인터페이스 및 타당성을 검증이라는 어플리케이션의 기반 성능, JNDI및 EJB의 지원, 메일 송-수신 기능 등응ㄹ 제공한다.
ㄴSpring Web MVC: 웹 어플리케이션의 MVC 프레임워크 기능을 제공한다. JSP나 템플릿 엔진으로 유명한 벨로시티(Velocity)지원 이외에도 웹에서 PDF 엑셀을 취급하기 위한 기능도 제공한다.
[ DI (Dependency Injection) ]
-스프링의 핵심 개념이다.
-객체 사이의 의존관계를 자기자신이 아닌 외부에 의해 설정된다는 개념.
스프링은 설정파일을 통해 객체간의 의존관계를 설정할 수 있기에 DI컨테이너라고 부른다.
-내가 사용해야하는 자원을 외부에서 주입해주는 기술
==> 받을 수 있는 방법은?
Injection 두가지 방법
- Constructor Injection(생성자 주입방법)
- Settter Injection
* Constructor Injection(생성자 주입방법)
- 생성자를 통해서 넣는 방법
XML 설정파일의 <constructor-arg>태그
index : Constructor의 몇번째의 인수에 값을 전달할 것인지를 지정한다.
type : Constructor의 어느 데이터형의 인수에 값을 전달할 것인지 지정.
ref : 레퍼런스 타입일 경우
value :기본 자료형일경우 (+String)
*Settter Injection
XM설정파일의 <property>태그
ref : 레퍼런스
value : 기본자료형 (+String)
구현체
- 내가 하고자하는 인터페이스의 이름으로 시작하고 끝에 Imple 접미어를 부착해준다.
설정파일은 컴파일 없이 로딩하여 사용 가능하다.
스프링을 이용하는 이유
: 유지보수 및 확장이 용이한 프로그램을 만드는 것이 목적.
writer, buffered 모두 2byte라고 생각하면 된다.
'개발자 > 백엔드 웹 개발자 과정(국비)' 카테고리의 다른 글
| [Spring] post 인코딩방식 설정, DBCP추가 (0) | 2023.02.23 |
|---|---|
| [Spring]AOP, 메이븐 (0) | 2023.02.22 |
| [디자인패턴] EL(Expression Language) & JSTL (0) | 2023.02.20 |
| [디자인패턴]사원관리프로그램 생성하기 (0) | 2023.02.17 |
| [디자인패턴]redirect, forward, model2 , MVC패턴, 커맨드 패턴 (0) | 2023.02.16 |