Bean을 수동으로 등록하는 방법

금은체리·2023년 11월 15일
1

Spring

목록 보기
8/49

Bean 수동 등록이란?

  • @Component를 사용하면 @ComponentScan에 의해 자동으로 스캔되어 해당 클래스를 Bean으로 등록 해줌
  • 일반적으로 @Component를 사용하여 Bean을 자동으로 등록하는 것이 좋음
    • 프로젝트의 규모가 커질 수록 등록할 Bean들이 많아지기 때문에 자동등록을 사용하면 편리함
    • 비즈니스 로직과 관련된 클래스들은 그 수가 많기 때문에 @Controller, @Service와 같은 애너테이션들을 사용해서 Bean으로 등록하고 관리하면 개발 생산성에 유리

그럼 Bean 수동 등록은 언제 사용?

  • 기술적인 문제나 공통적인 관심사를 처리할 때 사용하는 객체들을 수동으로 등록하는 것이 좋음
    • 공통 로그처리와 같은 비즈니스 로직을 지원하기 위한 부가적이고 공통적인 기능들을 기술 지원 Bean이라 부르고 수동 등록함
    • 비즈니스 로직 Bean 보다는 그 수가 적기 때문에 수동으로 등록하기 부담스럽지 않음
    • 또한 수동등록된 Bean에서 문제가 발생했을 때 해당 위치를 파악하기 쉽다는 장점 존재

Bean을 수동으로 등록하는 방법

@Configuration
public class PasswordConfig {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
  • Bean으로 등록하고자 하는 객체를 반환하는 메서드를 선언하고 @Bean을 설정
  • Bean을 등록하는 메서드가 속한 해당 클래스에 @Configuration을 설정
    • @Configuration : Bean 등록을 위한 애너테이션
  • Spring 서버가 뜰 때 Spring Ioc 컨테이너에 'Bean'으로 저장됨
  • class Bean으로 등록할 때에 passwordConfig로 저장됨
    • 대문자가 아닌 소문자
    • 메서드도 마찬가지로 passwordEncoder로 등록됨
  • Bcrypt : 비밀번호를 암호화 해주는 Hash함수
    • 아주 강력한 Hash 메커니즘을 가지고 있어서
    • 많이 사용됨
// 1. @Bean 설정된 메서드 호출
PasswordEncoder passwordEncoder = passwordConfig.passwordEncoder();

// 2. Spring IoC 컨테이너에 빈 (passwordEncoder) 저장
// passwordEncoder -> Spring IoC 컨테이너
  • 'Bean' 이름 : @Bean이 설정된 메서드명
    • public PasswordEncoder passwordEncoder(){...} ➡️ passwordEncoder

  • @Autowirde : passwordEncoder을 Bean으로 등록했기 때문에 주입 받아와서 사용해야함

  • passwordEncoder.encode 메서드

    • 여기에 우리가 암호화 할 문자열 삽입
  • String inputPassword = "Robbie";

    • 로그인 했다고 가정하고, 패스워드를 "Robbie"로 입력했다고 치면
      • Robbie's password(DB에 저장된 password) != Robbie(현재 입력이 된 password=평문)
        • 평문 : 암호화 되지 않은 것
    • 일치하는지 확인하는 작업이 로그인 구현할 때 필요
  • passwordEncoder.matches 메서드

    • 비교하는 메서드
    • 매개변수 : (입력 받아온 평문(문자열), 암호화가 이루어진 encodePassword)

Bean 등록해보기

  • 비밀번호를 암호화할 때 사용하는 PasswordEncoder의 구현체 BCryptPasswordEncoder를 Bean으로 수동등록

  • 등록한 passwordEncoder 'Bean'을 사용하여 문자열을 암호화


config 패키지 안에 수동으로 등록한 빈을 넣음

profile
전 체리 알러지가 있어요!

0개의 댓글