| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 백엔드
- SQL
- web
- 코드테스트
- jpa
- 프론트엔드
- 코드 테스트
- 스프링부트
- jsp
- node.js
- oracle
- 오라클
- JavaScript
- BACK-END
- 프로그래머스
- 디자인 패턴
- java
- Next.js
- 정리
- 프런트엔드
- spring
- 쿼리
- 데이터베이스
- MySQL
- 자바스크립트
- 스프링
- 미니정리
- 서버
- 자바
- 알고리즘
- Today
- Total
참치코더의 꿈 메모장
스프링 / 싱글톤 패턴 및 @Configulation, @Bean 선언 이유 본문
싱글톤 컨테이너
- 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 그러나 조금 불편할 뿐이지 앱이나 데몬 프로그램, 응용소프트웨어도 충분히 개발할 수 있다.
- 웹 애플리케이션은 여러 고객이 동시에 요청을 한다 (매초 수천 ~ 수만건 이상)
- 스프링 없는 순수한 DI 컨테이너(순수한 자바 코드)로 사용자가 요청을 할 때 마다 객체를 새로 생성한다.
- 사용자가 접속하는 트래픽이 수백만건이면 수백만건의 자바 객체 생성이 발생한다.
(과도한 JVM 서버 메모리 낭비 발생)
-> 추후 하드웨어적으로 서버에서도 메모리 과다 사용 및 서버 메모리 용량 부족 문제 발생, 심하면 서버 다운
- 해결하는 방법은 해당 객체가 메모리에 1개만 생성되고, 공유하도록 설계하면 된다.
-> 싱글톤 패턴 사용으로 문제 해결
싱글톤 패턴
- 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다.
- 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다.
- private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다.
생성 방법
1. static 영역에 객체 instance를 하나 생성해 둔다.
2. public으로 선언된 getInstance( )메서드를 선언해서 해당 메서드로만 외부에서 호출해서 사용한다.
3. 비어있는 private 생성자를 선언해서 외부에서 새로운 객체를 생성하지 못하도록 막아놓는다.
- 이렇게 싱글톤 패턴을 적용하면 고객의 요청이 올 때 마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를
공유해서 효율적으로 사용할 수 있다.
스프링 @Constructor 등록 컨테이너 사용하는 이유
- 스프링 컨테이너를 사용하면 싱글톤 패턴의 문제점을 내부에서 해결해주고, 싱글톤으로 코드를 관리해준다.
- 따라서 싱글톤 패턴을 위한 지저분한 코드가 들어가지 않아도 된다.
- DIP, OCP, TEST, private 생성자로부터 자유롭게 싱글톤을 사용할 수 있다.
*** 스프링 컨테이너 덕분에 고객의 요청이 올 때 마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유
해서 효율적으로 재사용할 수 있다.

'Spring' 카테고리의 다른 글
| Spring / DI 옵션 처리, 생성자 주입 선택해야 하는 이유 정리 (0) | 2025.08.06 |
|---|---|
| Spring / 다양한 DI(의존 관계 주입) 방법 (1) | 2025.08.05 |
| Spring / 컴포넌트 스캔 정리 및 중요한 점(스프링 프레임워크 관점) (3) | 2025.08.04 |
| spring / 컴포넌트 스캔과 의존관계 자동 주입 (1) | 2025.08.01 |
| 스프링 내 @Configulation 및 @Bean 사용시 주의점 (1) | 2025.07.30 |