2. 왜 돌아보냐면...
• 빠르게 개발되었고, ID GENERATOR 에 참여하지 않았던 사람이 있음.
• ID GENERATOR 를 왜 사용해야 하는지, 다시 한번 상기시키기 위해서-
3. 다루지 않을 부분으로는
• Snow
fl
ake 의 자세한 알고리즘 로직은 말하지 않습니다.
• 프로젝트 구조(identity)에 대해서 말하지 않습니다.
4. ID GENERATOR
• ID GENERATOR 는 무엇이고, 어떻게 그리고 왜 필요할까?
• ID GENERATOR(like snow
fl
ake) 의 특징은 무엇일까?
• 단점은 없을까?
• 앞으로 개선해볼만 부분으로는...
5. ID GENERATOR 는 무엇이고, 어떻게 그리고 왜 필요할까?
• ID 는 특정 객체를 추적또는 구별할 수 있도록 하는 고유한 식별자이다.
• ID GENERATOR 는 말 그래도 Id 를 생성할 수 있도록 해주는 도구이다.
• 도메인 주도 설계(반버논) 책에서 말하는 4가지 식별자 생성 방식이 있다.
6. ID GENERATOR 는 무엇이고, 왜 필요할까?
• 도메인 주도 설계(반버논) 책에서 말하는 4가지 식별자 생성 방식이 있다.
1. 사용자가 애플리케이션에 하나 이상의 초기고유값을 넣는다. 이때 애플리케이션은 입력한 값이 고유한지 확인해야 한다.
2. 애플리케이션 자체에서 고유한 값을 보장하도록 한다.라이브러리나, 프레임워크 등을 활용한다.
3. 애플리케이션이 DB와 같은 영속성 저장소를 사용해, ID 생성을 위임한다.
4. 바운디드 컨텍스트에서 고유한 식별자를 할당한다. 이렇게 할 경우, 식별자를 Like Search로 특정 결과를 외부에서 검색할 수 있다.
7. ID GENERATOR 는 무엇이고, 왜 필요할까?
• 우리가 중요하게 바라볼 부분으로는 언제 ID 을 생성할 것이고, 어떻게 유일한 숫자를
보장할 것인가? 이다. 왜일까?
1. 빠른 식별자 생성
2. 늦은 식별자 생성
8. ID GENERATOR 는 무엇이고, 왜 필요할까?
• 우리가 중요하게 바라볼 부분으로는 언제 ID 을 생성할 것이고, 어떻게 유일한 숫자를
보장할 것인가? 이다. 왜일까?
• 분산 환경에서 auto increment 이슈를 고려하지 않아도 된다.
• DB 지연을 최소화 할 수 있다.
9. ID GENERATOR 는 무엇이고, 왜 필요할까?
• 도메인 주도 설계(반버논) 책에서 말하는
4가지 식별자 생성 방식이 있다.
1. 사용자가 애플리케이션에 하나 이상의 초기고유값을 넣는다. 이
때 애플리케이션은 입력한 값이 고유한지 확인해야 한다.
2. 애플리케이션 자체에서 고유한 값을 보장하도록 한다.라이브러
리나, 프레임워크 등을 사용한다.
3. 애플리케이션이 DB와 같은 영속성 저장소를 사용해, 생성을 위
임한다.
4. 바운디드 컨텍스트에서 고유한 식별자를 생성한다.
• 우리가 중요하게 바라볼 부분으로는 언
제 ID 을 생성할 것이고, 어떻게 유일
한 숫자를 보장할 것인가? 이다. 왜일
까?
1. 빠른 식별자 생성
2. 늦은 식별자 생성
10. 그래서 우리는 Snow
fl
ake 와 같은 ID GENERATOR 를 사용한다.
• 우리의 identity 프로젝트는 Snow
fl
ake 기반으로 만들어졌다.
• 그래서 Snow
fl
ake 의 특징을 살펴보면 아래와 같습니다.
• 시간 기반의 ID 를 생성한다.
• 거친 정렬(?)의 64Bit을 사용합니다.
• 분산된 시스템에서도 유일한 값을 보장합니다.
11. 단점은 없을까?
• 시스템 시간에 의존적이다.
• 작은 규모의 프로젝트라면, 배보다 배꼽이 더 큰 상황을 만들 수도 있다.
• 운영상에 약간의 테스트가 필요하다. (예를 들어, 타임스탬프의 bit 를 더 늘리는 등의)
• ID 를 생성해주는 서버가 존재하기 때문에 만약 ShutDown 됐을 경우, 전체 서버가 원
활하게 동작되지 않는다.
12. 앞으로 개선해볼만 부분은 어떤 부분일까?
• 우리 Trevari만의 snow
fl
ake 를 개발할 필요가 있다. 앞서 말한 운영상의 테스트를 활
용해야될 부분이라고 판단된다.
• 현재 Long 값의 ID 만을 제공하고 있다. 문자열의 ID 도 제공할 필요가 있다.
• IdGenerator 서버가 Down 되었을 때 대처 방법에 대해서 조금 더 고민할 필요가 있
다. (ex. Alert, 서버 이중화, 대처 메뉴얼)
• 약간의 성능 개선을 도와줄 수 있는 방법이 있다. [ 캐시를 사용한 바이두의 uid-
generator]
• Versioning 에 대해서 학습하고 적용해야 한다.
13. 참고자료
• [서버]Distributed System Twitter id 생성(Snow
fl
ake)
• [mysql] auto increment 이슈
• IdGenerator 서버가 Down 되었을 때 대처 방법에 대해서 조금 더 고민할 필요가 있
다. (ex. Alert, 서버 이중화, 대처 메뉴얼)
• 약간의 성능 개선을 도와줄 수 있는 방법이 있다. [ 캐시를 사용한 바이두의 uid-
generator]
• Versioning 에 대해서 학습하고 적용해야 한다.