2023. 3. 16. 테마
JDBC
JDBC(Java Database Connectivity)는 Java가 데이터베이스에 액세스할 수 있도록 하는 Java API입니다.
JDBC는 쿼리를 통해 데이터베이스의 데이터를 조작하는 방법을 제공합니다.
JDBC 렌더링 배경
애플리케이션 서버에서 DB에 접속하는 초기 방식은 데이터베이스에 직접 접속하는 방식이었다고 한다.
쉽게 설명하면 위의 그림과 같이 Application Server와 DB 서버를 연결(보통 TCP/IP를 통해)한 후 SQL 연결을 통해 SQL 쿼리를 전송하고 응답 결과를 받는다.
그러나 이러한 방식으로 데이터베이스를 교체하면 기존 데이터베이스에 대한 연결 방법을 재사용할 수 없습니다.
이는 MySQL과 Oracle이 연결 설정, SQL 전송 및 결과를 응답으로 받는 방법이 다르기 때문입니다.
위의 경우와 같이 Application Server와 DB 서버가 직접 연결되어 있는 상태에서 데이터베이스를 변경하게 되면 데이터베이스 사용과 관련된 모든 코드를 변경해야 하는 번거로운 상황이 발생하게 된다.
또한 개발자는 각 데이터베이스별 연결에서 응답을 얻는 방법을 이해해야 했습니다.
따라서 이 문제를 해결하기 위해 JDBC라는 Java 표준이 만들어졌습니다.
애플리케이션 서버와 DB 서버 간의 직접 연결과 달리 표준 JDBC 인터페이스는 애플리케이션과 데이터베이스 사이에 있습니다.
JDBC 표준 인터페이스는 다음 세 가지 기능을 정의하고 노출합니다.
- java.sql.Connection : 연결
- java.sql.Statement: SQL을 포함하는 콘텐츠
- java.sql.ResultSet : SQL 쿼리 응답
인터페이스는 JDBC로 구현되어 DB에 따라 적용할 수 있도록 라이브러리로 제공되며 이를 JDBC 드라이버라고 합니다.
위 이미지를 보면 Oracle 드라이버는 Oracle DB 접근을 지원하는 라이브러리이고, MySQL 드라이버는 MySQL DB 접근을 지원하는 라이브러리이다.
따라서 데이터베이스를 교체해야 하는 상황이 발생하면
가장 오른쪽 DB 서버를 교체하고 해당 DB에 맞는 드라이버를 적용하면 됩니다.
따라서 개발자가 JDBC 표준 인터페이스를 사용하는 방법을 배우기만 하면 동일한 것을 여러 데이터베이스에 적용할 수 있도록 효율성이 향상되었습니다.
JDBC 장점과 단점
- 장점
- JDBC를 지원하는 모든 데이터베이스에 연결할 수 있습니다.
- 데이터베이스가 변경되더라도 작성된 코드는 JDBC 드라이버가 지원된다면 수정 없이 바로 사용할 수 있다.
- SQL을 지원하므로 SQL을 통해 JDBC 데이터베이스의 리소스에 액세스할 수 있습니다.
- JDBC를 지원하는 모든 데이터베이스에 연결할 수 있습니다.
- 불리
- 안정적이고 유연하지만 저수준 기술로 인식되고 있다.
- SQL 문이 단순하더라도 중복 코드가 반복적으로 사용되어 DB에 따라 정보가 일치하지 않는 Checked Exception으로 처리됩니다.
- 연결과 같은 공유 리소스가 제대로 해제되지 않으면 시스템 리소스가 부족한 오류가 발생할 수 있습니다.
- 안정적이고 유연하지만 저수준 기술로 인식되고 있다.
예
JPA(Java Persistence API)는 Java 세계에서 ORM(Object-Relational Mapping)의 기술 표준으로 사용되는 인터페이스 모음입니다.
즉, 실제로 구현된 것은 아니지만 구현된 클래스와의 매핑을 도와주는 프레임워크입니다.
Hibernate는 JPA의 대표적인 오픈소스 구현체이다.
* ORM: 객체와 테이블을 매핑할 때 객체지향 프로그래밍은 객체 간의 관계를 기반으로 자동으로 SQL을 생성하여 테이블을 사용하여 클래스와 관계형 데이터베이스 사용의 불일치를 해결한다.
* 봄에 많이 사용되는 것으로 알려진 JPA, JPA를 사용하는 spring-data-jpa 프레임워크이며 JPA와 일치하는 개념이 아닙니다.
JPA의 장점과 단점
- 장점
- SQL 문이 아닌 메서드를 통해 DB를 조작할 수 있으므로 개발자는 개체 모델을 사용하여 비즈니스 로직을 만드는 데에만 집중할 수 있습니다.
- 객체에 대한 코드를 별도로 작성하기 때문에 쿼리 등의 추가 코드를 작성해야 하는 경우가 줄어들고 전체적인 코드 가독성이 높아집니다.
- 객체 지향 접근 방식만 고려하면 되므로 생산성을 높일 수 있습니다.
- 매핑 정보를 클래스로 지정하기 때문에 ERD에 대한 의존도를 줄일 수 있고 유지보수 및 리팩토링에 유리하다.
- SQL 문이 아닌 메서드를 통해 DB를 조작할 수 있으므로 개발자는 개체 모델을 사용하여 비즈니스 로직을 만드는 데에만 집중할 수 있습니다.
- 불리
- 프로젝트가 크고 복잡하면 실행 중에 속도가 느려지고 일관성이 없을 수 있습니다.
- 복잡하고 큰 쿼리의 경우 개발자는 속도를 높이기 위해 SQL을 별도로 작성해야 할 수 있습니다.
- 개발자가 JPA를 올바르게 사용하려면 최소한의 선행 교육이 필요합니다.
- 프로젝트가 크고 복잡하면 실행 중에 속도가 느려지고 일관성이 없을 수 있습니다.
참고