8.1 Embedded SQL

Database Applications

  • Direct SQL 방식
    • 사용자가 화면상에서 SQL 문장 입력 → 화면에 출력
    • 상용 DBS에서 인터페이스 제공
    • 이 방식보다 일반 program에서 접근하는 형식이 널리 사용 : 응용프로그램 → SQL → DBS → 처리 → 반환
  • 프로그램에서의 DBS 접근 방식
    1. Static approaches
      • Application code에 SQLs 내장시키는 방식
      • Embedded SQL : ESQL/C, ESQL/C++ 등
      • SQLJ
    2. Dynamic approaches
      • SQL API 사용
      • SQL CLI (call level interface), ODBC, JDBC

Embedded SQL

  • host language 중간에 SQL 문장을 직접 삽입하는 형식
  • IBM 에서 1970년대에 개발한 관계형 DBS의 시제품 System R에서부터 지원
  • 전처리 과정 필수
    • 해당 언어 구문에 맞춰 함수 호출 형식으로 변환
    • SQL 문장 구문, 권한 검사, 질의 최적화 등의 작업도 진행 가능
    • 결과 : 컴파일로가 이해할 수 있는 형태로 변환
  • database 연결
    EXEC SQL CONNECT ...;
  • 변수 선언
    • 호스트 프로그램과 DBS 간 데이터 할당을 위한 변수 선언

    • 프로그램에서 사용시 반드시 접두사에 콜론(:) 사용

      EXEC SQL BEGIN DECLARE SECTION
      ...
      EXEC SQL END DECLARE SECTION;
  • 문장
    EXEC SQL <statement>;

Cursors ⭐️

  • impedance mismatch
    • 두 언어 간에 자료처리 방식 차이로 인한 불일치

    • 일반 프로그램 언어는 집합(or 멀티셋) 타입 지원 X

      → 해결 : DBS가 cursor 기능 제공

  • declare : cursor 선언 → open 시 DBS에 해당 질의 결과를 임시 테이블에 저장 실제 질의문이 수행되는 시점 → fetch : 임시 테이블에서 tuple 하나씩 추출 후 호스트 프로그램에 tuple 단위로 값 전달 → close
    EXEC SQL declare myCursor cursor for
    	select sID, name from student where total > :credit;
    EXEC SQL open myCursor;
    EXEC SQL fetch myCursor into :si, :sn;
    EXEC SQL close myCursor;
  • SQLSTATE 변수
    • SQLCA 영역에 존재
    • 실행 성공 여부 저장 → ‘00000’ 성공, ‘02000’ 더 이상 검색되는 tuple 존재 X
int main() {
		EXEC SQL BEGIN DECLARE SECTION;
				char fname[15];
				char lname[15];
		EXEC SQL END DECLARE SECTION;
		EXEC SQL connect to 'myServer';
		EXEC SQL DECLARE demoCursor cursor for
				select firstName, lastName
				from customer
				where :lname < 'C';
		EXEC SQL open demoCursor;
		for(;;) {
				EXEC SQL fetch demoCursor into :fname, :lname;
				if (strncmp(SQLSTATE, "00000", 5) != 0) break;
				printf("%s %s\n" , fname, lname);
		}
		EXEC SQL close demoCursor;
		EXEC SQL disconnect current;
}

Updates Through Cursors

  • cursor를 통한 데이터 갱신 가능
  • 선언 시 명시 필요
    Declare myCursorUpdate cursor for
    	select*
    	from professor
    for update;   //갱신 커서임을 명시
  • 갱신
    Update professor
    set salary = salary + 100
    where current of myCursorUpdate;

Dynamic SQL

  • SQL 문장
    1. static SQL
      • 프로그램 실행시간 이전에 SQL 문장 명시
      • DBS 전처리 단계에서 구문검사, 권한 검사, 질의실행코드 생성 작업 가능 → dynamic SQL 에선 원천적으로 불가능
      • 질의어 수행 성능 👍
    2. dynamic SQL
      • 프로그램 실행시간에 SQL 문장 생성
      • 프로그램에 명시적으로 저장 X → 사용자가 동적으로 SQL 문장 생성하며 입력
      • 사용자에게 질의문 작성에 대한 융통성(flexibility) 제공
  • prepare 단계
    • SQL 문장에 대한 compile 단계

    • ? : 실제 값으로 대치되는 placeholder(변수)

      → execute 단계

  • execute immediate
    • prepare, execute 단계 동시 수행
    • 변수 사용 X
  • Ex>
    stcopy("select name from professor where salary > ?", myText);
    //placeholder 가능
    //사용자로부터 SQL 문장 직접 받기
    EXEC SQL prepare my1 from :myTEXT;
    		mySalary = 1000;
    EXEC SQL execute my1 using :mySalary;
    • ‘?’ 기호 : my1 prepare 단계에서 실제 값으로 대치되는 placeholder

      stcopy("select name from professor where pID='234', myText2);
      EXEC SQL execute immediate from myText2;

8.2 ODBC, JDBC

→ 간단하게 훑고 skip한 파트

ODBC, JDBC

  • 응용 프로그램에서 DBS에 연산 요청 후 결과 받는 방식을 제공하는 API
  • call
    • Connect with DB server
    • Send SQL commands to DB server
    • Fetch tuples of result one-by-one into program variables
  • ODBC
    • Open Database Connectivity)

    • C, C++, C#, Visual Basic

    • 동적 SQL 접근 방식 제공

      SQLExecDirect()   //SQL 문장 수행
      SQLBindCol()   //결과 속성값을 로컬 변수와 연결
      SQLFetch()   //터플 단위로 데이터 받아옴
  • JDBC
    • Java Database Connectivity

Static vs. Dynamic Approaches

  • Static Approaches 장점
    • 전처리 과정 필요

    • 전처리 과정에서 구문검사, 권한 검사, 실행 계획 수립 등 가능

    • DB 연산 신속하게 수행 가능

      단점

    • 실행 코드 작성 시 두 단계를 거쳐야 하는 번거로움

  • Dynamic Approaches 장점
    • flexible, powerful, harder to use

      단점

    • slower

      → 요즘엔 SQL API 방식이 널리 사용되는 경향이 있음.

8.3 Application Architectures

Application Programs

  • 대부분의 DB user는 query language를 직접적 사용 X → application program 응용
  • front-end, back-end, middle layer 로 구분
    • front-end : 사용자 인터페이스 담당
    • back-end : 데이터베이스 시스템과의 연동 담당
    • middle layer : 비즈니스 로직 구현

Application Architecture Evolution

  • Mainframe era
    • 60s, 70s
    • 대용량(mainframe) 컴퓨터에 다량의 터미널 동시 접속하는 형식
    • terminal : 자체적 컴퓨팅 능력X, 문자 입/출력만 가능 → dummy terminal
    • 모든 데이터 처리 → 중앙 서버에서
  • Client/server era
    • 80s, 90s
    • 개인용 컴퓨터 기술 발전, 보급 → 단말기 : 일정 수준의 컴퓨팅 능력
    • client : 응용 프로그램의 일부 기능 담당
    • 더미터미널(thin client) → 일부 기능 담당(fat client)
  • Web era
    • 1990s 중반 이후
    • 웹 브라우저 : 가장 대표적인 사용자 인터페이스

Client/Server Application Deployment

  • 응용프로그램 배치 전략
  1. Two-tier 구조
    • 응용프로그램 : client에 존재 → 응용프로그램 변경 시, 많은 클라이언트에 존재하는 응용 프로그램을 변경해야한다.
    • server : DB만 관리
    • client : ODBC/JDBC등 이용 → DB 접근
  2. Three-tier 구조
    • 응용프로그램 : client, server에 분배되어 존재
    • server의 응용프로그램
      • 응용에 고유한 비즈니스 로직 담당
      • 비즈니스 로직 변경 시, 서버에 존재하는 응용 프로그램만 수정 보완 → 자원 배치 및 관리, 보안 우수
    • 대규모 응용 환경, 웹 환경에 적합

Web

  • 브라우저가 발표된 1990년 중반부터 널리 사용
  • 구성요소
    • HTML : 웹 문서를 작성하는 언어
    • HTTP : 웹 환경에서 사용되는 통신 규약
    • URL : 자원 위치 명시
  • 웹 브라우저 : 데이터베이스를 접근하는 기본적인 도구
  • 장점
    • 클라이언트 프로그램의 분배 및 관리 용이
    • 최종 사용자의 인지없이 개인 브라우저에서 실행되는 프로그램 관리 용이

Web Servers

  • 스크립트 언어 지원 JavaScript, Flash
    • HTML 언어의 한계성 극복
    • 사용자 인지없이 필요한 소프트웨어 다운로드 및 실행 가능
  • 웹 브라우저 : 사용자 인터페이스 담당
  • 웹 서버 : 데이터베이스 로직 구현하는 응용 프로그램 구현 필수 → 서버 사이트에서 응용을 개발하게 하는 다양한 기술 존재 (Java servlet, JSP, ASP, 스크립트 언어)

Three-Layer Web Architecture

  • 3층 웹 구조
    • Web server

    • application server

    • database server

      → 2층 구조에 비해 프로세스 구동 및 연동간 오버헤드 다소 존재

  • 좀 더 유연한 시스템 구조 가능

Two-Layer Web Architecture

  • 데이터베이스 서버 : 독립적 운영
  • 웹서버 - 응용서버 결합된 서버 형태
  • 웹 서버 : 비즈니스 로직을 담당하는 응용 프로그램 기능을 함께 수행
  • 여러 응용 분야에서 널리 사용

Cookies

  • HTTP 프로토콜
    • connectionless 통신 : 통신 연결 유지 X
    • client : server와의 연결 일정시간 유지되길 원함 → Cookie !!
  • 쿠키 : small piece of text
    • 사용자 브라우저에 저장
    • server에 HTML 문서 요청 시 쿠키도 함께 전달

Inputs in HTML

  • 제공하는 기능
    • formatting
    • hypertext link
    • image display
    • table, stylesheets
  • 입력 기능 제공
    • 옵션 세트에서 선택
    • 팝업 메뉴, 라디오 버튼, 체크리스트와 같은 요소 사용
  • 값 입력 : 텍스트 박스 사용 → 입력된 정보 서버로 전송 → 해당 입력 정보로 작업 수행

Table/Form Example

  • Table
    • 태그 : table row
    • 태그 : table header
    • 태그 : table data
    • : 테이블 구성하는 cell 경계 표시 여부
    • Form
    • <html>
      	<body>
      		<table border="1">
      			<tr> <th>ID</th>   <th>Name</th>   <th>Department</th> </tr>
      			<tr> <td>123</td>  <td>Lee</td>    <td>CS</td> </tr>
      			...
      		</table>
      		<form action="myQuery" method="get">
      			Search for:
      				<select name="personType">
      					<option value="student" selected>Student</option>
      					<option value="professor">Professor</option> </select> <br>
      			Name: <input type=text size=20 name="name">
      			<input type=submit value="Find">
      		</form>
      	</body>
      </html>

profile
숭실대학교 컴퓨터학부 21

0개의 댓글