20강(순수 jdbc)
build.gradle에 저 두 줄을 추가해준다.
자바는 기본적으로 db와 붙으려면 jdbc 드라이버가 필요함.
db와 붙을 때 데이터베이스가 제공하는 클라이언트가 필요한데 여기서는 h2database를 쓴다.
그리고 db에 붙으려면 접속정보를 넣어야 하는데, 옛날에는 개발자가 다 써야 했지만 이젠 스프링부트가 대신 해준다.
H2 db에 접근할거니까 h2 드라이버를 넣어준다.
임포트가 안돼서 빨갛게 뜨는데 build.gradle로 가서
이 코끼리를 눌러주면 해결된다. 시간이 좀 걸린다.
드라이버 세팅이 정상적으로 완료됐다.
이렇게 하면 데이터 베이스에 접근하기 위한 준비는 끝난 것이다.
이미 만들어 뒀던 인터페이스의 구현체를 만들어보자
이제 여기서 하나씩 구현을 하면 된다.
Db에 붙으려면 데이터 소스가 필요하다.
이제 이 데이터 소스를 주입 받아야 하는데 스프링이 주입해준다. 스프링 부트가 데이터 소스를 만들어 놓고, getConnection()으로 데이터베이스 커넥션을 얻을 수 있다.
이제 세이브 하려면 쿼리를 짜야함
이런식으로 쭈우욱 써주면 db에 쿼리가 날아간다.
이후 이런저런 매우 복잡한 코드를 쳐서 구현을 하는데.. 그냥 이런게 있구나 정도로 알고 넘어가라고 한다.
그래서 이 코드를 실행하면 돌아가는가? 안 돌아간다. 이제부터 기가 막힌걸 보여준다고 함.
지금까지 우리는 메모리멤버리포지토리를 쓰고 있었다.
얘를 스프링 빈으로 등록하고 있는데, 얘를 방금 만들었던
JdbcMemberRepository로 바꿔준다. 이제 데이터소스를 넣어줘야 하는데
스프링이 데이터소스를 제공해준다. 이렇게 해두면 스프링부트가 데이터 소스를 만들어서 얘를 주입해준다.
그걸 여기에 주입 해주면 완료.
여기서 중요한 것은 다른 어떠한 코드도 변경하지 않고 오직 jdbcmemberrepository 라는 클래스를 만들고 인터페이스를 확장한 것 이외에 스프링이 제공하는 configuration만 손댔는데..
오.. db에 저장했던 녀석이 있다. 한 방에 잘 될련지 강사님이 겁나 걱정하심..
자 이제 여기서 회원을 하나 추가 해주자. 이름은 api
그런데 이런 젠장 유저 이름이나 패스워드가 틀렸덴다. 화가남1111
찾아보니
어플리케이션 프로퍼티에 요녀석을 추가 해줬어야 했다. 강사님은 그냥 했는데 어케 한거지..
자 이제 우리 회원님 api를 추가해보자
????? Id가 뭐 저딴식으로 뜬다. 화가 나서 캡쳐 하는걸 까먹음.. 화가남2222
얘는 뭐가 문제인고 하니.. H2 데이터베이스를 무조건 1.4.200으로 깔아야 한다고 함. 데이터 베이스 삭제하고 20강에서 했던 거 다시 하고 삽질을 열심히 했다.
아아… 드디어 잘 된다..
스프링의 DI를 사용하면 기존 코드는 손대지 않고, 설정만으로 구현 클래스를 변경할 수 있기 때문이다.
멤버서비스는 멤버리포지토리를 의존하고 있고, 멤버 리포지토리는 구현체로 메모리 멤버 리포지토리와, jdbc 멤버 리포지토리가 있다.
이제 스프링 컨테이너에서 메모리 버전의 멤버 리포지토리를 스프링 빈으로 등록을 했다면 이번엔 jdbc 버전의 멤버 리포지토리를 딱 등록을 했다. 다른건 손댄게 없음. 구현체만 얘로 바껴서 돌아가는 것.
개방-폐쇄 원칙(OCP)
확장에는 열려있고, 수정, 변경에는 닫혀있다.
이게 바로 개방-폐쇄의 원칙이 지켜진 것이다.
데이터를 DB에 저장하므로 스프링 서버를 다시 실행해도 데이터가 안전하게 저장된다.