Camp/Spring

[TIL] Spring DI 정리 - @Bean, @Service, @Repository가 뭐 하는가

taeri7204 2026. 7. 8. 20:37

DI는 Dependency Injection의 줄임말이다. 쉽게 말해서 필요한 객체를 자동으로 주입받는 거다.

세 가지 어노테이션의 역할:

@Bean
직접 설정 클래스에서 등록하는 객체다. 메서드 위에 붙여서 "이 객체를 Spring Container에 올려"라고 지시한다.
언제 쓰는가: 라이브러리의 객체나 복잡한 설정이 필요한 객체를 등록할 때.

@Service
비즈니스 로직을 담당하는 객체다. 계산이나 처리 같은 핵심 기능을 여기에 넣는다.

@Repository
데이터베이스와 대화하는 객체다. DB에서 데이터 가져오기, 저장하기 같은 작업을 한다.

실제 흐름:

Controller -> @Autowired -> Service -> Repository -> Database

1. 컨트롤러가 비즈니스 로직 필요 -> Service 주입받음
2. Service가 DB 접근 필요 -> Repository 주입받음
3. Repository가 DB와 통신

이렇게 하면 뭐가 좋은가:

각 계층이 자기 일만 하기 때문에 코드가 안섞인다. 
테스트가 쉬워진다. 모의 객체(Mock)로 바꾸기 편하다.
객체 관리가 편해진다. Spring이 생성하고 없앨 때까지 살펴본다.
코드 변경할 때 영향범위가 줄어든다. 한 곳만 수정하면 된다.

Spring Container라는 거:

Spring이 사용하는 객체들을 담아두는 상자라고 생각하면 된다.
@Bean, @Service, @Repository 어노테이션 붙은 클래스들이 여기에 등록된다.
필요할 때 @Autowired로 꺼내 쓴다.