이는 순전히 단순한 호기심에서 시작합니다.
Spring 프로젝트를 시작할 때 Security 구역에서 볼 수 있는 설정 중 하나로 Spring LDAP이 있다.
수많은 궁금한 설정들 중 이것에 갑자기 꽂혔고 이를 조사하기 시작합니다. 과연 LDAP 자체는 무엇이며 Spring LDAP은 어떤 것을 지원하는 것인지 알아보자.
먼저 Directory에 대해서 알아보자.
Directory Service는 그렇다면 이 directory를 가지고 무엇을 할까?
즉, Directory에 네트워크 자원과 사용자를 저장하고 이것을 관리하는 SW라고 보면 된다. 근데 왜 Directory를 얘기하느냐.
LDAP 자체가 Directory에 관련한 프로토콜이라 알고 싶어서였다.

X.500은 디렉터리 서비스에 관한 네트워크 표준 중 하나이다. 아래의 사진은 X.500의 구조이다.
사용자나 응용 프로그램은 Directory를 사용하고자 할 때 먼저는 DUA(Directory User Agent)를 통한다. DUA는 X.500 통신 네트워크에서 X.500 directory와 SW 혹은 유저의 연결체 역할을 한다.
DUA는 Directory와 통신을 하는데 이 때 연결되는 곳은 DSA(Directory Server Agent)이다. DSA는 X.500 통신 네트워크에서 인증, 연결및 서비스에 대한 접근과 관리를 하는 SW agent이다.
Directory 안에는 여러 개의 DSA가 존재하고 이들 사이에는 DSP(Directory System Protocol)로 통신을 합니다. 이렇게 구성된 것은 분산 환경을 고려하였기 때문이다.
이런 구조로 되어있는 X.500의 흐름은 다음과 같다.
- 유저 혹은 애플리케이션(이하 클라이언트)이 DUA에 접근 요청을 보냄
- DUA는 DSA에게 클라이언트 정보를 보내고 서버는 해당 정보를 통해 인증을 처리한다.
- 서버는 요청을 처리하는데 이 때 DSP를 통해서 해당 서버에 없을 경우 다른 서버와 통신하여 데이터를 조회한다.
- 해당 데이터를 응답하고 연결을 종료한다.
X.500에서 정의한 프로토콜 중 DUA와 DSA간 통신에서 DAP(Direct Access Protocol)가 사용된다. 그러나 단점이 존재하였다.
- OSI 전체 계층에서 운용
- 네트워크 자원을 많이 소비
- 복잡하고 구현하기 어려움
이런 DAP의 단점을 해결하기 위해서 LDAP가 나왔다.

Information
데이터에 대한 종류, Directory에 저장되는 정보에 대한 기본단위를 정의.
3가지로 정의된다.
Entry : Directory에서 정보를 표현하는 기본 단위. 다수의 Attribute로 이루어져 있다. 각각의 Entry에는 DN(Distinguish Name)으로 구분되고 DIT(Directory Information Tree) 구조로 형성된다.
Attribute : Entry의 각 타입을 저장하는 공간. 1개의 Attribute에는 Type(Attribute가 포함하는 정보의 종류 명시)과 Value가 존재한다.
Value : Attribute의 실질적인 데이터를 나타낸다. 데이터의 형식을 결정하는 Syntax와 값의 동일성을 검사하는 Matching Rules와 관련이 있다.
Type은 약어를 가지며 각 약어에 대한 내용은 다음과 같다.
| 약어 | 내용 |
|---|---|
| DN | Distinguished Name |
| O | Organization |
| CN | Common Name |
| C | Country |
| RDN | Relative DN |
| OU | Organization Unit |
| SN | SurName |

Naming
Functional
Security
LDAP 서버는 보통 사용자 인증 및 권한 부여에 필요한 사용자 관련 정보를 저장하는 데 사용한다. 대표적으로는 Apache Directory Server, Active Directory 등이 있다.
LDAP 서버에 접근하여 상호작용을 위해서는 클라이언트가 존재해야 한다. 이 클라이언트 역할을 하는 것 중 하나가 바로 Spring LDAP이다. 다른 LDAP 클라이언트와는 달리 예외 처리를 유연하게 제공하는다는 것이 강점으로 꼽힌다.
그렇다면 이것을 사용하는 방법은 어떻게 될 것인가? 다음으로 넘긴다. 지금은 LDAP말고 다른거 공부하고 싶다.
https://zetawiki.com/wiki/%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC_%EC%84%9C%EB%B9%84%EC%8A%A4
https://ko.wikipedia.org/wiki/X.500
https://ko.wikipedia.org/wiki/%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC_%EC%84%9C%EB%B9%84%EC%8A%A4
http://egloos.zum.com/gunsystems/v/6785259
https://ldap.or.kr/ldap-a-to-z/
https://ldap.or.kr/ldap-%EC%9D%B4%EB%9E%80/
https://www.samsungsds.com/kr/insights/ldap.html
https://www.techopedia.com/definition/6857/directory-server-agent-dsa
https://www.techopedia.com/definition/6859/directory-user-agent-dua
https://always-kimkim.tistory.com/entry/X500%EA%B3%BC-LDAP-%EC%A0%95%EB%A6%AC