SlideShare a Scribd company logo
1 of 13
Download to read offline
ID GENERATOR 되돌아보기
왜 돌아보냐면...
• 빠르게 개발되었고, ID GENERATOR 에 참여하지 않았던 사람이 있음.

• ID GENERATOR 를 왜 사용해야 하는지, 다시 한번 상기시키기 위해서-
다루지 않을 부분으로는
• Snow
fl
ake 의 자세한 알고리즘 로직은 말하지 않습니다.

• 프로젝트 구조(identity)에 대해서 말하지 않습니다.
ID GENERATOR
• ID GENERATOR 는 무엇이고, 어떻게 그리고 왜 필요할까?

• ID GENERATOR(like snow
fl
ake) 의 특징은 무엇일까?

• 단점은 없을까?

• 앞으로 개선해볼만 부분으로는...
ID GENERATOR 는 무엇이고, 어떻게 그리고 왜 필요할까?
• ID 는 특정 객체를 추적또는 구별할 수 있도록 하는 고유한 식별자이다.

• ID GENERATOR 는 말 그래도 Id 를 생성할 수 있도록 해주는 도구이다.

• 도메인 주도 설계(반버논) 책에서 말하는 4가지 식별자 생성 방식이 있다.
ID GENERATOR 는 무엇이고, 왜 필요할까?
• 도메인 주도 설계(반버논) 책에서 말하는 4가지 식별자 생성 방식이 있다.

1. 사용자가 애플리케이션에 하나 이상의 초기고유값을 넣는다. 이때 애플리케이션은 입력한 값이 고유한지 확인해야 한다.

2. 애플리케이션 자체에서 고유한 값을 보장하도록 한다.라이브러리나, 프레임워크 등을 활용한다.

3. 애플리케이션이 DB와 같은 영속성 저장소를 사용해, ID 생성을 위임한다.

4. 바운디드 컨텍스트에서 고유한 식별자를 할당한다. 이렇게 할 경우, 식별자를 Like Search로 특정 결과를 외부에서 검색할 수 있다.
ID GENERATOR 는 무엇이고, 왜 필요할까?
• 우리가 중요하게 바라볼 부분으로는 언제 ID 을 생성할 것이고, 어떻게 유일한 숫자를
보장할 것인가? 이다. 왜일까?

1. 빠른 식별자 생성

2. 늦은 식별자 생성
ID GENERATOR 는 무엇이고, 왜 필요할까?
• 우리가 중요하게 바라볼 부분으로는 언제 ID 을 생성할 것이고, 어떻게 유일한 숫자를
보장할 것인가? 이다. 왜일까?

• 분산 환경에서 auto increment 이슈를 고려하지 않아도 된다.

• DB 지연을 최소화 할 수 있다.
ID GENERATOR 는 무엇이고, 왜 필요할까?
• 도메인 주도 설계(반버논) 책에서 말하는
4가지 식별자 생성 방식이 있다.

1. 사용자가 애플리케이션에 하나 이상의 초기고유값을 넣는다. 이
때 애플리케이션은 입력한 값이 고유한지 확인해야 한다.

2. 애플리케이션 자체에서 고유한 값을 보장하도록 한다.라이브러
리나, 프레임워크 등을 사용한다.
3. 애플리케이션이 DB와 같은 영속성 저장소를 사용해, 생성을 위
임한다.

4. 바운디드 컨텍스트에서 고유한 식별자를 생성한다.
• 우리가 중요하게 바라볼 부분으로는 언
제 ID 을 생성할 것이고, 어떻게 유일
한 숫자를 보장할 것인가? 이다. 왜일
까?

1. 빠른 식별자 생성
2. 늦은 식별자 생성
그래서 우리는 Snow
fl
ake 와 같은 ID GENERATOR 를 사용한다.
• 우리의 identity 프로젝트는 Snow
fl
ake 기반으로 만들어졌다.

• 그래서 Snow
fl
ake 의 특징을 살펴보면 아래와 같습니다.

• 시간 기반의 ID 를 생성한다.

• 거친 정렬(?)의 64Bit을 사용합니다.

• 분산된 시스템에서도 유일한 값을 보장합니다.
단점은 없을까?
• 시스템 시간에 의존적이다.

• 작은 규모의 프로젝트라면, 배보다 배꼽이 더 큰 상황을 만들 수도 있다.

• 운영상에 약간의 테스트가 필요하다. (예를 들어, 타임스탬프의 bit 를 더 늘리는 등의)

• ID 를 생성해주는 서버가 존재하기 때문에 만약 ShutDown 됐을 경우, 전체 서버가 원
활하게 동작되지 않는다.
앞으로 개선해볼만 부분은 어떤 부분일까?
• 우리 Trevari만의 snow
fl
ake 를 개발할 필요가 있다. 앞서 말한 운영상의 테스트를 활
용해야될 부분이라고 판단된다.

• 현재 Long 값의 ID 만을 제공하고 있다. 문자열의 ID 도 제공할 필요가 있다.

• IdGenerator 서버가 Down 되었을 때 대처 방법에 대해서 조금 더 고민할 필요가 있
다. (ex. Alert, 서버 이중화, 대처 메뉴얼)

• 약간의 성능 개선을 도와줄 수 있는 방법이 있다. [ 캐시를 사용한 바이두의 uid-
generator]

• Versioning 에 대해서 학습하고 적용해야 한다.
참고자료
• [서버]Distributed System Twitter id 생성(Snow
fl
ake)

• [mysql] auto increment 이슈

• IdGenerator 서버가 Down 되었을 때 대처 방법에 대해서 조금 더 고민할 필요가 있
다. (ex. Alert, 서버 이중화, 대처 메뉴얼)

• 약간의 성능 개선을 도와줄 수 있는 방법이 있다. [ 캐시를 사용한 바이두의 uid-
generator]

• Versioning 에 대해서 학습하고 적용해야 한다.

More Related Content

Similar to Id generator

Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가? Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가? 정민 안
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA Terry Cho
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)명석 고
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018devCAT Studio, NEXON
 
스위처를 만드는 아이오의 개발팀 이야기
스위처를 만드는 아이오의 개발팀 이야기스위처를 만드는 아이오의 개발팀 이야기
스위처를 만드는 아이오의 개발팀 이야기Mijeong Park
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님NAVER D2
 
하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기Mijeong Park
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
차정민 (소프트웨어 엔지니어) 이력서 + 경력기술서
차정민 (소프트웨어 엔지니어) 이력서 + 경력기술서차정민 (소프트웨어 엔지니어) 이력서 + 경력기술서
차정민 (소프트웨어 엔지니어) 이력서 + 경력기술서Jeongmin Cha
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스Hee Jae Lee
 
iCloud 튜토리얼(2013.6 스마트앱개발자포럼 발표)
iCloud 튜토리얼(2013.6 스마트앱개발자포럼 발표)iCloud 튜토리얼(2013.6 스마트앱개발자포럼 발표)
iCloud 튜토리얼(2013.6 스마트앱개발자포럼 발표)Changwon National University
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나none
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Sa-ryong Kang
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdfSeung kyoo Park
 
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화Terry Cho
 
Event Storming(이벤트 스토밍)
Event Storming(이벤트 스토밍)Event Storming(이벤트 스토밍)
Event Storming(이벤트 스토밍)종일 김
 
왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나소리 강
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012Daum DNA
 

Similar to Id generator (20)

Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가? Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 
스위처를 만드는 아이오의 개발팀 이야기
스위처를 만드는 아이오의 개발팀 이야기스위처를 만드는 아이오의 개발팀 이야기
스위처를 만드는 아이오의 개발팀 이야기
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
 
하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
차정민 (소프트웨어 엔지니어) 이력서 + 경력기술서
차정민 (소프트웨어 엔지니어) 이력서 + 경력기술서차정민 (소프트웨어 엔지니어) 이력서 + 경력기술서
차정민 (소프트웨어 엔지니어) 이력서 + 경력기술서
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
 
iCloud 튜토리얼(2013.6 스마트앱개발자포럼 발표)
iCloud 튜토리얼(2013.6 스마트앱개발자포럼 발표)iCloud 튜토리얼(2013.6 스마트앱개발자포럼 발표)
iCloud 튜토리얼(2013.6 스마트앱개발자포럼 발표)
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
Pinpoint 도입기 - 2016 신림프로그래머 오픈 세미나
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf
 
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
 
Event Storming(이벤트 스토밍)
Event Storming(이벤트 스토밍)Event Storming(이벤트 스토밍)
Event Storming(이벤트 스토밍)
 
왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012
 
Showroom 2019-react
Showroom 2019-reactShowroom 2019-react
Showroom 2019-react
 

More from Jeong-gyu Kim

근육 기억으로 주도하는 테스트 주도 개발 입문하기
근육 기억으로 주도하는 테스트 주도 개발 입문하기근육 기억으로 주도하는 테스트 주도 개발 입문하기
근육 기억으로 주도하는 테스트 주도 개발 입문하기Jeong-gyu Kim
 
Api first design 개발의 선순환
Api first design 개발의 선순환Api first design 개발의 선순환
Api first design 개발의 선순환Jeong-gyu Kim
 
Design by contract(계약에의한설계)
Design by contract(계약에의한설계)Design by contract(계약에의한설계)
Design by contract(계약에의한설계)Jeong-gyu Kim
 
JPA Study - 1주차(SLIPP)
JPA Study - 1주차(SLIPP)JPA Study - 1주차(SLIPP)
JPA Study - 1주차(SLIPP)Jeong-gyu Kim
 
얼굴인식 - 기초
얼굴인식 - 기초얼굴인식 - 기초
얼굴인식 - 기초Jeong-gyu Kim
 
02.cnn - CNN 파헤치기 3탄
02.cnn - CNN 파헤치기 3탄02.cnn - CNN 파헤치기 3탄
02.cnn - CNN 파헤치기 3탄Jeong-gyu Kim
 
01.cnn - 본격CNN논문 파헤치기
01.cnn - 본격CNN논문 파헤치기01.cnn - 본격CNN논문 파헤치기
01.cnn - 본격CNN논문 파헤치기Jeong-gyu Kim
 
코드 재사용에 대해서 생각해보기
코드 재사용에 대해서 생각해보기 코드 재사용에 대해서 생각해보기
코드 재사용에 대해서 생각해보기 Jeong-gyu Kim
 
Deep dive functional thinking
Deep dive functional thinkingDeep dive functional thinking
Deep dive functional thinkingJeong-gyu Kim
 
Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리Jeong-gyu Kim
 
'객체지향의 사실과 오해' 북 리뷰 세미나
'객체지향의 사실과 오해' 북 리뷰 세미나'객체지향의 사실과 오해' 북 리뷰 세미나
'객체지향의 사실과 오해' 북 리뷰 세미나Jeong-gyu Kim
 
Functional thinking - 책 리뷰 1탄
Functional thinking - 책 리뷰 1탄Functional thinking - 책 리뷰 1탄
Functional thinking - 책 리뷰 1탄Jeong-gyu Kim
 
Intern pt sw_r&d_len_second_mission
Intern pt sw_r&d_len_second_missionIntern pt sw_r&d_len_second_mission
Intern pt sw_r&d_len_second_missionJeong-gyu Kim
 
Log Parser Story In Python3
Log Parser Story In Python3Log Parser Story In Python3
Log Parser Story In Python3Jeong-gyu Kim
 
Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)Jeong-gyu Kim
 

More from Jeong-gyu Kim (18)

근육 기억으로 주도하는 테스트 주도 개발 입문하기
근육 기억으로 주도하는 테스트 주도 개발 입문하기근육 기억으로 주도하는 테스트 주도 개발 입문하기
근육 기억으로 주도하는 테스트 주도 개발 입문하기
 
Api first design 개발의 선순환
Api first design 개발의 선순환Api first design 개발의 선순환
Api first design 개발의 선순환
 
Design by contract(계약에의한설계)
Design by contract(계약에의한설계)Design by contract(계약에의한설계)
Design by contract(계약에의한설계)
 
JPA Study - 1주차(SLIPP)
JPA Study - 1주차(SLIPP)JPA Study - 1주차(SLIPP)
JPA Study - 1주차(SLIPP)
 
얼굴인식 - 기초
얼굴인식 - 기초얼굴인식 - 기초
얼굴인식 - 기초
 
02.cnn - CNN 파헤치기 3탄
02.cnn - CNN 파헤치기 3탄02.cnn - CNN 파헤치기 3탄
02.cnn - CNN 파헤치기 3탄
 
01.cnn - 본격CNN논문 파헤치기
01.cnn - 본격CNN논문 파헤치기01.cnn - 본격CNN논문 파헤치기
01.cnn - 본격CNN논문 파헤치기
 
00.cnn basic
00.cnn basic00.cnn basic
00.cnn basic
 
코드 재사용에 대해서 생각해보기
코드 재사용에 대해서 생각해보기 코드 재사용에 대해서 생각해보기
코드 재사용에 대해서 생각해보기
 
Deep dive functional thinking
Deep dive functional thinkingDeep dive functional thinking
Deep dive functional thinking
 
Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리
 
'객체지향의 사실과 오해' 북 리뷰 세미나
'객체지향의 사실과 오해' 북 리뷰 세미나'객체지향의 사실과 오해' 북 리뷰 세미나
'객체지향의 사실과 오해' 북 리뷰 세미나
 
Functional thinking - 책 리뷰 1탄
Functional thinking - 책 리뷰 1탄Functional thinking - 책 리뷰 1탄
Functional thinking - 책 리뷰 1탄
 
Intern pt sw_r&d_len_second_mission
Intern pt sw_r&d_len_second_missionIntern pt sw_r&d_len_second_mission
Intern pt sw_r&d_len_second_mission
 
Log Parser Story In Python3
Log Parser Story In Python3Log Parser Story In Python3
Log Parser Story In Python3
 
Stampfood 2.0
Stampfood 2.0Stampfood 2.0
Stampfood 2.0
 
You dont know_js
You dont know_jsYou dont know_js
You dont know_js
 
Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)
 

Recently uploaded

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 

Recently uploaded (8)

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 

Id generator

  • 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 에 대해서 학습하고 적용해야 한다.