김영한 강사님 강의를 들으며 정리한 내용입니다. 공부를 하며 수정해 나갈 예정입니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8
Database sql을 이용해 애플리케이션 서버와 DB를 연결할 것이다. 그때 필요한 것이 Jdbc라는 기술이다. 스프링이 JdbcTemplate기술을 제공한다. 애플리케이션에서 DB로 sql을 편라히게 날릴 수 있다. 더 혁신적인 방법은 sqp조차도 개발자들이 직접 짜는게 아니라 sql을 아예 JPA라는 기술이 DB에 등록, 수정, 쿼리 등을 다 날려준다. JPA라는 기술을 쓰면 바로 DB에 쿼리 엄ㅅ이 저장할 수 있다.
build.gradle 파일에 Jdbc.h2데이터베이스 관련 라이브러리를 추가하자. 자바는 기본적으로 DB랑 붙으려면 Jdbc드라이버가 꼭 있어야 한다. 이것을 가지고 서로 연동하는 것이다. 데이터베이스가 제공하는 client가 필요하다. 이 client를 h2.database.h2라이브러리에 넣자. DB에 붙으려면 접속정보 등을 넣어야 한다. 예전엔 개발자가 설정을 다 했는데 요즘은 spring boot가 다 한다.경로만 넣으면 된다.
객체지향이 좋은 이유는 다형성을 구현하기 때문이다. 스프링은 이것을 편리하게 되도록 스프링container가 지원해준다. Dependance injection 덕분에 이것이 굉장이 편리하다. 과거의 개발은 memberservice코드의 수정을 해야 했다. 또한 여러개가 있으면 다 고쳐야 했지만 스프링은 기존의 코드는 하나도 손대지 않고 오직 애플리케이션을 설정하는 고드=assembly코드만 손대면 실제 애플리케이션에 관련된 코드는 하나도 손댈 것이 없기때문에 편리하다.
그림과 같이 memberservice는 memberRepository를 의존하고 있다. memberRepository는 구현체로 Member memberRepository와 JdbcMemberRepository로 되어있다.
스프링container에서 설정이 바뀐 점은 member버전의 memberRepository를 빼고 Jdbc버전의 memberRepository를 등록했다. 나머지는 손댈 것이 하나도 없다. -> 개방폐쇄원칙이 지켜졌다. 개방폐쇄원칙은 기능을 완전히 변경해도애플리케이션 전체를 바꿀 필요가 없다.
스프링DI를 사용하면 기존 코드를 전혀 손대지 않고 설정만으로 구현 클래스를 변경할 수 있다.
이전엔 순수한 Java코드를 테스트 했지만 이것은 DB커넥션 정보도 spring boot가 다 가지고 있기 때문에 Test를 스프링과 엮어야 한다.
@SpringBootTest, @Transactional
Test코드는 쉽게 만들어도 가능하다. @Autowired를 써서 편리하게 만들 수 있다.
스프링JdbcTemplate는 myBatis와 비슷한 라이브러리 이다. Jdbc API에서의 반복 코드를 제거해준다. 하지만 sql은 직접 작성해야 한다. JdbcTemplate는 실무에서도 많이 쓴다.