위와 같이 JDBC URL 을 파일로 해 놓으면 어플리케이션과 웹 콘솔이 동시에 접근이 안되고 충돌이 날 수 있음
한번 생성한 이후 위와 같이 JDBC URL 을 수정하여 파일을 직접 접근 하는 것이 아닌 소켓을 통하여 접근하도록 하여 여러곳에서 접근 가능하도록 설정해야함
drop table if exists member CASCADE;
create table member
(
id bigint generated by default as identity,
name varchar(255),
primary key (id)
);
테이블 생성할 때 사용한 sql은 sql/ddl.sql 이런 파일에 저장하여 같이 깃에 올리면 변경 내역 파악에 좋다.
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
이후 gradle refresh 버튼 누르기
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
JDBC Repository 작성
dataSource 생성
sql string 으로 직접 작성
try catch 로 예외처리 잘해줘야함
사용한 자원 release 잘해줘야함
spring framework 통해서 dataSource 사용할때는 DataSourceUtils 를 통해서 getConnection 해야 transaction 에 걸리지 않고 connection 이 유지가 됨
SpringConfig 수정
repository 메서드가 JdbpRepository 를 리턴하도록 수정(자바 코드로 직접 스프링 빈 추가해서 수정이 간단함)
dataSource 도 @Autowired 로 추가
객체지향적인 설계로 다형성 활용 가능
인터페이스를 두고 구현체를 바꿔끼우기를 할 수 있음
특히 스프링은 스프링 컨테이너가 이를 지원해줘서 편리하게 가능
di
원래는 repository 뿐만 아니라 의존성이 있는 service 모두 수정해야했는데 repository 리턴만 수정하면 됨
OCP : open-closed principle 개방 폐쇄 원칙, 확장에는 열려있고 수정에는 닫혀있다, 어플리케이션 전체를 변경할 필요 없이 추가되는 부분만 작성하면 됨
스프링의 DI을 사용
스프링 컨테이너와 db까지 연결한 통합 테스트
기존의 테스트 코드에 @SpringBootTest, @Transactional 추가해주면 됨
데이터베이스는 기본적으로 데이터를 insert query 해준다음에 commit 해줘야 반영이 됨
보통은 auto query 임
@SpringBootTest : 스프링을 실행하여 테스트를 진행함
@Transactional 을 테스트 케이스에 달면 테스트 실행전 transaction을 실행하고 테스트가 끝나면 롤백을 해줘서 db에 테스트 내용이 반영이 안되고 다 지워져서 반복적인 테스트가 가능해짐 테스트 메서드 마다 동작함, 테스트 케이스가 아닌 다른 코드에 달면 정상적으로 동작함
스프링 없이 순수한 단위 테스트가 더 좋은 테스트일 확률이 높음
더 빠르고 독립적임
테스트 잘 작성하는 것이 중요함
항상 테스트 코드 잘 짜려고 고민 해야함
현업에서 개발 비율이 60%는 테스트 코드 작성
그만큼 테스트 코드 작성이 중요함
JDBC API 에서 반복 코드를 대부분 제거해줌
sql은 직접 작성해야함
생성자가 하나만 있을때는 @Autowired 생략 가능
디자인 패턴중 template method patern 이 많이 사용되어 jdbcTemplate임
option + enter : implements 한 뒤 단축키 사용시 멤버 변수 메서드들 implements 가능