deepred.log
로그인
deepred.log
로그인
직관적으로 간추린 토비의스프링 1장.4 - 싱글턴 레지스트리와 빈 스코프
디퐁
·
2022년 12월 25일
팔로우
0
책 요약
0
직관적으로 간추린 토비의스프링
목록 보기
4/5
1장. 오브젝트와 의존관계
일러두기
토비의스프링3.1 Vol.1을 읽고 정리한 글입니다.
책을 이미 읽으신 분이 빠르게 훑으며 복습하는 용도로 보시면 좋을 것 같습니다.
임의로 핵심만 간추렸습니다. 책과 설명하는 순서가 바뀌거나 장/절 목차 이름이 바뀌거나 아예 빠진 내용이 많습니다.
1 싱글턴 레지스트리
DaoFactory에 @Configuration을 붙임으로써 달라지는 것
붙이기 전의 DaoFactory는 항상 새로운 객체를 반환하지만
getBean()으로 얻는 객체는 여러 번 호출해도 '동일'한 객체를 반환해준다
스프링 빈 팩토리는 기본적으로 싱글턴 스코프로 빈을 만들어주기 때문이다.
싱글턴 레지스트리로서의 애플리케이션 컨텍스트
싱글턴 패턴
어떤 클래스에 대한 인스턴스가 하나만 존재하도록 강제하는 것
생성자를 private으로 제한해 여러 개 생성되지 못하도록 막고
public static 필드나 public static 메서드를 통해 단 하나만 생성된 인스턴스에 접근하도록 한다
싱글턴 레지스트리
싱글턴 패턴으로 만들어지는 객체를 저장하고 관리하는 것
애플리케이션 컨텍스트는 IoC 컨테이너이면서 싱글턴 레지스트리이기도 하다
왜 스프링은 싱글턴으로 빈을 만들까?
주로 적용되는 대상이 자바 엔터프라이즈 기술을 사용하는
서버환경
이기 때문이다.
높은 성능이 요구되는 환경
요청이 올 때마다 오브젝트를 새로 만든다면 서버가 감당하기 힘들다.
싱글턴 패턴의 한계
private 생성자를 갖고 있기 때문에 상속할 수 없다
테스트하기 어렵다
직접 생성할 수 없어서 Mock 오브젝트를 만들 수 없다
싱글턴 오브젝트가 이용할 오브젝트를 테스트용 오브젝트로 대체하기 힘들다
서버환경에서는 싱글턴이 하나만 만들어지는 것을 보장하지 못한다
클래스 로더 구성법에 따라 두 개 이상 만들어질 수 있음
전역 상태를 만들 수 있기 때문에 바람직하지 못하다
서비스 오브젝트
엔터프라이즈 분야에서 일찍부터 사용해왔던 개념
서블릿이 대표적인 서비스 오브젝트 중 하나다
서블릿 클래스당 하나의 오브젝트만 만들어두고
사용자의 요청을 담당하는 여러 스레드에서
하나만 만들어진 오브젝트를 공유해 동시에 사용한다
싱글턴 레지스트리
스프링은 싱글턴이 서비스 오브젝트 방식으로 사용되는 것을 적극 지지한다
대신 스프링이 직접 싱글턴 형태의 오브젝트를 만들고 관리한다
싱글턴 스코프의 빈으로 등록하면 된다.
장점
평범한 자바 클래스를 싱글턴으로 활용할 수 있게 해준다
public 생성자를 두어도 된다!
Mock 오브젝트로 간단히 대체할 수 있어 테스트가 간편하다.
싱글턴 빈 사용 시 주의 사항
멀티스레드 환경이라면 여러 스레드가 동시에 접근/사용할 수 있다
따라서 기본적으로 무상태 방식으로 만들어져야 한다
예외로, 싱글턴 빈을 저장하려는 용도라면 인스턴스 변수를 사용해도 좋다
스프링이 한 번 초기화하고 이후 수정되지 않기 때문에 읽기전용이나 다름없다
스프링 빈의 스코프
빈의 스코프
빈이 생성되고, 존재하고, 적용되는 범위를 뜻한다
기본 스코프: 싱글턴
싱글턴 스코프
하나의 오브젝트만 만들어져서
스프링 컨테이너가 존재하는 동안 계속 유지된다
싱글턴 외의 스코프들
프로토타입 스코프
빈을 요청할 때마다 새로 생성한다
요청 스코프
새로운 HTTP 요청이 생길때마다 생성한다
세션 스코프
웹의 세션과 유사한 스코프
2 스프링 빈의 스코프
빈의 스코프
빈이 생성되고, 존재하고, 적용되는 범위
기본 스코프
싱글턴
싱글턴 스코프
하나의 오브젝트만 만들어져서
스프링 컨테이너가 존재하는 동안 계속 유지된다
싱글턴 외의 스코프
프로토타입 스코프
컨테이너에 빈을 요청할 때마다 생성
요청 스코프
새로운 HTTP 요청이 생길때마다 생성
세션 스코프
웹의 세션과 유사
디퐁
Backend 취준생
팔로우
이전 포스트
직관적으로 간추린 토비의스프링 1장.3 - IoC(제어의 역전)
다음 포스트
직관적으로 간추린 토비의스프링 1장.5 끝 - XML을 이용한 설정
0개의 댓글
댓글 작성