온 코딩

[Spring] 개념정리 및 STS 사용 법 본문

복습 ARCHIVE/모델별 프로젝트

[Spring] 개념정리 및 STS 사용 법

SummerON 2021. 6. 15. 11:44

스프링 

- 엔터프라이즈 어플리케이션에서 필요로하는 기능을 제공하는 프레임워크

- 경량 프레임워크로 자바 객체를 담고 있는 컨테이너, 자바 객체의 생성, 소멸과 같은 라이프 사이클을 관리

- DI(Dependency Injection) 패턴 지원 , 설정 파일을 통해서 의존 관계를 설정할 수 있다

- AOP(Aspect Oriented Programming) 지원, 트랜젝션이나 로깅, 보안과 같은 공통으로 필요로 하는 기능을 분리해서 각각의 모듈에 적용할 수 있다.

- POJO(Plain Old Java Object) 를 지원, 특정 인터페이스나 클래스를 상속 받지 않은 자바 객체를 스프링 컨테이너가 저장

- 트랜젝션 처리를 위한 일관된 방법 제공

- 영속성과 관련된 다양한 API를 제공 

- 빠른 구현 시간, 쉬운 관리, 개발자들의 역량 획일화, 검증된 아키텍쳐의 재사용과 일관성 유지

- Presentation / Bussiness / Persistence 영역으로 나뉘어져 있음

- IoC : 객체 생성을 컨테이너가 대신 처리, 객체와 객체 사이의 의존 관계도 컨테이너가 처리

   => 결과적으로 소스에 의존관계가 명시되지 않으므로 결합도가 떨어져서 유지보수가 편해짐 

- 컨테이너 : 특정 객체의 생성과 관리를 담당하고 ,객체의 운용에 필요한 다양한 기능을 제공 / 일반적으로 서버 안에 포함되어 배포 및 구동된다. 

   => Servlet 컨테이너 : Servlet 객체를 생서하고 관리 / Tomcat 서버에 포함

   => EJB 컨테이너 : EJB 객체를 생성하고 관리

   => 스프링 : 애플리케이션 운용에 필요한 객체를 생성, 객체간의 의존관계를 처리

 

 

1. DI(Dependency Injection) 의존성 주입 

: 객체 사이의 의존관계를 객체 자신이 아닌 외부의 조립기가 수행 

- 스프링 설정 차일이나 어노테이션을 이용하여 객체 간의 의존관계 설정 

   => instance(bean) 설정을 통해 객체 생성 (.xml문서)

 

2. Interface 사용

: 결합도와 의존성을 낮춤 

- 코드의 변경 없이 xml의 설정만으로 객체 변환이 가능 

 


Bean 

1. 의존관계설정 

- 생성자 설정

<bean id="이름" class="클래스 위치" >

    <constructor-arg value="생성자 파라미터"></constructor-arg> // 기본데이터 타입일경우 : String으로 처리됨 

     <constructor-arg ref="생성자 파라미터"></constructor-arg>   //객체를 전달받을 경우

</bean>

 

- 프로퍼티 설정 

<bean id="reference" class="dddddd"></bean>

<bean id="이름" class="클래스 위치" >

    <property name="이름" ref="reference"></property> //여기서의 이름은 해당 클래스 프라이빗 변수

</bean>

 

- xml p태그를 이용한 프로퍼티 설정 

xmlns:p설정해놓기

<bean id="reference" class="dddddd"></bean>

<bean id="이름" class="클래스 위치" p:이름-ref="reference">//여기서의 이름은 해당 클래스 프라이빗 변수

</bean>

 

- 임의 빈 객체 전달 가능 

<bean id="이름" class="클래스 위치" >

    <property name="이름" ref="reference"></property> //여기서의 이름은 해당 클래스 프라이빗 변수

</bean>

미리 정해지지 않은 객체를 임의로 만들어 사용하는 것, 재사용 불가능 

 

Scope 속성

- singleton : 스프링컨테이너에 의해 한 개의 빈 객체만 생성 ( 기본값 ) 

- protptype : 빈을 사용할 때마다 객체를 생성

- request : HTTP 요청마다 빈 객체를 생성 (WebApplicationContext에서만 적용)

- session : HTTP 세션마다 빈 객체를 생성(WebApplicationContext에서만 적용)

- global-session :  글로벌 HTTP 세션에 대해 빈 객체를 새성, 포틀릿을 지원하는 컨텍스트에 대해서만 적용 가능

 

라이프사이클

1. init-method : 커스텀 초기화 메서드

2. destroy-method : 커스텀 소멸 메서드

3. BeanNameAware :  인터페이스 

   => 빈 객체가 자기 자신의 이름을 알아야하는 경우에 사용 

 

 


스프링 사용방법

 1. 스프링 프레임워크를 이용한 새로운 프레임 워크 개발 

이클립스(인텔리J) 내부에 라이브러리를 설치 => 대기업 / 전자정부

 

 2. 스프링 프레임워크를 이용해서 프로젝트

- 이클립스 (인텔리J) 내에 스프링 플러그인 설치

- 스프링 전용 툴 사용(STS) => 기존 프로젝트 구조를 export  못함 

  => war파일로 export하고 import는 안됌

  => 라이브러리 관리 : 인터넷(Maven) => pom.xml 

 

STS 프로젝트 생성 시, 폴더 구조가 복잡!

 

스프링에서 제공되는 컨테이너

BeanFactory 

스프링 설정 파일에 등록된  <bean> 객체를 생성하고 관리하는 가장 기본적인 컨테이너 기능만 제공.

클라이언트 요청(lookup)에 의해서만 <bean>객체가 생성

 

ApplicationContext

<bean> 객체 관리 기능 이오ㅔ에 트랜젝션 관리, 메시지 기반의 다국어 처리 등 다양한 기능을 지원 

 

커플링 

하나의 클래스가 다른 클래스와 얼마나 많이 연결되어 있는지를 나타내는 표현

결합도가 높은 프로그램은 유지보수가 어렵다.

결합도 낮추기 : factory pattern

Comments