: 여러 어노테이션 @Autowired
, @Service
, @Repository
, @Configuration
등 의 내부를 보면 @Component
가 있어서 컨테이너가 해당 어노테이션을 보고 스프링 빈으로 인식하고 등록한다.
@Bean
이거나 (@Configruration + @Bean)
@Configuration
에 @Component
가 있다.
(+) @Bean
과 @Component
차이는 ??
DataSource
는 Tomcat JDBC 모듈에서 제공하는 것으로, DB Connection을 획득 할 때마다 사용하는 객체이다. 커넥션을 통해서 얻은 정보를 통해 DataSource를 생성하고 스프링 빈으로 만들어 두기 때문에 DI를 받을 수 있다.SpringConfig
설정 변경만으로 구현 클래스를 변경 할 수 있다. => DI를 통한 다형성 활용 (MemoryMemberRepository -> JDBCMemberRepository)<환경설정>
application.properties 설정
build.gradle 설정
: 매 기능 마다 connection
을 얻고 해당 기능이 사용할 쿼리문을 PreparedStatement
를 설정해주고 ResultSet
을 받아오고, 각 기능의 예외 처리까지 모두 일일이 해줘야 하는 불편함이 있다.
@SpringBootTest (통합 테스트)
@Transactional
테스트 코드를 진행 후 해당 테스트 케이스들이 DB에 반영되지 않도록 해준다. DB에 데이터가 남지 않으므로 추후에 테스트에 영향을 끼치지 않는다.
>> @Transactional 추가
단위 테스트 : 자바 코드로
통합 테스트 : db까지 전부다 테스트
-> 단위 테스트가 대부분 더 좋은 테스트가 될 확률이 높다. (컨테이너 까지 올려서 테스트 하는건 가장 바람직하다고 할 수 없다.)