Embedded SQL, JDBC, JPA의 개념 및 차이점

서여·2025년 3월 10일
2
post-thumbnail

최근 학교에서 강의를 들으면서 Embedded SQL에 대해서 알았습니다. 그런데 내장 SQL과 JDBC가 유사해 보였고, 더 나아가서 JPA와의 차이점 또한 궁금해졌습니다. 그래서 Embedded SQL, JDBC, JPA의 개념과 차이점을 간단히 알아보았습니다.

목차

1. Embedded SQL이란?


1.1. Embedded SQL의 개념

Embedded SQL(내장 SQL)은 일반 프로그래밍 언어(호스트 언어)에 SQL 문을 포함하여 사용할 수 있도록 한 기술입니다. 즉, 데이터베이스와 상호작용하기 위해 프로그래밍 언어 내부에서 직접 SQL 쿼리를 실행하는 방식입니다.

1.2. Embedded SQL의 특징 5가지

  1. 정적 SQL
    • 내장 SQL은 정적 쿼리를 사용하므로 실행 계획이 컴파일 시점에 고정됩니다. 따라서 런타임에 쿼리를 분석하고 최적화 하는 오버헤드를 줄여줍니다.
  2. 프리컴파일러(Precompiler) 필요
    • 내장 SQLdms 전처리기를 통해 SQL 문장을 분리하고 컴파일 해야하므로, 추가적인 빌드 단계가 필요합니다.
  3. SQL 실행 결과 관리 가능
    • 내장 SQL은 SQLCODE 또는 SQLSTATE를 통해 쿼리 실행 결과를 관리할 수 있어, 오류 처리 및 상태 점검이 용이합니다.
  4. 단일 튜플만 반환 가능
    • 내장 SQL의 결과는 단일 튜플만 반환 가능합니다. 따라서 다중 행 데이터를 처리하기 위해선 커서를 사용해야 합니다. 이는 코드 복잡성을 증가시킬 수 있습니다.
  5. 호스트 언어와 통합 가능
  • 내장 SQL은 호스트 언어와 통합되어 있어, 데이터베이스와 애플리케이션 간의 상호작용이 원활합니다.

2. JDBC란?


2.1. JDBC의 개념

JDBC는 Java Database Connectivity의 약자로, Java 애플리케이션에서 데이터베이스와 통신하기 위한 표준 API입니다. 이를 통해 Java 프로그램은 데이터베이스에 연결하고 데이터를 조회, 삽입, 수정, 삭제하는 작업을 수행할 수 있습니다. JDBC는 데이터베이스의 종류와 상관없이 일관된 방식으로 접근할 수 있습니다.

2.2. JDBC의 특징 4가지

  1. 정적, 동적 SQL 모두 가능
    • 동정 SQL이 가능하기 때문에 유연성과 코드 재사용성이 증가합니다. 또한 런타임에서 실행되기 때문에 복잡한 비지니스 로직을 구현하기에 용이합니다.
  2. 데이터베이스 독립성 보장
    • JDBC는 데이터베이스와 애플리케이션 간의 통신을 표준화하여, 특정 DBMS에 종속되지 않고 다양한 데이터베이스를 지원합니다.
  3. 표준 인터페이스 제공
    • 추상화된 표준 API를 제공합니다.
  4. 영속성 보장
    • 애플리케이션 데이터를 데이터베이스에 안전하게 저장하고 관리하여 영속성을 보장합니다.

동적 SQL과 정적 SQL 비교

항목정적 SQL동적 SQL
쿼리 생성 시점컴파일 시점실행 시점
유연성고정된 구조로 유연성이 낮음조건에 따라 자유롭게 변경 가능
성능실행 계획 재사용 가능매번 새로운 실행 계획 작성 필요
보안상대적으로안전SQL Injection에 취약
코드 복잡성간단하고 명료복잡한 로직으로 인해 가독성이 떨어질 수 있음
사용 사례고정된 조건의 반복 작업사용자 입력 기반의 동적인 조건 처리

3. JPA란?


3.1. JPA의 개념

JPA는 Java Persistence API의 약자로, 자바 애플리케이션에서 관계형 데이터베이스와 상호작용하기 위한 ORM(Object-Relational Mapping) 기술 표준입니다. JPA는 객체 지향 프로그래밍(OOP)과 관계형 데이터베이스(RDBMS) 간의 패러다임 불일치 문제를 해결하기 위해 설계된 기술입니다.

ORM이란?
ORM은 객체와 관계형 데이터를 매핑하여, 객체 지향 프로그래밍 언어가 관계형 데이터베이스를 쉽게 사용할 수 있도록 도와주는 것입니다.

3.2. JPA의 특징 4가지

  1. 애플리케이션과 JDBC 사이에서 동작

    • 개발자가 JPQL로 코딩을 하면, JPA는 이를 SQL로 변환하고, 변환된 SQL은 최종적으로 JDBC를 통해 데이터베이스와 통신합니다.
  2. 데이터베이스 독립성 보장

    • JDBC와 마찬가지로 다양한 데이터베이스를 지원합니다.
  3. 객체 지향적 설계 가능

    • JPA는 데이터베이스의 테이블을 자바 객체(Entity)로 매핑하므로 자바 객체를 다루는 방식으로 데이터를 처리할 수 있습니다.
  4. JAVA ORM 기술 표준

    • JPA는 JAVA의 ORM 기술을 위한 API 표준 명세로, 특정 구현체에 의존하지 ㅇ낳고 다양한 ORM 프레임워크(Hibernate, EclipseLink 등)를 사용할 수 있습니다.

JPA와 QueryDSL의 차이

항목JPQL(JPA)QueryDSL
쿼리 작성 방식문자열 기반의 JPQL 작성자바 코드 기반으로 쿼리 작성
컴파일 시점 검증런타임 시점에 문법 오류 발생 가능컴파일 시점에서 문법 오류 검증 가능
동적 쿼리 작성복잡한 동적 쿼리 작성이 어려움메서드 체이닝으로 동적 쿼리 작성이 쉬움
IDE 지원문자열 기반이라 IDE 자동 완성 기능 제공 불가IDE 자동 완성 지원
가독성 및 유지보수성문자열로 인해 가독성이 떨어질 수 있음코드 기반이라 가독성과 유지보수성이 높음
성능JPA 표준 구현체를 사용하므로 성능은 동일JPA 위에서 동작하므로 성능은 동일

4. 차이점


4.1. Embedded SQL vs JDBC

많은 차이점들이 있지만, 내장 SQL과 JDBC의 대표적인 차이점 2가지를 정리해보았습니다.

구분Embedded SQLJDBC
데이터베이스 독립성특정 DBMS에 종속됨. DBMS마다 SQL 문법이 다를 수 있어, 다른 DBMS로 변경 시 수정이 필요함.Java 표준 API로, 다양한 DBMS에서 동일한 코드로 동작 가능. DB독립성이 뛰어남.
동적 SQL 지원정적 SQL만 지원. 컴파일 타임에 SQL이 확정되며, 런타임에서 변경할 수 없음.동적 SQL 지원. 실행 중 SQL을 생성하여 동적으로 실행 가능.

4.2. JDBC vs JPA

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

profile
안녕하세요:) 아키텍트가 되고 싶은 백엔드 개발자 지망생입니다.

0개의 댓글