5. ① timeflake - 어느 정도 정렬된 UUID
② 정말로 당신에게 다른 동영상 강의가 필요할까?
③ 마이크로서비스를 써야할 때, 쓰지 말아야 할 때
④ 소프트웨어를 구매하기 위해 사용 가능한 네 가지 통화
⑤ AWS 람다는 왜 그렇게 빠르게 구동될까?
⑥ 30살 비개발자가 3개월만에 풀스택 개발을 하기까지..
⑦ 맥에서 윈도우로 가져온 파일명이 자모 분리된 경우 해법
오늘의 소개할 내용
OKdevTV
6. OKdevTV
(개발) timeflake - 어느 정도 정렬된 UUID
1
• https://github.com/anthonynsimon/timeflake
• 특징
• 트위터의 Snowflake, 인스타그램 ID, Firebase의 PushID와 비슷한 구현
• 빠름 : K-sortable로 어느 정도 정렬(timestamp에 따라)
• 충분히 유일성 보장 : 1ms당 5천 만개를 만들어도 충돌 확률이 10억분의 1
• 효율적 : 48비트는 밀리세컨드 단위 timestamp 인코딩 + 80비트는 암호학적으로 유일한 랜덤 숫자
• 유연함 : 128비트 부호없는 정수, URL에 안전한 base62 값으로 UUID 호환
• 왜?
• 예측 가능하지 않는 URL에서 UUID가 필요한 경우
• 시간에 따라 대략 정렬되지만 임의의 ID가 필요한 경우(MySQL/PostgreSQL)
• 중앙 집중화된 ID 관리 시스템을 유지할 필요가 없음
• 표준 128비트 UUID와 호환(예: 파이썬의 많은 라이브러리들이 uuid.UUID를 기반으로 동작)
• 참고
• 기존에 KSUID가 존재하지만(K-sortable), 160비트라서 표준 128비트 UUID와 비호환
• 주의
• 개인 정보 보호(시각 특정, 사용자 특정)
7. • https://eugeneyan.com/writing/you-dont-need-another-mooc/
• 대부분 MOOC는 페라토 법칙을 따른다
• 비슷한 MOOC에서 얻는 수익 감소 효과
• 새로운 MOOC은 미루거나 자기 불구화 현상(self-handicap)을 낳는 이유가 된다
• 이 MOOC 특화 과정을 끝낼 때까지 만들 수 없어
• 내 이력서가 채택되지 않는 이유는 스파크와 파이토치에 대한 증명서가 없기 때문이야
• 강의 비디오 시청은 학습이 아니라 수동적인 소비
• 아이들은 자전거 타는 법을 비디오로 배우지 않는다
• 행복한 길에서 벗어나기
• 튜토리얼은 실습을 제공하지만… 코드를 복사해서 붙여넣으면 그냥 동작한다.
• 디버깅, 준비 작업, 시행 착오를 통한 문제 해결에 시간을 소비할 경우에는 학생들은 인내심을 잃어 이탈한다
• 실제 데이터는 지저분하고 구조화가 되어 있지 않지만, 대다수 MOOC과 유튜브 수업은 깨끗하고 구조화되어 있다
• 우리는 실제 프로젝트, 지저분한 데이터, CUDA 오류 등을 수행함으로써 행복한 길에서 벗어난다
• 프로젝트를 통해 문제 정의, 알고리즘 적용(올바른 또는 잘못된), 오류 메시지를 구글에서 찾고, 작동할 때까지 반복한다
OKdevTV
(오늘의 논쟁) 정말로 당신에게 다른 동영상 강의가 필요할까?
2
8. • https://eugeneyan.com/writing/you-dont-need-another-mooc/
• 적시 학습
• 딱 시작하기에 충분한 지식만 있으면 된다. 나머지는 길을 따라가면서 선택한다.
• 프로젝트 진행을 위해 필요한 무엇이든 배운다
• 배운 것을 적용하지 않으면 쇠퇴할 것이다
• YAGNI(You aren't gonna need it): 필요할 때까지 기능을 추가할 필요가 없다
• 하지만 반발이 심하다
• “저는 시간이 매우 제한적이므로 개인 프로젝트를 할 여유가 없습니다. MOOC는 독립적이며 일주일에 2-4 시간만 필요합
니다.” → 지식과 이해가 어느 수준을 넘어서면 실습이 필요함
• “과거에 개인 프로젝트를 해보았습니다. 하지만 많은 오류가 발생하고 구글을 많이 검색해야만 했습니다. MOOC를 더 많이
듣기 전까지는 아직 준비가 되지 않은 것 같습니다.” → 바로 그래서 개인 프로젝트를 해야 함
• “ MOOC를 통해 이력서에 도움이 되는 자격증을 받게 됩니다.” → 자격증이 아니라 실무 능력이 더 중요
• “기술 기술과 지식에 대한 테스트를 받을 것이라는 이야기를 들었습니다. 따라서 더 많은 기술적인 MOOC를 수행해야합니
다.” → MOOC는 특히 지식을 테스트하거나 (읽기 : 기억) 트릭을 알아야하는 질문(예 : 리트코드 유형 질문)에 유용
• "어떤 개인 프로젝트를 해야 합니까?“ → 관심이 있는 프로젝트, 주말 동안 12주 안에 완료할 수 있는 범위가 적합
• "하지만 흥미로운 개인 프로젝트가 생각 나지 않아요!“ → 흥미로운 개인적인 프로젝트를 떠올리지 못하면, 정말 경력을 위
한 준비가 되어 있을까?
OKdevTV
(오늘의 논쟁) 정말로 당신에게 다른 동영상 강의가 필요할까?
2
9. • https://containerjournal.com/topics/container-ecosystems/when-to-use-and-not-to-use-
microservices/
• 사용 여부 결정
• 마이크로서비스가 무엇이며 개발 작업에 어떤 영향을 미치는지 제대로 이해하고 있습니까?
• 마이크로서비스를 채택 할만큼 충분히 비즈니스가 성숙했습니까?
• 애플리케이션 인프라는 얼마나 강력합니까?
• 애자일 또는 DevOps 연습을 시도하고 테스트했습니까?
• 제품이 비즈니스 모델의 중심에 있습니까?
• 확장에 대한 목표와 비전은 무엇입니까? 마이크로서비스 아키텍처는 확장성을 고려하여 설계되었으며 제품/서비스와 시장
을 모두 확장하려는 튼튼한 계획이 있는 경우에만 이상적입니다.
• 비즈니스 모델이 테스트되고 입증되었습니까?
• 마이크로서비스를 써야할 때
• 모놀리식 애플리케이션에서 확장성, 민첩성, 관리 용이성, 배포 속도를 개선하기를 원하는 경우
• 비즈니스 요구 사항을 따라 잡기 위해 현대적인 프로그래밍 언어 또는 기술 스택으로 레거시 애플리케이션을 재작성해야 하
는 경우
• 다양한 채널에서 재사용해야하는 독립형 비즈니스 애플리케이션 또는 모듈 - 로그인 서비스, 검색 옵션, 인증 기능 등이 좋
은 예
• 신속한 제공, 혁신 등을 요구하는 매우 민첩한 애플리케이션(제품 또는 서비스)을 구축하는 경우
OKdevTV
(개발) 마이크로서비스를 써야할 때, 쓰지 말아야 할 때
3
10. • https://containerjournal.com/topics/container-ecosystems/when-to-use-and-not-to-use-
microservices/
• 마이크로서비스를 쓰지 말아야할 때
• 마이크로 서비스는 복잡한 문제에 대한 해법이므로, 비즈니스에 복잡한 문제가 없는 경우 마이크로서비스의 복잡성을 처리
할 시스템이 없다는 점을 이해해야 한다.
• 마이크로서비스를 사용하면 관련 작업을 처리할 수 없는 팀 규모에 미치지 못할 경우 정 반대의 결과를 얻는다. 이로 인해
배포가 지연될 뿐이다.
• 굳이 모든 애플리케이션을 마이크로서비스로 세분화할 필요는 없다.
• 마이크로서비스는 공짜 점심이 아니다!
• 참고
• <마이크로서비스 도입, 이렇게 한다> 도서 증정 이벤트
• https://jhrogue.blogspot.com/2021/01/blog-post_28.html
OKdevTV
(개발) 마이크로서비스를 써야할 때, 쓰지 말아야 할 때
3
11. OKdevTV
(개발) 소프트웨어를 구매하기 위해 사용 가능한 네 가지 통화
4
• https://techbeacon.com/enterprise-it/software-ultimate-currency-why-containers-serverless-
should-be-your-go
• 물건을 사기 위한 통화
• 신용카드, 현찰, 수표, 상품권, 지역 화폐 등등
• 소프트웨어의 구성 요소를 구매하기 위해 사용 가능한 네 가지 통화
• 기술 프로젝트를 위한 소프트웨어가 필요한 경우 서버리스를 찾아라
• 서버리스가 없으면 컨테이너를 찾아라
• 컨테이너가 없으면 오픈소스 라이브러리를 찾아라
• 라이브러리가 없으면 직접 코드를 작성하라
• 통화별 특징
• 서버리스: 가장 사용하기 쉬움. 서비스 카탈로그에서 소비되는 외부 API와 유사하고 렌탈과 비슷한 특성. 서버 락인에 주의
• 컨테이너: 서버리스를 위한 모든 코드를 제공하거나 미리 패키지된 오픈소스 라이브러리를 제공하거나 직접 만든 코드를 포함
• 오픈소스 라이브러리: 컨테이너에 원하는 패키지가 없을 경우 오픈소스를 가져와 직접 만드는 방법. 미리 만들어진 컨테이너보
다는 해야 할 작업이 많음
• 직접 코드 작성: 상기 모든 통화를 사용할 수 없을 경우
• 컨테이너에 주목!
• 미리 만들어진 API, 오픈소스 라이브러리, 직접 만든 코드를 담을 수 있는 기반 인프라
12. OKdevTV
(개발) AWS 람다는 왜 그렇게 빠르게 구동될까?
5
• https://jvns.ca/blog/2021/01/23/firecracker--start-a-vm-in-less-than-a-second/
• 1초 이내로 VM 시작하기
• Firecracker 사용(https://firecracker-microvm.github.io/): AWS lambda와 Fargate에서 사용
• 참고: KVM 사용(리눅스 전용)
It takes <= 125 ms to go from receiving the Firecracker
InstanceStart API call to the start of the Linux guest user-
space /sbin/init process.