Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Tags more
Archives
Today
Total
관리 메뉴

요리사에서 IT개발자로

스파르타 부트캠프 Spring Master 3강 Bean을 수동등록 하는 방법 본문

Spring

스파르타 부트캠프 Spring Master 3강 Bean을 수동등록 하는 방법

H.S-Backend 2024. 5. 24. 14:56

초기 설정

build.gradle

// Security
implementation 'org.springframework.boot:spring-boot-starter-security'

secuirity 기능제한

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;

@SpringBootApplication(exclude = SecurityAutoConfiguration.class) // Spring Security 인증 기능 제외
public class SpringAuthApplication {

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

}

Bean 수동등록?

 

@Component를 사용하면

@ComponentScan 에 의해 자동으로 스캔되어 해당 클래스를 Bean으로 등록해준다.

 

프로젝트 규모가 커질수록 등록할 Bean들이 많아지기에

자동등록을 선호한다.

그래서 @Controller와 @Service 와 같은 에너테이션들을 사용해서
Bean으로 등록관리하면 알아보기 쉽기때문에
개발 생산성에 유리하다.

Bean 자동등록이 있다면 수동등록은?

 

기술적인 문제 or 공통 관심사를 처리할 때 사용하는 객체들은

수동으로 등록하는것이 좋다.

 

공통 로그처리와 같은 비즈니스 로직을 지원하기 위해

부가적이고 공통적인 기능들을

기술 지원 Bean이라 부르고 수동등록한다.

 

비즈니스 로직 Bean보다 그수가 적어서
수동으로 등록하기 부담스럽지 않다.

수동등록된 Bean에서 문제가 발생했을 시
해당 위치 파악이 용이하다.

Bean 수동 등록하는 방법

@Configuration
public class PasswordConfig {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

Bean으로 등록하고자 하는 객체를 반환하는 메서드 @Bean을 설정

Bean을 등록하는 메서드가 속한 해당 클래스 @Configuration을 설정

Spring 서버가 사용될 때 Spring Ioc 컨테이너에 Bean으로 저장된다.

// 1. @Bean 설정된 메서드 호출
PasswordEncoder passwordEncoder = passwordConfig.passwordEncoder();

// 2. Spring IoC 컨테이너에 빈 (passwordEncoder) 저장
// passwordEncoder -> Spring IoC 컨테이너

Bean이름 : @Bean이 설정된 메서드명

public PasswordEncoder passwordEnder() {...} => passwordEncoder

소문자를 체크


Bean 등록하기 

@Configuration
public class PasswordConfig {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
    
}

암호화하기

@SpringBootTest
public class PasswordEncoderTest {

    @Autowired
    PasswordEncoder passwordEncoder;

    @Test
    @DisplayName("수동 등록한 passwordEncoder를 주입 받아와 문자열 암호화")
    void test1() {
        String password = "Robbie's password";

        // 암호화
        String encodePassword = passwordEncoder.encode(password);
        System.out.println("encodePassword = " + encodePassword);

        String inputPassword = "Robbie";

        // 복호화를 통해 암호화된 비밀번호와 비교
        boolean matches = passwordEncoder.matches(inputPassword, encodePassword);
        System.out.println("matches = " + matches); // 암호화할 때 사용된 값과 다른 문자열과 비교했기 때문에 false
    }
}

 

 

 

반응형