디렉토리 서비스

컴퓨팅에서 **디렉터리 서비스**(directory service) 또는 **네임 서비스**(name service)는 네트워크 리소스의 이름을 해당 네트워크 주소로 매핑한다. 이는 볼륨, 폴더, 파일, 프린터, 사용자, 그룹, 장치, 전화번호 및 기타 객체를 포함할 수 있는 일상적인 항목과 네트워크 리소스를 찾고, 관리하고, 운영하고, 정리하기 위한 공유 정보 인프라이다. 디렉터리 서비스는 네트워크 운영체제의 핵심 구성 요소이다. **디렉터리 서버** 또는 네임 서버는 이러한 서비스를 제공하는 서버이다. 네트워크상의 각 리소스는 디렉터리 서버에 의해 객체로 간주된다. 특정 리소스에 대한 정보는 해당 리소스 또는 객체와 관련된 속성의 집합으로 저장된다.

디렉터리 서비스는 네트워크를 위한 이름공간을 정의한다. 이름공간은 각 객체에 이름(고유 식별자)을 할당하는 데 사용된다. 디렉터리는 일반적으로 네트워크 리소스의 명명 및 식별 방법을 결정하는 규칙 세트를 가지고 있으며, 여기에는 대개 식별자가 고유하고 명확해야 한다는 요구 사항이 포함된다. 디렉터리 서비스를 사용할 때 사용자는 네트워크 리소스의 물리적 주소를 기억할 필요가 없으며, 이름을 제공하면 리소스를 찾을 수 있다. 일부 디렉터리 서비스에는 접근 제어 규정이 포함되어 있어 디렉터리 정보의 가용성을 허가된 사용자로 제한한다.

## 관계형 데이터베이스와의 비교
몇 가지 사항이 디렉터리 서비스를 관계형 데이터베이스와 구별한다. 성능에 도움이 된다면 데이터를 중복되게 만들 수 있다(예: 키를 통해 다른 테이블의 내용과 연결하는 대신 테이블의 행을 통해 값을 반복하는 방식이며, 이 기술을 역정규화라고 한다. 또 다른 기술로는 실제 처리량을 늘리기 위해 복제본을 활용하는 것이 있을 수 있다).

디렉터리 스키마는 객체 클래스, 속성, 이름 바인딩 및 지식(이름공간)이며, 여기서 객체 클래스는 다음을 갖는다:
* 필수(Must) - 각 인스턴스가 반드시 가져야 하는 속성
* 선택(May) - 인스턴스에 대해 정의할 수 있지만 생략할 수 있는 속성으로, 부재 시 관계형 데이터베이스의 NULL과 유사함

속성은 때때로 다중 값을 가질 수 있어 한 수준에서 여러 명명 속성(예: 기기 유형과 일련번호의 문자열 연결, 또는 "업무용 전화"에 대한 여러 전화번호)을 허용한다. 속성과 객체 클래스는 대개 업계 전반에서 표준화되어 있다. 예를 들어, X.500 속성과 클래스는 종종 객체 ID를 위해 IANA에 공식적으로 등록된다. 따라서 디렉터리 애플리케이션은 기존 디렉터리 서버 소프트웨어의 이점을 극대화하기 위해 표준 클래스와 속성을 재사용하려고 노력한다.

객체 인스턴스는 이름공간에 배치된다. 각 객체 클래스는 부모 객체 클래스로부터(궁극적으로는 계층의 루트로부터) 상속받아 필수-선택 목록에 속성을 추가한다. 디렉터리 서비스는 종종 IT 시스템의 컴퓨터 보안 설계의 중심이 되며, 그에 상응하는 미세한 수준의 접근 제어 단위를 가진다.

## 복제 및 분산
복제(Replication)와 분산(Distribution)은 디렉터리 서비스의 설계 및 관리에서 뚜렷한 의미를 갖는다. 복제는 중복성과 처리량 향상을 위해 동일한 디렉터리 이름공간(동일한 객체들)이 다른 디렉터리 서버로 복사됨을 나타내는 데 사용되며, 복제된 이름공간은 동일한 권한체계에 의해 관리된다. 분산은 서로 다른 이름공간에 있는 여러 디렉터리 서버가 상호 연결되어 분산 디렉터리 서비스를 형성함을 나타내는 데 사용되며, 각 이름공간은 서로 다른 권한체계에 의해 관리될 수 있다.

## 구현
디렉터리 서비스는 공통 네트워크 표준과 다중 벤더 상호 운용성을 위한 개방형 시스템 간 상호 접속(OSI) 이니셔티브의 일부였다. 1980년대 동안 국제전기통신연합(ITU)과 국제 표준화 기구(ISO)는 처음에 사업자 간 전자 메시징 및 네트워크 이름 조회 요구 사항을 지원하기 위해 디렉터리 서비스를 위한 X.500 표준 세트를 만들었다. LDAP(Lightweight Directory Access Protocol)은 X.500 디렉터리 정보 서비스를 기반으로 하며, 인터넷에서 TCP/IP 스택과 X.500 디렉터리 액세스 프로토콜(DAP) 문자열 인코딩 체계를 사용한다.

X.500 이전에 개발된 시스템은 다음과 같다:
* 도메인 네임 시스템 (DNS): 인터넷상의 첫 번째 디렉터리 서비스로 현재도 사용 중이다.
* 헤시오드: DNS를 기반으로 하며 MIT의 프로젝트 아테나에서 사용되었다.
* 네트워크 정보 서비스 (NIS): 원래 옐로우 페이지(YP)로 불렸으며, 유닉스 네트워크 환경을 위한 썬 마이크로시스템즈의 디렉터리 서비스 구현체이다. 헤시오드와 유사한 역할을 했다.
* 넷인포: 1980년대 후반 NeXT가 넥스트스텝을 위해 개발했다. 애플에 인수된 후 오픈 소스로 공개되었으며, LDAP 기반의 오픈 디렉터리로 대체되기 전까지 Mac OS X의 디렉터리 서비스였다. 넷인포에 대한 지원은 10.5 레오파드 출시와 함께 제거되었다.
* 바냔 바인스: 최초의 확장 가능한 디렉터리 서비스이다.
* NT 도메인: 윈도우 2000에서 LDAP 기반의 액티브 디렉터리가 출시되기 전까지 윈도우 기기에 디렉터리 서비스를 제공하기 위해 마이크로소프트가 개발했다. 윈도우 비스타는 최소 인증 프로토콜을 완화한 후에도 NT 도메인을 계속 지원한다.

### LDAP 구현체
LDAP/X.500 기반 구현체는 다음과 같다:
* 389 디렉터리 서버: 레드햇의 자유 오픈 소스 서버 구현체로, 레드햇과 SUSE의 상업적 지원을 받는다.
* 액티브 디렉터리: 마이크로소프트의 윈도우용 디렉터리 서비스로, X.500 디렉터리에서 유래하여 익스체인지 서버에서 사용하기 위해 만들어졌으며, Windows 2000 Server와 함께 처음 출시되어 이후 버전의 윈도우에서도 지원된다.
* 아파치 디렉터리 서버: 자바로 작성된 디렉터리 서비스로, LDAP, 커버로스 5 및 비밀번호 변경 프로토콜을 지원하며 LDAPv3 인증을 받았다.
* 애플 오픈 디렉터리: 애플의 Mac OS X용 디렉터리 서버로, Mac OS X Server를 통해 사용할 수 있다.
* eDirectory: 넷아이큐의 디렉터리 서비스 구현체로 마이크로소프트 윈도우, 넷웨어, 리눅스 및 여러 종류의 유닉스를 포함한 다중 아키텍처를 지원하며 사용자 관리, 구성 및 소프트웨어 관리에 사용된다. 이전에는 노벨 디렉터리 서비스(Novell Directory Services)로 알려졌다.
* 레드햇 디렉터리 서버: 레드햇은 AOL의 넷스케이프 보안 솔루션 부문으로부터 인수한 레드햇 디렉터리 서버를 커뮤니티 지원 프로젝트인 389 디렉터리 서버를 기반으로 레드햇 엔터프라이즈 리눅스에서 실행되는 상용 제품으로 출시했다. 상위 오픈 소스 프로젝트는 FreeIPA라고 불린다.
* 오라클 인터넷 디렉터리: (OID)는 오라클의 디렉터리 서비스로, LDAP 버전 3와 호환된다.
* 썬 자바 시스템 디렉터리 서버: 썬 마이크로시스템즈의 디렉터리 서비스이다.
* OpenDS: 썬 마이크로시스템즈가 지원하는 자바 기반의 오픈 소스 디렉터리 서비스이다.
* 오라클 통합 디렉터리: (OUD)는 오라클의 차세대 통합 디렉터리 솔루션이다. 저장소, 동기화 및 프록시 기능을 통합한다.
* 윈도우 NT 디렉터리 서비스(NTDS)는 나중에 액티브 디렉터리로 이름이 바뀌었으며 기존의 NT 도메인 시스템을 대체했다.
* 크리티컬 패스 디렉터리 서버
* OpenLDAP: 원래의 미시간 대학교 LDAP 구현체(넷스케이프, 레드햇, 페도라 및 썬 JSDS 구현체와 같음)에서 파생되었으며, 모든 컴퓨터 아키텍처(유닉스 및 유닉스 파생 모델, 리눅스, 윈도우, z/OS 및 다수의 임베디드 실시간 시스템 포함)를 지원한다.
* 로터스 도미노
* 넥서 디렉터리
* OpenDJ - 공동 개발 및 배포 허가서(CDDL) 라이선스 하에 모든 운영 환경에서 실행되는 자바 기반 LDAP 서버 및 디렉터리 클라이언트이다. 2016년까지 포지락에서 개발했으며, 현재는 OpenDJ 커뮤니티에서 유지 관리하고 있다.

디렉터리 서비스를 만들기 위한 오픈 소스 도구로는 OpenLDAP, 커버로스 프로토콜 및 삼바 소프트웨어가 있으며, 이는 커버로스 및 LDAP 백엔드를 통해 윈도우 도메인 컨트롤러 역할을 수행할 수 있다. 관리는 GOsa 또는 Samba SWAT에 의해 이루어진다.

## 네임 서비스 사용

### 유닉스 시스템
유닉스 시스템의 네임 서비스는 일반적으로 nsswitch.conf를 통해 구성된다. 네임 서비스의 정보는 getent를 사용하여 검색할 수 있다.

## 같이 보기
* 접근 제어 목록
* 디렉터리 서비스 마크업 언어
* 계층형 모델
* LDAP 데이터 교환 형식
* 메타디렉터리
* 서비스 전달 플랫폼
* 가상 디렉터리

## 각주
### 인용

### 참고 자료

* 

분류:도메인 네임 시스템
분류:컴퓨터 접근 제어
분류:컴퓨터 접근 제어 프로토콜
분류:디렉토리 서비스