backend-systems

2 개의 포스트

Steganography at scale: Embedding share URLs in Datadog widget screenshots (새 탭에서 열림)

데이터독(Datadog)은 사용자가 위젯을 스크린샷으로 캡처하더라도 쿼리, 시간 범위, 대시보드 설정과 같은 풍부한 컨텍스트를 보존할 수 있도록 픽셀 단위의 '보이지 않는 워터마크' 시스템을 구축했습니다. 위젯의 메타데이터 전체를 이미지에 직접 담는 대신, 해당 데이터를 저장한 Redis 캐시의 고유 키를 위젯 테두리 픽셀의 RGB 값을 미세하게 조정하여 인코딩하는 방식을 채택했습니다. 이를 통해 사용자 경험을 해치지 않으면서도 하루 10억 개 이상의 위젯에 대해 스크린샷만으로 원본 데이터에 접근할 수 있는 연결성을 제공합니다. **스크린샷의 한계와 워터마킹의 도입 배경** - 대시보드 위젯을 복사하여 붙여넣으면 라이브 프리뷰와 데이터 연결이 유지되지만, 많은 사용자는 직관적이고 권한 문제에서 자유로운 스크린샷 방식을 선호합니다. - 하지만 일반적인 스크린샷은 캡처 시점의 쿼리, 시간 범위, 시각화 유형 등 유용한 메타데이터를 모두 잃어버린다는 단점이 있습니다. - UI에 요소를 추가하지 않고도 이 정보를 보존하기 위해, 육안으로는 식별할 수 없지만 알고리즘으로 읽을 수 있는 픽셀 기반 워터마킹 기술을 도입했습니다. **데이터 최적화 및 캐싱 전략** - 위젯 정의 데이터는 평균 2KB로 이미지에 직접 인코딩하기에는 너무 크기 때문에, 전체 데이터는 Redis 캐시에 저장하고 이를 참조하는 짧은 고유 ID만 워터마크에 포함합니다. - 위젯이 렌더링될 때마다 프론트엔드에서 낙관적(Optimistic)으로 ID를 생성하여 백엔드 응답을 기다리지 않고 즉시 워터마크를 삽입함으로써 성능 저하를 방지합니다. - 조직 ID와 8바이트 무작위 ID를 조합하여 대규모 환경에서도 ID 충돌 가능성을 극도로 낮추었으며, 데이터는 스크린샷이 주로 활용되는 시간대를 고려해 1시간 동안 캐싱됩니다. **픽셀 레벨의 미세 인코딩 기법** - 모든 대시보드 위젯이 공통적으로 가진 1px 두께의 테두리를 데이터 삽입 공간으로 활용하여 시각화 유형에 상관없이 일관된 적용이 가능하게 했습니다. - RGB 모델의 각 채널 값을 미세하게 오프셋(Offset)하는 방식을 사용합니다. 기본 배경색에서 각 채널값을 조정한 뒤 0~7 사이의 값을 더해 픽셀당 약 9비트의 데이터를 저장합니다. - 워터마크의 시작과 끝을 알리는 센티널(Sentinel) 픽셀을 배치하고 그 사이에 8개의 데이터 픽셀을 넣어 총 8바이트의 ID를 인코딩하며, 이는 육안으로 거의 식별되지 않습니다. 이 시스템은 장애 대응이나 협업 과정에서 스크린샷이라는 익숙한 도구를 사용하면서도, 필요할 때 언제든 원본 데이터 컨텍스트로 복귀할 수 있는 강력한 연결성을 제공합니다. 대규모 트래픽 환경에서도 성능 영향 없이 작동하도록 설계된 이 기법은 단순한 이미지를 지능적인 데이터 포인터로 변환하는 실용적인 해법을 제시합니다.

Engineering spotlight: Marie-Laure Bardonnet (새 탭에서 열림)

데이터독(Datadog)의 시니어 엔지니어링 매니저 마리 로르 바르도네(Marie-Laure Bardonnet)는 인턴으로 시작해 대규모 로그 관리 팀을 이끄는 리더로 성장하며, 기술적 호기심과 자기 주도적인 커리어 설계의 중요성을 강조합니다. 그녀는 제품 로드맵과 시스템 신뢰성 사이의 균형을 맞추는 엔지니어링 중심의 의사결정 체계를 구축하고, 조직의 성장에 맞춘 유연한 팀 구조 재편을 통해 구성원과 제품이 함께 성공할 수 있는 환경을 조성하고 있습니다. 이러한 여정은 기술적 전문성을 바탕으로 리더십 역량을 확장하려는 엔지니어들에게 실무적인 통찰과 커리어 확장의 방향성을 제시합니다. ### 프론트엔드에서 대규모 백엔드로의 기술적 전환 * **제품 기여:** 인턴 시절부터 노트북(Notebooks) 제품 개발에 참여했으며, 정규직 전환 후 대시보드 팀에서 모든 화면 크기에 대응하는 반응형 그리드 시스템의 백엔드 레이아웃을 구현했습니다. * **도전 과제 확장:** 분산 백엔드 시스템에 대한 호기심을 바탕으로 로그(Logs) 백엔드 팀으로 이동하여, 매일 수백만 건의 페이로드를 실시간으로 수집(Ingestion), 처리, 농축(Enrichment), 저장 및 쿼리하는 대규모 시스템을 경험했습니다. * **플랫폼 협업:** 로그 제품의 기술적 요구사항이 복잡해짐에 따라, 공통 기능을 대규모로 제공하는 플랫폼 팀과 긴밀히 협력하여 로그 서비스의 성능을 강화했습니다. ### 시니어 엔지니어링 매니저의 역할과 의사결정 * **로드맵 균형:** 분기별로 OKR(Objectives and Key Results)을 설정할 때, 제품 팀의 요구사항과 시스템 신뢰성, 확장성, 기술 부채 해결과 같은 기술적 로드맵 사이의 정교한 균형을 유지합니다. * **기술 문서 리뷰:** 팀의 의사결정을 지원하기 위해 RFC(Request for Comments)와 장애 사후 분석 보고서(Postmortems)를 검토하며 팀 간의 의존성을 식별하고 노력을 정렬합니다. * **채용 위원회 활동:** 매주 채용 위원회에 참여하여 최종 채용 권고를 내리고, 조직 전체의 엔지니어 레벨링(Leveling)이 일관되게 유지되도록 관리합니다. ### 효율적인 실행을 위한 조직 구조 재편 * **미래 예측 기반 구조화:** '1년 후 우리가 해결해야 할 문제는 무엇인가?'라는 질문을 바탕으로, 제품과 구성원이 모두 성공할 수 있는 방향으로 팀 구조를 재설계합니다. * **3-Horizon Plan:** 제품 관리 팀과 협력하여 3단계 지평 계획을 수립하고, 고객의 니즈에 맞춰 미래 투자를 합리화하며 조직의 목표를 정렬합니다. * **성장 기회 창출:** 각 구성원의 레벨과 트랙(IC 또는 매니지먼트)에 적합한 업무 범위와 도전 과제를 할당하고, 적절한 멘토링이 제공될 수 있도록 환경을 조성합니다. ### 자기 주도적 커리어 성장 전략 * **성찰과 분리:** 현재 하고 있는 일과 미래에 하고 싶은 일을 분리하여 생각하고, 자신이 업무에서 얻는 즐거움과 남기고 싶은 유산(Legacy)이 무엇인지 파악해야 합니다. * **다각적 균형:** 자신이 좋아하고 잘하는 일, 새로운 학습을 돕는 일, 그리고 조직의 우선순위에 부합하는 일 사이에서 균형점을 찾는 것이 중요합니다. * **불확실성 수용:** 성장은 익숙한 환경에서 벗어나 모르는 것을 받아들이고 도전할 때 발생하며, 동료들의 피드백을 성장의 검증 도구로 활용해야 합니다. **실용적인 제언** 엔지니어로서 커리어를 확장하고 싶다면 현재의 직무에 안주하지 말고 기술적 호기심을 따라 팀 이동이나 직군 전환을 적극적으로 타진해 보세요. 특히 매니지먼트 트랙을 고민한다면 기술적 문서를 리뷰하는 역량과 더불어, 조직의 비즈니스 목표와 기술적 건전성 사이의 우선순위를 조율하는 연습이 필수적입니다.