[DB] ADO란?

수민·2024년 2월 7일
0

데이터베이스

목록 보기
2/4
post-thumbnail

ADO (ActiveX Data Objects)


🌹 ADO란?

DB에 액세스하는 윈도우 응용 프로그램을 작성할 수 있도록 해주는 COM 컴포넌트이다.

✔ COM (Component Object Model : 컴포넌트 객체 모델)

: 상호 대화성을 갖춘 컴포넌트를 만들기 위해 제정한 플랫폼 독립적인 객체지향 시스템
COM 객체의 인터페이스가 가지는 특성에 따라 COM 객체를 생성하거나 상호작용할 수 있도록 한다.

ADO를 통해 할 수 있는 일들

  • SQL을 사용한 DB 쿼리 실행
  • DB 결과 표시
  • 저장 프로시저 실행
  • 트랜잭션 DB 작업 수행
  • 등..

ADO 사용 순서

  1. 데이터 소스에 연결
  2. 레코드셋 가져오기
  3. 레코드셋에서 데이터를 읽거나 조작하기

🌹 주요 객체 모델

Connection 객체

  • 데이터 원본의 고유 세션
  • DB에 대한 연결 관리
  • Connection 개체 없이고 Recordset 개체를 생성할 수 있지만, Connection 개체 생성 뒤 재사용하는 것이 효율적이다.
    (Recordset 객체로 직접 DB에 접속하는 경우, 서버에서는 디폴트 connection 객체 생성 및 제거를 하므로 부하가 증가한다.)

Command 객체

  • DB에 대한 쿼리를 실행하는 객체

Recordset 객체

  • 데이터 소스에서 반환되는 결과 집합 관리
  • 레코드와 필드로 구성된 객체

Parameter 객체

  • Command 개체와 연결된 SQL 쿼리 또는 저장 프로시저에서 사용할 매개 변수 또는 인수

Field 객체

  • Recordset 내 개별 field에 대한 세부 정보 및 값에 액세스

Property 객체

  • 어떤 ADO 객체의 특정 프로퍼티에 대한 액세스를 가능하게 한다.

🌹 복합 커서

커서란?

커서 = 결과 집합(레코드)의 현재 위치
DB는 내부 테이블을 기반으로 결과 집합을 반환한다.
결과 집합 = SELECT문에 의해 반환된 전체 행 집합.

커서의 위치는 현재 레코드에 대한 포인터라고 이해할 수 있다.

다양한 커서 타입이 존재하며,
커서 타입을 어떤 것으로 결정하는 지에 따라서 처리 속도에 영향을 줄 수 있다.

커서 타입

adUseNone

커서 서비스를 사용하지 않는다.

adUseClient

로컬 커서 라이브러리에서 제공하는 클라이언트 커서를 사용.

  • 드라이버 제공 서버에서 사용할 수 없는 다양한 기능들(PageCount 등..)을 사용할 수 있다.

  • adUseClientBatch와 동일한 속성

  • 필요한 모든 데이터를 클라이언트로 전송하고, 클라이언트 커서를 사용해서 클라이언트 버퍼 메모리에 있는 데이터를 레코드 별로 조회한다.

adUseServer

데이터 제공자 커서나 드라이버 제공 커서를 사용

  • 기본값

  • 모든 데이터는 SQL 서버에 두고, 해당 데이터가 필요한 시점에 순서에 따라 각 레코드를 조회한다.

어떤게 더 좋음?

쿼리의 결과값 중 일부분만 표시하거나 사용해야 하면 adUseServer를 사용하는 것이 효율적이다.

  • 요청하는 페이지만 전송하고, 나머지는 DB 서버에 그대로 남겨두니까.
  • 서버 커서를 사용하는 경우, 클라이언트로 전송되는 레코드 수가 제한된다.

adUseClient로 클라이언트 커서를 사용하는 경우, 전체 레코드를 전송하므로 결과값이 사용자에게 나타나는 시간이 지연되고, 반환되는 레코드 수가 너무 많은 경우 성능이 저하될 수 있음.

상황에 따라 적절히 사용하는 것이 좋음.


🌹 잠금 형식

잠금이란?

두 사용자가 동시에 동일한 열을 한 행에 업데이트 할 수 없도록 해준다.
데이터 무결성을 유지하는데 필요한 경우에만 사용해야 함

종류

  • adLockBatchOptimistic
    - 낙관적 일괄 업데이트
    - 한 번에 여러 행을 가져온 뒤 일괄처리
    - 클라이언트 전용 -> 비연결성 락

  • adLockOptimistic
    - 낙관적 잠금
    - Update 메소드를 호출할 때만 레코드를 잠금
    - 충돌 가능성이 낮거나 충돌을 쉽게 해결할 수 있는 경우에 사용
    - 작업할 때가 아니라 실제 저장할 때 락을 걸어줌 (긍정적 락)

  • adLockPessimistic
    - 비관적 잠금
    - 레코드 별 기록
    - 잠금을 해제할 때까지 다른 사용자는 해당 레코드를 사용할 수 없음
    - 메모리에 올리자 마자 미리 락을 걸어줌 (수동적 락)

  • adLockReadOnly
    - 읽기 전용 레코드
    - 데이터를 변경할 수 없음
    - 가장 빠른 잠금 유형

  • adLockUnspecified
    - 잠금 유형을 지정하지 않음


참고 링크
https://learn.microsoft.com/ko-kr/sql/ado/guide/ado-programmer-s-guide?view=sql-server-2017
https://learn.microsoft.com/ko-kr/sql/ado/guide/data/what-is-a-lock?view=sql-server-2017
https://rahxephon.tistory.com/616
https://blog.naver.com/mavis5/10081350324
https://gudle.net/174

profile
우하하

0개의 댓글