Spring Framework

Sewon·2021년 7월 21일
0

for Spring

목록 보기
1/3
post-thumbnail

필요할 때 필요한 부분을 하나씩 익혀서 사용하면 됨 -> Spring Core는 반드시 알아야 하고, 나머지 모듈들은 필요한 부분 찾아서 공부하면 된다!

Spring Framework

원하는 부분만 가져다 사용할 수 있도록 모듈화가 잘 되어 있음
IoC/DI 컨테이너임
완전한 기능을 갖춘 MVC Framework를 제공함
AOP 지원함
구조

-> spring-orm : JPA,JDO 및 Hibernate를 포함한 ORM API를 위한 통합 레이어 제공함
-> spring-web : 멀티 파트 파일 업로드, 서블릿 리스너 등 웹 지향 통합 기능 제공함. HTTP클라이언트와 Spring의 원격 지원을 위한 웹 관련 부분을 제공함
-> spring-webmvc : Web-Servlet 모듈이라고도 불리며, Spring MVC 및 REST 웹 서비스 구현을 포함함

Spring IoC/DI 컨테이너

컨테이너

컨테이너는 인스턴스의 생명주기(객체의 생성, 소멸 등)를 관리하며, 생성된 인스턴스에게 추가적인 기능을 제공
예를 들어, Servlet을 실행해주는 WAS는 Servlet 컨테이너를 가지고 있다고 말함.
-> WAS는 웹 브라우저로부터 서블릿 URL에 해당하는 요청을 받으면, 서블릿을 메모리에 올린 후 실행함. 즉 개발자가 서블릿 클래스를 작성했지만, 실제로 메모리에 올리고 실행하는 것은 WAS가 가지고 있는 서블릿 컨테이너임!
-> 서블릿 컨테이너는 동일한 서블릿에 해당하는 요청을 받으면, 또 메모리에 올리지 않고 기존에 메모리에 올라간 서블릿을 실행하여 해당 결과를 웹 브라우저에게 전달함

IOC(Inversion of Control)

컨테이너가 개발자가 작성한 코드 대신 인스턴스 제어권을 가지고 있어 IoC(제어의 역전)라고 함
위에서 설명한 예시처럼, 서블릿 클래스는 개발자가 만들지만, 해당 서블릿의 메소드를 호출하는 것은 WAS임
-> 개발자가 만든 어떤 클래스나 메소드를 다른 프로그램이 대신 실행해주는 것을 IoC라고 함

  • 간단한 코드를 통해 보는 IoC
//클래스와 인터페이스의 관계 
//class STV implements TV
//class LTV implements TV

//상황 : 필요한 TV 객체 생성해야 하는 경우 

//ㄱ. IoC 적용 X
TV stv = new STV();
TV ltv = new LTV();
//인스턴스 생성 코드를 직접 호출해서 사용해야함

//ㄴ. IoC 적용 O
TV tv = tvFactory.getTV();
//TvFactory라는 TV 생성 공장을 만들어 TvFactory가 TV 객체를 생성해줌

-> IoC를 적용하면, 전달 값 or Annotation을 통해 지정한 값으로 다른 프로그램이 객체를 대신 생성해주는 역할을 수행함
-> 위의 코드에서의 TvFactory 역할을 수행하는 프로그램 생성을 Spring에서 해주는 것임. BeanFactory나 ApplicationContext가 TvFactory 역할 수행함.

DI(Dependency Injection)

위에서 공장이 객체를 생성해주었다면, 생성한 객체를 사용해야하는데, 이때 해당 객체를 받아와야 함

객체를 가져오는 방법이 DI임(=의존성을 주입받는다)

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

  • DI가 적용되지 않은 예
class 엔진{

}

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

-> 개발자가 직접 인스턴스 생성함

  • Spring에서 DI가 적용된 예
@Component
class 엔진{

}

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

DI
-> IoC 컨테이너가 위의 코드의 v 참조변수에 엔진 인스턴스를 생성하여 할당해줌

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

BeanFactory : IoC/DI에 대한 기본 기능 가짐
ApplicationContext : BeanFactory의 모든 기능을 포함하며, 추가적으로 트랜잭션처리, AOP에 대한 처리 가능함. 또한 BeanPostProcessor, BeanFactoryPostProcessor를 자동으로 등록하고, 국제화 처리, 어플리케이션 이벤트 처리 가능함.
BeanPostProcessor : 컨테이너의 기본 로직을 오버라이딩하여 인스턴스화 & 의존성 처리 로직을 개발자가 원하는 대로 구현 가능
BeanFactoryPostProcessor : 설정된 메타데이터 커스터마이징 가능

참고) https://www.boostcourse.org/web326/lecture/58970/?isDesc=false
profile
for develop ☁️

0개의 댓글