-
[JUnit] 데이터베이스 애플리케이션 테스트DEV/JUnit 2025. 1. 22. 22:36
데이터베이스 테스트의 문제점
1. 단위테스트는 코드를 격리시켜 실행해야한다, but 영속성 계층은 반드시 데이터베이스와의 상호작용이 필요하다.
: 데이터베이스와 관련한 단위테스트는 테스트가 데이터베이스에 의존해야한다.
2. 단위테스트는 작성과 실행이 쉬워야한다, but 데이터베이스에 접근하는 코드는 작성 및 실행이 번거롭다.
: SQL 작성 및 수많은 try-catch-finally 코드를 작성해야한다.
3. 단위테스트는 실행 속도가 빨라야한다, but 데이터베이스에 접근하는 코드들은 상대적으로 느리다.
: 다수의 사용자가 접근이 가능한 원격 서버이기때문에 데이터베이스 접근 자체가 느림
이러한 문제를 데이터베이스 단위 테스트 시 발생하는 임피던스 불일치라고 한다.
이는 객체 지향 프로그래밍과 관계형 데이터베이스 간 임피던스 불일치와 관련된다.
JDBC, 스프링 JDBC, 하이버네이트, 스프링 하이버네이트 애플리케이션을 위한 테스트
[기본 용어]
- JDBC : 클라이언트가 자바로 데이터베이스에 접근하기 위한 표준 API. 관계형 데이터베이스의 데이터를 조회하고 변경하는 API를 제공한다.
- ORM : 관계형 데이터베이스의 데이터를 객체 지향 프로그래밍의 객체로 변환하거나 반대로 변환하는 프로그래밍 기법
- 하이버네이트 : 자바 진영의 ORM 프레임워크. 하이버네이트는 객체지향 도메인 모델을 관계형 데이터베이스 테이블에 매핑할 때 사용한다. 하이버네이트는 객체지향 도메인 모델과 관계형 데이터베이스 모델 간에 서로 호환되지않는 문제를 해결하기 위해 데이터베이스에 직접 접근하지 않고 객체를 조작함으로써 데이터를 변경한다.
책에서는 JDBC부터 시작해서 스프링 하이버네이트로 구현된 애플리케이션을 테스트하고,
테스트를 개선하며 데이터베이스 단위테스트의 임피던스 불일치를 줄이기위한 과정을 보여준다.
소스코드 참고
https://github.com/devkunst/junit-in-action-third-edition-kr/tree/master/ch19-databases
좀더 자세한 설명은 책을 보는것을 추천한다.
데이터베이스 애플리케이션 구축 방법과 테스트 방법 특징 비교
유형 특징 JDBC - 테스트에서 SQL을 작성해야한다.
- 데이터베이스 간 이식성이 없다.
- 애플리케이션이 수행하는 작업을 완벽하게 제어할 수 있다.
- 데이터베이스와 상호작용하기 위해 개발자가 수동으로 작업해야하는 것이 많다.
ex) 커넥션 생성/반납, 쿼리문 작성/준비/실행, 예외처리 등스프링 JDBC - 테스트에서 SQL을 작성해야한다.
- 데이터베이스 간 이식성이 없다.
- 스프링이 관리하는 애플리케이션 콘텍스트 설정과 로 매퍼를 관리해야한다.
- 애플리케이션이 데이터베이스에 대해 쿼리를 실행한다.
- 데이터베이스와 상호작용하기위한 데이터베이스 부담이 조금 줄어든다.하이버네이트 - SQL 없이 JPQL로 애플리케이션을 만들 수 있으므로 데이터베이스 간 이식성이 뛰어나다.
- 개발자는 자바로만 작업할 수 있다.
- 쿼리 결과 컬럼을 객체 필드에 따로 매핑하지 않아도 된다.
- 데이터베이스를 바꾸고자 할 때는 하이버네이트 설정과 데이터베이스 방언만 바꾸면 된다.
- 자바로 데이터베이스를 구성할 수 있다.스프링 하이버네이트 - SQL 없이 JPQL로 애플리케이션을 만들 수 있으므로 데이터베이스 간 이식성이 뛰어나다.
- 개발자는 자바로만 작업할 수 있다.
- 쿼리 결과 컬럼을 객체 필드에 따로 매핑하지 않아도 된다.
- 데이터베이스를 바꾸고자 할 때는 하이버네이트 설정과 데이터베이스 방언만 바꾸면 된다.
- 데이터베이스 구성은 애플리케이션 콘텍스트의 정보를 기반으로 스프링에서 처리한다.'DEV > JUnit' 카테고리의 다른 글
[JUnit] JUnit 5를 사용한 TDD (0) 2025.01.23 [JUnit] REST API 테스트 하기 (2) 2025.01.07 [JUnit] Spring Boot 애플리케이션 테스트 (1) 2024.12.10 [JUnit] JUnit5 extension (확장 모델) (1) 2024.10.22 [JUnit] 모의 객체 프레임워크 EasyMock / JMock / Mockito (0) 2024.09.11