마이크로서비스

25 개의 포스트

cloudflare4분 읽기큐레이션 요약

보안 인사이트 확장: 글로벌 스캔 처리 역량을 10배 향상한 방법

Security Insights는 기존 주 1~2회에 그치던 보안 검사를 모든 계정에 더 자주 적용하기 위해 처리량을 초당 10건에서 100건으로 약 10배 높여야 했다. Cloudflare는 Kafka 소비 병렬화, 느린 작업 분리, Postgres 대량 삽입 최적화, 지역 간 네트워크 지연 분석을 통해 스캔 처리량을 10배 이상 향상시켰다. 그 결과 수백만 고객에게 보안 인사이트를 제공하고 전체 고객의 검사 주기를 두 배로 늘릴 수 있었다. ## 기존 보안 검사 구조와 확장 과제 - 스케줄러가 검사 시점이 된 계정과 Zone을 감지한다. - 검사 작업을 Apache Kafka 메시지로 발행하고, 여러 Go 기반 checker 마이크로서비스가 메시지를 나누어 처리한다. - 각 checker는 특정 자산이나 설정을 검사한 뒤 내부 API로 결과를 전송한다. - API는 결과를 Postgres 데이터베이스에 저장한다. - 기존 시스템은 다음 문제를 겪고 있었다. - 검사가 주 1~2회만 수행되어 위험이 최대 2주간 탐지되지 않을 수 있었다. - 많은 무료 요금제 계정에서 자동 검사가 선택 사항이라 검사 자체가 이뤄지지 않았다. - Kafka backlog 증가, API 타임아웃, 프로세스 충돌이 발생했다. - 모든 계정에 자동 검사를 적용하고 검사 빈도를 높이려면 평균 처리량을 초당 10건에서 100건으로 늘려야 했다. ## Kafka 파티션의 병목 - Kafka는 일반적인 큐와 달리 파티션 내 메시지를 순서대로 소비하고 처리한다. - 하나의 consumer group에서는 파티션당 활성 consumer를 하나만 둘 수 있다. - 따라서: - 처리 시간이 긴 메시지 하나가 뒤따르는 메시지의 처리를 막을 수 있다. - checker별 병렬 소비자 수는 Kafka 파티션 수에 제한된다. - 파티션을 추가하면 확장할 수 있지만, 여러 서비스가 공유하는 Kafka 브로커의 자원 사용량이 증가하므로 최후의 수단으로 남겨두었다. ## 배치 기반 병렬 처리 - 메시지를 하나씩 처리하던 checker를 배치 단위로 소비하도록 변경했다. - 배치 안의 각 메시지는 별도의 Go goroutine에서 동시에 처리했다. - 이 방식의 trade-off는 다음과 같다. - 배치 처리 중 프로세스가 중단되면 이미 처리한 작업을 다시 수행해야 할 수 있다. - 동시에 처리하는 작업이 늘어 메모리 사용량이 증가한다. - 검사 시스템에서는 재처리 비용과 메모리 증가가 감당 가능한 수준이었기 때문에 병렬 처리를 선택했다. ## 느린 작업으로 인한 Head-of-Line Blocking 제거 - 일부 계정이나 Zone은 자산 수가 많아 검사에 수초가 아니라 수분 또는 수시간이 걸릴 수 있었다. - 이런 느린 메시지가 일반 메시지 앞에 있으면 Kafka 소비가 멈춰 빠른 작업까지 지연됐다. - 해결책으로 checker와 consumer group을 두 개의 처리 경로로 분리했다. - **Fast lane**: 빠르게 처리할 수 있는 일반 메시지 담당 - **Slow lane**: 처리 시간이 긴 메시지 전담 - 메시지의 예상 처리 시간을 빠르게 판단하고, fast lane이 느린 메시지를 만나면 건너뛰도록 했다. - 그 결과 느린 작업은 전용 자원을 사용하고, 빠른 작업은 지연 없이 계속 처리할 수 있었다. ## Postgres 대량 저장 최적화 - 기존 API는 인사이트 하나마다 별도의 `INSERT ... ON CONFLICT DO UPDATE` 쿼리를 실행했다. - 한 요청에 최대 50만 개의 인사이트가 포함될 수 있어, 최악의 경우 50만 번의 데이터베이스 왕복과 쿼리 실행이 발생했다. - 처음에는 임시 테이블에 `COPY`하는 Postgres 표준 대량 삽입 방식을 시도했지만, Postgres 시스템 테이블의 bloat가 증가하는 문제가 나타났다. - 최종적으로 입력 규모에 따른 하이브리드 방식을 채택했다. - 작은 데이터셋: `UNNEST`를 사용해 빠르게 삽입 - 큰 데이터셋: `COPY`를 사용해 대량 삽입 - 이 방식은 대규모 데이터에는 수초 수준의 처리 시간을, 소규모 데이터에는 밀리초 수준의 빠른 처리를 제공했다. ## 지역 간 지연으로 발생한 API 타임아웃 - 확장 과정에서 다음 현상이 관찰됐다. - 클라이언트 타임아웃 증가 - checker 처리 시간의 20~90%가 단일 API 호출에 소요 - 대량 검사 시 초기 처리량은 높지만 시간이 지나며 감소 - 원인은 API와 데이터베이스 간 네트워크 지연이었다. - 주 데이터베이스는 미국 오리건주 포틀랜드에 위치했다. - API는 포틀랜드와 네덜란드 암스테르담에서 active-active로 운영됐다. - 포틀랜드 API 호출은 평균 10ms였지만, 암스테르담 인스턴스에서는 거의 3초가 걸렸다. - 암스테르담 API가 데이터베이스 연결을 오래 점유하면서 checker의 클라이언트 연결 풀이 고갈됐다. - 연결을 기다리는 요청이 타임아웃되고, 암스테르담 API에 연결된 Kafka 파티션만 지속적으로 지연됐다. - 결국 API의 단순한 지역 분산이 전체 Kafka 소비 처리량의 불균형과 lag를 유발할 수 있음을 확인했다. ## 실용적인 결론 대규모 이벤트 처리 시스템에서는 소비자 수를 늘리는 것만으로 충분하지 않다. Kafka의 파티션 제약을 고려한 병렬 처리, 느린 작업의 별도 격리, 대량 데이터베이스 작업의 배치화, 데이터베이스와 API 간 지역 지연 관리까지 함께 최적화해야 안정적인 처리량 확장이 가능하다. 특히 분산 배포 환경에서는 평균 latency뿐 아니라 연결 풀 점유 시간과 파티션별 처리 편차까지 함께 측정해야 한다.

원문 읽기(새 탭에서 열림)
netflix5분 읽기큐레이션 요약

사일로에서 서비스 토폴로지로: 넷플릭스가 실시간 서비스 맵을 구축한 이유

넷플릭스는 수천 개의 마이크로서비스 간 실제 의존성을 실시간으로 보여주는 ‘Service Topology’를 구축했다. 기존의 지표·로그·트레이스는 시스템의 일부만 보여주므로, 장애 원인과 영향 범위를 파악하려면 엔지니어가 정보를 직접 조합해야 했다. Service Topology는 여러 데이터 소스로 네트워크와 애플리케이션 의존성 그래프를 만들고, 이를 통합해 빠르게 탐색할 수 있도록 하는 것이 핵심이다. ## 분산 시스템에서 의존성 파악이 어려운 이유 - 넷플릭스의 하나의 재생 요청도 인증, 추천, 인코딩 선택, 재생 최적화 등 수많은 서비스 호출을 발생시킨다. - 장애 상황에서 엔지니어가 즉시 확인해야 하는 질문은 다음과 같다. - 어떤 서비스가 서로 의존하는가? - 특정 서비스 장애나 점검의 영향 범위는 어디까지인가? - 문제가 상위 의존 서비스에서 시작됐는가, 현재 서비스가 다른 서비스로 전파하고 있는가? - 기존 관측 도구의 한계: - 메트릭은 성능 저하나 오류 같은 증상을 보여준다. - 로그는 개별 서비스의 동작을 보여준다. - 트레이스는 특정 요청의 흐름을 보여준다. - 그러나 시스템 전체의 지속적인 서비스 연결 구조를 한눈에 보여주지는 못한다. - 여러 도구의 정보를 엔지니어가 머릿속으로 조합해야 하므로, 장애 대응이 느리고 오류가 발생하기 쉽다. ## 실시간 서비스 맵이 필요한 배경 - 넷플릭스는 수천 개의 마이크로서비스와 수백 개의 엔지니어링 팀으로 운영된다. - 라이브 프로그램과 광고 지원 요금제 등 새로운 기능이 추가되면서 장애 조사와 모니터링의 신속성이 더욱 중요해졌다. - 특히 라이브 이벤트는 긴 장애 분석을 기다릴 수 없기 때문에 실시간에 가까운 의존성 정보가 필요하다. - 엔지니어 지원 요청을 분석한 결과, 다음과 같은 의존성 관련 질문이 반복적으로 제기됐다. - 상·하위 의존 서비스는 무엇인가? - 장애가 내 서비스 문제인가, 의존 서비스 문제인가? - 서비스를 중단하면 어떤 서비스가 영향을 받는가? - 메트릭에서 특정 서비스가 `Unknown`으로 표시되는 이유는 무엇인가? - 최근 호출 경로가 어떻게 바뀌었으며, 그것이 현재 문제와 관련 있는가? ## 기존 접근 방식에서 얻은 교훈 넷플릭스는 외부 그래프 데이터베이스와 상용 플랫폼을 검토하고, 다양한 저장 기술과 데이터 모델로 내부 프로토타입을 만들며 접근 방식을 발전시켰다. - **실시간성이 중요하다** - 하루 전 또는 몇 시간 전의 토폴로지는 자주 배포되는 환경에서는 이미 오래된 정보다. - 서비스 배포와 트래픽 변화에 따라 토폴로지가 거의 실시간으로 갱신되어야 한다. - **대규모 환경에서는 확장성이 핵심이다** - 소규모 환경에서 동작하는 저장소와 그래프 모델도 넷플릭스의 서비스 수와 트래픽 규모에서는 한계에 도달한다. - **기존 관측 생태계와의 통합이 필요하다** - 엔지니어가 새로운 도구와 작업 방식을 별도로 배워야 해서는 안 된다. - 기존 메트릭, 로그, 트레이스와 자연스럽게 연결되어야 한다. - **데이터 품질이 중요하다** - 누락되거나 잘못된 의존성 정보는 정보가 없는 것보다 위험하다. - 장애 상황에서 잘못된 원인이나 영향 범위를 판단하게 만들 수 있기 때문이다. - **단일 데이터 소스만으로는 부족하다** - 네트워크 연결 정보에는 애플리케이션 수준의 의미가 부족하다. - 애플리케이션 메트릭은 계측된 서비스만 포함할 수 있다. - 따라서 여러 관점의 데이터를 결합해야 한다. ## Service Topology의 요구사항 넷플릭스가 구축하려 한 것은 정적인 아키텍처 다이어그램이 아니라, 운영 상태를 계속 반영하는 ‘살아 있는 지도’였다. - 서비스 배포, 트래픽 변화, 신규 의존성 생성과 기존 의존성 제거를 실시간에 가깝게 반영한다. - 호출 그래프 탐색 결과를 1초 이내에 제공해야 한다. - 다음 두 계층을 모두 표현한다. - **네트워크 계층**: 실제로 어떤 서비스가 통신하는가 - **애플리케이션 계층**: 어떤 API와 엔드포인트가 호출되는가 - 단순한 연결 관계 외에도 다음 정보를 함께 표시한다. - 서비스 상태와 가용성 - 중요도 및 availability tier - 비즈니스 도메인 - 서비스 소유 팀 - 기타 운영 메타데이터 - 엔지니어가 탐색할 수 있는 UI뿐 아니라 자동화 시스템도 사용할 수 있는 프로그래밍 API를 제공한다. - 복원력 프레임워크 - 영향 범위 계산기 - 장애 대응 자동화 시스템 ## 세 가지 데이터 소스를 결합하는 구조 핵심 설계는 하나의 데이터 소스에 의존하지 않고, 서로 다른 관점에서 별도의 의존성 그래프를 구축하는 것이다. - 네트워크 계층, IPC 계층, 트레이싱 계층을 물리적으로 분리해 저장한다. - 각 계층은 독립적으로 발전하고 병렬로 조회할 수 있다. - 통합된 뷰가 필요할 때는 각 계층의 그래프를 동시에 탐색한 뒤 결과를 병합한다. - 이 구조를 통해 여러 계층을 함께 조회하더라도 1초 이내의 응답 시간을 목표로 한다. - 필요에 따라 통합된 그래프를 보거나, 특정 계층의 그래프만 독립적으로 분석할 수 있다. ## eBPF 기반 네트워크 흐름 첫 번째 데이터 소스는 커널 수준에서 eBPF로 수집한 네트워크 흐름 정보다. - 실제 네트워크 통신을 기반으로 어떤 서비스가 어떤 서비스에 연결되는지 기록한다. - 애플리케이션 계측 여부와 관계없이 실제 트래픽이 발생하는 모든 서비스를 포착할 수 있다. - 클러스터 간 통신과 애플리케이션 간 통신을 모두 파악할 수 있다. - 네트워크 트래픽이라는 실제 운영 데이터를 사용하므로 네트워크 계층의 기준점 역할을 한다. - 다만 네트워크 정보만으로는 어떤 API나 애플리케이션 기능이 호출됐는지 알기 어렵다. - 따라서 eBPF 데이터는 포괄적인 연결 관계를 제공하지만, 애플리케이션 의미를 해석하려면 IPC나 트레이싱 같은 추가 데이터가 필요하다. ## 운영 관점의 의미 - 서비스 토폴로지는 장애 원인 분석을 단순화하고, 상·하위 의존성 및 장애 전파 경로를 빠르게 확인하게 한다. - 서비스 중단이나 유지보수 전에 영향받을 서비스와 관련 팀을 파악할 수 있다. - UI와 API를 함께 제공함으로써 사람의 장애 대응과 자동화된 복원력·영향 분석을 모두 지원한다. - 정적인 아키텍처 문서보다 실제 트래픽과 현재 운영 상태를 반영하는 동적 지도가 분산 시스템에 더 유용하다. 실무적으로는 단일 관측 도구에 의존하기보다 네트워크 흐름, 애플리케이션 호출, 트레이싱 데이터를 결합해 의존성 정보를 구성하는 것이 좋다. 특히 대규모 마이크로서비스 환경에서는 실시간성, 데이터 정확성, 빠른 그래프 탐색, 기존 도구와의 통합을 초기 설계부터 핵심 요구사항으로 삼아야 한다.

원문 읽기(새 탭에서 열림)
meta4분 읽기큐레이션 요약

SilverTorch: 모델로서의 인덱스 — 추천 시스템을 위한 새로운 검색 패러다임

SilverTorch는 추천 시스템의 검색(retrieval) 단계를 여러 마이크로서비스가 아닌 하나의 통합 신경망으로 재설계한 아키텍처다. ‘Index as Model’ 패러다임을 통해 사용자 임베딩, ANN 검색, 적격성 필터링, 재순위화와 다중 작업 점수화를 하나의 PyTorch 모델에서 처리한다. 그 결과 기존 방식보다 최대 23.7배 높은 처리량과 20.9배 높은 컴퓨팅 비용 효율을 달성하면서도 추천 품질을 개선하고, 100ms 이하의 지연시간 제약을 유지할 수 있다고 설명한다. ## 기존 마이크로서비스 기반 검색의 한계 - 전통적인 추천 검색 시스템은 다음과 같은 서비스 조합으로 구성된다. - 사용자 타워 모델: 사용자의 관심사를 벡터인 사용자 임베딩으로 변환 - 후보 검색·필터링 서비스: 사용자 벡터와 유사한 콘텐츠를 찾고 언어·지역·정책 등을 기준으로 필터링 - 점수화 서비스: 남은 후보의 참여 가능성을 계산하고 순위를 조정 - 오케스트레이터: 각 서비스에 요청을 분산하고 결과를 통합 - 서비스 간 네트워크 왕복과 데이터 직렬화 과정이 100ms 이하의 검색 지연시간을 소모한다. - 사용자 모델, 아이템 인덱스, 필터링 규칙이 서로 다른 시점에 배포되어 버전이 불일치할 수 있다. - 예를 들어 사용자 모델은 v2인데 아이템 인덱스가 v1이면 서로 다른 버전의 임베딩이 비교된다. - ML 엔지니어는 주로 PyTorch를, 인프라 엔지니어는 C++를 사용해 개발 환경과 배포 주기가 분리된다. - Faiss-GPU와 같은 개별 최적화는 특정 서비스만 빠르게 만들 뿐, 서비스 간 데이터 이동과 독립적인 실행 구조라는 근본 문제는 해결하지 못한다. ## Index as Model: 인덱스를 모델 안으로 통합 - SilverTorch는 아이템 인덱스 자체를 모델 내부의 텐서로 표현한다. - 사용자 타워, ANN 검색, 적격성 필터, 점수화 계층을 모두 하나의 PyTorch 신경망에 포함한다. - 사용자의 요청은 단일 모델의 한 번의 forward pass를 거치며 다음 작업을 수행한다. - 사용자 관심사와 유사한 콘텐츠 검색 - 언어·국가·콘텐츠 정책 등에 따른 노출 가능 여부 확인 - 후보 재순위화 - 좋아요·공유·댓글 등 여러 참여 행동의 확률 예측 - 여러 예측값을 결합한 최종 점수 계산 - 하나의 모델 아티팩트와 단일 실행 경로를 사용하므로 구성 요소 간 공동 최적화와 일관된 버전 관리가 가능하다. - 모델 복잡도와 평가 후보 수를 늘리면서도 100ms 이하의 응답시간을 유지하는 것을 목표로 한다. ## 모델 내부의 검색·필터링·재순위화 - ANN 검색 영역은 전체 카탈로그를 모두 확인하지 않고 사용자와 가까운 아이템을 빠르게 찾는다. - 적격성 필터링 영역은 후보가 사용자에게 노출 가능한지 검사한다. - 언어 - 국가 및 지역 - 콘텐츠 정책 - 기타 서비스별 자격 조건 - 다중 작업 재순위화 영역은 여러 참여 행동을 동시에 예측한다. - 좋아요 - 공유 - 댓글 - 예측 결과를 종합해 참여 가능성이 높은 후보를 계산한다. - 일부 연산은 엔지니어가 직접 작성하고, 일부는 역전파를 통해 종단 간 학습할 수 있다. - 런타임에서는 모든 구성 요소가 동일한 `nn.Module`로 취급되므로 검색 모듈과 학습된 재순위화 모델을 자유롭게 조합할 수 있다. ## 모든 단계를 순수 PyTorch 모듈로 재구현 - 기존 ANN 검색, Bloom 인덱스 필터, 신경망 재순위화, 복합 점수화는 주로 독립적인 C++ 서비스로 구현되어 있었다. - 이러한 구현은 안정적이지만 각자 별도의 메모리·자료구조·실행 모델을 사용해 모듈 간 공동 최적화가 어렵다. - SilverTorch는 모든 데이터를 텐서로 표현하고, 모든 로직을 텐서 입력과 텐서 출력으로 통일한다. - 각 구성 요소는 PyTorch의 표준 `nn.Module` 인터페이스를 따른다. - 이를 통해 다음과 같은 최적화가 가능해진다. - 유망한 클러스터를 먼저 선택 - 선택된 클러스터 안에서만 필터링 - 필터를 통과한 후보만 점수화 - ML 엔지니어와 인프라 엔지니어가 서로 다른 계층에서 작업하는 대신 동일한 실행·개발 계층에서 모듈을 구성하고 최적화할 수 있다. ## 성능과 확장성 - 8천만 개 아이템을 대상으로 한 종단 간 평가에서 기존의 강력한 다중 서비스 기준선보다 초당 요청 처리량이 최대 23.7배 높았다. - CPU 기반 솔루션보다 추정 총소유비용(TCO) 효율이 20.9배 개선되었다. - 피드와 동영상 콘텐츠를 제공하는 여러 애플리케이션 제품군에 적용 가능한 규모 확장성을 보였다고 설명한다. - 신경망 재순위화와 다중 작업 점수화를 지연시간 예산 안에서 실용적으로 수행해, 기존 마이크로서비스 구조에서는 적용하기 어려웠던 추천 품질 개선을 가능하게 했다. 실용적으로는 검색 단계의 서비스 수가 많고, 후보 수·모델 복잡도·지연시간 간 충돌이 큰 시스템일수록 SilverTorch와 같은 통합 모델 구조의 효과가 크다. 다만 모든 구성 요소를 PyTorch로 통일하려면 GPU 메모리 관리, 모델 배포 안정성, 디버깅과 장애 격리 같은 운영 과제를 함께 해결해야 한다.

원문 읽기(새 탭에서 열림)
gitlab4분 읽기큐레이션 요약

GitLab Duo Agent Platform으로 배포 프로세스 자동화

GitLab Duo Agent Platform의 커스텀 에이전트를 활용하면 새로운 마이크로서비스를 기존 GitOps 배포 흐름에 자동으로 편입할 수 있다. 에이전트는 애플리케이션의 저장소 구조와 매니페스트, 파이프라인, Dockerfile을 분석해 필요한 설정을 생성하고 수정한다. 에이전트와 생성 결과가 GitLab 안에서 버전 관리·권한 통제되므로 자동화 속도와 엔터프라이즈 거버넌스를 함께 확보할 수 있다는 것이 글의 결론이다. ## TanukiBank의 마이크로서비스 온보딩 사례 - 가상의 은행 애플리케이션인 TanukiBank에 `intra-account-transfers` 마이크로서비스를 추가하는 상황을 예로 든다. - 기존 애플리케이션에는 계좌 간 송금 UI가 있지만 이를 처리할 백엔드 서비스가 없어 Transfer 버튼이 동작하지 않는다. - 새 서비스는 기존 GitOps 배포 규칙에 맞게 다음 요소를 모두 구성해야 한다. - Kubernetes 배포 매니페스트 - 컨테이너 이미지 빌드 및 전달 파이프라인 - 이미지 자동 업데이트 설정 - 네임스페이스, 포트, 호스트명 참조 ## TanukiBank의 GitOps 배포 구조 - GitLab 그룹에는 각 마이크로서비스를 담는 `services` 하위 그룹이 있다. - 배포 과정은 두 프로젝트와 Flux 컴포넌트가 연계되는 구조다. - **Tanuki Bank - Delivery**: 환경별 배포 매니페스트와 전달 파이프라인 관리 - **Flux Config**: Flux 관련 매니페스트 관리 - **Flux Image Automation Controller**: 서비스 레지스트리의 새 이미지를 감지하고 Delivery 프로젝트의 매니페스트 갱신 - **Flux CD Controller**: Delivery 프로젝트의 상태를 Kubernetes 클러스터의 실행 상태와 동기화 - 새 서비스가 추가되면 서비스 저장소, Delivery 프로젝트, Flux 설정을 모두 정확히 수정해야 한다. - 수동 작업에서는 특정 파일이나 참조를 빠뜨릴 경우 배포 실패가 발생할 수 있다. ## GitLab Duo를 이용한 시스템 프롬프트 생성 - GitLab Agentic Chat에 TanukiBank 그룹과 하위 그룹의 구조 및 파일을 분석하도록 요청한다. - Duo는 다음 자료를 조사해 커스텀 에이전트용 시스템 프롬프트를 작성한다. - Kubernetes 매니페스트 - 설정 파일 - Dockerfile - 프로젝트 간 의존성 - 기존 GitOps 규칙 - 생성된 프롬프트에는 다음과 같은 내용이 포함된다. - 에이전트가 따라야 할 작업 규칙 - 결과 보고 방식 - 사용할 도구 - 이 프롬프트는 현재 애플리케이션의 GitOps 구조를 반영한 것이므로, 향후 배포 방식이 바뀌면 다시 생성해야 한다. ## 커스텀 에이전트 생성 및 적용 - `application-agents`라는 별도 프로젝트를 만들어 에이전트를 관리한다. - GitLab의 **AI > Agents > Managed** 메뉴에서 `TanukiBank Microservice Onboarder` 에이전트를 생성한다. - 에이전트 생성 시 다음을 설정한다. - 이름과 설명 - 공개 여부 - Duo가 추천한 도구 - 앞서 생성한 시스템 프롬프트 - 이후 에이전트를 GitOps를 담당하는 다음 프로젝트에서 사용할 수 있도록 활성화한다. - `Tanuki Bank - Delivery` - `Flux Config` - 각 프로젝트의 Agentic Chat 에이전트 목록에 해당 에이전트가 표시되면 설정이 완료된 것이다. ## Developer 플로우로 새 서비스 구현 - `services` 그룹에 `intra-account-transfers` 프로젝트를 만든다. - 프로젝트 이슈에 마이크로서비스 요구사항을 작성하고 **Generate MR with Duo**를 실행한다. - Developer foundational flow가 다음 작업을 자동으로 수행한다. - 이슈의 사양 분석 - 서비스 코드 구현 - 브랜치 생성 - Merge Request 생성 - 이슈와 MR 연결 - 로컬에서 `curl` 명령으로 동작을 확인한 뒤 MR을 병합한다. - 파이프라인이 실행되어 새 서비스의 컨테이너 이미지를 서비스 프로젝트의 내장 레지스트리에 업로드한다. ## 커스텀 에이전트를 통한 GitOps 온보딩 - 서비스 자체는 생성됐지만 GitOps 설정에는 아직 등록되지 않은 상태다. - Delivery 프로젝트의 `manifests/dev`에 서비스 매니페스트가 없음 - 전달 파이프라인에 서비스 참조가 없음 - Flux Config의 `image-update-automation.yaml`에 이미지 자동화 항목이 없음 - 새 서비스 프로젝트에서도 `TanukiBank Microservice Onboarder`를 활성화한다. - Delivery 프로젝트의 Agentic Chat에서 커스텀 에이전트를 선택한다. - 서비스 이름과 호스트명을 전달해 온보딩을 요청한다. - 에이전트는 새 서비스의 Dockerfile을 읽어 포트를 확인하고, 이에 맞는 매니페스트와 파이프라인 설정을 생성·수정한다. - 제공된 글은 이 작업이 진행되는 지점에서 끝나므로, 이후 생성된 변경 사항과 실제 Kubernetes 배포 결과는 본문에 포함되어 있지 않다. 새 마이크로서비스 온보딩 절차가 반복적이고 규칙 기반이라면, 프로젝트 구조와 GitOps 규칙을 반영한 커스텀 에이전트를 만들어 자동화하는 것이 효과적이다. 다만 시스템 프롬프트가 현재 배포 구조에 강하게 의존하므로, GitOps workflow 변경 시 프롬프트와 에이전트 동작을 함께 재검토해야 한다.

원문 읽기(새 탭에서 열림)
netflix원문

모델 서빙의 라우팅 현황 (새 탭에서 열림)

넷플릭스는 대규모 개인화 경험을 제공하기 위해 수백 개의 모델과 초당 100만 건의 요청을 처리하는 중앙 집중식 머신러닝(ML) 모델 서빙 플랫폼을 운영하고 있습니다. 이 플랫폼은 'Switchboard'라는 라우팅 계층을 통해 클라이언트 마이크로서비스와 복잡한 ML 모델 인프라를 분리하여, 클라이언트의 수정 없이도 새로운 모델을 신속하게 실험하고 배포할 수 있는 환경을 구축했습니다. 이를 통해 넷플릭스는 모델 추론뿐만 아니라 데이터 전처리 및 특징 추출을 포함한 전체 워크플로우를 표준화된 API로 추상화하여 혁신의 속도를 높이고 있습니다. ### 넷플릭스의 워크플로우 중심 모델 정의 * 넷플릭스에서 모델은 단순한 추론 함수(`score(features)`)를 넘어, 입력 데이터 변환, 특징(feature) 계산, 추론, 후처리를 모두 포함하는 독립적인 '워크플로우'로 정의됩니다. * 클라이언트는 사용자 ID나 국가와 같은 최소한의 컨텍스트만 제공하며, 모델 서빙 플랫폼이 필요한 데이터를 다른 마이크로서비스에서 가져와 직접 특징을 계산합니다. * 이러한 구조 덕분에 클라이언트는 모델의 내부 로직이나 데이터 의존성을 알 필요가 없으며, 모델의 아키텍처가 변하더라도 클라이언트 코드를 수정할 필요가 없습니다. ### 중앙 집중형 라우팅 엔진, Switchboard * 넷플릭스는 표준 API 게이트웨이나 서비스 메시가 제공하지 못하는 실험 플랫폼과의 통합, gRPC 지원, 도메인 특화 라우팅을 구현하기 위해 자체 프록시 서비스인 'Switchboard'를 개발했습니다. * Switchboard는 클라이언트 요청을 적절한 모델 인스턴스와 클러스터 샤드로 전달하는 역할을 수행하며, 초당 100만 건 이상의 요청을 처리하면서도 높은 가용성을 유지합니다. * 모델 배포 시 섀도 모드(Shadow mode), 카나리 배포(Canary), 롤백 등을 클라이언트 모르게 수행할 수 있어 안전한 운영이 가능합니다. ### 인프라 복잡성을 감추는 모델 샤딩 분리 * 모델은 트래픽 패턴, SLA, CPU/메모리 요구사항에 따라 여러 연산 클러스터 샤드(VIP 주소)에 분산 배치됩니다. * 서빙 플랫폼은 이러한 물리적 배치 상태를 클라이언트로부터 은폐하여, 인프라의 변경이나 모델의 샤드 이동이 클라이언트 서비스에 영향을 주지 않도록 설계되었습니다. * 이를 통해 ML 연구자는 인프라 제약 없이 자유롭게 실험을 설계하고 모델을 배포할 수 있습니다. ### 'Objective' 기반의 추상화 계층 * 플랫폼은 'Objective'라는 열거형(Enum) 단위를 통해 모든 요청을 관리하며, 이는 비즈니스 목적(예: 콘텐츠 추천, 결제 사기 탐지)을 나타냅니다. * Objective는 요청이 전달될 특정 서빙 클러스터와 모델 유형/버전을 결정하는 기준이 됩니다. * 또한, 각 Objective는 고유한 API 규격을 정의하여 서로 다른 도메인의 클라이언트가 동일한 방식으로 플랫폼과 통신할 수 있도록 표준화합니다. 성공적인 대규모 ML 시스템을 구축하려면 모델의 생명주기를 클라이언트 애플리케이션으로부터 완전히 격리해야 합니다. 넷플릭스의 사례처럼 워크플로우 단위의 모델 정의와 'Objective' 중심의 라우팅 추상화를 도입함으로써, 인프라의 복잡성을 관리하면서도 머신러닝 혁신의 속도를 극대화할 수 있습니다.

cloudflare원문

에이전트 위크에 오신 것을 환영합니다 (새 탭에서 열림)

AI 에이전트의 시대가 도래함에 따라 기존의 컨테이너 기반 클라우드 인프라는 확장성과 비용 측면에서 한계에 직면하고 있습니다. 클라우드플레어는 일대다(1:N) 방식의 전통적인 아키텍처 대신, 개별 에이전트마다 독립적인 실행 환경을 즉시 제공할 수 있는 격리(Isolate) 기반의 서버리스 기술이 미래 인터넷의 핵심이 될 것이라고 주장합니다. 에이전트의 대중화를 위해서는 수 밀리초 안에 실행되고 자원 소모가 적은 가벼운 컴퓨팅 환경으로의 전환이 필수적이라는 결론입니다. **기존 클라우드 모델과 에이전트의 충돌** * 스마트폰 시대를 거치며 발전한 현재의 클라우드는 소수의 마이크로서비스 인스턴스가 다수의 사용자를 처리하는 '일대다(One-to-Many)' 모델을 기본으로 합니다. * 반면 AI 에이전트는 한 명의 사용자가 하나의 특정 작업을 수행하기 위해 고유한 실행 환경을 점유하는 '일대일(One-to-One)' 모델을 요구합니다. * 기존 애플리케이션이 정해진 메뉴를 제공하는 '레스토랑'이라면, 에이전트는 작업마다 다른 도구와 재료를 사용하는 '개인 요리사'와 같아서 기존의 컨테이너 방식으로는 이를 효율적으로 수용하기 어렵습니다. **에이전트 대중화를 가로막는 확장성 산식** * 수억 명의 지식 노동자가 동시에 에이전트를 사용할 경우, 기존 컨테이너 방식으로는 수백만 대의 서버 CPU가 필요하며 이는 현재 가용 가능한 컴퓨팅 용량을 수십 배 초과합니다. * 컨테이너는 실행 시 수백 메가바이트의 메모리를 소모하고 시작 속도가 느려, 에이전트 한 대당 운영 비용이 매우 높게 형성됩니다. * 이러한 경제적 한계 때문에 현재 에이전트 도구들은 높은 비용을 정당화할 수 있는 코딩 도구 등 일부 영역에만 국한되어 있습니다. **V8 Isolate 기술을 통한 인프라 혁신** * Cloudflare Workers의 기반인 V8 Isolate 기술은 컨테이너 대비 시작 속도는 약 100배 빠르고(수 밀리초), 메모리 사용량은 100배가량 효율적입니다. * 'Dynamic Workers' 환경을 통해 요청이 들어올 때마다 실시간으로 에이전트 실행 환경을 할당하고 작업 종료 즉시 폐기함으로써 하드웨어 밀도를 극대화할 수 있습니다. * Isolate는 에이전트가 필요로 하는 최소한의 자원만 할당하므로, 전 세계 수십억 명의 사용자를 위한 에이전트 서비스 운영에 필요한 경제적 타당성을 제공합니다. **전환기의 과제와 하이브리드 전략** * 현재는 에이전트가 사람이 사용하던 웹사이트를 탐색하기 위해 헤드리스 브라우저를 사용하는 '말 없는 마차(Horseless Carriage)' 단계에 머물러 있습니다. * 향후에는 에이전트가 직접 서비스를 호출하는 MCP(Model Context Protocol) 표준과 에이전트 전용 인증 방식이 확산될 것으로 보입니다. * 클라우드플레어는 파일 시스템과 바이너리 실행이 필수적인 코딩 에이전트를 위한 '컨테이너 기반 샌드박스'를 정식 출시함과 동시에, 가벼운 작업을 위한 Isolate 기술을 병행 지원하여 구시대와 신시대의 인프라를 연결할 계획입니다. 에이전트 중심의 서비스를 구축하려는 기업은 컨테이너 중심의 무거운 기존 설계에서 벗어나, 실행 밀도가 높고 비용 효율적인 Isolate 기반의 서버리스 아키텍처를 도입하여 대규모 사용자 환경에 대비할 것을 추천합니다.

gitlab원문

GitLab 파이프라인 로직이 엔지니어링 문제를 해결하는 5가지 방법 (새 탭에서 열림)

GitLab의 파이프라인 실행 모델은 모노레포, 마이크로서비스, 다중 환경 배포와 같은 현대적인 엔지니어링 복잡성을 해결하기 위해 설계되었습니다. 부모-자식 파이프라인, DAG(Directed Acyclic Graph), 멀티 프로젝트 트리거 등의 기능을 조합하면 단순히 빌드 속도를 높이는 것을 넘어 조직의 표준을 강제하면서도 병목 현상을 줄이는 확장 가능한 CI/CD 시스템을 구축할 수 있습니다. 결과적으로 이러한 구성 가능한 패턴들을 이해하고 활용하는 것이 효율적인 소프트웨어 배포의 핵심입니다. **모노레포 최적화를 위한 부모-자식 파이프라인과 DAG 실행** - 특정 서비스의 변경사항이 발생했을 때만 관련 파이프라인이 실행되도록 '부모-자식 파이프라인'을 구성하여 불필요한 전체 재빌드를 방지합니다. - `trigger: include`와 `strategy: depend`를 사용하여 부모 파이프라인이 자식 파이프라인의 결과에 의존하게 함으로써, 상위 수준에서 전체 서비스의 상태를 한눈에 파악할 수 있습니다. - `needs` 키워드를 활용한 DAG(비순차적 실행) 모델을 적용하면, 동일 단계(stage)의 다른 작업이 끝나기를 기다리지 않고 의존성이 해결되는 즉시 다음 작업을 시작하여 파이프라인 실행 시간을 획기적으로 단축합니다. - 각 서비스가 독립적인 설정 파일을 가질 수 있어 조직적 분리가 용이하며, 한 서비스의 설정 오류가 전체 모노레포 시스템을 중단시키지 않도록 격리합니다. **마이크로서비스 간 연동을 위한 멀티 프로젝트 파이프라인** - 서로 다른 리포지토리에 존재하는 프론트엔드와 백엔드 간의 의존성 문제를 해결하기 위해 '멀티 프로젝트 트리거'를 사용하여 파이프라인을 연결합니다. - 프론트엔드 파이프라인에서 API 계약(Contract) 아티팩트를 생성하고, 이를 백엔드 파이프라인 트리거 시 전달하여 서비스 간 정합성을 자동으로 검증합니다. - `$CI_JOB_TOKEN`을 활용한 Jobs API 호출을 통해 다른 프로젝트의 아티팩트를 안전하게 가져올 수 있으며, 이를 통해 통합 테스트의 자동화 수준을 높입니다. - 업스트림 파이프라인 뷰에서 연결된 다운스트림 파이프라인의 상태를 실시간으로 확인할 수 있어, 서비스 간 변경 사항이 미치는 영향에 대한 가시성을 제공합니다. GitLab이 제공하는 이러한 파이프라인 로직은 단순한 빌드 도구를 넘어 복잡한 아키텍처를 관리하는 강력한 오케스트레이션 엔진 역할을 합니다. 대규모 모노레포를 운영하거나 서비스 간 의존성이 복잡한 마이크로서비스 환경이라면, DAG를 통한 속도 최적화와 멀티 프로젝트 트리거를 통한 통합 검증 체계를 우선적으로 도입할 것을 권장합니다.

line원문

도메인에 의존하지 않는 채팅 플랫폼은 어떻게 만들었을까? (새 탭에서 열림)

MessagingHub는 서비스마다 개별적으로 구축해야 했던 채팅 기능을 통합하여 플랫폼화함으로써 개발 비용을 절감하고 시스템 복잡도를 낮춘 메시징 플랫폼입니다. 특정 도메인에 의존하지 않는 독립성과 범용성을 바탕으로 챗봇, 상담 채팅, 1:1 대화 등 다양한 요구사항을 레고처럼 조합할 수 있는 구조로 설계되었습니다. 결과적으로 연동 서비스는 비즈니스 로직에만 집중하고, 채팅의 핵심 기능과 연결 관리는 플랫폼이 전담하여 효율적인 서비스 운영이 가능해졌습니다. ### 도메인 독립적인 인증 및 사용자 식별 * **연동 측 책임 중심의 인증:** MessagingHub는 직접 사용자를 관리하지 않고, 연동 시스템이 인증을 마친 후 요청한 연결 토큰(connection token)을 검증하여 웹소켓 연결을 허용합니다. * **유연한 사용자 식별:** 도메인 정보와 연동 측 식별자를 조합한 ‘client ID’를 사용해 여러 서비스의 사용자를 구분하며, 닉네임이나 프로필 같은 부가 정보는 연동 측에서 실시간으로 갱신하도록 설계되었습니다. * **서비스 컨텍스트 기반 제어:** '누가 누구와 대화하는지(Driver2CS 등)'를 정의하는 서비스 컨텍스트와 채팅방 유형(1:1, 그룹, 챗봇 등)의 조합을 통해 세밀한 접근 권한과 메시지 허용 정책을 관리합니다. ### 관심사 분리를 통한 모듈형 아키텍처 * **컴포넌트 기반 구조:** 연결 관리(connection-manager), 비즈니스 로직(chat-app), 메시지 중계(message-router), 알림(notification-app) 등 각 기능을 독립적인 컴포넌트로 분리하여 R&R을 명확히 했습니다. * **커맨드(Command) 패턴 활용:** 채팅의 모든 동작을 커맨드 단위로 정의하여 챗봇이나 상담 채팅 등 서비스 성격에 맞게 기능을 유연하게 조합하고 확장할 수 있습니다. * **이벤트 기반 연동:** 각 컴포넌트는 이벤트 기반으로 느슨하게 결합되어 있어, 특정 기능의 변경이 전체 시스템에 미치는 영향을 최소화했습니다. ### 효율적인 데이터 관리와 메시지 순서 보장 * **메시지 체이닝 및 상태 관리:** `prev_chat_log_id`를 사용하여 메시지 간 순서를 보장하며, 읽음 위치(`last_seen_chat_log_id`)와 전체 메시지 범위를 비교하여 정확한 안 읽은 메시지 수를 산출합니다. * **JSON 컬럼을 통한 확장성:** 연동 측에서 필요로 하는 도메인 특화 데이터(검색용 데이터, 사용자 상세 정보 등)를 MessagingHub가 해석하지 않고 JSON 형태로 그대로 보관 및 전달함으로써 범용성을 확보했습니다. * **보안 및 자동 삭제:** 모든 메시지는 암호화하여 저장되며, 참여자 이탈에 따른 즉시 삭제나 설정된 보관 기간에 따른 자동 삭제 정책을 지원합니다. ### 챗봇 시나리오의 안정적인 배포와 SOFT STOP 정책 * **계층적 시나리오 구조:** 관리자 도구를 통해 시나리오를 편집하고 배포할 수 있으며, 답변과 선택지 및 외부 연동을 위한 웹훅 기능을 지원합니다. * **SOFT STOP 상태 도입:** 새로운 시나리오 배포 시, 기존 대화 중인 사용자는 이전 버전을 유지하고 신규 사용자에게만 새 버전을 노출하는 'SOFT STOP' 단계를 두어 사용자 경험의 단절을 방지합니다. * **지능형 스케줄링:** 스케줄러가 이전 버전 시나리오의 잔여 연결 정보를 주기적으로 체크하여, 더 이상 사용하는 사용자가 없을 때 자동으로 해당 버전을 종료 처리합니다. ### 상담 효율을 높이는 문의형 채팅 최적화 * **상담 컨텍스트 제공:** 상담원이 사용자 정보를 별도로 조회할 필요가 없도록, 채팅방 생성 시 연동 측으로부터 전달받은 검색 데이터, 추적 데이터 등 풍부한 메타데이터를 상담 화면에 함께 제공합니다. * **생명 주기 관리:** 상담 대기(PENDING)부터 종료(DISABLE) 및 재진입 방지(BLOCK)까지 이어지는 상담 전용 상태 관리를 통해 상담 프로세스의 일관성을 유지합니다. MessagingHub와 같은 채팅 플랫폼 도입은 서비스 확장 속도가 빠르고 다양한 소통 창구가 필요한 환경에서 특히 유용합니다. 채팅 기능을 직접 구현하기보다는, 인증과 데이터 처리는 전문 플랫폼에 맡기고 도메인 특화 데이터(Metadata)를 적극 활용하는 방향으로 설계한다면 시스템의 유연성과 운영 효율을 동시에 확보할 수 있을 것입니다.

aws원문

Amazon S3 20주년과 다음 단계 구축 | Amazon Web Services (새 탭에서 열림)

Amazon S3는 2006년 출시 이후 20년 동안 단순한 객체 스토리지를 넘어 전 세계 데이터 및 AI 워크로드의 핵심적인 보편적 기반으로 진화했습니다. 기술적 혁신을 통해 11나인(99.999999999%)의 내구성과 완벽한 하위 호환성을 유지하면서도, 비용을 85% 절감하고 엑사바이트 단위의 확장을 실현하며 클라우드 인프라의 표준을 제시하고 있습니다. **비약적인 규모의 확장과 경제성 확보** * 2006년 당시 1PB 수준이었던 총 용량은 현재 500조 개 이상의 객체와 수백 엑사바이트의 데이터를 수용하는 규모로 성장했습니다. * 최대 객체 크기는 5GB에서 50TB로 1만 배 증가했으며, 초당 요청 수는 전 세계적으로 2억 건을 상회합니다. * 기가바이트당 비용은 출시 초기 15센트에서 현재 약 2센트로 85% 감소했으며, 'S3 Intelligent-Tiering'을 통해 고객들은 표준 대비 60억 달러 이상의 비용을 절감했습니다. * S3 API는 업계 표준이 되어 수많은 벤더가 이를 채택하고 있으며, 2006년에 작성된 코드가 수정 없이 오늘날에도 그대로 동작할 만큼 엄격한 하위 호환성을 보장합니다. **규모의 한계를 극복하는 엔지니어링 혁신** * **지속적 데이터 감사:** 마이크로서비스 기반의 감사(Auditor) 시스템이 모든 바이트를 실시간으로 검사하며, 열화 징후가 발견되는 즉시 자동 복구 시스템을 가동하여 데이터 손실을 방지합니다. * **수학적 정확성 증명:** 인덱스 하위 시스템과 액세스 정책 등에 정형 기법(Formal methods)과 자동 추론을 적용하여 시스템의 일관성과 정확성을 수학적으로 증명합니다. * **Rust 언어 전환:** 성능에 민감한 요청 경로와 디스크 스토리지 코드를 Rust로 재작성하여 메모리 안전성을 확보하고, 대규모 운영 환경에서 발생할 수 있는 버그를 컴파일 단계에서 제거했습니다. * **규모의 경제 활용:** "규모가 곧 장점"이라는 철학 아래 시스템이 커질수록 개별 워크로드 간의 상관관계가 낮아지도록 설계하여 전체적인 안정성을 높였습니다. **데이터와 AI를 위한 미래 지향적 기능** * **S3 Tables:** Apache Iceberg 테이블을 완전 관리형으로 제공하며, 자동화된 유지보수를 통해 쿼리 효율을 높이고 스토리지 비용을 최적화합니다. * **S3 Vectors:** RAG(검색 증강 생성) 및 시맨틱 검색을 위해 최대 20억 개의 벡터를 인덱싱하며, 100ms 미만의 낮은 지연 시간으로 네이티브 벡터 검색을 지원합니다. * **S3 Metadata:** 대규모 버킷을 일일이 나열(List)하지 않고도 중앙 집중식 메타데이터를 통해 즉각적으로 데이터를 발견할 수 있어 데이터 레이크 분석 시간을 획기적으로 단축합니다. **권장 사항** S3는 이제 데이터를 저장만 하는 공간이 아니라, 데이터를 이동시키지 않고도 직접 분석하고 AI 모델에 활용할 수 있는 통합 플랫폼입니다. 비용 효율성을 극대화하기 위해 'Intelligent-Tiering'을 기본적으로 활용하고, 복잡한 데이터 파이프라인 대신 'S3 Tables'나 'S3 Metadata' 같은 최신 기능을 도입하여 데이터 관리의 복잡성을 줄이는 전략이 필요합니다.

cloudflare원문

실행 가능한 인사이트를 위한 보안 (새 탭에서 열림)

Cloudflare는 보안 팀이 방대한 데이터 속에서 소음이 아닌 실제 행동으로 이어질 수 있는 통찰력을 얻을 수 있도록 보안 개요(Security Overview) 대시보드를 새롭게 개편했습니다. 이번 업데이트의 핵심은 단순한 모니터링을 넘어 '보안 액션 아이템'을 통해 조치가 필요한 취약점을 우선순위에 따라 제시하고, 보안 도구가 실제로 활성화되어 있는지 확인하는 '설정 공백'을 메우는 데 있습니다. 이를 위해 하루 1,000만 개 이상의 통찰력을 생성하는 마이크로서비스 기반의 엔진을 구축하여 실시간 대응과 정기적인 정밀 검사를 동시에 실현했습니다. **보안 액션 아이템을 통한 우선순위화** * 수많은 로그 속에서 길을 잃지 않도록 심각도(Critical, Moderate, Low)에 따라 보안 위험을 분류하여 즉시 조치가 필요한 항목을 상단에 배치합니다. * '의심스러운 활동'이나 '안전하지 않은 설정'과 같은 통찰력 유형별 필터링 기능을 제공하여 조직이 직면한 특정 위협에 맞춰 워크플로우를 최적화할 수 있습니다. * 탐지와 조사를 연결하는 기능적 가교 역할을 수행함으로써 보안 분석가가 "지금 무엇을 고쳐야 하는가?"라는 질문에 즉각 답할 수 있게 합니다. **탐지 도구 모듈과 설정 공백 해소** * 보안 사고의 주요 원인 중 하나인 '도구의 비활성화' 또는 '잘못된 설정' 문제를 해결하기 위해 전체 Cloudflare 보안 스택의 상태를 한눈에 보여줍니다. * 주요 방어 체계가 실제 차단 모드인지, 아니면 단순히 '로그 전용(Log Only)' 모드인지 직관적으로 확인하여 방어 공백을 제거합니다. * 섀도우 API(Shadow API) 발견 여부 등 보안 도구의 활성화 상태를 실시간으로 노출하여 도구의 보유 여부보다 '실제 보호 여부'에 집중하게 합니다. **워크플로우 효율을 높이는 통합 가시성 및 딥 링크** * 보안 개요 페이지의 '의심스러운 활동' 카드를 클릭하면 관련 필터가 자동 적용된 상태로 보안 분석(Security Analytics) 페이지로 즉시 이동하는 딥 링크 기능을 제공합니다. * 여러 도구 사이를 오가며 수동으로 필터를 재설정해야 하는 '탭 전환 비용(Tab switching tax)'을 없애 침해 사고 대응 속도를 높였습니다. * 통합된 데이터 뷰를 통해 대시보드의 요약 정보와 상세 분석 데이터 간의 일관성을 유지합니다. **마이크로서비스 '체커(Checker)' 아키텍처** * **스케줄 기반 체크(Scheduled Checks):** DNS 레코드와 같은 자산을 정기적으로 정밀 검사하며, 병렬 시스템을 통해 도메인 설정 오류나 취약점을 찾아내고 조치 여부에 따라 통찰력을 업데이트하거나 삭제합니다. * **이벤트 핸들러(Event Handlers):** 제어 평면(Control plane)의 신호를 실시간으로 경청하여, WAF 규칙이 변경되거나 취약한 설정이 적용되는 즉시 이를 감지하고 대시보드에 반영합니다. * **분산형 구조:** 각 서비스 영역에 특화된 마이크로서비스들이 독립적으로 확장 가능하게 설계되어, 단순한 SSL 인증서 검사부터 복잡한 AI 봇 설정까지 광범위한 보안 스택을 커버합니다. 보안 담당자는 새로운 대시보드의 '액션 아이템'을 일일 업무의 시작점으로 활용함으로써 가장 위험한 취약점부터 체계적으로 해결할 수 있습니다. 특히 탐지 도구 모듈을 정기적으로 확인하여 핵심 보안 기능이 '로그 전용' 모드에 머물러 있지 않은지 점검하고, 시스템이 제안하는 최적화 권장 사항을 적용해 선제적인 방어 태세를 유지할 것을 권장합니다.

airbnb원문

나의 에어비앤비 입 (새 탭에서 열림)

안나 술키나(Anna Sulkina)는 20년 이상의 경력을 가진 엔지니어링 리더로, 하드웨어 진단에서 시작해 프론트엔드와 백엔드를 거쳐 현재 에어비앤비의 인프라 및 클라우드 부문을 이끌고 있습니다. 그녀는 트위터 재직 당시 대규모 분산 시스템의 기술적 한계를 극복하고 조직적 합의를 통해 GraphQL 도입을 성공시킨 경험을 바탕으로, 기술적 역량과 리더십의 조화를 강조합니다. 현재 그녀는 에어비앤비에서 개발자 플랫폼의 전략적 방향성을 설정하고 고성과 팀을 구축하여 비즈니스 가치를 극대화하는 데 전념하고 있습니다. ### 기술적 호기심의 시작과 초기 경력의 도전 * 소련 붕괴 시기 우크라이나에서 성장하며, 컴퓨터 하드웨어를 조립하던 오빠의 영향으로 기술에 대한 호기심을 키웠습니다. * 미국 이주 초기에는 프로그래밍 언어보다 영어 소통에 더 큰 어려움을 겪었으나, 버클리 익스텐션 등을 통해 C++과 Java 지식을 확장하며 전문성을 쌓았습니다. * 첫 직장인 하드웨어 진단 분야를 시작으로 기술 스택의 아래 단계로 점진적으로 내려가며 하드웨어, 프론트엔드, 백엔드를 아우르는 폭넓은 시각을 갖게 되었습니다. ### 리더십으로의 전환과 팀 구축의 즐거움 * 개인 기여자(IC)로서의 역량뿐만 아니라 리더십 잠재력을 인정받아 텔레콤 스타트업과 컴캐스트(Comcast)를 거치며 엔지니어링 매니저로 성장했습니다. * 좋은 리더가 있는 팀과 그렇지 않은 팀의 차이를 직접 목격하며 사람을 코칭하고 고성과 팀을 만드는 과정에서 큰 흥미를 느꼈습니다. * 기술 스택의 깊이가 깊어질수록 리더십의 책임 또한 커지는 궤적을 그리며 인프라 부문의 리더로 자리매김했습니다. ### 트위터에서의 분산 시스템 설계와 기술 혁신 * 약 9년 동안 트위터에 재직하며 'Fail Whale' 시기와 엘런 디제너러스의 셀카 사건 등 대규모 트래픽 장애를 해결하는 핵심적인 역할을 수행했습니다. * **실패를 위한 설계:** 모놀리스 구조에서 마이크로서비스 아키텍처로 전환하며, 복잡한 분산 시스템에서는 실패를 피하는 것이 아니라 '실패를 대비한 설계'가 필수적임을 배웠습니다. * **합의를 통한 혁신:** 해커톤에서 시작된 GraphQL 도입을 위해 전사적인 기술적 합의를 이끌어냈으며, 이는 기존 REST 서비스를 대체하고 제품 개발 속도를 획기적으로 높이는 결과로 이어졌습니다. ### 에어비앤비에서의 전략적 정렬과 플랫폼 고도화 * 평소 여행을 좋아하고 에어비앤비 서비스의 팬이었던 점이 이직의 결정적 계기가 되었으며, 개인적 관심사와 기술적 전문성을 일치시켰습니다. * **개발자 플랫폼 개선:** 파편화되어 있던 개발자 플랫폼 조직의 전략을 명확히 하고, 내부 이해관계자들과의 신뢰를 구축하는 데 집중했습니다. * **조직적 정렬:** "우리는 왜 여기에 모였는가?"와 같은 근본적인 질문에 답하며 리더십 코칭과 팀 간 정렬을 통해 비즈니스 가치를 창출하는 고성과 조직을 재정비했습니다. 안나 술키나의 여정은 복잡한 시스템일수록 기술적 완벽주의보다는 실패를 수용하는 유연한 설계가 중요하다는 점을 시사합니다. 또한, 기술적 혁신은 단순히 뛰어난 코드로 완성되는 것이 아니라, 조직 내의 합의를 이끌어내고 구성원들의 목표를 하나로 정렬하는 리더십을 통해 비로소 실현될 수 있음을 보여줍니다.

airbnb원문

현지인처럼 결 (새 탭에서 열림)

Airbnb는 전 세계 220개 이상의 국가에서 결제 편의성을 높이고 전환율을 개선하기 위해 14개월 만에 20개 이상의 지역 결제 수단(LPM)을 성공적으로 도입했습니다. 이를 위해 기존의 모놀리식 시스템을 도메인 주도 서비스 체계로 현대화하고, 다양한 결제 방식을 표준화된 인터페이스로 처리할 수 있는 기술적 기반을 마련했습니다. 결과적으로 복잡한 지역별 결제 환경을 추상화함으로써 확장성 있는 글로벌 결제 플랫폼을 구축하고 비즈니스 성장을 가속화했습니다. **현지 결제 수단(LPM) 도입의 전략적 가치** * **다양한 결제 수단 수용:** 신용카드 외에도 국가별 디지털 지갑(M-Pesa), 실시간 계좌 이체(Pix, UPI), 지역 결제망(Cartes Bancaires) 등 사용자에게 익숙한 수단을 제공합니다. * **접근성 및 전환율 증대:** 신용카드 보급률이 낮은 시장의 잠재 고객을 확보하고, 결제 단계에서의 이탈(friction)을 줄여 예약 전환율을 높입니다. * **체계적인 선정 프레임워크:** 전 세계 300개 이상의 결제 옵션 중 상위 75개 시장을 분석하고, 여행 서비스 적합도와 시장 점유율을 고려해 우선순위가 높은 20여 개를 선정했습니다. **결제 플랫폼 현대화 및 MST 프레임워크** * **서비스 지향 아키텍처(LTA):** 모놀리식 구조를 도메인 주도 아키텍처로 전환하여 결제 처리, 정산, 장부 관리 등 기능을 독립적인 서비스로 분리했습니다. * **커넥터 및 플러그인 구조:** 새로운 결제 서비스 제공업체(PSP)를 연동할 때 코드 재사용성을 높이고 시장 진입 시간을 단축하기 위해 플러그인 방식의 아키텍처를 채택했습니다. * **멀티스텝 트랜잭션(MST):** 업체마다 제각각인 결제 단계를 표준화하기 위해 MST 프레임워크를 도입했습니다. 리다이렉션이나 추가 인증이 필요한 경우 이를 'ActionPayload'로 규격화하여 처리합니다. **세 가지 표준화된 결제 흐름 모델** * **리다이렉트(Redirect) 흐름:** 네이버페이나 GoPay처럼 사용자를 외부 앱이나 웹사이트로 이동시켜 결제를 완료한 후, 다시 에어비앤비로 돌아와 토큰 기반으로 최종 확정하는 방식입니다. * **비동기(Async) 흐름:** Pix나 Blik과 같이 사용자가 QR 코드를 스캔하거나 푸시 알림을 통해 외부에서 결제하면, PSP가 에어비앤비에 웹훅(Webhook) 통보를 보내 상태를 업데이트하는 방식입니다. * **직접(Direct) 흐름:** 애플페이나 특정 로컬 카드처럼 에어비앤비 인터페이스 내에서 직접 결제 정보를 입력하고 실시간으로 처리하는 표준적인 방식입니다. **결제 오케스트레이션 및 데이터 무결성** * **외부 세션 제어:** 타사 앱 전환 시 발생하는 세션 핸드오프와 동기화 문제를 해결하기 위해 견고한 결제 오케스트레이션 로직을 설계했습니다. * **웹훅 기반 상태 관리:** 비동기 결제의 경우, 사용자 화면의 상태와 실제 결제 완료 상태를 일치시키기 위해 안정적인 웹훅 수신 체계를 구축했습니다. * **시장별 최적화:** 한국의 네이버페이처럼 높은 점유율을 가진 수단을 우선 도입하여 현지 사용자의 결제 경험을 네이티브 수준으로 개선했습니다. 글로벌 확장을 준비하는 엔지니어링 팀은 결제 시스템 설계 시 처음부터 '추상화'와 '표준화'에 집중해야 합니다. 지역별 결제 수단은 기술적 구현 방식이 모두 다르지만, 이를 리다이렉트, 비동기, 직접 흐름으로 범주화하여 공통 프레임워크(MST) 내에 수용함으로써 신규 결제 수단 추가에 드는 비용을 획기적으로 낮출 수 있습니다.

netflix원문

Temporal이 넷플릭스의 안정 (새 탭에서 열림)

넷플릭스는 배포 시스템인 Spinnaker의 클라우드 작업 안정성을 높이기 위해 '지속 가능한 실행(Durable Execution)' 플랫폼인 Temporal을 도입했습니다. 기존 시스템은 인스턴스 재시작이나 네트워크 일시 오류 발생 시 작업 상태를 잃어버리는 구조적 한계로 인해 약 4%의 배포 실패율을 보였습니다. Temporal 도입 후, 상태 정보를 자동으로 유지하고 장애 시 중단 지점부터 재개하는 방식을 통해 일시적 장애로 인한 실패율을 0.0001%까지 획기적으로 낮추는 성과를 거두었습니다. **기존 Spinnaker 구조와 상태 관리의 한계** * 배포 엔진인 Orca가 Clouddriver에 작업을 요청하면, Clouddriver는 내부 오케스트레이션 엔진을 통해 클라우드 제공업체의 API를 호출하는 구조였습니다. * 작업 상태가 메모리나 휘발성 저장소에 유지되었기 때문에, 클러스터 업데이트나 인스턴스 종료와 같은 운영 작업 중 실행 중인 모든 작업이 유실되거나 일관성이 깨지는 문제가 빈번했습니다. * 복잡한 다단계 클라우드 작업 중 중간 단계에서 오류가 발생하면, 수동으로 개입하여 상태를 정리하거나 재시도 로직을 직접 복잡하게 구현해야만 했습니다. **Temporal을 이용한 지속 가능한 실행 구현** * 비즈니스 로직을 담당하는 '워크플로우(Workflow)'와 외부 API 호출 등 부수 효과를 수행하는 '액티비티(Activity)'를 분리하여 설계했습니다. * Temporal은 작업의 모든 실행 단계를 데이터베이스에 기록(Event Sourcing)하므로, 실행 중 프로세스가 죽더라도 새 인스턴스에서 마지막 상태를 복구하여 즉시 재개할 수 있습니다. * 개발자는 일시적인 네트워크 오류나 API 제한에 대비한 복잡한 재시도 코드를 작성하는 대신, Temporal의 선언적 재시도 정책을 활용해 "장애가 없는 것처럼" 코드를 작성할 수 있게 되었습니다. **도입 결과 및 운영 효율성 향상** * 일시적 장애로 인한 배포 실패율이 4%에서 0.0001%로 감소하며 시스템 신뢰도가 비약적으로 상승했습니다. * CDN 장비 업데이트와 같이 며칠 혹은 몇 주가 소요되는 장기 실행 작업도 타임아웃이나 상태 유실 걱정 없이 안정적으로 관리할 수 있게 되었습니다. * 인프라 운영 팀은 시스템 점검이나 배포를 위해 기존 작업을 강제로 중단하거나 완료될 때까지 기다릴 필요가 없어져 운영 유연성이 크게 확보되었습니다. 복잡한 분산 시스템에서 상태 관리와 재시도 로직을 직접 구현하는 것은 매우 까다롭고 오류가 발생하기 쉽습니다. 넷플릭스의 사례처럼 장기 실행 작업이나 높은 신뢰성이 요구되는 마이크로서비스 환경에서는 Temporal과 같은 워크플로우 엔진을 도입하여 인프라 수준에서 안정성을 보장받는 것이 효율적입니다.

netflix원문

Netflix Live Origin. Xia (새 탭에서 열림)

넷플릭스의 라이브 오리진(Live Origin)은 클라우드 라이브 스트리밍 파이프라인과 자사 콘텐츠 전송 네트워크(CDN)인 오픈 커넥트(Open Connect) 사이에서 콘텐츠 공급을 조율하는 핵심 마이크로서비스입니다. 이 시스템은 다중 파이프라인 구조와 지능적인 세그먼트 선택 로직을 통해 실시간 방송 중 발생할 수 있는 데이터 손실이나 지연을 효과적으로 방지합니다. 결과적으로 넷플릭스는 라이브 환경에서도 VOD 수준의 안정성과 고품질 시청 경험을 전 세계 사용자에게 제공할 수 있게 되었습니다. **다중 파이프라인 기반의 탄력적인 아키텍처** 라이브 스트리밍은 실시간 특성상 프레임 누락이나 세그먼트 손실 같은 결함이 발생할 가능성이 높습니다. 라이브 오리진은 이를 극복하기 위해 다음과 같은 전략을 사용합니다. * **이중화된 파이프라인:** 서로 다른 클라우드 리전에서 독립적으로 운영되는 중복 파이프라인을 운영하여, 한쪽 경로에 결함이 생겨도 다른 경로의 정상 세그먼트를 즉시 선택할 수 있습니다. * **지능적 후보 선택:** 패키저에서 수행된 미디어 검사 메타데이터를 활용하여, 여러 후보 세그먼트 중 가장 품질이 좋은 것을 결정론적 순서에 따라 선택합니다. * **에포크 로킹(Epoch Locking):** 클라우드 인코더 단계부터 적용된 에포크 로킹 기술을 통해 오리진이 여러 파이프라인의 세그먼트 중 최적의 결과물을 일관되게 식별하고 조합할 수 있도록 합니다. **오픈 커넥트와의 스트리밍 최적화** 기존 VOD에 최적화되어 있던 오픈 커넥트(Open Connect) 인프라를 라이브에 맞게 확장하여 효율적인 전송 구조를 구축했습니다. * **요청 병합(Request Collapsing):** 동일한 세그먼트에 대해 수많은 클라이언트 요청이 동시에 몰릴 때, 오리진에는 단 하나의 요청만 보내고 나머지는 응답을 기다리게 하여 서버 부하(Thundering Herd 문제)를 방지합니다. * **세그먼트 템플릿 활용:** 오픈 커넥트 가전(OCA)은 라이브 이벤트 설정 데이터를 기반으로 유효한 세그먼트 범위를 미리 파악하며, 범위를 벗어난 잘못된 요청을 사전에 차단합니다. * **적응형 채우기(Adaptive Fill):** 오리진은 응답 헤더를 통해 OCA에 백업 파이프라인 위치를 알려줍니다. 특정 리전의 오리진에 문제가 발생하면 OCA가 스스로 다른 리전의 오리진으로 전환하여 데이터를 가져옵니다. **효율적인 저장소 관리 및 관찰 가능성** AWS EC2 인스턴스에서 동작하는 라이브 오리진은 대규모 트래픽과 데이터를 관리하기 위해 정교한 리소스 관리 기법을 도입했습니다. * **계층화된 스토리지:** 실시간으로 자주 액세스되는 세그먼트는 RAM에 저장하고, 상대적으로 덜 빈번한 데이터는 SSD에 저장하는 계층 구조를 통해 응답 속도를 극대화했습니다. * **자동 가비지 컬렉션:** 라이브 이벤트의 진행 상황에 맞춰 오래된 세그먼트를 자동으로 삭제하는 시간 기반 가비지 컬렉션을 수행하여 스토리지 공간을 효율적으로 유지합니다. * **실시간 모니터링:** 수천 개의 지표를 실시간으로 수집하여 파이프라인의 건강 상태를 추적하며, 장애 발생 시 즉각적인 대응이 가능한 가시성을 확보하고 있습니다. 라이브 오리진은 단순한 저장소를 넘어 라이브 스트리밍의 안정성을 결정짓는 지능형 브로커 역할을 수행합니다. 실시간 방송의 불확실성을 소프트웨어 계층의 이중화와 지능적 선택 로직으로 해결하고자 하는 기술적 접근은 대규모 라이브 서비스를 설계할 때 중요한 이정표가 됩니다. 특히 클라이언트의 복잡도를 낮추면서 서버 측에서 장애를 복구하는 설계 방식은 사용자 경험을 최우선으로 하는 서비스 기획에 필수적인 요소입니다.

line원문

Athenz 엔지니어는 왜 Kubestronaut에 도전했는가? (새 탭에서 열림)

보안 플랫폼 Athenz를 담당하는 엔지니어가 쿠버네티스 전문가의 상징인 'Kubestronaut' 칭호를 얻기까지의 도전과 성장을 다루고 있습니다. 실무에서 마주한 기술적 한계를 극복하기 위해 시작된 이 여정은 단순한 자격증 취득을 넘어 클러스터 운영, 보안, 그리고 오픈소스 거버넌스에 대한 깊은 통찰로 이어졌습니다. 결국 체계적인 학습으로 쌓은 전문 지식은 더 견고한 아키텍처를 설계하고 팀의 기술적 역량을 끌어올리는 핵심 자산이 되었습니다. **Kubestronaut과 5단계 인증 체계** * Kubestronaut은 CNCF(Cloud Native Computing Foundation)에서 수여하는 칭호로, 쿠버네티스 관련 5가지 핵심 자격증을 모두 보유한 전문가를 의미합니다. * 인증 자격은 실무 능력을 평가하는 실습형 시험인 CKA(관리자), CKAD(개발자), CKS(보안)와 지식 수준을 측정하는 KCSA, KCNA로 구성됩니다. * 특히 CKA, CKAD, CKS는 실제 터미널 환경에서 제한 시간 내에 문제를 해결해야 하므로 국제적으로 실무 역량을 입증하는 지표가 됩니다. **역할에 따른 단계별 역량 확장** * **CKAD(Application Developer):** Athenz라는 애플리케이션을 쿠버네티스에 안정적으로 배포하기 위해 가장 먼저 취득했으며, 상황 파악 및 대응 속도를 높이는 데 집중했습니다. * **CKA(Administrator):** 여러 클러스터를 관리하고 매니페스트 파일을 분석하는 능력을 배양했습니다. 쿠버네티스 내부 컴포넌트 간의 유기적인 연동 원리를 파악하여 대규모 시스템 설계의 기초를 다졌습니다. * **CKS(Security Specialist):** 보안 플랫폼 담당자로서 클러스터 자체의 보안을 책임지기 위해 도전했습니다. 취약점 분석, 네트워크 정책 설정 등 실무적인 클러스터 강화 기술을 습득한 가장 난도 높은 과정이었습니다. **전문 지식이 실무에 미친 영향** * 오픈소스 거버넌스 이해: SIG(Special Interest Groups)나 PR 규칙 등 거대 프로젝트의 운영 방식을 체계적으로 이해하게 되었으며, 이는 Athenz 프로젝트의 성장 전략 수립에 영감을 주었습니다. * 아키텍처 설계 역량: 최근 진행 중인 'BMaaS(Bare Metal as a Service) 환경에 Athenz 제공' 프로젝트에서 더 안정적이고 효율적인 구조를 설계하고 동료들을 설득하는 근거가 되었습니다. * 문제 해결 속도 향상: 실습 위주의 준비 과정을 통해 실무 환경에서 발생하는 기술적 난제를 더 빠르고 정확하게 진단할 수 있게 되었습니다. **지속 가능한 성장을 돕는 환경과 철학** * '우보천리(牛步千里)'의 자세로 매일 새벽 공부와 GitHub 커밋을 실천하며 꾸준함을 유지했습니다. * 회사의 Udemy Business 지원, 하이브리드 근무 환경, 그리고 자격 취득 비용 지원 제도 등을 적극적으로 활용하여 학습 효율을 높였습니다. * 단순 작업을 넘어 시스템 전체의 이상적인 아키텍처를 고민하고 토론하는 팀 문화가 성장의 강력한 동기부여가 되었습니다. 쿠버네티스의 방대한 생태계 앞에서 망설이고 있다면, 자격증 취득을 하나의 이정표로 삼아 도전해 보길 권장합니다. 단계별 학습을 통해 얻는 넓은 시야와 깊은 기술적 디테일은 엔지니어로서 한 단계 더 도약할 수 있는 확실한 발판이 되어줄 것입니다.