스프링 공부/인프런 김영한 스프링 입문 노트정리

6-2. 순수 JDBC

모항 2022. 7. 30. 20:10

지금은 여러 가지 편리한 기술들이 개발되어서, 실무에서 순수 JDBC로 개발하는 일은 거의 없다고 한다.

하지만 공부삼아 맛을 볼 기회를 주시겠다고 한다.

몇 십 년 전 고대의 선배님들과 십여 년 전의 강사님은 순수 JDBC로 개발을 했는데, 매우 괴로웠다고 한다...

 

 

환경설정

build.gradle로 들어가서

jdbc 및 h2와 관련된 라이브러리를 추가한다.

 

이렇게 붙여넣으면 된다.

붙여넣어야 하는 내용은 강의자료에 있다.

 

 

요 오른쪽 위의 코끼리 새로고침 버튼을 눌러주면 프로젝트에 적용이 된다.

 

 

그 다음에는 resources 안에 있는 application.properties로 들어간다.

spring.datasource.url=에다가는

 

 

요놈을 복붙해준다.

 

 

그 밑에는 spring.datasource.driver-class-name을 지정해준다.

 

 

(+)그리고 강의에는 없지만 강의의 Q&A에서 알아낸 사실이 있다.

이렇게 셋째줄에 유저네임을 추가해줘야 한다.

여기 H2 데이터베이스의 사용자 이름으로 지정되어있는 "sa"를 적어야 한다.

 

이것은 스프링 2.4에서 일어난 패치 때문에 필요해졌다고 한다.

아래는 이 정보를 알게 된 Q&A 글의 링크이다.

 

Wrong user name or password ? - 인프런 | 질문 & 답변

안녕하세요. 테스트 코드 작성시 아래와 같은 코드 오류가 나서 문의 드립니다. user & password 는 지정한 부분이 없습니다. 확인해할 부분이 있을까요? org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wro..

www.inflearn.com

이걸 해주지 않으면 프로그램을 돌렸을 때 Wrong user name or password 오류가 발생한다.

나도 이 오류가 발생해서 찾아보다가 알게 되었다.

 

 

 

 

 

 

 

 

구현체 만들기

이제 MemoryMemberRepository를 대체할 새로운 리포지토리를 만든다.

 

MemberRepository Interface를 다시 한 번 구현한다.

 

 

이제 여기에 내용을 채워넣기만 하면 된다.

 

그런데 강사님이 계속 강조하셨듯이

순수 JDBC를 실무에서 쓰는 것은 자학행위이다...

이번 회차 강의는 말 그대로 맛만 보여주시려고 넣은 것이다.

그러므로 코드 내용은 그냥 복붙한다.

 

 

강의자료에 있는 매우 긴 코드를 이렇게 복붙해준다.

 

그 다음엔 강사님께서 코드를 쭉 보며 대략적인 설명을 해주신다.

 

그런데 듣다 보니...

학교 데이터베이스 수업에서 실습과제를 하며 힘들게 짰던 그 코드랑 똑같다...

어쩐지 뒤지게 힘들더라

데이터베이스 기초 수업이다 보니 편리한 방법들을 제쳐두고 무식한 정석을 따라 실습을 진행했던 것이었다.

필요한 일이었겠지만 뭔가 허탈하다.

 

 

 

 

 

 

 

 

 

SpringConfig에서 리포지토리 갈아끼우기

이제 객체지향프로그래밍의 다형성이 빛을 발하는 순간이다.

 

여기 이놈을

 

 

요렇게 바꾸어주면 되는데,

 

 

내부에 별도의 DI가 없었던 MemoryMemberRepository와 달리

 

JdbcMemberRepository는

이렇게 DataSource 객체가 생성자를 통해 DI되고 있다. JdbcMemberRepository 객체를 만드려면 DataSource 객체가 반드시 하나 준비되어있어야 한다는 의미다.

 

 

이렇게 SpringConfig의 생성자에다가 DataSource 객체를 DI해주고 (생성자에 @Autowired 잊지 말기!)

 

 

요놈을 여기에 넣어주면 된다.

 

모든 코드가 MemberRepository라는 인터페이스를 기준으로 짜여있기 때문에

 

JdbcMemberReposotory를 만들기

Config 코드에서 MemoryMemberRepository에 JdbcMemberRepository를 갈아끼워주기

 

이 두 가지 일만 해주면!

다른 코드는 하나도 건드리지 않은 채 구성요소를 교체할 수 있다!

 

이것이 객체지향프로그래밍의 강점이다.

 

 

 

 

 

 

 

 

실행해보기

All Tests를 돌려보니 문제 없이 pass한다.

이제 실제로 돌려볼 차례이다.

H2 데이터베이스를 연결해둔 채로 프로젝트를 실행해본다.

 

근데 이런 창이 뜬다. 음... 강의에서는 본 적 없는 것 같아서 불안하지만 일단 Run을 눌러본다.

 

 

그랬더니 이런 경고가 뜬다.

아무래도 아까 전 그 창에서 뭘 고쳤어야 하든지

아니면 내 코드의 Configuration에 뭔가 문제가 있나 보다.

 

일단 무시하고 Continue Anyway를 눌러봤다.

 

 

잘 되네?

 

 

접속도 잘 되고

 

 

다 잘 들어가진다.

 

 

이제 서버를 껐다 켜도 데이터가 안 날아가는지 시험해보겠다.

 

3명 정도 회원가입을 해준다.

일단 지금은 목록이 잘 뜨고

 

 

H2 서버는 그대로 연결해둔 채 스프링을 껐다 켜보겠다.

이건 실행할 때마다 뜬다. 무섭구만

 

 

아무튼 똑같이 무시하고 실행해준 뒤 사이트에 들어가서 새로고침을 하면

날아가지 않았다!

성공이다.

 

 

이걸로 H2 데이터베이스의 연결을 아예 끊었다가 다시 연결한 뒤에 시도해봐도 데이터는 잘 남아있다.

 

 

그런데 저 Edit 창과 경고창은 왜 뜨는 것이며

저것이 떴는데도 불구하고 오류 메시지 하나 없이 잘 동작하는 것은 왜일까...

좀 알아본 뒤에 모르겠으면 질문글을 올려야겠다.