Mt.Hwang 2024. 5. 31. 21:08

 * 목차
 8.1 내장 SQL
 8.2 ODBC, JDBC
 8.3 응용 구조


 * 데이터베이스 응용 개발
direct SQL
사용자가 화면상에서 SQL 문장을 입력하면
그 결과를 화면에 보이게 하는 단순한 형태
데이터베이스 시스템 접근 방법 중 하나
상용 DBS가 제공함

 DBS
데이터베이스 시스템
데이터베이스 + DBMS를 말함

데이터베이스 응용 환경에서는
일반 프로그램 내에서 DBS을 접근하는 형태를 많이 사용


 * 내장 SQL  embedded SQL
호스트 언어 중간 중간에
SQL문장을 직접 삽입하는 형식

전처리 과정을 꼭 거쳐야 한다

전처리기는
내장 SQL 문장을 해당 언어 구문에 맞추어
함수 호출 형식으로 변환

EXEC SQL 내장 SQL 지시문

EXEC SQL 내장 SQL 지시문 END_EXEC

Connection to d database :
EXEC SQL CONNECT ...;

Declaring variables :
EXEC SQL BEGIN DECLARE SECTION ...
EXEC SQL END DECLARE SECTION;

선언된 변수는
프로그램에서 사용할 때 반드시 콜론 :을 접두사 형식으로 선행해야 한다


 * 커서
일반 프로그램 언어와 SQL 언어 간에 발생하는 불일치를 해결

c, java와 같은 언어는
데이터가 모두 메모리에 올라온다는 가정 하에 작동
but 데이터베이스는 데이터가 너무 크면
메인 메모리에 다 올라오지 못하는 경우가 있음
so, 이 때 커서를 통해서 하나씩 받는 것

커서 실행 과정
 1. declare
 2. open
 3. fetch
 4. close

 declare
커서가 선언되는 것

 open
데이터베이스 시스템에 해당 질의를 실행하여
그 결과를 임시 테이블에 저장
실제 질의문이 수행되는 시점
커서 open 시 질의문의 결과가 저장

 fetch
임시 테이블에서 튜플을 하나씩 검색하여
호스트 프로그램 변수에 튜플 단위로 값을 전달
결과를 튜플 단위로 접근하는 기능

커서를 이용한 데이터 갱신은 가능하며
갱신을 위한 커서는
선언 시에 갱신 커서임을 명시해야 한다
이 때, for update 추가

ex)
Declare myCursorUpdate cursor for
  select *
  from professor
  where deptName = 'CS'
for update;


 * 동적 SQL
프로그램 실행 시간에
SQL 문장이 생성되는 SQL

SQL 문장이 프로그램에 명시적으로 저장되어 있지 않고
사용자가 동적으로 SQL 문장을 생성하여 입력

질의어 수행 능력은 떨어지지만
융통성을 제공

동적 SQL 수행 단계는
 1. prepare
 2. execute

excute immediate 문장은
prepare와 execute를 동시에 수행


 * ODBC, JDBC
동적 방식으로 
응용프로그램에서 데이터베이스 시스템에 연결하여
데이터베이스 연산을 요청하고
이에 대한 결과를 받는 방식을 제공하는 API

 ODBC
Open Database Connectivity
C, C++, C#, Visual Basic과 호환

 JDBC
Java Database Connectivity
자바와 호환


 * ODBC
데이터베이스 시스템을 위한 표준 API

응용 프로그램은 ODBC 라이브러리와 링크하여
함께 컴파일하여야 한다

마이크로소프트가 만든
데이터베이스에 접근하기 위한 소프트웨어의 표준 규격


 * ODBC 2.0 연결

ex)
int ODBCexample() {
  RETCODE error;  // 리턴 코드
  HENV env;  // environment handle을 할당
  HDBC conn;  // connection handle을 할당
  SQLAllocEnv(&env);
  SQLAllocConnect(env, &conn);
  SQLConnect(conn, "db.ssu.ac.kr", SQL_NTS, "myUserID", SQL_NTS, "myPassword", SQL_NTS);
  ...
  ...
  SQLDisconnect(conn);
  SQLFreeConnect(conn);
  SQLFreeEnv(env);
}

 SQL_NTS
선행 매개 변수가 null로 끝나는 스트링임을 의미

SQLConnect 함수의 주요 매개 변수
 1. connection handle
 2. the server to which to connect
 3. user identifier
 4. password


 * ODBC 3.0 연결 예제

ex)
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);  // environment handle first 할당
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);  // data source 연결
SQLAllocHandle(SQL_HANDLE_ENV, dbc. &stmt);
...
...
SQLFreeHandle(SQL_HANDLE_STMT, stmt);  // 연결 해제
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);

할당해야하는 변수 영역
 1. environment handle
 2. connection handle
 3. statement handle


 * ODBC 데이터 접근

SQLExecDirect() 함수로
SQL 문장 수행

SQLBindCol() 함수로
결과 속성 값을 로컬 변수와 연결

SQLFetch() 함수로
튜플 단위로 데이터를 받아옴


 * SQL injection
데이터 침입 및 해킹을 목적으로
SQL 코드를 악의적으로 삽입하는 기술

사용자로부터 SQL 문장 일부를 
동적으로 입력받아 수행하는 응용에서 발생 ㄱㄴ

SQLstatement가 변형되어
데이터베이스에 저장되어 있는 모든 사용자 정보가 누출되는 것

데이터베이스 시스템의 데이터 보호 기능을
공격하는 방식 중 하나

prepare 기능을 사용하여
SQL 문장을 미리 컴파일 작업을 하면
SQL injection 공격을 일정 수준 피할 수 있다
데이터 타입 및 값 유효성 검사 등이 가능해지므로

 inject
주입하다


 * ODBC 메타 데이터
ODBC는 메타 데이터에 대한 접근 기능을 제공

함수 이름을 통해서 기능을 유추할 수 있다
 1. SQLTables()
 2. SQLColumns()
 3. SQLTablePrivileges()
 4. SQLStatistics()
 5. SQLSpecialCOlumns()
 6. SQLProcedures()
 7. SQLProcedureColumns()
 8. SQLPrimaryKeys()
 9. SQLForeignKeys()
 10. SQLColumnPrivileges()
 11. et

 SQLTables() 함수는
데이터베이스에 대한 메타 데이터를 조회

테이블은 특정 스키마에 속하고,
스키마는 특정 카탈로그에 속함


 * ODBC 트랜잭션

 AutoCommit 방식
트랜잭션의 기본 값이
각 SQL 문장을 트랜잭션으로 취급하여
각 SQL 문장 수행이 완료되면
트랜잭션이 커밋된 것으로 처리하는 것

AutoCommit이 off된 상태에서는
여러 개의 SQL 문장으로 트랜잭션을 구성할 수 있고
이 경우 SQLTransact() 함수로 트랜잭션을 종료해야 한다


 * ODBC 레벨
코어

 레벨 1
메타데이터 쿼리에 대한 도움을 요구

 레벨 2
매개변수 값과 카탈로그 정보를
보내거나 회복을 요구


 * JDBC
자바 언어에서 데이터베이스 서버를 연결하게 하는 API


 * SQLJ
The Java embedding of SQL

자바 언어에서 내장 SQL을 제공

EXEC SQL 대신에
#SQL 표현 사용

SQLJ는 언어 확장 방식이므로
SQLJ 프로그램 컴파일 이전에
반대스 전처리 과정이 필요


 * ADO.NET
데이터와 데이터 서비스에 접근할 수 있는
컴퓨터 소프트웨어 구성 요소의 집합

관계형 데이터베이스 시스템에 접근하거나 수정할 때 사용

SQL 언어를 지원하지 않는
비관계형 시스템에 대한 접근도 ㄱㄴ


 * OLE-DB
Object Linking and Embedding Database

단일 방식으로
여러 가지 데이터 소스를 접근하게 하는 API


 * 정적 방식 대 동적 방식

 내장 SQL
전처리 과정이 필요
전처리 과정에서 구문 검사, 권한 검사, 실행 계획 수립 등이 가능
데이터베이스 연산이 신속하게 수행되나
실행 코드 작성 시 두 단계를 거쳐야 하는 번거로움이 있음

Mainframe 시대에는 
내장 SQL 방식이 유행

ODBC/JDBC가 발표된 이후에넌
SQL API 방식이 유행


 * 응용 프로그램
대부분의 데이터베이스 사용자는
SQL 언어를 직접 사용하는 것이 아니라
데이터베이스 응용 프로그램을 이용하여
데이터베이스 시스템에 접근

데이터베이스 응용 프로그램은
 1. front-end
 2. back-end
 4. middle layer
로 구분 ㄱㄴ

 front-end
사용자 인터페이스를 담당

 back-end
데이터베이스 시스템과의 연동을 담당

 middle layer
비즈니스 로직을 구현


 * 응용 구조 진화

p206 사진 첨부하면 좋을듯

 1. 80년대 이전
mainframe era
대용량 컴퓨터 (mainframe)에
다량의 터미널이 동시에 접속하는 형식
이 시기 터미널은 자체적으로 컴퓨팅 능력을 가지고 있지 x
이 시기 터미널은 단순히 문자 데이터를 입력 받고 출력하는 더미 터미널
모든 데이터 처리는 중앙 서버에서 이루어짐

 2. 80년대 중반
client/server era
개인용 컴퓨터 기술이 발전
단말기가 일전 수순의 컴퓨팅 능력을 가짐
so, 클라이언트/서버 구조 사용
thin client에서 -> fat client가 된 것

 클라이언트/서버 구조
클라이언트가 응용 프로그램의 일부 기능을 담당하고
중앙집중식으로 관리되는 서버 데이터를 접근하는 것
클라이언트에 특정 프로그램이 장착되어야 하고
이를 정기적으로 관리, 업그레이드 해주어야 한다

 3. 90년대 중반
web era
웹 기술 탄생
현대 사회에서 웹 브라우저는 가장 대표적인 사용자 인터페이스


 * CS 응용 배치

p207 사진 있으면 좋을듯

클라이언트/서버 모델의 응용 프로그램을 배치하는 전략은
 1. two-tier 구조
 2. three-tier 구조

 two-tier 구조
응용 프로그램이 클라이언트에 존재
서버는 데이터베이스만 관리
클라이언트는 ODBC/JDBC 등을 이용하여 데이터베이스를 접근

 three-tier 구조
응용 프로그램이 클라이언트와 서버에 분배되어 존재
서버에 존재하는 응용 프로그램은 고유한 비즈니스 로직을 담당
클라이언트는 데이터베이스에 직접적으로 접근 ㅂㄱㄴ
so, 비즈니스 로직에 변경이 있는 경우
서버에 존재하는 응용 프로그램만 수정 보완하면 되므로
배치, 관리, 시스템 보안 측면에서 우수
대규모 응용 환경, 웹 환경에서 적합


 * 웹
world wide web
브라우저가 발표된 1990년대 중반부터 널리 사용되기 시작

웹의 구성 요소는
 1. HTML
 2. HTTP
 3. URL

 HTML
웹 문서를 작성하는 언어

 HTTP
웹 환경에서 사용되는 통신 규약

 URL
자원 위치를 명시

현대 사회에서 웹 브라우저는
데이터베이스를 기본적인 도구

웹 브라우저의 장점은
클라이언트 프로그램의 분배 및 관리가 용이하다는 것
최정 사용자의 인지 없이 개인 브라우저에서 실행되는 프로그램을
용이하게 관리할 수 있다 (다운로드와 설치 없이)


 * 웹 서버

HTML 언어의 한계성을 극복하기 위하여
대부분의 브라우저는 스크립트 언어를 지원
ex) JavaScript, Flash(Adobe)

웹 환경에서
웹 브라우저는 사용자 인터페이스를 담당
웹 서버는 데이터베이스 로직을 구현하는 응용 프로그램을 구현 또는 구동

웹 서버와 응용 프로그램 간의 통신은
CGI 표준을 사용


 * 3층 웹 구조
three-layer web architecture

웹 서버 / 응용 서버 / 데이터베이스 서버
로 구성

프로세스 구동 및 연동 간의 오버헤드로 인하여
널리 사용되지 x

참고로 응용 서버는 application server

 * 2층 웹 구조
two-layer web architecture

웹 서버 & 응용 서버 / 데이터베이스 서버

데이터베이스 서버는 독립적으로 운영되고
웹 서버와 응용 서버가 결합된 서버 형태로 운영됨

웹 서버가 비즈니스 로직을 담당하는 응용 프로그램 기능을
함께 수행하는 형태


 * 쿠키
cookies

HTTP 프로토콜은 통신 연결이 유지되지 않는 connectionless 통신을 함
서버 부하를 줄이기 위해 커넥션을 끊어버리는 것
-> 데이터베이스 환경에서 클라이언트가 서버와 연결을 하는 경우
서버와의 연결이 일정시간 동안 유지되기를 원함
연결이 유지되어야 클라이언트가 SQL 문장을 서버로 손쉽게 보낼 수 있고
SQL 문장에 대한 결과도 손쉽게 받을 수 있기 때문
-> 웹 환경에서 이러한 데이터베이스 요구사항을 해결하는 것이 쿠키

쿠키는 사용자 브라우저에 저장되고
서버에 HTML 문서를 요청할 때 쿠키도 함께 서버에 전달됨

쿠키는 작은 텍스트 파일
서버에서 브라우저로 보내는 것


 * HTML 기능
 1. formatting
 2. hypertext link
 3. image display
등등..

 formatting
서식 설정
디스켓에 데이터나 프로그램을 사용할 수 있도록
전자식으로 준비하는 과정

 hypertext link
하이퍼텍스트 링크
하이퍼텍스트 문서 내의 단어나 구, 기호, 화상과 같은 요소를
그 하이퍼텍스트 내의 다른 요소 또는 다른 하이퍼텍스트 내의 다른 요소와 연결한 것


 * HTML 예제

 <tr> 태그
table row를 의미

 <th> 태그
table header를 의미

 <td> 태그
table data를 의미

 table 속성 border
테이블을 구성하는 셀 경계 표시 여부를 결정

form HTML 명세 구성
 1. action 속성
 2. method 속성

 action 속성
form 데이터를 받았을 때
데이터를 보낼 URL을 지정

 method 속성
입력 데이터를 서버로 보낼 방식을 지정
종류는
 1. get
 2. post

 get method
입력 받은 데이터를 URL에 첨부하여 데이터를 보냄

 post method
HTTP 프로토콜 데이터 교환 방식을 사용하여
그 결과 URL에 입력 데이터가 보이지 x