LIT-ldap-overview
2026-02-15
요약
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 DAP | LDAP |
|---|---|---|
| 프로토콜 스택 | OSI 7계층 전체 | TCP/IP |
| 복잡도 | 높음 (BER 인코딩 전체) | 낮음 (BER의 부분집합) |
| 구현 난이도 | 높음 | 낮음 |
| 데이터 모델 | X.500 (원본) | X.500 기반 (간소화) |
| 배포 환경 | 폐쇄 네트워크 | 인터넷 |
역사적 흐름:
- 1988: ITU-T가 X.500 디렉토리 서비스 표준 승인 (X.400 이메일 시스템 지원 목적)
- 1989-1991: X.500을 인터넷에 배포하면서 DAP의 무거움 확인
- 초기 LDAP: TCP/IP 위에서 X.500 게이트웨이에 접근하는 경량 프로토콜로 개발
- 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 포트와 보안
| 포트 | 이름 | 보안 | 설명 |
|---|---|---|---|
| 389 | LDAP | 비암호화 또는 StartTLS | 평문으로 시작 후 StartTLS로 암호화 전환 가능 |
| 636 | LDAPS | TLS/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 | 인증 방법과 보안 메커니즘 |
| 4514 | DN의 문자열 표현 |
| 4515 | 검색 필터의 문자열 표현 |
| 4516 | LDAP URL 형식 |
| 4517-4518 | 구문, 매칭 규칙, 국제화 |
| 4519 | 사용자 애플리케이션용 스키마 |
LDAP의 3대 핵심 용도
- 인증 (Authentication): 사용자가 누구인지 확인 (Bind 연산)
- 인가 (Authorization): 사용자가 무엇을 할 수 있는지 결정 (ACL, 그룹 멤버십)
- 사용자 정보 관리: 이름, 이메일, 소속, 권한 등 중앙 관리
이 세 가지가 LDAP이 거의 모든 기업 인프라에 존재하는 이유이다.
주요 LDAP 구현체
| 구현체 | 설명 |
|---|---|
| OpenLDAP | 오픈소스 LDAP 서버. MDB 백엔드, OLC(cn=config) 설정 (LIT-slapd-overview 참조) |
| 389 Directory Server | Red Hat 후원 오픈소스. Red Hat IdM/FreeIPA의 기반 (LIT-389-directory-server-overview 참조) |
| Active Directory | Microsoft의 디렉토리 서비스. LDAP + Kerberos + DNS 통합 |
| FreeIPA | 389 DS + MIT Kerberos + DNS + 인증서 관리 통합 (LIT-freeipa-overview 참조) |
| Apache Directory Server | Apache 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: [[]]