[Spring 스터디] 04. 스프링 빈과 의존관계

주영진·2024년 11월 13일

Spring 스터디

목록 보기
4/5
post-thumbnail

의존성 주입(Dependency Injection): 컴포넌트 스캔

앞서 개발했던 회원관리 서비스 개발에서, 회원 Controller가 회원 service와 회원 repository를 이용할 수 있도록 의존관계를 설정하려고 한다. 여기서 의존관계란, 한 객체가 다른 객체를 필요로 하는 관계를 의미한다.

이와 같이 Controller 패키지 하위에 MemberController 클래스를 생성해주고, @Controller라는 어노테이션을 달게 되면, Spring boot가 자동으로 이 클래스를 스프링 컨테이너에 Bean으로 등록시킨다. 그리고 이 클래스는 MemberService를 사용해야 하기 때문에, 생성자를 생성해주고, @Autowired라는 어노테이션으로 '의존성 주입' 즉, 자동으로 주입할 객체를 해당 클래스에 빈 객체로 주입시켜줌으로써 직접 객체를 생성할 필요가 없게 만들어준다.

스프링 빈으로 등록하는 방식은 크게 두 가지가 존재한다.

  • Component 스캔과 자동 의존관계 설정
  • 자바 코드로 직접 스프링 빈 등록

앞서 살펴본 어노테이션을 통해 의존성 주입하는 방식이, 컴포넌트 스캔 방식이다. 여기서는 @Component 어노테이션을 활용하는데, @Controller, @Service, @Repository 모두 이 컴포넌트 어노테이션을 포함하고 있어 자동으로 스프링 빈으로 등록이 가능하다.

자바 코드로 직접 스프링 빈 등록

자바 코드로 직접 스프링 빈을 등록하기 위해서는, SpringConfig라는 클래스를 만들어 @Configuration이라는 어노테이션을 달아 이 클래스가 설정 파일처럼 작동하며, 하나 이상의 빈 메서드들을 포함할 것이라는 것을 표시해준다. 그리고 이 클래스 안에 @Bean 어노테이션을 활용해 각각의 의존관계들을 설정해주면 된다. Controller는 예외적으로 그대로 Controller 클래스에서 컨트롤러 어노테이션으로 의존성 주입을 실행한다.

DI 주입에는 생성자 주입, Setter 주입, 필드 주입 크게 세 가지 방식이 있는데 이 의존관계가 실행 중에 동적으로 변하는 경우는 거의 없으므로, 생성자 주입 방식이 가장 권장된다.

실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 활용하고, 상황에 따라 구현 클래스를 변경해야 할 시에 설정을 통해 스프링 빈을 등록한다.

profile
'개발사(社)' (주)영진

0개의 댓글