ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 10.1 Application programming interfaces
    데이터베이스 시스템 2024. 11. 22. 07:15

    개요

    애플리케이션 프로그래밍 인터페이스(API)는 애플리케이션과 데이터베이스, 이메일, 웹 서비스와 같은 컴퓨터 서비스 간의 상호작용을 지정한다.  
    - 애플리케이션이 C와 같은 절차적 언어로 작성된 경우, API는 프로시저 호출을 지정한다.  
    - 애플리케이션이 Java와 같은 객체 지향 언어로 작성된 경우, API는 클래스를 지정한다.  

    수백 개의 API가 주요 프로그래밍 언어와 널리 사용되는 서비스 간의 연결을 제공한다. 관계형 데이터베이스와 기타 데이터 소스를 위한 API만 해도 수십 개가 있다.  
    - 각 프로그래밍 언어는 서로 다른 서비스를 위한 다양한 API를 지원한다.  
      Ex: Java는 메시지 서비스를 위한 JMS, 음성 합성과 인식을 위한 JSAPI, 이메일 서비스를 위한 JavaMail 등을 지원한다.  
    - 반대로, 각 서비스는 서로 다른 프로그래밍 언어를 위한 다양한 API를 가질 수 있다.  

    주요 데이터베이스 API
    - SQL/Call Language Interface (SQL/CLI): SQL 표준의 확장  
    - ODBC: 여러 프로그래밍 언어와 데이터 소스를 지원하며, SQL/CLI와 함께 개발되어 표준을 준수  
    - JDBC: Java 애플리케이션용  
    - DB-API: Python 애플리케이션용  
    - ADO.NET: .NET 애플리케이션용. .NET은 Microsoft 환경이며, C#이 가장 인기 있는 .NET 언어  
    - PDO: PHP 애플리케이션용. PHP는 동적 웹사이트를 구축하는 데 널리 사용되는 언어  

    MySQL 커넥터는 MySQL 데이터베이스와 주요 프로그래밍 언어 간의 주요 API를 구현한다.

    애플리케이션 프로그래밍 인터페이스(API)라는 용어의 사용은 다양하다.  
    - 이 용어는 항상 표준화 기구에 의해 명시된 프로시저나 클래스 선언의 구문과 예상 동작을 지칭한다.  
    - 일부 경우에는 완전한 코드 라이브러리에서 프로시저나 클래스의 구현을 지칭하기도 한다.  

    Capabilities 기능

    고차원적으로 볼 때, 데이터베이스 API는 유사하며 다음과 같은 공통 기능을 지원한다:

    1. 연결 관리
       - 데이터베이스 연결은 데이터베이스 주소를 식별하고 로그인 자격 증명을 제공한다.  
       - 쿼리를 실행하기 전에 연결을 생성하고 열어야 한다.  

    2. 쿼리 준비
       - 쿼리를 반복적으로 실행할 경우, 실행 전에 한 번 컴파일하는 것이 매번 실행 시 컴파일하는 것보다 빠르다.  
       - 데이터베이스 API에서 실행 전 컴파일은 일반적으로 쿼리 '준비(preparing)'라고 한다.  

    3. 단일 행 결과를 가진 쿼리 실행
       - 단일 행 쿼리는 API 프로시저 호출에 비교적 쉽게 포함될 수 있다.  
       - 프로시저 매개변수는 쿼리 결과를 프로그램 변수로 전달한다.  

    4. 다중 행 결과를 가진 쿼리 실행
       - 여러 행을 반환하는 쿼리는 특별한 처리가 필요하다.  
       - Cursor 또는 reader라고 불리는 특별한 API 객체는 결과 테이블의 단일 행을 식별한다.  
       - 애플리케이션이 한 번에 한 행을 처리하면서 커서는 결과 테이블을 진행한다.  

    5. 저장 프로시저 호출
       - 저장 프로시저는 다른 SQL 문처럼 API의 'execute query' 기능으로 실행된다.  
       - 특별한 API 구문은 저장 프로시저 매개변수를 호스트 언어 변수와 매칭한다.  

    위 기능들의 구체적인 구문은 API와 호스트 언어에 따라 크게 달라진다. 아래에 JDBC 코드 예제가 나타나며, Python과 MySQL을 위한 DB-API에 대한 자세한 설명은 다른 섹션에 포함되어 있다.

    1. FlightCount 프로시저는 절차적 SQL로 작성되며 Reservation 데이터베이스에 저장되어 있다.  
    2. java.sql 네임스페이스는 JDBC API를 구현한다.  
    3. reservation 객체는 데이터베이스 연결을 열며, close()는 해당 연결을 해제한다.  
    4. prepareCall()은 CALL FlightCount를 컴파일하고 이를 flightCall 객체에 저장한다. ? 문자는 매개변수의 플레이스홀더로 사용된다.  
    5. Java 코드는 항공사 이름을 Java 변수 airlineName에 입력한다.  
    6. airline 매개변수는 airlineName으로 설정되고, quantity 매개변수는 정수로 등록되며 쿼리가 실행된다.  
    7. Java 변수 total은 Quantity 값을 할당받아 출력된다.  


    Architecture

    데이터베이스 API는 API 개발자가 소스 코드로 구현한다. 컴파일된 코드는 애플리케이션 개발자에게 배포되며, 애플리케이션이 컴파일될 때 API 호출과 연결된다.
    데이터베이스 API 구현은 일반적으로 두 가지 소프트웨어 계층을 포함한다:

    1. 드라이버(Driver)
      • 드라이버는 데이터베이스에 직접 연결한다.
      • 모든 관계형 데이터베이스가 표준 SQL을 지원하지만, 구현에는 약간의 차이가 있으며 대부분의 데이터베이스는 비표준 확장을 제공한다.
      • 따라서 각 데이터베이스에 대해 다른 드라이버가 필요하다.
    2. 드라이버 관리자(Driver Manager)
      • 드라이버 관리자는 애플리케이션을 드라이버와 연결한다.
      • 애플리케이션은 API 프로시저 호출을 사용하여 드라이버 관리자와 통신하며, 드라이버 관리자는 각 호출을 적절한 드라이버로 전달한다.
      • 하나의 애플리케이션이 여러 데이터베이스에 연결되는 경우, 드라이버 관리자는 활성 연결을 기준으로 드라이버를 선택한다.

    비관계형 데이터 소스 지원

    • 많은 데이터베이스 API는 Excel 스프레드시트(.xlsx 파일), 쉼표로 구분된 데이터(.csv 파일)와 같은 비관계형 데이터 소스를 지원한다.
    • 지원되는 각 데이터 소스마다 다른 드라이버가 필요하다.
    • 많은 비관계형 데이터 소스는 트랜잭션 관리와 같은 SQL 기능을 지원하지 않으므로, 이러한 소스를 위한 드라이버는 API의 전체 기능을 지원하지 않을 수 있다.

    보조 API 지원

    • 주요 API는 보조 API를 지원할 수 있다.
      Ex: JDBC 구현에는 ODBC 드라이버가 포함되어 있어 JDBC를 통해 모든 ODBC 데이터 소스에 접근할 수 있다.
    • 보조 API 지원은 주요 API가 특정 데이터 소스를 지원하지 않을 때 유용하다.
    • 그러나 보조 API는 애플리케이션과 데이터 소스 사이에 추가 계층을 도입하므로 효율성이 떨어진다.

    1. Java 애플리케이션은 JDBC API를 통해 JDBC 드라이버 관리자와 통신한다.  
    2. 드라이버 관리자는 각각 다른 드라이버를 통해 각 데이터 소스와 통신한다.  
    3. API에 특정 데이터 소스에 대한 드라이버가 없으면, 해당 API는 다른 API를 통해 간접적으로 통신할 수 있다.  
    4. JDBC용 ODBC 드라이버는 ODBC 드라이버 관리자를 통해 Excel 및 CSV 데이터 소스와 통신한다.  
     
    -각 데이터베이스는 서로 다른 드라이버를 필요로 하지만, 모든 드라이버는 하나의 드라이버 관리자와 통신한다.
    -API 개발자는 데이터베이스 간의 쿼리 언어 차이를 수용하기 위해 각 데이터베이스에 대해 다른 드라이버를 구현해야 한다. 드라이버 관리자는 데이터베이스 간의 차이를 인식하지 못한다.
    -일부 데이터 소스는 모든 API 기능을 지원하지 않는다.  
    예: .csv 파일은 트랜잭션 관리를 지원하지 않는다.  
    데이터 소스가 특정 API 기능을 지원하지 않으면, 해당 드라이버도 그 기능을 지원할 수 없다.  
    -원칙적으로, 어떤 API든 다른 API의 데이터 소스로 작동할 수 있으므로 API는 여러 계층으로 중첩될 수 있다.  
    그러나 실제로는 각 계층이 비효율성을 초래하므로, API는 드물게 두 계층을 초과한다.  

    '데이터베이스 시스템' 카테고리의 다른 글

    10.3 MySQLi (PHP)  (0) 2024.11.24
    10.2 Database programming for the web  (0) 2024.11.23
    9.3 Procedural SQL  (0) 2024.11.21
    9.2 Embedded SQL  (0) 2024.11.20
    9.1 Programming languages  (0) 2024.11.19
Designed by Tistory.