DB 상호작용: 애플리케이션이 DB와 소통하는 방법

발행: (2025년 12월 30일 오전 01:55 GMT+9)
10 min read
원문: Dev.to

Source: Dev.to

Hello, I’m Maneshwar. I’m working on FreeDevTools online — a free, open‑source hub where developers can quickly find and use dev tools, cheat codes, and TLDRs without the hassle of searching all over the internet.

이전 글에서는 트랜잭션에 초점을 맞췄습니다. 트랜잭션은 동시성 및 장애가 존재할 때 데이터베이스가 올바르게 동작하도록 하는 추상화입니다. 우리는 DBMS가 원자성, 격리성, 그리고 내구성을 보장하는 방식을 살펴보았고, 애플리케이션은 무엇을 수행할지 정의합니다.

하지만 여기서 실질적인 질문이 떠오릅니다:

애플리케이션은 실제로 DBMS와 어떻게 통신하고, 원하는 작업을 어떻게 표현할까요?

현대 데이터베이스 시스템은 파일이나 블록을 직접 조작해서 접근하지 않습니다. 대신 애플리케이션은 잘 정의된 상호작용 모델언어를 통해 DBMS와 상호 작용합니다. 이 경계를 이해하는 것은 성능, 격리, 확장성, 그리고 장애 동작까지 결정하기 때문에 매우 중요합니다.

데이터베이스 상호작용의 두 측면

  1. 상호작용 모델 – 애플리케이션이 DBMS에 연결하고 정보를 교환하는 방식.
  2. 상호작용 언어 – 애플리케이션이 DBMS를 통해 데이터를 정의하고, 질의하며, 수정하는 방법.

두 선택 모두 실제 시스템에서 데이터베이스가 구축되고 사용되는 방식을 형성합니다.

Source:

DBMS와의 상호작용 모델

DBMS는 일반적으로 두 가지 상호작용 모델 중 하나로 동작합니다:

  • 임베디드 모델
  • 클라이언트‑서버 모델

각 모델은 서로 다른 시스템 제약 조건과 설계 목표를 반영합니다.

임베디드 DBMS 모델

임베디드 모델에서는 DBMS가 사용자‑레벨 라이브러리로 구현되어 실행 시 애플리케이션의 일부가 됩니다.

특징

  • DBMS 코드는 애플리케이션 프로세스 내부에서 실행됩니다.
  • 애플리케이션이 DBMS 함수를 직접 호출합니다.
  • 통신은 일반 함수 호출을 통해 이루어집니다.
  • 모든 실행이 단일 프로세스 주소 공간 내에서 이루어집니다.

이는 사실상 셀프‑서비스 데이터베이스 시스템입니다. 애플리케이션은 다른 라이브러리와 마찬가지로 API를 통해 DBMS와 상호작용합니다. 일부 임베디드 시스템에서는 애플리케이션이 콜백 함수를 등록할 수 있게 하여, DBMS가 애플리케이션 메모리 공간 내부의 데이터를 조작해야 할 때 해당 콜백을 호출합니다.

장점 및 제한점

  • 별도의 서버 프로세스가 필요 없음.
  • 오버헤드 최소화.
  • 메모리 사용량이 적음.
  • 애플리케이션과 DBMS 간 결합도가 높음.
  • 동시성 및 확장성이 제한됨.

전형적인 사용 사례

  • 모바일 기기
  • 임베디드 시스템
  • 자원 제한 환경

이러한 상황에서는 별도의 데이터베이스 서버를 실행할 필요가 없거나 비현실적입니다.

클라이언트‑서버 DBMS 모델

클라이언트‑서버 모델에서는 DBMS가 별도의 서버 프로세스로 실행됩니다. 애플리케이션은 클라이언트 역할을 수행합니다:

  • DBMS 코드를 직접 실행하지 않습니다.
  • 가벼운 DBMS 드라이버만 포함합니다.
  • 인터프로세스 통신(IPC)을 통해 DBMS 서버와 통신합니다.

일반적인 IPC 메커니즘

  • TCP/IP 소켓
  • 공유 메모리
  • 기타 OS가 지원하는 IPC 메커니즘

클라이언트는 요청을 보내고, 서버가 이를 실행한 뒤 응답 형태로 결과를 반환합니다.

임베디드 모델과의 차이점

  • 애플리케이션 코드로의 콜백이 없음.
  • DBMS가 애플리케이션 버그로부터 격리됨.
  • 서버가 동시성 및 트랜잭션을 중앙에서 관리함.

대부분의 상용 및 프로덕션급 DBMS는 이 모델을 사용하며, 흔히 데이터베이스 서버라고 부릅니다.

클라이언트‑서버 모델이 지배적인 이유

  • 애플리케이션과 DBMS 사이의 강력한 격리.
  • 높은 동시성 지원.
  • 중앙 집중식 트랜잭션 관리.
  • 향상된 장애 격리.
  • 머신 및 네트워크 전반에 걸친 확장성.

이 모델은 애플리케이션 주소 공간을 작게 유지하고, 애플리케이션 충돌이 데이터베이스 내부를 손상시키는 일을 방지합니다.

Source:

Interaction 언어: 작업 표현 방식

DBMS에 연결하는 것만으로는 절반에 불과합니다. 애플리케이션은 데이터베이스가 수행하기를 원하는 작업을 설명해야 합니다. 크게 두 가지 접근 방식이 있습니다.

절차적 (Prescriptive)

  • 사용자는 각 단계가 어떻게 실행되어야 하는지를 지정합니다.
  • DBMS는 낮은 수준에서 지시를 받습니다.
  • 제어 흐름과 실행 순서가 명시적입니다.

이 접근 방식은 애플리케이션을 실행 전략 및 저장소 세부 사항에 밀접하게 결합시킵니다.

선언적 (Descriptive)

현대 DBMS는 압도적으로 선언적 언어를 사용합니다.

  • 사용자는 무엇을 원하는지 지정합니다.
  • DBMS가 어떻게 실행할지를 결정합니다.
  • 실행 전략은 애플리케이션으로부터 숨겨져 있습니다.

이러한 분리는 의도적이며 강력합니다.

SQL: 관계형 데이터베이스의 언어

가장 널리 사용되는 선언형 언어는 구조적 질의 언어 (Structured Query Language, SQL) 입니다.

SQL은 애플리케이션이 다음을 할 수 있게 합니다:

  • 원하는 결과를 기술한다.
  • 저장 레이아웃을 무시한다.
  • 인덱스, 블록, 접근 경로 등에 대해 고민하지 않는다.

각 SQL 문은:

  • 독립적인 프로그램 또는 서브프로그램이다.
  • 무엇을 계산할지 지정하고, 어떻게 계산할지는 지정하지 않는다.

이러한 책임 분리는 다음을 가능하게 한다:

  • 애플리케이션 개발자는 정확성과 의도에 집중한다.
  • DBMS 개발자는 최적화와 실행에 집중한다.

SQL 구성 요소

SQL은 다음을 정의한다:

  • 기본 데이터 타입의 표준 집합 (INTEGER, VARCHAR, DATE, TIMESTAMP, BLOB 등).
  • 이러한 기본 타입으로 구성된 사용자 정의 도메인.
  • 관계형 데이터와 상호 작용하기 위한 구문과 의미.

SQL 문은 두 가지 주요 범주로 나뉜다.

데이터 정의 언어 (DDL)

데이터베이스 구조를 정의하는 데 사용한다:

  • 테이블
  • 인덱스
  • 제약조건
  • 도메인
  • 트리거

DDL은 데이터베이스의 스키마와 무결성 규칙을 형성한다.

데이터 조작 언어 (DML)

데이터를 다루는 데 사용한다:

  • 행 조회
  • 새로운 행 삽입
  • 기존 행 업데이트
  • 행 삭제

DML 문은 트랜잭션 내부에서 실행되며 ACID 보장을 받는다.

Resources

FreeDevTools screenshot

👉 Check out: FreeDevTools

Any feedback or contributions are welcome! It’s online, open‑source, and ready for anyone to use.

Star it on GitHub: freedevtools

Back to Blog

관련 글

더 보기 »

RDBMS: 관계가 파일과 만나는 곳

안녕하세요, 저는 마네시와르입니다. 저는 현재 FreeDevTools 온라인 https://hexmos.com/freedevtools 를 작업하고 있으며, 모든 dev tools, cheat codes, 그리고 TLDRs를 한 곳에 모으는 것을 목표로 하고 있습니다 —...

인덱스와 DBMS의 부상

안녕하세요, 저는 Maneshwar입니다. 저는 FreeDevTools online https://hexmos.com/freedevtools에서 작업하고 있으며, 현재 모든 dev tools, cheat codes, 그리고 TLDRs를 한 곳에 모으는 작업을 하고 있습니다.