최근 학교에서 강의를 들으면서 Embedded SQL에 대해서 알았습니다. 그런데 내장 SQL과 JDBC가 유사해 보였고, 더 나아가서 JPA와의 차이점 또한 궁금해졌습니다. 그래서 Embedded SQL, JDBC, JPA의 개념과 차이점을 간단히 알아보았습니다.
Embedded SQL(내장 SQL)은 일반 프로그래밍 언어(호스트 언어)에 SQL 문을 포함하여 사용할 수 있도록 한 기술입니다. 즉, 데이터베이스와 상호작용하기 위해 프로그래밍 언어 내부에서 직접 SQL 쿼리를 실행하는 방식입니다.
SQLCODE 또는 SQLSTATE를 통해 쿼리 실행 결과를 관리할 수 있어, 오류 처리 및 상태 점검이 용이합니다.JDBC는 Java Database Connectivity의 약자로, Java 애플리케이션에서 데이터베이스와 통신하기 위한 표준 API입니다. 이를 통해 Java 프로그램은 데이터베이스에 연결하고 데이터를 조회, 삽입, 수정, 삭제하는 작업을 수행할 수 있습니다. JDBC는 데이터베이스의 종류와 상관없이 일관된 방식으로 접근할 수 있습니다.
동적 SQL과 정적 SQL 비교
항목 정적 SQL 동적 SQL 쿼리 생성 시점 컴파일 시점 실행 시점 유연성 고정된 구조로 유연성이 낮음 조건에 따라 자유롭게 변경 가능 성능 실행 계획 재사용 가능 매번 새로운 실행 계획 작성 필요 보안 상대적으로안전 SQL Injection에 취약 코드 복잡성 간단하고 명료 복잡한 로직으로 인해 가독성이 떨어질 수 있음 사용 사례 고정된 조건의 반복 작업 사용자 입력 기반의 동적인 조건 처리
JPA는 Java Persistence API의 약자로, 자바 애플리케이션에서 관계형 데이터베이스와 상호작용하기 위한 ORM(Object-Relational Mapping) 기술 표준입니다. JPA는 객체 지향 프로그래밍(OOP)과 관계형 데이터베이스(RDBMS) 간의 패러다임 불일치 문제를 해결하기 위해 설계된 기술입니다.
ORM이란?
ORM은 객체와 관계형 데이터를 매핑하여, 객체 지향 프로그래밍 언어가 관계형 데이터베이스를 쉽게 사용할 수 있도록 도와주는 것입니다.
애플리케이션과 JDBC 사이에서 동작
데이터베이스 독립성 보장
객체 지향적 설계 가능
JAVA ORM 기술 표준
JPA와 QueryDSL의 차이
항목 JPQL(JPA) QueryDSL 쿼리 작성 방식 문자열 기반의 JPQL 작성 자바 코드 기반으로 쿼리 작성 컴파일 시점 검증 런타임 시점에 문법 오류 발생 가능 컴파일 시점에서 문법 오류 검증 가능 동적 쿼리 작성 복잡한 동적 쿼리 작성이 어려움 메서드 체이닝으로 동적 쿼리 작성이 쉬움 IDE 지원 문자열 기반이라 IDE 자동 완성 기능 제공 불가 IDE 자동 완성 지원 가독성 및 유지보수성 문자열로 인해 가독성이 떨어질 수 있음 코드 기반이라 가독성과 유지보수성이 높음 성능 JPA 표준 구현체를 사용하므로 성능은 동일 JPA 위에서 동작하므로 성능은 동일
많은 차이점들이 있지만, 내장 SQL과 JDBC의 대표적인 차이점 2가지를 정리해보았습니다.
| 구분 | Embedded SQL | JDBC |
|---|---|---|
| 데이터베이스 독립성 | 특정 DBMS에 종속됨. DBMS마다 SQL 문법이 다를 수 있어, 다른 DBMS로 변경 시 수정이 필요함. | Java 표준 API로, 다양한 DBMS에서 동일한 코드로 동작 가능. DB독립성이 뛰어남. |
| 동적 SQL 지원 | 정적 SQL만 지원. 컴파일 타임에 SQL이 확정되며, 런타임에서 변경할 수 없음. | 동적 SQL 지원. 실행 중 SQL을 생성하여 동적으로 실행 가능. |
JDBC와 JPA는 근복적인 목적이 다릅니다. JDBC는 DBMS와 정보를 주고받기 위한 API이고, JPA는 JDBC 위에서 동작하는 ORM 프레임워크 입니다. 따라서 JPA → JDBC → DBMS 순서대로 동작합니다. 따라서 둘은 같은 선상에서 비교하는 것은 바람직하지 않습니다.
감사합니다☺️
참조
[참조 사이트] https://velog.io/@dnjscksdn98/Database-ORM%EC%9D%B4%EB%9E%80
https://subsay.tistory.com/36
https://f-lab.kr/insight/spring-data-jdbc-vs-jpa