YJ의 새벽
Spring. 본문
- 스프링의 두가지 특성 !!
-- DI ( Dependency Injection , 의존성 주입 )
-- 객체지향 프로그래밍에서
'다른객체를 사용한다' --> '다른 객체의 기능에 의존한다'
-- 외객체의 의존주입을 관리해주는것이 ' 컨테이너 ' 이다.
-- 이를 개발자가 직접 제어않고 컨테이너가 한다는점에서
' 제어의 역전 ' 이라고 한다 .
정적 컨텐츠 -- 서버에서 파일을 웹브라우저에 그냥 내려주는것.
MVC와 템플릿 엔진 -- JSP 같은것을 말하며, HTML을 서버에서 프로그래밍을 하여 동적으로 바꾸어주는것.
Model, View, Controller
API -- 데이터 구조 포맷으로 클라이언트에게 데이터를 전달하는것. ( 뷰, 리엑트 ).
서버끼리 통신할 때 .
- 스프링 컨테이너가 생성되는 과정.
// 스프링컨테이너 생성
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext ( AppConfig.class );
--ApplicationContext (인터페이스) 를 스프링 컨테이너라 한다.
-- 스프링 컨테이너를 생성할때 , 구성정보 ( ex. AppConfig.class) 를 넣어주어야한다.
-- 파라미너로 넘어온 설정 클래스정보를 사용하여 스프링 빈 등록.
-- Bean 이름은 메서드이름을 사용,
-- @Bean(name="빈이름 부여 가능") ;
-- 스프링 컨테이너는 설정 정보를 참고하여 의존관계를 주입함.
- BeanFactory와 ApplicationContext ( 스프링 컨테이너 )
-- BeanFactory
- 스프링 컨테이너의 최상위 인터페이스.
- 스프링 빈을 관리하고 조회하는 역할.
- getBean() 을 제공.
-- ApplicationContext
- BeanFactory 의 기능을 모두 상속받아 사용.
-- MessageSource
- 한국에서 들어오면 한국어로 , 영어권에서 들어오면 영어로 출력 .
-- EnviromentCapable ( 환경변수 )
- 로컬 , 개발 , 운영 등 구분해서 처리 .
-- ApplicationEventPublisher ( 애플리케이션 이벤트 )
- 이벤트를 발행하고 구독하는 모델을 편리하게 지원
-- ResourceLoader ( 편리한 리소스 조회 )
- 파일, 클래스패스 , 외부 등에서 리소스를 편리하게 조회
--- 스프링 컨테이너는 다양한 형식의 설정 정보를 받을수있게 , 유연하게 설계되어있다.
ex ) 자바코드 , XML 등등
- 스프링 빈 설정 메타정보 : BeanDefinition
-- 역할과 구현을 개념적으로 나눈것 !!
- 싱글톤 패턴
-- 클래스의 인스턴스가 1개만 생성되는것을 보장하는 디자인 패턴.
-- 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야한다 .
( private 생성자를 사용, 외부에서 new 키워드를 사용하지못하도록 해야함 )
-- 스프링컨테이너는 기본적으로 객체를 싱글톤으로 관리해준다 .
- 싱글톤 컨테이너
-- 스프링 컨테이너는 싱글턴 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리.
-- 싱글톤 객체를 생성하고 관리하는 기능을 싱글톤 레지스트리 라고한다.
-- 싱글톤 패턴의 모든 단점을 해결하면서 객체를 싱글톤으로 유지할수 있다.
*** 싱글톤 방식의 주의점
-- 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤방식은 여러 클라이언트가
하나의 같은 객체인스턴스를 공유하기때문에
싱글톤 객체는 상태를 유지하게 설계하면 안된다!!
-- 무상태로 설계해야한다
- 특정 클라이언트에 의존적인 필드가 있으면 안된다.
- 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다.
- 가급적 읽기만 가능해야한다.
- 필드 대신에 자바에서 공유되지 않는, 지역변수 파라미터 ThreadLocal 등을 사용해야한다.
-- 스프링 빈의 필드에 공유 값을 설정하면 큰 장애가 발생할수 있다 !!
'Spring > Spring' 카테고리의 다른 글
Spring 3 ( 파라미터 가져오기 , 화면전환 ) (0) | 2023.04.21 |
---|---|
Spring 2 ( 개발환경 ( STS )) (0) | 2023.04.21 |
Spring 1 ( 개요 ) (0) | 2023.04.21 |
SpringBoot 개념정리? (0) | 2023.03.09 |
Spring ( 객체지향 설계 5가지 원칙 ( (SOLID)) (0) | 2023.02.26 |