스프링 DB 접근 기술 - 순수 JDBC, 다형성 짱!
어떤 식으로 DB를 다루어왔었는지의 역사를 알아보자
순수 JDBC
환경설정
- build.gradle 파일에 jdbc, h2데이터베이스 관련 라이브러리 추가
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
자바는, DB에 접근하려면 JDBC 드라이버가 꼭 있어야 한다.
DB에 붙으려면 접속정보 같은 것을 넣어야 하는데, 요즘에는 스프링 부트가 다 해줌. 경로만 넣으면 됨
src/main/resources/application.properties
이렇게까지하면, DB에 접근하기 위한 준비는 다 되었다. 이제 서버를 다시 시작하면, 스프링이 DB와 연결하기 위한 작업을 다~ 해준다!
이제부터 JDBC API를 가지고 개발을 시작해보겠다!!!
근데 어디다 개발...?
기존에, 구현체로 메모리기반 리포지토리(MemoryMemberRepository
)를 만들었었던것 기억하는가?
인터페이스도 만들었었는데, 이제는 새로 JdbccMemberRepository
구현체로 갈아끼워줄 것이다 드디어!!!
repository/JdbcMemberRepository
public class JdbcMemberRepository implements MemberRepository{
@Override
public Member save(Member member) {
return null;
}
@Override
public Optional<Member> findById(Long id) {
return Optional.empty();
}
@Override
public Optional<Member> findByName(String name) {
return Optional.empty();
}
@Override
public List<Member> findAll() {
return null;
}
}
하나하나 구현해나가면 됨~
Jdbc 리포지토리 구현
이렇게 JDBC API로 직접 코딩하는 것은 20년 전 이야기. 따라서 고대 개발자들이 이렇게 고생하고 살았구나 생각하고, 정신건강을 위해 참고만 하고 넘어가자.
우선, DB에 붙으려면 DataSource 라는 것이 필요하다.
repository/JdbcMemberRepository
public classs JdbcMemberRepository implements MemberRepository {
private final DataSource dataSource;
// dataSource 를 스프링으로부터 주입받아야 한다.
public JdbcMemberRepository(DataSource dataSource){
this.dataSource = dataSource;
// dataSource.getConnection();
}
... 이하의 코드는 고대의 코드라 여기서는 생략했다.
모든 코드를 보려면, github 으로!
}
DataSource는 데이터베이스 커넥션을 획득할 때 사용하는 객체다. 스프링부트는 데이터베이스 커넥션 정보를 바탕으로 DataSource를 생성하고 스프링 빈으로 만들어둔다. 그래서 DI를 받을 수 있다.
설정파일에 jdbc 관련 설정과 h2데이터 베이스 설정을 해주었으므로, 스프링이 처음에 뜰 때 자기가 dataSource 라는 접속 정보를 만들어놓기 때문에 이 객체를 주입받을 수 있다.
dataSource.getConnection(); 으로 커넥션을 얻을 수 있음
스프링 설정 변경
SpringConfig.java
@Configuration
public class SpringConfig {
private DataSource dataSource;
@Autowired
public SpringConfig(DataSource dataSource){
this.dataSource = dataSource;
}
@Bean
public MemberService memberService(){
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository(){
return new JdbcMemberRepository(dataSource);
}
}
return new MemoryMemberRepository -> JdbcMemberRepository 로만 바꿔주었는, DB와 성공적으로 연결할 수 있다! 이것이 바로 객체지향의 다형성이며, 스프링을 쓰는 이유!!!
구현체로, MemoryMemberRepository와 JdbcMemberRepository가 있게 되었다.
SOLID 원칙 중,
- 개방 폐쇄 법칙(OCP, Open-Closed principle)
- 확장에는 열려있고, 수정에는 닫혀있다 - 스프링의 DI(Dependeuccy Injectin)을 사용하면 기존 코드를 전혀 손대지 않고, 설정만으로 구현 클래스를 변경할 수 있다
- 회원을 등록하고 DB에 결과가 잘 입력되는지 확인하자
- 데이터를 DB에 저장하므로 스프링 서버를 다시 실행해도 데이터가 안전하게 저장된다
다형성 짱!
Author And Source
이 문제에 관하여(스프링 DB 접근 기술 - 순수 JDBC, 다형성 짱!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yeonnex/스프링-DB-접근-기술-순수-JDBC-다형성-짱저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)