[Spring] Spring Singleton Pattern과 주요 어노테이션 정리 ✅

2025. 1. 20. 01:33·Spring
728x90

1. Spring과 Singleton Pattern??

필자가 Spring 프레임워크를 공부하면서 가장 먼저 접했던 개념은 Singleton Pattern이었던 것 같다.

학기중에 OODP(객체지향 설계패턴)수업에서 배우기도 했던 싱글톤 패턴이기도 해서 이해하기 쉬웠던 것 같다.

 

Singleton Pattern이 뭘까?

간단하게, 싱글톤 패턴은 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다.

Spring에서는 Bean이라고 부르는 객체들이 기본적으로 Singleton으로 관리된다.

 

예를 들어, 다음과 같은 서비스 클래스가 있다고 가정해보겠다.

@Service
public class UserService {
    private static int instanceCount = 0;
    
    public UserService() {
        instanceCount++;
        System.out.println("UserService 인스턴스 생성 횟수: " + instanceCount);
    }
}

 

이 클래스는 Spring이 관리하는 Bean으로 등록되며, 애플리케이션이 실행되는 동안 단 하나의 인스턴스만 생성된다다.

콘솔에는 "UserService 인스턴스 생성 횟수: 1"만 출력될 것이다!


2. Component Scanning

그렇다면 Spring은 어떻게 우리가 작성한 클래스들을 찾아서 Bean으로 등록할까?

바로 Component Scanning이라는 메커니즘을 통해서이다.

Component Scanning은 특정 패키지 이하의 모든 클래스들을 검사하면서 Spring Bean으로 등록할 대상을 찾는 과정이다.

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

 

위와 같이 @SpringBootApplication 어노테이션이 선언된 클래스의 패키지를 시작으로 하위 패키지들을 모두 검사하면서 Spring Bean으로 등록할 대상을 찾는다고 보면된다.


3. 주요 Spring 어노테이션을 살펴보자!!

@Component

가장 기본이 되는 어노테이션으로, Spring Bean으로 등록하고자 하는 클래스에 선언한다.

@Component
public class EmailService {
    public void sendEmail(String to, String subject) {
        // 이메일 전송 로직
    }
}

 

이 클래스는 Spring이 자동으로 감지하여 Bean으로 등록하고 관리한다.


@Controller

웹 요청을 처리하는 컨트롤러 클래스임을 나타낸다.

@Controller
public class UserController {
    @GetMapping("/users")
    public String getUsers(Model model) {
        return "users";
    }
}

 

이 클래스는 웹 요청을 처리하며, 주로 View를 반환하는 역할을 담당한다.


@Service

비즈니스 로직을 처리하는 서비스 계층의 클래스임을 나타낸다.

@Service
public class ProductService {
    public void processOrder(Order order) {
        // 주문 처리 로직
    }
}

 

이 클래스는 실제 비즈니스 로직이 구현되는 곳으로, 여러 Repository를 조합하여 작업을 처리한다.


@Repository

데이터 접근 계층의 클래스임을 나타낸다.

@Repository
public class UserRepository {
    public User findById(Long id) {
        // 데이터베이스 접근 로직
        return user;
    }
}

 

이 클래스는 데이터베이스 작업을 담당하며, JPA나 MyBatis 등의 실제 데이터 접근 기술을 사용한다.


@Autowired

의존성 주입을 위해 사용되는 어노테이션이다.

@Service
public class OrderService {
    @Autowired
    private ProductRepository productRepository;
    
    public void createOrder() {
        // 상품 조회 및 주문 생성 로직
    }
}

 

이 코드에서는 ProductRepository가 자동으로 주입되어 OrderService에서 사용할 수 있게된다.


@Configuration과 @Bean

@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
        return dataSource;
    }
}

이 설정 클래스는 데이터베이스 연결을 위한 DataSource Bean을 생성하고 등록한다.

728x90

'Spring' 카테고리의 다른 글

[Spring] JdbcTemplate으로 데이터베이스 접근하기!  (0) 2025.01.20
[Spring] 🔎 DataSource와 트랜잭션 개념정리 🔎  (2) 2025.01.20
[Spring] Controller의 Return Type과 Parameter 가이드 👍  (1) 2025.01.20
[Spring] POJO, IoC, DI, AOP, Filter 핵심 개념 완벽 정리 🧹  (2) 2025.01.19
[Spring] ⚡️ Spring MVC와 Spring Boot 개념 정리 ⚡️  (0) 2025.01.19
'Spring' 카테고리의 다른 글
  • [Spring] 🔎 DataSource와 트랜잭션 개념정리 🔎
  • [Spring] Controller의 Return Type과 Parameter 가이드 👍
  • [Spring] POJO, IoC, DI, AOP, Filter 핵심 개념 완벽 정리 🧹
  • [Spring] ⚡️ Spring MVC와 Spring Boot 개념 정리 ⚡️
프론트 개발자 김현중
프론트 개발자 김현중
👋반갑습니다 저는 나눔을 실천하는 개발자 꿈나무 김현중입니다⌨️🚀
  • 프론트 개발자 김현중
    삥구의 개발블로그
    프론트 개발자 김현중
  • 전체
    오늘
    어제
    • 분류 전체보기 (92) N
      • 알고리즘 (5) N
      • Swift (3)
      • 컴퓨터네트워크 (1)
      • React (38)
      • Docker (1)
      • SQL (8)
      • Database (2)
      • 배포 (1)
      • Spring (9)
      • TypeScript (5)
      • Next.js (12)
      • Git (1)
      • 회고 (1)
      • 컴퓨터그래픽스 (2)
      • Python (1)
      • Brew (1)
      • LangChain (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    appRouter
    springboot
    Next.js
    데이터베이스
    database
    알고리즘
    nextjs
    웹개발
    Backend
    ReactHooks
    java
    typescript
    react
    백준
    frontend
    Spring
    MySQL
    프론트엔드
    코딩테스트
    javascript
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.1
프론트 개발자 김현중
[Spring] Spring Singleton Pattern과 주요 어노테이션 정리 ✅
상단으로

티스토리툴바