[Spring] 스프링 입문 스프링부트 (3)

gnoesnooj·2021년 11월 20일
0

스프링이 관리하는 객체 ?

1. @Component 를 통해서 알 수 있거나

: 여러 어노테이션 @Autowired , @Service , @Repository, @Configuration 등 의 내부를 보면 @Component 가 있어서 컨테이너가 해당 어노테이션을 보고 스프링 빈으로 인식하고 등록한다.

2. @Bean 이거나 (@Configruration + @Bean)

@Configuration@Component 가 있다.
(+) @Bean@Component 차이는 ??


(+) 스프링의 다형성 실현

  • DataSource는 Tomcat JDBC 모듈에서 제공하는 것으로, DB Connection을 획득 할 때마다 사용하는 객체이다. 커넥션을 통해서 얻은 정보를 통해 DataSource를 생성하고 스프링 빈으로 만들어 두기 때문에 DI를 받을 수 있다.
  • 스프링은 기존 코드를 건들이지 않고 SpringConfig 설정 변경만으로 구현 클래스를 변경 할 수 있다. => DI를 통한 다형성 활용 (MemoryMemberRepository -> JDBCMemberRepository)

Spring DB 접근 기술

1 . 순수 JDBC 사용

<환경설정>

  • application.properties 설정

  • build.gradle 설정

    : 매 기능 마다 connection을 얻고 해당 기능이 사용할 쿼리문을 PreparedStatement를 설정해주고 ResultSet을 받아오고, 각 기능의 예외 처리까지 모두 일일이 해줘야 하는 불편함이 있다.


  • given / when/ then 에 맞춰서 개발하는 것이 보편적이다.
    (주어진 상황) (언제) (그러면 어떤게 실행될 지)

  • @SpringBootTest (통합 테스트)

  • @Transactional
    테스트 코드를 진행 후 해당 테스트 케이스들이 DB에 반영되지 않도록 해준다. DB에 데이터가 남지 않으므로 추후에 테스트에 영향을 끼치지 않는다.
    >> @Transactional 추가

  • 단위 테스트 : 자바 코드로

  • 통합 테스트 : db까지 전부다 테스트
    -> 단위 테스트가 대부분 더 좋은 테스트가 될 확률이 높다. (컨테이너 까지 올려서 테스트 하는건 가장 바람직하다고 할 수 없다.)


Test Code 의 중요성

  • 물론 원래 로직을 짜는 것이 가장 중요하지만, 개발자가 알아채지 못하는 실수를 잡아주거나, 예기치 못한 data들로 인한 에러들을 test code 를 통해서 잡는 것이 중요하다.
profile
누구나 믿을 수 있는 개발자가 되자 !

0개의 댓글