티스토리 뷰

정리용/SpringBoot

[Spring] 3. Spring Context

hee-ya07 2025. 2. 19. 15:05

0. 제어역전(IoC, Inversion of Control)

:: 객체의 생성과 의존성 관리를 개발자가 아닌 spring container와 같은 외부 시스템이 하는 디자인 패턴

  • IoC 구현 5가지 방법
    1. Template Pattern :: 추상 클래스 부분 구현
    2. Delegate :: 위임 (실행 결과를 받는것까지 모두 위임, 자기 자신을 보낸다)
    3. Event :: 이벤트 발행 (Publisher & Subscriber)
    4. Service Locator/Lookup :: Service Locator 에서 직접 가져와쓰기 개발자가 직접 Bean 주입하는것
    5. DI(Dependancy Injection) 의존성 주입 :: (IoC) Container 가 대신 Bean 수집, 관리, 주입해주는것

1. ApplicationContext (Spring Container)

:: IoC 컨테이너

:: Spring Bean 생성, 관리 및 의존성 주입을 담당

:: Spring의 AOP 기능을 통해 트랜잭션과 보안 등의 처리를 관리

  • 종류
    1. ClassPathXmlApplicationContext :: XML 설정을 통해 ApplicationContext 생성
    2. AnnotationConfigApplicationContext :: 자바 클래스를 통해 빈을 설정 -> 해당 파일을 사용하는 컨텍스트
    3. GenericWebApplicationContext :: 웹 애플리케이션에서 사용되는 컨텍스트

2. Spring Bean

:: Spring IoC 컨테이너(ApplicationContext)에 의해 관리되는 객체
    -> Bean == 객체

:: 개발자가 직접 객체 생성 X -> Spring이 대신 객체를 생성 및 주입하는 단위

:: Spring에서 관리하는 Bean은 Singleton으로 관리

더보기

1. 왜 싱글톤을 사용할까?

  • 대규모 엔터프라이즈 서버 환경은 서버 하나당 최대로 초당 수십, 수백 번씩 브라우저나 여러 시스템으로부터 요청을 받아 처리할 수 있는 높은 성능이 요구되는 환경

  • Spring MVC 구조에 따라 하나의 요청에 대한 응답을 만들기까지, 데이터 액세스 로직, 서비스 로직 등의 다양한 기능을 담당하는 객체들이 모두 참여하는 계층형 구조

    => 요청이 올 때마다 각 로직을 담당하는 객체를 새로 만들어서 사용한다면 서버에 엄청난 부하
    => 때문에 싱글톤을 통해 객체 생성 및 관리

 

2. 왜 자바가 아닌 Spring의 싱글톤으로 관리될까?

  • Java 의 싱글턴 사용의 문제
    1. Private 생성자로 인해 (1) 생성자 호출 불가로 인한 상속 불가 (2) 불편한 테스트
    2. 클래스 로더에 싱글톤 여부 의존 (예를 들어, 1 어플리케이션 : N 클래스 로더 시 싱글턴 불가능)

  • 이러한 이유로 Spring 자체 싱글톤 레지스트리를 통해 객체 생성 및 관리
    • IoC방식 중 DI

2.1 Bean 등록

:: Spring Container 내 싱글톤 객체로 이미 등록되어 있음 -> ApplicationContext가 이미 만듦

  1. @ComponentScan + @Component 를 통한 등록 (Package 지정 가능)
  2. @Controller, @Service, @Repository 등을 통한 등록
  3. @Configuration + @Bean

2025.02.19 - [정리용/SpringBoot] - [Spring] 3. SpringContext - Bean 등록

 

[Spring] 3. SpringContext - Bean 등록

0. Bean 등록0.1 자동 등록 방식:: Spring Container 내 싱글톤 객체로 이미 등록되어 있음(ApplicationContext가 이미 만듦):: @ComponentScan 을 이용하여 애너테이션이 붙은 클래스를 자동으로 스캔 및 등록 1. @

hee-ya07.tistory.com

 


2.2 Bean 사용

:: Spring Container 내 등록되어 있는 싱글톤 객체를 가져와 주입 및 사용

    - Servlet WebApplicationContext : @Controller 등
    - Root WebApplicationContext : @Service, @Repository 등

  • 종류
    1. 구체 클래스를 지정하여 Bean 객체 사용 ← 구체 클래스로 Bean 등록
    2. 부모 클래스를 지정하여 Bean 객체 사용 ← 부모 클래스의 자식 클래스로 Bean 등록
    3. 인터페이스를 지정하여 Bean 객체 사용 ← 인터페이스의 구체 클래스로 Bean 등록
    4. 다수 자식 클래스 혹은 다수 인터페이스의 구체 클래스를 Collection 자료구조로 Bean 사용

2.3 Bean 주입 - DI

2025.02.19 - [정리용/SpringBoot] - [Spring] 3. SpringContext - Bean 주입

 

[Spring] 3. SpringContext - Bean 주입

0. Bean 간의 관계 설정:: 두 Bean 간의 관계를 설정하여 다른 객체 책임을 위임 가능:: has-A 관계. Bean 간의 관계 설정:: 두 Bean 간의 관계를 설정하여 다른 객체 책임을 위임 가능 :: has-A 관계(포함 관

hee-ya07.tistory.com

 

 

 


참고

ASAC 7기 수업자료

 

스프링 교과서 - 예스24

스프링 기초 이론부터 스프링 부트, 웹 애플리케이션 구현, 보안 강화, 리팩터링, 테스트까지개발 전반의 내용을 책 한 권에 모두 담았다!이 책의 최종 목표는 스프링을 다양한 예제를 천천히 따

www.yes24.com

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
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
글 보관함