ADO.NET 개념, 구조, 실행 방식 및 ORM(Dapper) 개요

이동근·2026년 1월 11일

C#

목록 보기
2/9

ADO.NET

  • ADO.NET : .NET에서 데이터베이스(DB)에 접근하기 위한 기술

    • C#, VB 같은 .NET 언어에서 사용

개념 구조도

ADO.NET 내부 계층 관계도

┌─────────────────────────────────────┐
│         Application Layer        │
├─────────────────────────────────────┤
│  ORM (Dapper, EF Core) - Optional│
├─────────────────────────────────────┤
│            ADO.NET Core          │
│  ┌──────────────┬─────────────────┐ │
│  │  Connected   │  Disconnected│ │
│  │              │              │ │
│  │ Connection   │   DataAdapter│ │
│  │ Command      │      ↕       │ │
│  │ DataReader   │   DataSet    │ │
│  │ Transaction  │   DataTable  │ │
│  └──────────────┴─────────────────┘ │
├─────────────────────────────────────┤
│      Provider (SqlClient 등)     │
├─────────────────────────────────────┤
│           Database               │
└─────────────────────────────────────┘

개념 구조도 설명

5층: 애플리케이션 (우리가 만드는 C# 코드)
     ↕
4층: ORM (Dapper, EF Core) - 선택사항
     ↕
3층: ADO.NET (Connection, Command, DataSet 등)
     ↕
2층: Provider (SqlClient, MySqlClient 등)
     ↕
1층: 실제 데이터베이스 (SQL Server, MySQL 등)

각 층이 하는 일

  • 각 층은 자기 역할만 하고 아래층한테 일을 시키는 구조

  • 1층 - Database: 실제 데이터가 저장된 곳

  • 2층 - Provider: "통역사" 역할

    • SqlClient = SQL Server와 대화하는 통역사

    • MySqlClient = MySQL과 대화하는 통역사

    • DB마다 다른 언어(프로토콜)를 쓰니까 각각 통역사가 필요

  • 3층 - ADO.NET: "도구 상자"

    • Connection = DB 문 여는 도구

    • Command = 명령 전달하는 도구

    • DataReader = 데이터 읽는 도구

    • DataSet = 데이터 담는 그릇

  • 4층 - ORM: "자동화 비서" (선택 사항)

    • Dapper = 간단한 매핑만 도와줌
    • EF Core = 거의 모든 걸 자동으로 해줌
  • 5층 - 우리 코드: 실제 우리가 작성하는 부분

DAC

  • DAC (Data Access Component) : DB에 접근하기 위한 구성요소들의 묶음

    • ADO.NET 안에서 실제로 DB와 통신하는 역할로 .NET에서 DB에 접근하는 기술

    • ADO.NET 안에 DAC들이 포함되어 있다

    EX) Connection, Command, DataReader, DataAdapter

MS(.NET)에서 DB 연결 기술 발전 흐름

  • 점점 더 빠르고, 더 특화된 DB 접근 방식

MS 계열 정리

[ ODBC ][ OLE DB (COM 기반) ][ ADO (Classic) ][ ADO.NET ][ NATIVE Provider ]
   ├─ SqlClient (SQL Server)
   ├─ Oracle Provider
   └─ MySQL Provider

ODBC

  • ODBC(Open Database Connectivity) : 프로그램이 특정 DB 종류에 상관없이 데이터에 접근할 수 있도록 해주는 표준 인터페이스

  • 특징

    • 가장 오래된 공통 DB 연결 규격

    • DB마다 드라이버만 바꿔서 사용 가능

    • 성능이 느리고 구조가 복잡함

  • “범용이지만 오래되고 느림”

OLE DB (COM 기반)

  • OLE DB(Object Linking and Embedding Component Object Model) : 관계형 DB뿐 아니라 다양한 데이터 소스에 접근하기 위한 인터페이스

  • 특징

    • MS가 ODBC 단점 보완하려고 만든 기술

    • COM(Component Object Model) : 마이크로소프트가 만든 “언어·프로그램이 달라도 재사용 가능한 컴포넌트 규칙”

      • OLE DB와 ADO는 COM 기반 기술이다.
    • DB뿐 아니라 다양한 데이터 소스 접근 가능

  • “ODBC 개선판, 하지만 COM이라 무거움”

ADO (Classic)

  • ADO(ActiveX Data Objects) : OLE DB를 편하게 쓰기 위해 만든 고수준 데이터 접근 API

  • 특징

    • OLE DB 위에서 동작

    • COM 기반의 라이브러리

    • VB, ASP에서 많이 사용

    • .NET 이전 시대 기술

  • “OLE DB를 편하게 쓰는 껍데기”

ADO.NET

  • ADO.NET : .NET 환경에서 데이터베이스와 애플리케이션을 연결하기 위한 Microsoft의 표준 데이터 접근 기술

    • ORM처럼 자동 매핑이 되지 않음
  • 특징

    • .NET 전용 데이터 접근 기술

      • ADO의 후속
    • 비연결(Disconnected) 구조 지원

    • 성능과 확장성 개선

  • “.NET 시대의 표준 DB 접근 방식”

항목ADOADO.NET
기반COM.NET
연결 방식연결 유지비연결 지원
성능/확장성낮음높음
현재 사용레거시✅ 표준

NATIVE Provider

  • NATIVE Provider : 특정 데이터 베이스를 위해 DB 벤더가 직접 제공한 전용 데이터 접근 드라이버/ 프로바이더

  • 특징

    • DB 제조사가 직접 만든 전용 드라이버

    • 가장 빠르고 안정적

    • ADO.NET에서 주로 사용

  • “현재 주력, 가장 효율적”

ADO.NET 내부 구조 (DAC 구성 요소)

  • Connected / Disconnected 구조

    • ADO.NET은 두 가지 방식 제공

    • Connected : DB 연결 = 계속 유지

      • 대용량 데이터, 빠른 스트리밍 조회, 로그 처리 ,대량 데이터 출력 ,실시간 처리

      • 사용자가 많아질수록 → 커넥션 부족, 성능 저하, 서버 과부하

    • Disconnected : DB는 짧게 연결하고 → 나머지는 메모리에서 처리하자

      • Connected 방법의 문제를 해결 하기 위한 방법

      • 장점 : DB 연결 시간 최소화, 동시 사용자 증가 가능, 웹 환경에 최적

    • Connected, Disconnected 2가지 방법 다 사용

      • 2가지 방법의 장단점을 활용하여 알맞게 사용
  • ADO.NET은 3rd Party를 추가하여 확장 할 수 있다

    • 3rd Party : 당사도 사용자도 아닌 , 외부 업체/개발자가 만든 것

Connected 방식 (실시간 DB 연결)

  • SqlConnection

    • DB와의 연결을 관리하는 객체

    • Connection String을 통해 DB 접속

    • “DB 문을 열고 닫는 역할”

  • SqlCommand

    • SQL 문 또는 Stored Procedure 실행하는 객체

    • SqlConnection 위에서 동작

    • “DB에 명령을 전달”

  • SqlTransaction

    • 트랜잭션 처리하는 객체

    • Commit / Rollback 제공

    • “여러 작업을 하나의 단위로 처리”

Disconnected 방식 (메모리 적재)

DataSet 계층 구조

DataSet
 └─ DataTable
     └─ DataRow
         └─ DataColumn
  • DataSet

    • 메모리 상의 DB 전체 구조를 담는 상위 객체

    • 여러 DataTable을 포함

    • DB 연결을 끊고 메모리에서 작업

  • DataTable

    • 테이블 하나를 메모리에 표현하는 객체

    • 하나의 테이블 구조

    • 행과 열로 구성

  • DataRow / DataColumn

    • DataRow : 한 행(레코드)

      • 테이블의 한 행(row)을 표현하는 객체
    • DataColumn : 컬럼 정의

      • 테이블의 한 열(column)을 표현하는 객체
    • “조회 결과를 메모리에 적재하여 처리”

ADO.NET 사용 방식 정리

구분방식
빠른 조회ExecuteReader
단일 값ExecuteScalar
데이터 수정ExecuteNonQuery
메모리 작업DataSet / DataTable

Execute 메서드 종류

  • Execute 메서드 = SqlCommand가 SQL을 실제로 실행하는 방법

    • SqlCommand : SQL + 실행 환경을 담는 객체

    • DB에 명령을 보내고 실행

    • 실행 결과를 어떤 형태로 받을지를 결정

  • ExecuteNonQuery

    • INSERT / UPDATE / DELETE

    • 반환값: 영향 받은 행 수

    • “결과가 없는 SQL 실행”

  • ExecuteScalar

    • 단일 값 조회

    • 예: COUNT(*), MAX(), SUM()

    • “첫 행 첫 컬럼만 반환”

  • ExecuteReader

    • 순방향(Read-Only) 조회

    • DataReader 사용

    • 빠르고 메모리 효율적

    • “처음부터 끝까지 한 줄씩 읽기”

ORM (Object Relational Mapping)

  • ORM (Object-Relational Mapping) = 객체와 관계형 DB 테이블을 자동으로 매핑해주는 기술

    • DB 테이블 ↔ 객체(Class) 자동 매핑

    • SQL 중심 → 객체 중심 개발

    • 생산성 향상

    • “DB를 객체처럼 다룸”

Dapper

  • Dapper : .NET에서 사용하는 경량 ORM

  • ADO.NET 기반 마이크로 ORM

  • SQL 직접 작성 + 객체 매핑

    • SQL 작성 필요 → SQL 제어 가능

    • 빠르고 가벼움

    • 완전한 ORM 아님, 단순 매핑 중심

  • “실무에서 많이 쓰는 가벼운 ORM”

profile
안녕하세요

0개의 댓글