강한결합 (coupling):
비즈니스 로직과 실행기가 강하게 결합됨
(GameRunner이 특정 game인 MarioGame과 강하게 결합, 그렇기에 로직을 수정하려면 품이 많이 듦)
그렇기에 비즈니스 요구사항, 프레임워크, 코드 모두 변하기 때문에 최소한의 코드만 바꾸어 기능을 변경할 수 있는
느슨한 결합 (Loose coupling) 으로 해야함.
(interface 구현)
ex. (Games interface) <= 게임 실행기
(Mario game, SuperContraGame) <= 게임 칩.
spring container == spring context == IOC container
클래스를 입력으로 받아 러닝 시스템을 만드는 것.
IOC container의 인스턴스가 spring container
: spring Bean 및 수명주기 관리하는 것
스프링 어플리케이션의 기본 동작
자바 클래스 만들고 => 이를 구성 configuration으로 선언하여 => IOC 컨테이너를 설정한다.
즉, configuation은 스프링 컨테이너를 구성하고 => 런타임 시에 이 컨테이너(spring container)가 Bean을 생성하고 관리한다.
@Component
클래스에 추가하면 해당 클래스의 인스턴스는 스프링 프레임워크가 관리함
@Dependency: MarioGame은 GameRunner의 Dependency이다. (Runner에서 이용하는 class를 주입해주는 것)
@ComponentScan: 스프링 프레임워크가 컴포넌트가 어디에 있는지 인식할 수 있게 하는 annotation
의존성 주입:
어플 실행하면 -> 컴포넌트 스캔 -> 이에 대한 dependency가 무엇이 있는지 확인 -> dependency 와이어링
==
bean 확인, dependency 확인 -> wiring
Spring bean: 스프링 프레임워크가 관리하는 모든 객체
IoC container: bean의 생명주기와 dependency의 생명 주기를 관리하는 컨테이너
(applicationContext(복잡한 기능), BeanFactory(단순한 기능, 현재는 거의 사용 안한다고 한다))
AutoWiring: Spring bean에 대한 Dependency를 wiring하는 과정 전체
(spring bean에 대해 필요한 의존성을 검색 (dependency 주입이 있다면 autoWiring))
@Component | @Bean | |
where | 자바 클래스 모두에 사용 가능 | Spring Configuration class안의 method에 일반적으로 사용 |
ease of use | annotation만 추가하면 됨 | 코드 전체가 필요함. |
Autowiring | field, setter constructor injection 가능 | method call or method parameters |
who create? | Spring Framework | custom business logic |
추천 | 어플리케이션에서 컴포넌트 클래스를 만들고 이에 대한 Bean을(인스턴스) 만들 때 | custom business logic 제 3자 라이브러리에서 bean을(인스턴스) 만들때 |
레이어 계층
웹 레이어
비즈니스 레이어
데이터 레이어
각 레이어는 아래쪽에 있는 레이어에 의존적이다. (비즈니스 레이어의 클래스는 데이터 레이어와 통신한다.)
그래서 데이터 레이어의 클래스는 비즈니스 레이어 클래스의 의존성이라고 한다.
Spring Bean Scopes (유효 범위)
- Singleton : 하나의 IoC container에 하나의 instance 만 있다. (Spring IoC container 에 대해 동일한 인스턴스(빈) 이용하고 싶으면 (default))// Java SingleTon(JVM ) == Spring Singleton (IoC container)
- Prototype : 하나의 IoC container에 여러 객체 인스턴스가 있을 수 있다.
- Request: 하나의 HTTP 요청에 대해서 하나의 instance만 가짐
- Session: 유저 HTTP 세션 당 하나의 객체 인스턴스만 가짐 (한 사용자의 여러 요청은 동일 세션에 속할 수 있음)
- Application: 전체 웹 애플리케이션 당 1개의 객체 인스턴스 가짐
- Websocket: 하나의 웹 소켓 인스턴스 당 하나의 객체 인스턴스 가짐
대부분은 이해했는데 완벽히 이해하지는 못했다. 좀 더 공부하던가 해야겠다.
'spring' 카테고리의 다른 글
Spring Framework, 객체지향, SOLID (0) | 2024.05.20 |
---|---|
AOP (0) | 2024.05.19 |
Spring boot의 컨텐츠 rendering 동작 과정, 컴포넌트 스캔, 자동의존관계 설정 (0) | 2024.05.15 |
Spring security - Authorization (2) | 2024.03.08 |
Spring Security 기본 (0) | 2024.03.03 |