LDAP 디렉터리 서비스의 구조와 인증·검색 방식
LDAP 디렉터리 서비스의 DIT 구조, DN·속성·스키마, 인증과 검색 작업, 보안 설계 원칙을 정리한다.
2026-08-14 · 최초 발행 2025-08-10
조회 중심의 디렉터리 정보를 다루는 LDAP
LDAP(Lightweight Directory Access Protocol)은 TCP/IP 네트워크에서 디렉터리 서비스를 조회하거나 수정하기 위한 경량 응용 프로토콜이다. X.500 디렉터리 서비스의 복잡성을 줄인 형태로 개발됐으며, 기업 환경에서는 중앙화된 인증과 권한 관리에 널리 사용된다.
사용자 인증뿐 아니라 주소록, 조직 구조, 시스템 자원 정보를 한곳에서 관리하는 데도 활용된다. 디렉터리는 비슷한 특성을 가진 객체를 논리적·계층적으로 모은 집합이다. 전화번호부처럼 이름과 연결된 전화번호, 주소 정보를 찾는 구조를 떠올리면 이해하기 쉽다.
관계형 데이터베이스와 비교하면 트랜잭션 처리나 복잡한 질의에는 제약이 있지만, 단순 조회에는 특화돼 있다. 읽기 작업이 쓰기 작업보다 훨씬 많은 정보를 다룰 때 LDAP이 어울리는 이유다.
도메인 이름을 따라 확장되는 DIT
LDAP 디렉터리는 DIT(Directory Information Tree)라는 트리 구조로 구성된다. 상위 수준에서는 일반적으로 DNS 체계를 활용하며, 정치적·지리적·조직적 경계를 트리에 반영할 수 있다.
트리의 기본 단위는 항목(Entry)이다. 사람, 장치, 조직 같은 객체를 항목으로 표현하며, 각 항목은 DN(Distinguished Name)으로 고유하게 식별한다.
uid=jsmith,ou=people,dc=example,dc=com처럼 DN은 가장 구체적인 정보인 uid=jsmith부터 상위 컨테이너까지의 경로를 담는다. 항목 안에는 이름-값 쌍 형태의 속성(Attribute)이 들어간다. cn(Common Name), sn(Surname), mail, telephoneNumber가 그 예다.
스키마가 정하는 데이터 형식
스키마는 LDAP 디렉터리에 저장할 데이터 유형과 구조를 정의한다. 객체 클래스(Object Class)는 항목에 포함할 수 있는 필수 속성과 선택 속성을 정하며, person, organizationalPerson, inetOrgPerson 등이 여기에 해당한다.
속성 유형(Attribute Type)은 속성 이름, 구문, 매칭 규칙을 정의한다. 구문(Syntax)은 문자열, 숫자, 바이너리처럼 속성값의 형식을 결정한다. 조직 구조를 표현하는 일과 데이터를 일관된 방식으로 저장하는 일을 함께 설계해야 하는 이유다.
연결부터 검색·변경까지의 작업
LDAP은 클라이언트-서버 모델로 동작한다. 기본 TCP/IP 포트는 비암호화 연결에 389, SSL/TLS 암호화 연결에 636을 사용한다.
StartTLS는 LDAPv3에서 TLS 보안 연결을 위한 확장 기능이다. Bind 작업은 인증과 LDAP 프로토콜 버전 지정을 담당하며, 인증 방식으로는 인증 정보 없이 접근하는 익명 바인드, DN과 비밀번호를 사용하는 단순 바인드, 고급 인증 메커니즘을 사용하는 SASL 바인드가 있다.
Search는 디렉터리 항목을 찾고 조회하는 작업이다. 검색 시작점인 검색 베이스와 base, one, sub 중 하나의 검색 범위를 정한 뒤 필터를 적용한다. (objectClass=person), (&(uid=jsmith)(mail=*@example.com)) 같은 조건을 사용할 수 있다.
Compare는 특정 항목에 특정 속성값이 있는지 확인한다. Add, Delete, Modify는 항목을 추가·삭제·수정하며, ModifyDN은 항목의 DN을 바꾸거나 항목을 이동할 때 사용한다. Abandon은 이전 요청을 중단하고, Extended Operation은 표준 작업 밖의 기능을 정의한다. Unbind는 연결을 종료하는 작업이며 Bind의 반대 개념은 아니다.
URI로 표현하는 검색 대상
LDAP 리소스는 다음 URI 형식으로 지정할 수 있다.
ldap://host:port/DN?attributes?scope?filter?extensions
여기서 host는 LDAP 서버 호스트명, port는 포트 번호이며 기본값은 389이다. DN은 검색 시작점이고, attributes는 반환할 속성 목록이다. scope에는 base, one, sub가 들어가며, filter는 검색 조건, extensions는 추가 옵션을 나타낸다.
ldap://ldap.example.com:389/ou=people,dc=example,dc=com?cn,mail?sub?(objectClass=person)은 ou=people,dc=example,dc=com 아래에서 사람 객체를 검색하면서 cn, mail 속성을 반환하는 예시다.
중앙 인증 저장소로 연결하는 방식
단순 인증(Simple Authentication)은 DN과 비밀번호를 평문으로 전송하므로 보안 위험이 있다. TLS/SSL과 함께 사용하는 것이 권장된다. SASL(Simple Authentication and Security Layer)은 DIGEST-MD5, GSSAPI(Kerberos), EXTERNAL 등 다양한 인증 메커니즘을 지원한다. 익명 인증(Anonymous Authentication)은 인증 정보 없이 공개 정보에만 접근할 때 사용한다.
기업 인증 시스템에서는 LDAP을 모든 시스템의 중앙 사용자 인증 및 권한 관리 지점으로 둘 수 있다. Active Directory, OpenLDAP, IBM Security Directory Server 등이 활용된다.
SSO 시스템에서는 LDAP을 중앙 인증 저장소로 활용해 여러 서비스와 통합할 수 있다. 사용자는 한 번의 인증으로 여러 시스템에 접근한다.
이메일 주소록도 LDAP의 대표적인 활용처다. 이메일 클라이언트가 LDAP 서버에 연결해 조직의 주소록 정보를 조회하며, 대규모 기업의 연락처 관리에 사용할 수 있다.
선택할 수 있는 LDAP 서버 구현체
OpenLDAP은 오픈소스 LDAP 디렉터리 서버 구현체다. Microsoft Active Directory는 Windows 환경의 디렉터리 서비스로 LDAP 프로토콜을 지원한다. Java 기반의 Apache Directory Server, 엔터프라이즈급 IBM Security Directory Server, 고성능 LDAP 디렉터리 서버인 Oracle Unified Directory도 구현 제품으로 사용할 수 있다.
공개 범위와 변경을 함께 통제하기
LDAP에 단순 인증을 사용할 때는 평문 전송을 피하고 TLS/SSL 암호화를 적용해야 한다. ACL(접근 제어 리스트)을 설정해 데이터를 보호하고, 특히 공개 인터넷에서는 디렉터리 정보의 노출을 최소화해야 한다.
계정 잠금 정책은 무차별 대입 공격을 방지하는 데 필요하다. 정기적인 보안 감사와 로그 모니터링도 함께 운영해야 한다.
디렉터리 구조는 조직을 반영하되 확장성을 고려해 설계한다. 검색 성능을 위한 적절한 인덱싱, 표준 객체 클래스와 속성의 활용, 불필요한 복잡성을 줄인 명확한 구조가 필요하다. LDAP은 변경 빈도가 낮은 데이터를 다루는 데 적합하다.
LDAP은 단순 정보 조회에 최적화된 디렉터리 접근 방식이며, 사용자 인증과 주소록 관리, 다양한 시스템 통합의 중심점으로 사용된다. 클라우드 환경에서도 하이브리드 ID 관리 솔루션의 일부로 중요성을 유지하고 있다.