다시 웹, 백엔드로/스프링

자동 구성 (Auto Configuration) - 1

EnoughTT 2023. 8. 23. 12:49

자동 구성 (Auto Configuration)

자동 구성 예제

Member 를 만들고 Jdbc를 연결해 들어간 데이터가 맞는지 테스트 예정

 

Member 클래스 생성

Member

 

DbConfig 클래스 생성

DbConfig\

  • JdbcTemplate 을 사용해 회원 데이터를 DB에 보관하고 관리하는 기능
  • 각 기능들을 스프링 빈으로 직접 등록
  • 외부 DB 가 아닌 JVM 내부에서 동작하는 메모리 DB 사용 (H2)

 

Repository 생성

MemberRepository

 

Test 코드

TestCode

  • @Transactional 어노테이션을 사용해 트랜잭션 기능 적용
    •  TransactionManager 가 스프링 빈으로 등록되어 있어야 함
  • 테이블 생성, 회원 저장, 조회 후 검증

JdbcTemplate , DataSource , TransactionManager 모두 사용했지만 스프링 빈으로 계속 등록해줘야하는 불편함이 있음

 

 

자동 구성 확인

DbConfigTest

  • 해당 빈들은 DbConfig 설정을 통해 스프링 컨테이너에 등록했기 때문에, 값이 null이면 안됨
  • 테스트는 정상

 

DbConfig @Configuration 어노테이션 주석처리를 한 후 DbConfigTest 를 돌렸지만 테스트가 잘 실행됨

DbConfig

DbConfigTest: dataSource = HikariDataSource (null)
DbConfigTest: transactionManager = org.springframework.jdbc.support.JdbcTransactionManager@5e99e2cb DbConfigTest: jdbcTemplate = org.springframework.jdbc.core.JdbcTemplate@76ac68b0

스프링 빈으로 등록되지않았지만 스프링 부트가 자동으로 등록해줌

 

 

스프링 부트의 자동 구성

자동 구성 (Auto Configuration) 기능 제공, 빈들을 자동으로 등록해주는 기능

 

자동 구성 알아보기

JdbcTemplateAutoConfiguration

@AutoConfiguration : 자동 구성을 사용하려면 어노테이션을 등록 해야함

  • 자동구성도 내부에 @Configuration 어노테이션이 있어 빈을 등록하는 자바 설정파일로 사용할 수 있음
  • after = DataSourceAutoConfiguration.class
    • 실행 되는 순서 지정 가능
    • JdbcTemplate 은 DataSource 가 필요하기 때문에 DataSource 를 자동으로 등록해주는 DataSourceAutoConfiguration 다음에 실행하도록 설정 되어있음
  • @ConditionalOnClass({DataSource.class, JdbcTemplate.class})
    • if문과 유사한 기능 제공
    • 클래스가 있을 경우에만 설정, 없으면 설정들이 무효화되고 빈도 등록되지 않음
    • @ConditionalXxxx ➡️ 시리즈가 있음
    • JdbcTemplate 은 DataSource , JdbcTemplate 라는 클래스가 있어야 동작함
  • @Import 어노테이션은 자바 설정을 추가할 때 사용

 

JdbcTemplateConfiguration 확인

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 클래스 생성

Memory.class

 

사용 중인 메모리 계산 

MemoryFinder.class

 

화면상 볼 수 있는 Controller 생성

MemoryController.class

 

사용할 수 있게 빈 등록

MemoryConfig.class

 

localhost:8080/memory 확인

localhost:8080/memory

 

 

 

 

 

 

 

 

 

feat. 스프링부트 - 핵심 원리와 활용 (김영한)