자동 구성 (Auto Configuration)
자동 구성 예제
Member 를 만들고 Jdbc를 연결해 들어간 데이터가 맞는지 테스트 예정
Member 클래스 생성
DbConfig 클래스 생성
- JdbcTemplate 을 사용해 회원 데이터를 DB에 보관하고 관리하는 기능
- 각 기능들을 스프링 빈으로 직접 등록
- 외부 DB 가 아닌 JVM 내부에서 동작하는 메모리 DB 사용 (H2)
Repository 생성
Test 코드
- @Transactional 어노테이션을 사용해 트랜잭션 기능 적용
- TransactionManager 가 스프링 빈으로 등록되어 있어야 함
- 테이블 생성, 회원 저장, 조회 후 검증
JdbcTemplate , DataSource , TransactionManager 모두 사용했지만 스프링 빈으로 계속 등록해줘야하는 불편함이 있음
자동 구성 확인
- 해당 빈들은 DbConfig 설정을 통해 스프링 컨테이너에 등록했기 때문에, 값이 null이면 안됨
- 테스트는 정상
DbConfig @Configuration 어노테이션 주석처리를 한 후 DbConfigTest 를 돌렸지만 테스트가 잘 실행됨
DbConfigTest: dataSource = HikariDataSource (null)
DbConfigTest: transactionManager = org.springframework.jdbc.support.JdbcTransactionManager@5e99e2cb DbConfigTest: jdbcTemplate = org.springframework.jdbc.core.JdbcTemplate@76ac68b0
스프링 빈으로 등록되지않았지만 스프링 부트가 자동으로 등록해줌
스프링 부트의 자동 구성
자동 구성 (Auto Configuration) 기능 제공, 빈들을 자동으로 등록해주는 기능
자동 구성 알아보기
@AutoConfiguration : 자동 구성을 사용하려면 어노테이션을 등록 해야함
- 자동구성도 내부에 @Configuration 어노테이션이 있어 빈을 등록하는 자바 설정파일로 사용할 수 있음
- after = DataSourceAutoConfiguration.class
- 실행 되는 순서 지정 가능
- JdbcTemplate 은 DataSource 가 필요하기 때문에 DataSource 를 자동으로 등록해주는 DataSourceAutoConfiguration 다음에 실행하도록 설정 되어있음
- @ConditionalOnClass({DataSource.class, JdbcTemplate.class})
- if문과 유사한 기능 제공
- 클래스가 있을 경우에만 설정, 없으면 설정들이 무효화되고 빈도 등록되지 않음
- @ConditionalXxxx ➡️ 시리즈가 있음
- JdbcTemplate 은 DataSource , JdbcTemplate 라는 클래스가 있어야 동작함
- @Import 어노테이션은 자바 설정을 추가할 때 사용
JdbcTemplateConfiguration 확인
- @Configuration : 자바 설정 파일로 사용
- @ConditionalOnMissingBean(JdbcOperations.class)
- JdbcOperations 빈이 없을 때 동작
- JdbcTemplate 이 빈이 등록 되어 있지 않은 경우에만 동작
- 개발자가 직접 빈을 등록하면 개발자가 등록한 빈을 사용, 자동 구성은 동작 하지않음
자동 등록 설정
JdbcTemplateAutoConfiguration : JdbcTemplate
DataSourceAutoConfiguration : DataSource
DataSourceTransactionManagerAutoConfiguration : TransactionManager
스프링 부트가 제공하는 자동 구성(AutoConfiguration)
https://docs.spring.io/spring-boot/docs/current/reference/html/auto-configuration-classes.html
스프링 부트는 spring-boot-autoconfigure 에 자동 구성을 모아두고, 기본적으로 사용된다.
스프링 부트가 제공하는 자동구성을 이해하려면 @Conditional, @AutoConfiguration 어노테이션들을 이해해야함
자동 구성 직접 만들기
memory 라는 패키지 생성 후 Memory 클래스 생성
사용 중인 메모리 계산
화면상 볼 수 있는 Controller 생성
사용할 수 있게 빈 등록
localhost:8080/memory 확인
feat. 스프링부트 - 핵심 원리와 활용 (김영한)
'다시 웹, 백엔드로 > 스프링' 카테고리의 다른 글
순수 라이브러리 만들기 (0) | 2023.08.30 |
---|---|
자동 구성 (Auto Configuration) - 2 (0) | 2023.08.24 |
스프링 부트 스타터와 라이브러리 관리 (0) | 2023.08.18 |
스프링 부트와 내장 톰캣 - 2 (0) | 2023.08.17 |
스프링 부트와 내장 톰캣 - 1 (0) | 2023.08.17 |