티스토리 뷰
Spring boot를 처음 설정해놓으면 Application 클래스에 @SpringBootApplication이라는 어노테이션을 볼 수 있다. 그리고 그 안에는 여러가지 주석이 존재한다.
@SpringBootConfiguration과 @EnableAutoConfiguration 그리고 @ComponentScan이 존재한다.
@EnableAutoConfiguration
이 주석은 AutoConfiguration을 쓰겠다는 것을 의미한다. AutoConfiguration은 해석하면 자동 설정이라는 뜻으로
다음과 같은 Spring.factory에 저장되어 있는 정보들을 가지고 자동으로 스프링 빈으로 등록해준다. 그렇기 때문에 우린 별다른 설정 없이 스프링을 자유롭게 사용할 수 있다.
생각을 해보면 Spring boot 를 이용해서 프로젝트를 할 때 우린 설정에 신경 쓴 기억이 거의 없을 것이다. 있어봐야 properties 정도가 다일 것이다. 이것이 가능한 이유가 바로 AutoConfigure다.
위 사진처럼 MetaData에 접근하게 path가 존재하기 때문에 우리가 모르는 사이에 이미 빈에 등록되어 있는 상태다.
그렇다면 이런 경우에 대해서도 생각해보자.
만약 일부 설정 정보에 대해 변경이 필요하다면?
우리는 모든 것을 다 자동 설정 되어있는 상태라면 강제적으로 원시적인 로직을 사용할 수 밖에 없을 것이다. 하지만 걱정말자 스프링은 이미 이러한 문제에 대한 해결책을 내놓았다.
바로 수동으로 빈을 등록하는 것이다.
다음은 스프링 시큐리티에 내부에 존재하는 기본 로직이다. 보다 싶이 시큐리티에 대한 정확한 내용은 다루지 않겠지만 로그인 기본페이지 같은 페이지 조차 시큐리티에 통제에 막힌다면 좋지 못한 설계가 될 것이다. 그렇기 때문에 우리는 설정 정보를 바꿔야 할 필요가 있다.
Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/members/join").permitAll()
.antMatchers(HttpMethod.POST, "/members/login").permitAll()
.antMatchers(HttpMethod.GET, "/members").permitAll() // 페이징 테스트하기 위해 open
.anyRequest().authenticated();
http.formLogin().disable();
}
}
설명의 편의를 위해 일부 코드만 가져왔다. @Configuration 내부에는 Component 어노테이션이 존재해 빈으로 등록할 수 있는데 이 때 수동으로 등록한 빈이기 때문에 자동으로 설정된 정보 대신에 실행된다. (ConditionalOnMissBean 애노테이션을 달게되면 수동 Bean을 우선 시 사용하게 설정할 수 있다.)
그렇기 때문에 개발자 입맛에 맞게 자동 등록된 정보들을 커스텀할 수 가 있다.
@Bean 어노테이션 또한 수동으로 빈을 등록한 것이기 때문에 자동 등록된 빈이 아닌 수동 빈이 실행된다. 이 점도 유의하길 바란다.
Properties의 원리
데이터베이스 접속을 할 때를 예시로 들어보자 스프링 부트를 실행하면 기본적으로 /resources에 application.properties가 존재한다. 필자는 이걸 편하게 yml 파일로 사용하니 yml을 기준으로 설명하겠다.
spring:
h2:
console:
enabled: true
datasource:
url: jdbc:h2:tcp://localhost/~/test
driver-class-name: org.h2.Driver
username:
password:
다음은 h2 데이터베이스를 설정할 때 쓰는 기본 셋팅이다. 이러한 셋팅이 가능한 이유는 H2ConsoleProperties 클래스 덕분인데, 위에 @ConfigurationProperties라는 어노테이션이 존재한다.
이 어노테이션에 prefix와 필드에 이름을 합친 값을 property file에서 사용한다.
Reference.
'Spring Framwork & JPA' 카테고리의 다른 글
많은 외부 API를 호출해야 하는 상황에서 성능 개선 (with. webClient) (0) | 2023.01.02 |
---|---|
Pagination 전략에 대해서 (Page 인터페이스 커스텀하기) (0) | 2022.08.04 |
Redis 직렬화/역직렬화시 생기는 Issue (0) | 2022.05.23 |
[Thymleaf - 1부] 타임리프의 주요 문법 (0) | 2022.02.21 |
Spring Docs vs Swagger 2.0 (0) | 2022.02.07 |
- Total
- Today
- Yesterday
- MySQL
- 면접 준비
- Kotlin
- swarm
- 게시판
- 면접준비
- 프로젝트
- 개발자
- Redis
- 동시성
- 자바
- 코딩
- IT
- DB
- Spring
- 면접
- CS
- 백엔드
- DevOps
- JPA
- 코드
- thread
- java
- 취업
- docker
- 취업준비
- 취준
- 인터뷰
- 개발
- 프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |