[정보처리기사 필기] SQL 활용 - 089. DBMS 접속 기술

1. DBMS 접속의 개요

  • 사용자가 데이터를 사용하기 위해 응용 시스템을 이용하여 DBMS에 접근하는 것
  • 응용 시스템은 사용자로부터 매개 변수를 전달받아 SQL을 실행하고 DBMS로부터 전달받은 결과를 사용자에게 전달하는 매개체 역할을 수행
  • 인터넷을 통해 구동되는 웹 응용 프로그램은 웹 응용 시스템을 통해 DBMS에 접근
    • 웹 응용 시스템
      • 웹 서버와 웹 애플리케이션 서버(WAS)로 구성
        • 웹 서버 : 웹 페이지, 저용량 자쵸 등의 처리를 담당
        • WAS : DBMS와 통신하여 대용량 파일이나 복잡한 로직 등의 처리를 담당
      • 서비스 규모가 작은 경우 웹 서버와 웹 애플리케이션 서버를 통합하여 하나의 서버만으로 운용
      • 웹 응용 시스템의 구조
        • 사용자는 웹 서버에 접속하여 데이터를 주고받음
        • 웹 서버는 많은 수의 서비스 요청을 처리하기 때문에 사용자가 대용량의 데이터를 요청하면 직접 처리하지 않고 WAS에게 해당 요청을 전달
        • WAS는 수신한 요청을 트랜잭션 언어로 변환한 후 DBMS에 전달하여 데이터를 받음
        • 받은 데이터는 처음 요청한 웹 서버로 다시 전달되어 사용자에게까지 도달

2. DBMS 접속 기술

  • DBMS에 접근하기 위해 사용하는 API, API의 사용을 편리하게 도와주는 프레임워크 등
    • API :  응용 프로그램 개발 시 운영 체제, DBMS 등을 이용할 수 있도록 규칙 등에 대해 정의해놓은 인터페이스
    • 프레임워크 : 특정 기능을 수행하기 위해 필요한 클래스나 인터페이스 등을 모아둔 집합체
  • DBMS 접속 기술의 종류
    • JDBC Java DateBase Connectivity
      • Java 언어로 다양한 종류의 데이터베이스에 접속하고 SQL문을 수행할 때 사용되는 표준 API
      • 1997년 2월 썬 마이크로시스템에서 출시
      • Java SE (Standard Edition)에 포함되어 있음
        • Java SE
          • Java 표준안
          • Java의 문법과 기능을 정의하는 명세서
          • JDK에 포함되어 사용
          • JDBC의 기능들을 정의하는 클래스 파일을 포함
      • JDBC 클래스는 java, sql, javax, sql에 포함되어 있음
      • 접속하려는 DBMS에 대한 드라이버가 필요
    • ODBC Open DataBase Connectivity
      • 데이터베이스에 접근하기 위한 표준 개방형 API
      • 개발 언어에 관계없이 사용할 수 있음
      • 1992년 9월 마이크로스프트에서 출시
      • 프로그램 내 ODBC 문장을 사용하여 MS-Access, DBase, DB2, Excel, Text 등 다양한 데이터베이스에 접근 가능
      • 접속하려는 DBMS에 맞는 드라이버가 필요하지만 접속하려는 DBMS의 인터페이스를 알지 못하더라도 ODBC 문장을 사용하여 SQL을 작성하면 ODBC에 포함된 드라이버 관리자가 해당 DBMS의 인터페이스에 맞게 연결해주므로 DBMS의 종류를 몰라도 됨
    • MyBatis
      • JDBC 코드를 단순화하여 사용할 수 있는 SQL Mapping 기반 오픈 소스 접속 프레임워크
        • SQL Mapping : SQL로 호출되는 테이블이나 열 데이터를 개발하려는 언어의 객체에 맞도록 변환하여 연결하는 것
      • JDBC에 비해 간소화된 메소드와 강화된 접속 기능
      • SQL 문장을 분리하여 XML 파일을 만들고 Mapping을 통해 SQL 실행
      • SQL을 거의 그대로 사용할 수 있어 SQL 친화적인 국내 환경에 적합하여 많이 사용

3. 동적 SQL (Dynamic SQL)

  • 개발 언어에 삽입되는 SQL 코드를 문자열 변수에 넣어 처리하는 것
  • 조건에 따라 SQL 구문을 동적으로 변경하여 처리 가능
  • 사용자로부터 SQL문의 일부 또는 전부를 입력받아 실행할 수 있음
  • 값이 입력되지 않을 경우 사용하는 NVL 함수를 사용할 필요가 있음
    • NVL 함수
      • NVL(A, B) 형태의 함수
      • A가 NULL 인 경우 B를 반환하고 아니면 A를 반환
      • 동적 SQL에서는 원하는 조건에 따라 자유롭게 SQL문을 바꿀 수 있으므로 NVL 함수 없이 SQL문을 구성하는 것이 가
  • 응용 프로그램 수행 시 SQL이 변형될 수 있으므로 프리컴파일할 때 구문 분석, 접근 권한 확인 등을 할 수 없음
    • 프리컴 파일 Precompile
      • 고급언어를 기계어로 번역하는 컴파일 Compile 전에 수행하는 작업
      • 필요한 라이브러리를 불러오거나 코드에 삽입된 SQL문을 DB와 연결하는 작업을 수행
  • 정적 SQL에 비해 속도가 느리지만, 상황에 따라 다양한 조건을 첨가하는 등 유연한 개발이 가능
  정적 SQL (Static SQL) 동적 SQL (Dynamic SQL)
SQL 구성 커서 Cursor를 통한 정적 처리

* 커서 Cursor : SQL문의 실행 결과로 반환된 복수 개의 튜플들에 접근할 수 있도록 해주는 기능
문자열 변수에 담아 동적 처리
개발 패턴 커서의 범위 안에서 반복문을 활용하여 SQL 작성 NVL 함수 없이 로직을 통해 SQL 작성
실행 속도 빠름 느림
사전 검사 가능 불가능

4. ORM Object-Relational Mapping의 개요

  • 객체지향 프로그래밍의 객체와 관계형 데이터베이스의 데이터를 연결하는 기술
  • 객체지향 프로그래밍에서 사용할 수 있는 가상의 객체지향 데이터베이스를 만들어 프로그래밍 코드와 데이터를 연결
  • ORM의 생성된 가상의 객체지향 데이터베이스는 프로그래밍 코드 또는 데이터베이스와 독립적이므로 재사용 및 유지보수가 용이
  • SQL 코드를 직접 입력하지 않고 선언문이나 할당 같은 부수적인 코드가 생략되기 때문에 직관적이고 간단하게 데이터 조작 가능

5. 쿼리 성능 최적화의 개요

  • 데이터 입출력 애플리케이션의 성능 향상을 위해 SQL 코드를 최적화하는 것
  • 쿼리 성능을 최적화하기 전에 성능 측정 도구인 APM을 사용하여 최적화 할 쿼리를 선정
  • 최적화 할 쿼리에 대해 옵티마이저가 수립한 실행 계획을 검토하고 SQL 코드와 인덱스를 재구성
  RBO (Rule Based Optimizer) CBO (Cost Based Optimizer)
  규칙 기반 옵티마이저 비용 기반 옵티마이저
최적화 기준 규칙에 정의된 우선 순위 액세스 비용
성능 기준 개발자의 SQL숙련도 옵티마이저의 예측 성능
특징 실행 계획 예측이 쉬움 성능 통계치 정보 활용, 예측이 복잡
고려사항 개발자의 규칙 이해도, 규칙의 효율성 비용 산출 공식의 정확성