gonnux.com



LIT-ldap-overview

2026-02-15

topic/infra
topic/ldap

요약

LDAP(Lightweight Directory Access Protocol)은 디렉토리 서비스에 접근하기 위한 표준 프로토콜이다. X.500의 DAP가 OSI 스택 위에서 동작하여 무거웠던 것을 TCP/IP 위에서 경량화한 것이 출발점이며, LDAPv3(RFC 4511, 2006년)에서 독립적인 디렉토리 서비스 프로토콜로 성숙했다. 핵심 설계 철학은 읽기·검색 최적화이며, 관계형 데이터베이스와 달리 트리 구조(DIT)에서 속성 기반 데이터를 관리한다.

핵심 포인트

LDAP이란 무엇인가

LDAP은 프로토콜이다. 디렉토리 서비스 자체가 아니라, 디렉토리 서비스에 접근하는 방법을 정의한다. 클라이언트(DUA)가 서버(DSA)에 요청을 보내고 응답을 받는 클라이언트-서버 모델이다.

┌─────────┐   LDAP 프로토콜 (TCP/IP)   ┌─────────┐
│ 클라이언트 │ ◄──────────────────────► │   서버    │
│  (DUA)   │   포트 389 또는 636       │  (DSA)   │
└─────────┘                           └─────────┘
                                      디렉토리 데이터
                                      (DIT에 저장)
  • DUA (Directory User Agent): 클라이언트. 사용자를 대신하여 디렉토리 접근
  • DSA (Directory System Agent): 서버. 디렉토리 정보 관리 및 요청 처리

X.500에서 LDAP으로: 왜 "경량"인가

구분X.500 DAPLDAP
프로토콜 스택OSI 7계층 전체TCP/IP
복잡도높음 (BER 인코딩 전체)낮음 (BER의 부분집합)
구현 난이도높음낮음
데이터 모델X.500 (원본)X.500 기반 (간소화)
배포 환경폐쇄 네트워크인터넷

역사적 흐름:

  1. 1988: ITU-T가 X.500 디렉토리 서비스 표준 승인 (X.400 이메일 시스템 지원 목적)
  2. 1989-1991: X.500을 인터넷에 배포하면서 DAP의 무거움 확인
  3. 초기 LDAP: TCP/IP 위에서 X.500 게이트웨이에 접근하는 경량 프로토콜로 개발
  4. LDAPv3 (RFC 4511, 2006): 게이트웨이 없이 독립적 디렉토리 서버 프로토콜로 진화

핵심: LDAP의 "Lightweight"는 OSI 스택 대신 TCP/IP를 사용하고, X.500 DAP의 기능을 간소화했다는 의미이다.

LDAP 프로토콜 연산 10가지

모든 연산은 LDAPMessage 엔벨로프로 감싸지며, 고유한 messageID로 식별된다. 비동기 처리가 가능하여 여러 요청/응답이 순서 무관하게 교환된다.

연산목적비유
Bind인증 (연결의 신원 설정)로그인
Unbind연결 종료로그아웃
Search조건에 맞는 엔트리 검색SELECT ... WHERE
Add새 엔트리 생성INSERT
Delete엔트리 삭제DELETE
Modify엔트리 속성 변경UPDATE
Modify DN엔트리 이름/위치 변경RENAME / MOVE
Compare특정 속성값 존재 여부 확인EXISTS 검사
Abandon진행 중인 요청 취소요청 취소
Extended확장 연산 (StartTLS 등)플러그인 연산

참고: SQL과의 비유는 이해를 돕기 위한 것이며, LDAP은 관계형 모델이 아니라 트리 모델이므로 정확히 대응되지는 않는다.

디렉토리 서비스 vs 관계형 데이터베이스

LDAP 디렉토리는 "특수한 데이터베이스"이지만, 관계형 DB와는 설계 목적이 근본적으로 다르다.

특성LDAP 디렉토리관계형 데이터베이스
최적화 대상읽기·검색읽기·쓰기 균형
데이터 구조트리 (DIT)테이블 (행/열)
스키마objectClass 기반테이블 스키마
트랜잭션단일 연산 원자성만ACID 트랜잭션
참조 무결성제한적강력 (외래 키)
데이터 성격안정적, 자주 읽힘빈번한 변경
주요 용도사용자/그룹 관리, 인증비즈니스 데이터, 트랜잭션
쿼리 언어LDAP 검색 필터SQL

핵심: LDAP은 "한 번 쓰고 자주 읽는" 데이터에 적합하다. 사용자 계정, 조직 구조, 네트워크 자원 정보 등이 대표적이다.

LDAP 포트와 보안

포트이름보안설명
389LDAP비암호화 또는 StartTLS평문으로 시작 후 StartTLS로 암호화 전환 가능
636LDAPSTLS/SSL연결 시작부터 암호화
  • StartTLS: 389 포트에서 평문 연결 후 TLS로 업그레이드. Extended 연산의 일종
  • LDAPS: 636 포트에서 연결 시작부터 TLS. RFC에서 공식 표준화되지 않았으나 널리 사용됨
  • LDAPI: UNIX 도메인 소켓을 통한 로컬 접근 (LIT-ldapi-summary 참조)

LDAP RFC 시리즈

LDAPv3는 RFC 4510을 로드맵으로 하는 9개 RFC로 구성된다:

RFC내용
4510기술 사양 로드맵
4511프로토콜 (연산, 메시지 구조)
4512디렉토리 정보 모델 (스키마, DIT)
4513인증 방법과 보안 메커니즘
4514DN의 문자열 표현
4515검색 필터의 문자열 표현
4516LDAP URL 형식
4517-4518구문, 매칭 규칙, 국제화
4519사용자 애플리케이션용 스키마

LDAP의 3대 핵심 용도

  1. 인증 (Authentication): 사용자가 누구인지 확인 (Bind 연산)
  2. 인가 (Authorization): 사용자가 무엇을 할 수 있는지 결정 (ACL, 그룹 멤버십)
  3. 사용자 정보 관리: 이름, 이메일, 소속, 권한 등 중앙 관리

이 세 가지가 LDAP이 거의 모든 기업 인프라에 존재하는 이유이다.

주요 LDAP 구현체

구현체설명
OpenLDAP오픈소스 LDAP 서버. MDB 백엔드, OLC(cn=config) 설정 (LIT-slapd-overview 참조)
389 Directory ServerRed Hat 후원 오픈소스. Red Hat IdM/FreeIPA의 기반 (LIT-389-directory-server-overview 참조)
Active DirectoryMicrosoft의 디렉토리 서비스. LDAP + Kerberos + DNS 통합
FreeIPA389 DS + MIT Kerberos + DNS + 인증서 관리 통합 (LIT-freeipa-overview 참조)
Apache Directory ServerApache Foundation의 Java 기반 LDAP 서버

나의 생각

  • LDAP의 본질은 **"네트워크상의 전화번호부 프로토콜"**이다. 전화번호부처럼 자주 찾아보지만 내용은 잘 바뀌지 않는 데이터를 트리 구조로 관리하고 빠르게 검색하는 것이 핵심 목적이다. [추론]
  • "Lightweight"라는 이름이 오해를 일으킬 수 있다. LDAP 자체가 단순하다는 뜻이 아니라, X.500 DAP에 비해 가볍다는 의미이다. 실제로 LDAP은 스키마, 리플리케이션, ACL 등 상당히 복잡한 체계를 가지고 있다. [추론]
  • 이 vault의 기존 노트들과의 관계: LIT-LDAP-data-model-summary가 다루는 DN/RDN/objectClass는 LDAP이 무엇을 관리하는가(데이터 모델)에 해당하고, 이 노트의 연산/프로토콜은 어떻게 접근하는가(프로토콜)에 해당한다. 둘을 합쳐야 LDAP의 전체 그림이 된다.
  • 디렉토리 서비스가 DB와 다른 가장 핵심적인 차이는 읽기 편향 최적화트리 기반 네임스페이스이다. 이 두 가지 설계 선택이 LDAP의 모든 특성(단일 연산 원자성, 제한적 참조 무결성, DIT 구조)을 결정한다. [추론]

Links

  • 원본: REF-rfc4511-ldap-protocol
  • 관련 (데이터 모델): LIT-ldap-data-model-summary
  • 관련 (OpenLDAP): LIT-slapd-overview
  • 관련 (389 DS): LIT-389-directory-server-overview
  • 관련 (LDAPI): LIT-ldapi-summary
  • 관련 (FreeIPA): LIT-freeipa-overview
  • 관련 (Kerberos): LIT-kerberos-implementations-overview
  • 관련 (디렉토리 식별자 비교): LIT-directory-object-identifier-comparison
  • 관련 Permanent Note: [[]]