토비의 스프링 1장을 보면서 기억해야 할 핵심 용어, 개인적으로 궁금했던 점들을 찾아 정리해 보았다.
(지극히 개인 학습용 자료라서 나만 알아볼 수 있게, 내가 기록하고 싶은 부분만 정리했다)
용어 정리
- 제어의 역전: 모든 종류의 작업을 사용하는 쪽에서 제어하는 구조. 오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않는다. 또 자신이 어떻게 만들어지고 어디서 사용되는지 알 수 없다. ex) 디자인 패턴, 프레임워크
- 빈(Bean): 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트. 스프링 컨테이너가 생성과 관계설정, 사용 등을 제어해 주는 제어의 역전이 적용된 오브젝트
- 스프링 컨테이너(Spring Container) : 스프링 빈의 생명주기를 관리하고 IoC를 이용해 애플리케이션 컴포넌트를 관리하는 것. ex) Bean Factory, Application Context
스프링 컨테이너
- 종류 : Bean Factory, Application Context
Bean Factory | Application Context |
팩토리 디자인 패턴을 구현한 것. 스프링 컨테이너의 최상위 인터페이스 | Bean Factory를 상속하고 있다. 따라서, 빈을 관리하고 검색하는 기능을 Bean Factory가 제공하고, 그 외의 부가 기능을 제공한다. |
Lazy Loading. 해당 빈을 호출할 때 인스턴스 생성 | Pre Loading. 빈에 대한 설정 등을 스프링 컨테이너에서 로드할 때 인스턴스를 생성 |
IoC의 기본 기능에 초점 |
사용자가 직접 팩토리 클래스를 만들어도 되는데 왜 Application Context로 빈을 만들어야 하는가?
개발의 공수가 줄어든다.
스프링에서 빈 생성주기를 관리해 주니까 팩토리 클래스가 필요 없어지고 개발자의 번거로움이 줄어든다.
Application Context는 기본적으로 싱글톤을 사용한다. Application Context를 사용할 경우 "동일성"을 보장받을 수 있다.
이를테면 팩토리 클래스 사용 시 new 인스턴스를 여러 개 생성하면 각각 다른 주소를 가진 오브젝트가 생성되지만 Application Context로 인스턴스 생성 시 동일한 오브젝트가 생성된다.
자바 싱글톤 vs 스프링 싱글톤
책을 읽으면서 헷갈렸던 것이 이 부분이다.
멀티 스레드 환경에서 지양해야 할 "싱글톤" 개념과 스프링이 제공하는 "싱글톤"의 개념이 상충되었다.
둘의 차이는 생명주기이다.
자바 싱글톤: scope이 클래스 로더
스프링 싱글톤: Application Context
클래스 로더가 기준이라는 것은 톰캣이 war 파일을 만들게 되면, war 파일 하나당 클래스 로더가 1:1로 배치되기 때문에 다른 war 파일은 참조가 불가능하게 된다. 따라서 자바의 싱글톤을 사용하게 되면 같은 객체를 사용하더라도 server 별로 인스턴스가 따로 놀게 되고, 스프링 싱글톤은 같은 객체 사용 시 동일한 인스턴스를 제공해 준다.
1장 후기 : 패턴, 객체지향에 대해 관심을 가지고 있었다면 전체적으로 쉽게 이해할 수 있는 내용이었다.
'Study > Spring' 카테고리의 다른 글
[토비의 스프링] 4장. 예외 (0) | 2024.02.24 |
---|---|
[토비의 스프링] 3장. 템플릿 (1) | 2024.02.24 |
[토비의 스프링] 2장. 테스트 (0) | 2024.02.24 |
댓글