DevLog
- 오프라인 환경에서 인증과 인가 SYSTEM DESIGNS
오프라인 환경에서는 인증과 인가를 검증 시점에 서버로 물어볼 수 없다. 서버가 미리 서명해 둔 정보를 디바이스에 심어 두고, 디바이스가 그 서명을 현장에서 직접 검증한다.
- IoT 메시지 전달을 위한 MQTT와 ZERO PAYLOAD SYSTEM DESIGNS
클라우드가 디바이스로 이벤트를 전달할 때 MQTT를 쓰는 이유와, 페이로드에 식별자만 담는 ZERO PAYLOAD 전략이 Offline-First와 맞물리는 방식을 정리한다.
- 기술부채보다 무서운 것은 엔지니어링 태도 부채다 SOFTWARE ENGINEERING
품질을 대하는 개인의 태도는 팀의 문화가 되고, 그 문화가 제품의 장기적인 개발 속도를 결정한다.
- 차량 제어 시스템 디자인 SYSTEM DESIGNS DESIGN PATTERNS
차량 제어 시스템을 설계한다는 것은 결국 무엇을 신뢰할 것인지를 정하는 일이고, 신뢰하지 않기로 한 것의 목록이 곧 아키텍처가 된다. 차량 제어 시스템을 구축하기 위한 설계 원리와 테슬라의 사례를 함께 살펴본다.
- 테스트를 넘어 제품 개발 관점에서 Mock 바라보기 DRIVEN
Mock은 여러 팀이 협업하여 제품을 개발하는 과정에서 다른 팀에 병목이 있더라도 우리 팀의 제품 개발 속도를 높이는데 중요한 도구이다.
- Go Proverbs Deep Dive #4: Concurrency is not parallelism DEEP DIVE
동시성은 프로그램을 독립적으로 진행할 수 있는 실행 흐름들로 구성하는 방식이고, 병렬성은 둘 이상의 연산이 같은 시각에 물리적으로 함께 수행되는 실행 상태다.
- Go Proverbs Deep Dive #3: Channels orchestrate; mutexes serialize DEEP DIVE
채널은 여러 실행 흐름이 어떤 순서로 데이터를 주고받고, 언제 기다리며, 언제 다음 작업을 시작할지를 조율한다. 뮤텍스는 하나의 메모리 위치에 대한 접근을 한 줄로 세워 동시에 수정되지 않도록 보호한다.
- Go Proverbs Deep Dive #2: Don't communicate by sharing memory, share memory by communicating DEEP DIVE
동시성 문제의 본질은 공유된 상태에 대한 읽기-수정-쓰기다. 락은 접근을 직렬화하고, Go는 소유권을 설계한다.
