Spring Framework (2)

박준서·2024년 10월 15일
11

Web

목록 보기
5/16
post-thumbnail

Spring Application의 구성 요소

  • POJO + 메타 정보 + 스프링 프레임워크 (IoC Container) 로 구성된다.
    - POJO : 비즈니스 로직을 가짐.
    - 메타 정보 : 애플리케이션 구성 정보를 가짐.
    - 위 둘을 IoC Container인 Spring Framework가 조합해서 애플리케이션을 구성한다.

POJO

  • Plain Old Java Object의 약자로 말 그대로 이전부터 사용하던 평범한 자바 객체를 의미한다.
    • 객체를 만들 때 특별히 무언가를 상속받아서 확장 할 필요가 없다는 것을 강조하기 위한 말이다.
    • 즉, POJO를 사용하면 특정 기술이나 스펙에 종속되지 않는다.
  • 스프링과 같은 프레임워크는 반제품 상태라 비즈니스 로직이 빠져있는데, 일반적으로 비즈니스 로직을 제공하는 클래스를 작성할 때 POJO로 작성해주면 된다. 이런 POJO를 Bean이라고 부른다.
  • 스프링 프레임워크에서는 이러한 Bean을 관리하므로 스프링을 빈의 Container라고 부른다.
    • Container ? 생성이나 소멸 이런 정반을 관리하는 것
  • Bean으로 만드는 대상은 스코프에 따라 여러 종류가 있을 수 있는데 일반적으로는 다음과 같다.
    • 상태를 갖지 않고 (Stateless), 비즈니스 로직으로만 구성되어 재사용이 가능한 객체들
      • DAO나 Service layer
      • Singleton으로 구성한다. Spring Framework는 별도의 설정 없이 이러한 Bean들을 Singleton으로 관리해준다.
      • 상태가 없다는 것 ? Writable한 멤버 변수가 없이 기능 위주인 것이다.

메타정보

  • 스프링 애플리케이션 구성을 위한 다양한 정보로 구성
  • POJO를 어떻게 Bean으로 구성할 것인가에 대한 정보. 즉, Bean 들의 생성이나 관계 설정도 메타 정보의 한 부분이다.
  • 메타 정보를 작성하는 방법에는 3가지 방법이 있다.
    • xml config
    • annotation
    • java config

xml 기반 메타정보 설정

<!-- BookService 빈 정의 -->
<bean id="bookRepo" class="com.example.service.BookRepoImpl"> <bean/>

<!-- BookServiceImpl 타입의 빈 bookServieImpl을 만들고 bookRepo 주입하겠다. -->
<bean id="bookService" class="com.example.service.BookServiceImpl">
	<property name="bookRepo" ref="bookRepo" />
</bean>1

java 기반

@Configuration
public class BookConfig {

	@Bean
	public BookRepo bookRepo() {
		return new BookRepoImpl();
	}
	
	@Bean
	public BookService bookService(BookRepo brepo) {
		return new BookRepoImpl(brepo);
	}
}
  • 최근에는 java config + annotation 방식이 사용되고 있다.

스프링 프레임워크 (=IoC Container)

  • 스프링 프레임 워크는 POJO와 메타 정보를 이용하는 반제품 형태의 애플리케이션이다.
  • 스프링 프레임워크의 역할
    • Bean Container로서 Bean의 life cycle을 관리
    • Bean 객체의 생성, Bean 객체 간 관계 설정(set), Bean 객체 관리(Singleton) 등을 관장한다.
  • 이전에는 개발자가 주도해서 Singleton을 구성하는 등을 했는데 이제는 스프링이 제공해주는 대로 코드를 작성해야 한다. 예를들어 스프링이 싱글톤을 짜면 개발자가 거기에 맞춰서 기본 생성자를 갖춘다던지의 식으로 맞춰야 한다.
  • 이런것을 제어의 역전 (IoC)라고 한다.
 ApplicationContext context = new AnnotationConfigApplicationContext(PracticeConfig.class);
  • 스프링의 IoC 컨테이너를 가리키는 인터페이스 (스프링 컨테이너는 빈을 관리하는 컨테이너)
  • GenericXmlApplicationContext : XML 파일을 이용하여 스프링 컨테이너를 초기화하는 클래스

참고 - XML에서 component scan을 통해 어노테이션이 있는 Bean 등록 및 주입

<!-- Q7. 컴포넌트 스캔을 통해 어노테이션이 있는 Bean 등록 및 주입 -->
	<context:component-scan base-package="com.ssafy.ws" />
profile
Back-End Developer

0개의 댓글

관련 채용 정보