LDAP

LDAP

hwanguu 2024. 10. 5. 21:29

LDAP는 Lightweight Directory Access Protocol의 약자로, 디렉터리 서비스에 접근하기 위해 사용되는 프로토콜입니다. LDAP는 조직 내에서 사용자, 그룹, 장치, 권한 등의 정보를 계층적으로 관리하는 데 적합합니다. 이 프로토콜은 빠른 읽기 성능효율적인 검색을 제공하며, 디렉터리 서비스는 회사 내의 사람이나 자원에 대한 정보 조회와 관리에 유용합니다.

 

LDAP의 주요 개념

  1. 디렉터리 서비스란?
    • 디렉터리 서비스는 사람이나 컴퓨터에 대한 정보를 조직화하고, 쉽게 조회할 수 있도록 해주는 데이터베이스와 유사한 시스템입니다. 주로 읽기 작업이 많고, 정보의 변경이 자주 일어나지 않는 특성을 가지고 있습니다.
    • 예를 들어, 회사 내의 직원 정보(이름, 이메일, 부서 등), 네트워크 리소스(프린터, 파일 서버) 등의 정보를 관리하는 것이 디렉터리 서비스의 역할입니다.
  2. LDAP의 구조
    • LDAP의 데이터는 트리 형태로 구성됩니다. 이 트리를 디렉터리 정보 트리(DIT)라고 부르며, LDAP에서의 데이터는 노드(엔트리)로 표현됩니다.
    • 엔트리는 속성(예: 이름, 이메일, 전화번호 등)을 가질 수 있으며, 각 엔트리는 고유한 DN(Distinguished Name)을 가지고 있어 LDAP 디렉터리 내에서 고유하게 식별됩니다.
    • 예를 들어, 조직의 트리는 다음과 같은 형태일 수 있습니다:
dc=company,dc=com
├── ou=Enter
│   ├── cn=Ava
│   │   ├── mail: ava.smith@company.com
│   │   └── telephoneNumber: +1 234 567 8901
  • dc=company,dc=com은 도메인이고, ou=Enter는 조직 단위, cn=Ava는 사용자 Ava를 나타냅니다.
    dn 으로는 dn: cn:Ava,ou=Enter,dc=company,dc=com 으로 나타낼수 있다.

 

왜 LDAP를 사용해야 하는가?

  1. 계층적 구조로 조직 정보 관리
    • LDAP의 트리 구조는 회사나 조직의 계층적 관계(예: 부서, 팀, 그룹 등)를 자연스럽게 표현할 수 있습니다.
    • 예를 들어, 한 회사의 모든 부서와 부서 내의 직원을 관리하고 싶을 때, LDAP은 조직의 구조에 따라 데이터를 명확하게 조직화할 수 있습니다.
  2. 빠른 조회 및 검색 성능
    • LDAP은 주로 읽기 작업이 많고 변경 작업이 적은 데이터를 관리하는 데 최적화되어 있습니다.
    • 직원 전화번호나 이메일 주소를 조회하는 등, 사용자가 자주 정보를 검색해야 할 때 LDAP은 빠른 검색 속도를 제공하여 유용합니다.
  3. 중앙 집중식 사용자 관리
    • LDAP은 중앙 집중식으로 사용자 정보를 관리할 수 있도록 해줍니다. 예를 들어, 사용자의 인증 정보(아이디, 비밀번호)를 LDAP 디렉터리에서 관리하면, 여러 시스템이 이 정보를 공유하여 사용자 인증을 할 수 있습니다.
    • 이를 통해, 조직 내의 모든 애플리케이션이나 서비스가 LDAP 디렉터리를 참조하여 통합 로그인 시스템(Single Sign-On, SSO)을 구현할 수 있습니다. 즉, 사용자는 한 번 로그인하면 여러 서비스에 별도의 인증 없이 접근할 수 있습니다.
  4. 표준화된 프로토콜
    • LDAP는 여러 디렉터리 서비스(예: OpenLDAP, Microsoft Active Directory, Apache Directory Server)에서 사용되며, 이는 시스템 간 호환성을 보장해줍니다.
    • LDAP 프로토콜은 TCP/IP 위에서 동작하므로, 네트워크를 통해 쉽게 접근할 수 있으며, 이로 인해 다양한 운영체제와 시스템 간의 표준 인터페이스 역할을 합니다.
  5. 보안 관리
    • LDAP은 TLS/SSL과 같은 보안 프로토콜을 사용하여 데이터 전송을 암호화할 수 있습니다. 이를 통해 사용자의 인증 정보민감한 데이터를 안전하게 보호할 수 있습니다.
    • 또한, ACL(Access Control List)을 사용하여 누가 어떤 데이터에 접근할 수 있는지 권한을 관리할 수 있습니다.

 

어떻게 빠른 읽기 성능과 효율적인 검색을 제공하는가?

1. 디렉터리 서비스의 구조적 특징

LDAP는 데이터 저장소로서 계층적 구조(트리 구조)를 사용합니다. 이러한 구조적 특징은 데이터 접근과 검색 속도에 직접적인 이점을 제공합니다.

  • 계층적 데이터 모델: LDAP는 데이터를 DN (Distinguished Name)을 이용해 트리 형태로 저장합니다. 각 데이터는 고유한 위치를 가지며, 계층적인 경로를 따라 접근할 수 있습니다. 이는 특정 데이터에 빠르게 접근하거나 특정 하위 트리에서 데이터를 검색하는 데 유리합니다.
  • 고유한 DN (Distinguished Name): 각 엔트리에는 고유한 DN이 존재하여 엔트리를 고유하게 식별합니다. DN을 이용한 접근은 탐색 과정을 줄여 빠른 데이터 접근을 가능하게 합니다.

2. 인덱싱과 효율적인 검색

LDAP는 디렉터리 엔트리 속성에 대해 인덱스를 생성하여 빠른 검색을 지원합니다.

  • 속성 인덱싱: LDAP 서버는 자주 조회되는 속성 (예: uid, cn, mail)에 대해 인덱스를 생성합니다. 인덱스는 데이터베이스에서 사용하는 B-Tree와 유사한 자료 구조로, 특정 속성의 값을 기준으로 검색할 때 성능을 향상시킵니다. 이 덕분에 속성 기반의 조건 검색이 빠르게 수행됩니다.
  • 필터 기반 검색: LDAP는 효율적인 필터(예: (uid=ava), (cn=Ava) 등)를 사용하여 엔트리를 검색합니다. 이 필터링 기능은 인덱스와 결합되어 매우 빠르게 일치하는 엔트리를 찾을 수 있습니다.

3. 읽기 최적화

LDAP는 주로 읽기 작업을 최적화하도록 설계되었습니다. 이는 여러 클라이언트가 동시에 접근하는 상황에서도 높은 읽기 성능을 보장합니다.

  • 쓰기 작업 최소화: LDAP는 읽기 작업이 많은 환경에 적합합니다. 디렉터리의 데이터는 변경이 빈번하지 않기 때문에, 쓰기 작업이 적고 읽기 작업이 빈번한 시나리오에서 효율적입니다.
  • 쓰기 작업 분리: LDAP 서버는 종종 읽기와 쓰기 작업을 분리하여 처리합니다. 이러한 구조는 읽기 작업이 쓰기 작업에 의해 지연되지 않도록 하여 높은 읽기 성능을 유지하게 해줍니다.

4. 캐싱 (Caching)

LDAP 서버는 클라이언트 요청에 대한 결과를 캐싱하여, 동일한 데이터에 대한 반복적인 접근을 빠르게 처리할 수 있습니다.

  • 엔트리 및 인덱스 캐싱: 자주 조회되는 엔트리와 인덱스를 메모리에 캐시하여 검색 속도를 높입니다. 이를 통해 LDAP는 디스크 접근 시간을 줄이고, 응답 속도를 크게 향상시킬 수 있습니다.
  • 결과 캐싱: 동일한 쿼리에 대해 반복적으로 요청이 들어올 경우, 캐시된 결과를 반환하여 성능을 최적화합니다.

5. 분산 및 복제 (Replication)

LDAP는 데이터 분산 및 복제를 통해 검색 성능과 가용성을 높입니다.

  • 마스터-슬레이브 복제: LDAP 디렉터리는 데이터를 여러 복제 서버에 저장하여, 클라이언트 요청을 분산 처리할 수 있습니다. 일반적으로 한 개의 마스터 서버에서 데이터 변경을 관리하고, 여러 개의 슬레이브 서버가 읽기 요청을 처리합니다. 이렇게 하면 읽기 작업을 병렬 처리할 수 있어 성능이 향상됩니다.
  • 로드 밸런싱: 여러 서버에 데이터를 복제하고 로드 밸런서를 사용하여 클라이언트의 읽기 요청을 분산 처리함으로써, 요청이 한 서버에 집중되는 것을 방지하고 전체적인 성능을 높입니다.

6. 경량화된 프로토콜 설계

LDAP 프로토콜 자체가 경량화되도록 설계되었습니다.

  • 간단한 네트워크 오버헤드: LDAP는 간단한 요청/응답 패턴을 사용하여 네트워크 오버헤드를 최소화합니다. 데이터 형식이 간단하고 구조화되어 있어 데이터의 직렬화 및 역직렬화가 빠릅니다.
  • 연결 유지: LDAP는 클라이언트와 서버 간의 연결을 유지할 수 있어, 새로운 연결을 생성하는 데 드는 오버헤드를 줄이고 연속적인 요청에 대해 빠른 응답을 제공합니다.

요약

LDAP는 다음과 같은 이유로 빠른 읽기 성능과 효율적인 검색을 제공합니다:

  1. 계층적 구조: 트리 기반의 계층적 구조로 데이터를 관리하여 빠른 탐색을 가능하게 함.
  2. 속성 인덱싱: 자주 검색되는 속성에 대해 인덱스를 생성하여 빠른 필터 기반 검색 지원.
  3. 읽기 최적화: 읽기 작업이 빈번한 환경에 적합하도록 설계되고, 쓰기 작업은 최소화함.
  4. 캐싱: 자주 조회되는 엔트리와 인덱스를 캐싱하여 디스크 접근 시간을 줄이고 성능을 향상.
  5. 복제와 분산: 마스터-슬레이브 복제 구조를 통해 읽기 요청을 여러 서버에 분산시켜 성능을 높임.
  6. 경량화된 프로토콜: 간단한 데이터 형식과 효율적인 네트워크 사용으로 인해 요청 및 응답 시간이 짧음.

 

예시로 LDAP 사용 이해하기

가령, 회사의 직원 정보와 관련된 데이터베이스가 있다고 생각해보자

  • LDAP의 구조에서는 다음과 같은 계층을 통해 데이터가 저장됩니다
dc=company,dc=com
├── ou=IT
│   ├── cn=John Doe
│   │   ├── mail: john.doe@company.com
│   │   ├── telephoneNumber: +1 111 222 3333
│   │   └── title: Software Developer
  • 위의 구조에서, 회사의 모든 정보는 dc=company,dc=com 아래에 저장됩니다.
  • IT 부서(ou=IT) 아래에 cn=John Doe라는 사용자가 있고, 이 사용자의 속성들(mail, telephoneNumber, title)이 있습니다.

LDAP을 사용하지 않는다면, 이 정보를 관계형 데이터베이스에 저장하고, 여러 테이블을 만들어서 관계를 정의하고, 이를 조인하여 원하는 데이터를 가져와야 합니다. 그러나 LDAP에서는 트리 구조로 쉽게 조직화할 수 있고, 특정 부서나 사용자를 찾는 것도 LDAP 필터를 이용하여 매우 간단하게 할 수 있습니다.

'LDAP' 카테고리의 다른 글

LDAP Docker로 실행하기  (3) 2024.10.06
LDAP 필터  (0) 2024.10.05
LDAP 용어 정리  (1) 2024.10.05
LDAP 검색 스코프(base, one, subree, children)  (1) 2024.10.05
LDAP에서 주요 objectClass 유형  (1) 2024.10.05