10P by GN⁺ 5시간전 | ★ favorite | 댓글과 토론
  • 내부 엔지니어를 사용자로 삼아 내부 제품을 구축·운영하는 조직적 규율로서, 단순히 DevOps 리브랜딩이나 Kubernetes 클러스터 관리와는 본질적으로 다른 영역
  • 2025 DORA 보고서에 따르면 조직의 90%가 최소 하나의 내부 플랫폼을 도입했으며, 플랫폼 품질이 AI 도구의 가치 창출 여부를 직접 예측하는 지표로 부상
  • 클라우드와 오픈소스가 무한한 프리미티브를 제공하면서 각 팀이 제각기 파이프라인을 구축하는 "과잉 일반화 늪(over-general swamp)" 문제를 해결하는 것이 핵심 존재 이유
  • 플랫폼을 실제 제품으로 대하고, 중앙값 개발자를 위한 소프트웨어 추상화·메타데이터 레지스트리·운영 SLO를 갖추는 것이 성공의 구조적 조건
  • 좋은 플랫폼은 개발자가 존재를 잊을 정도로 자연스럽게 작동하며, 나쁜 플랫폼은 AI 도구가 혼란을 증폭시키는 반면 좋은 플랫폼은 처리량을 증폭시킴

플랫폼 엔지니어링이 존재하는 이유

  • 과잉 일반화 늪(Over-General Swamp)

    • 클라우드와 OSS가 큐, 오브젝트 스토어, 데이터베이스, CI 러너, 서비스 메시 등 무한한 프리미티브를 제공하면서 각 애플리케이션 팀이 서로 다른 선택을 하게 됨
    • 1년 후 모든 서비스가 자체 배포 파이프라인, 재시도 로직, 모니터링 관례, 미묘하게 잘못된 IAM 바인딩을 갖는 "글루 코드의 늪"으로 변질
    • 선택지의 폭발과 더 높은 운영 기대치(24/7 가동, 보안, 컴플라이언스, 비용 관리)가 이 늪을 만든 두 가지 원인
    • 실제 랜딩존 프로젝트에서 20개 팀이 VPC, IAM, 예산 알림용 거의 동일한 Terraform 모듈을 각자 재발명하며 각기 다른 버그를 가진 사례 존재
  • 플랫폼 엔지니어링이 실제로 하는 네 가지

    • 개발자가 보는 프리미티브를 제한하여 큐레이션된 방식으로만 사용하도록 유도
    • 반복적 배관 작업을 공유 서비스로 흡수해 애플리케이션별 글루 코드를 감소
    • 기반 프리미티브 변경 시 플랫폼 팀이 한 번만 처리하여 마이그레이션 비용을 중앙화
    • 개발자가 리눅스 커널 전문가가 되지 않고도 자신이 만든 것을 직접 운영할 수 있도록 지원
    • DevOps는 "개발자가 운영을 소유하라"였고, 플랫폼 엔지니어링은 "그 운영을 위한 좋은 도구를 실제 제품으로 제공하겠다"는 것
    • DORA 2025 역량 페이지에서도 도구 카테고리가 아닌 사회기술적(sociotechnical) 규율로 정의

다섯 가지 기둥(Pillars)

  • 큐레이션된 제품 접근(Curated Product Approach)

    • 플랫폼이 지원하는 것과 지원하지 않는 것을 의도를 가지고 결정
    • 팀이 Pub/Sub 대신 Kafka를 원할 때 "문서 링크는 여기"가 아니라 "지원 범위와 이유, 맞지 않을 경우의 오프램프"를 안내
    • 거절하는 것도 업무의 일부
  • 소프트웨어 기반 추상화(Software-Based Abstractions)

    • 플랫폼은 위키가 아닌 소프트웨어이며, 인터페이스는 API, CLI, SDK
    • 개발자가 작은 선언적 파일을 작성하는 것만으로 프로덕션급 서비스를 프로비저닝할 수 있어야 함
    • CNCF 산하 Score 프로젝트가 대표 사례로, 워크로드 스펙 하나로 데이터베이스, 토픽, 서비스 계정, 배포를 자동 프로비저닝
      • 개발자는 내부적으로 Cloud SQL, Pub/Sub, Cloud Run인지 알 필요 없음
  • OSS 커스터마이징과 메타데이터 레지스트리

    • 바닐라 Argo CD나 Backstage를 그대로 쓰지 않고, 조직에 맞는 플러그인·기본 정책·통합을 적용해 운영
    • 메타데이터 레지스트리(서비스 카탈로그)가 없으면 누가 무엇을 소유하고, 의존 관계가 어떻고, 실제 무엇이 실행 중인지 파악 불가
    • Backstage가 이 레이어의 사실상 표준 OSS 프레임워크로, 270개 이상 조직이 프로덕션에서 운영
      • CNCF가 Certified Backstage Associate, Certified Cloud Native Platform Engineering Associate 인증을 출시
      • Backstage, Port, Cortex 등 무엇을 사용하든 "어떤 서비스가 존재하고, 누가 소유하며, 의존 관계는 무엇인지"에 대한 단일 진실 원천(single source of truth) 필요
  • 광범위한 사용자 기반 서비스

    • 내부 플랫폼은 소수의 매우 목소리 큰 고객을 보유하지만, 중간값(median) 개발자의 중간값 작업을 잘 지원하는 것이 목적
    • 엘리트 사용자만을 위해 구축하면 나머지 팀이 플랫폼을 우회하면서 섀도우 플랫폼이 탄생
  • 파운데이션으로 운영

    • 플랫폼이 다운되면 회사가 다운되므로 24/7 온콜, 실제 SLO, 실제 변경 관리, 지원 부담이 수반
    • "도구"가 아닌 "바닥(floor)" 역할이며, 위에 구축되는 모든 것이 바닥이 견딘다고 가정

시작 시기와 방법

  • 플랫폼 팀을 너무 일찍 만들지 말 것

    • 엔지니어 10명 규모에서는 플랫폼 팀이 아닌 협력(cooperation) 이 필요
      • 한 명이 배포 스크립트, 다른 한 명이 Terraform을 관리하고, 관례에 합의하면 충분
    • 1~2명으로 너무 일찍 팀을 구성하면 그들이 티켓 큐가 되고 나머지 조직은 수동적으로 변함
    • 보통 엔지니어 50명 이후, 다수의 배포 대상이 생기고 "새 서비스 배포 방법"에 대한 정답을 아무도 모를 때 팀 구성이 적절
  • 기존 인프라 조직 전환

    • 인프라/SRE 팀을 플랫폼 조직으로 전환할 때 가장 어려운 부분은 기술이 아닌 문화
    • 인프라 담당자는 "안 된다"의 게이트키퍼 역할에 익숙하지만, 플랫폼 담당자는 "쉬운 예스를 제공하는 사람" 이 되어야 함
      • 고객과 많이 대화하기
      • 운영자뿐 아니라 도구 구축을 즐기는 소프트웨어 엔지니어 채용·육성
      • "새 클러스터 배포"보다 "200개 팀을 5% 빠르게 만들었다"가 인정받도록 보상 체계 갱신
    • PM을 위에 뿌리고 끝내는 것이 가장 흔한 실패 모드이며, 이는 플랫폼이 아닌 연극(theater) 을 만들어냄

플랫폼 팀 구축

  • 네 가지 역할

    • Software Engineer: API, SDK, 포털 등 플랫폼의 제품 표면 구축
    • Systems Engineer: Kubernetes, Linux, 네트워킹, 클라우드 컨트롤 플레인 등 기반 프리미티브에 정통
    • Reliability Engineer: 운영 품질, 온콜, SLO, 관측성에 집중
    • Systems Specialist: 데이터베이스, 보안, 네트워킹 등 깊은 도메인 전문가
    • 소프트웨어 집중이 과하면 아름다운 포털이 실제 부하에서 무너지고, 시스템 집중이 과하면 견고한 클러스터를 아무도 티켓 없이 사용 불가
  • 채용

    • 고객 공감(customer empathy) 을 최우선으로 채용해야 함
    • 좌절한 앱 개발자와 통화 후 문제를 명확히 이해하고 나올 수 없는 엔지니어는 적합하지 않음
    • 공감 없는 기술적 탁월함은 정확하지만 아무도 쓰지 않는 플랫폼을 만들어냄
    • 소프트웨어 역할에는 동일한 레벨 매트릭스를 쓰되, 시스템 스페셜리스트는 시장 가치와 스킬이 소프트웨어 엔지니어 래더에 깔끔하게 매핑되지 않으므로 유연한 직함 허용
  • 관리자 및 기타 역할

    • 훌륭한 플랫폼 엔지니어링 관리자의 세 가지 공통 특성: 실제 플랫폼 운영 경험, 장기 멀티쿼터 프로젝트 배포 경험, 디테일에 대한 집착
      • 플랫폼은 디테일에 보상을 주며, 드물어 보여 건너뛴 1% 케이스가 지원 시간의 80%를 차지
    • PM, 테크니컬 라이터, 개발자 애드보킷, 지원 엔지니어 모두 중요하지만 엔지니어링 팀이 충분히 성숙한 후에 채용
    • 4명 플랫폼 팀에 조기 투입된 PM은 로드맵 모양의 의자가 될 뿐

제품으로서의 플랫폼

  • 내부 고객은 더 어려움

    • 내부 고객은 이탈이 어려운 캡티브 사용자이며, 강한 의견과 약한 제품 감각을 가짐
    • 원하는 것(want)을 말하지만 실제로 필요한 것(need)과 다른 경우가 많음
    • 플랫폼이 자신의 일을 대신 해주길 요구하지, 일을 잘 할 수 있는 도구를 요구하지 않음
    • 그들 옆에 앉아 하나의 변경을 배포하기 위해 몇 번 컨텍스트 스위칭을 하는지 관찰하는 것이 실제 백로그
  • 디스커버리, 로드맵, 실패 모드

    • 플랫폼 디스커버리는 A/B 테스트가 아닌 파일럿으로 수행하며, 친화적 팀과 실제 배포 후 리드 타임 감소를 측정
    • 로드맵의 네 가지 시간 지평
      • Vision(다년): 플랫폼의 방향
      • Strategy(연간): 올해의 베팅
      • Goals and Metrics(분기~연간): 성공의 정의
      • Milestones(분기): 실제 배포 대상
    • 자주 팀을 무너뜨리는 실패 모드
      • 마이그레이션 비용 과소평가 (항상 예상의 2~3배)
      • 사용자의 새 기능에 대한 변경 예산 과대평가
      • 안정성이 실제 문제인데 기능 추가에 집중
      • 엔지니어링 팀 규모 대비 PM이 너무 많음 (엔지니어 5명에 PM 2명이면 문제)

플랫폼 운영

  • 온콜은 선택이 아님

    • 파운데이션으로 운영하므로 24/7 커버리지는 비협상 사항
    • "만든 사람이 운영한다(you build it, you run it)"가 여기서도 적용되며, 이는 처벌이 아닌 피드백 루프
    • 단일 엔지니어가 주당 수회 이상 페이지를 받으면 스케줄이 아닌 시스템을 수정해야 함
    • 번아웃된 플랫폼 엔지니어는 나쁜 플랫폼을 배포
  • 지원: 업무의 숨겨진 절반

    • 컨퍼런스에서 거의 다루지 않는 영역이지만 플랫폼 엔지니어링의 핵심 절반
    • 네 단계 프레임워크
      • 1단계: 지원 레벨 공식화 (P0 vs P3, 응답 시간 등)
      • 2단계: 비중요 지원을 온콜과 분리하여 "CronJob 추가 방법" 질문이 누군가를 깨우지 않도록
      • 3단계: 볼륨이 정당화되면 전담 지원 스페셜리스트 채용
      • 4단계: 규모에 맞는 엔지니어링 지원 조직 구축
    • 1단계를 건너뛰면 엔지니어가 시간의 절반을 Slack DM 응답에, 나머지 절반을 불만에 소비
  • 운영 피드백

    • SLO와 SLA는 필수이며, 에러 버짓은 유용하지만 선택 사항
    • Synthetic 모니터링이 사용자가 티켓을 제출하기 전에 실패 모드를 포착
    • Operational 리뷰는 녹색 대시보드를 흘끗 보는 것이 아닌 실제 데이터 검토를 강제
    • DORA 2025 데이터에서 사용자 경험과 가장 높은 상관관계를 보인 플랫폼 역량은 작업 결과에 대한 명확한 피드백 — 실패 시 무엇이 실패했고 어떻게 해야 하는지 사용자가 정확히 알아야 함

계획과 전달

  • 장기 프로젝트에는 제안 문서가 필요

    • 마이그레이션, 리아키텍처, 새 컨트롤 플레인 등 플랫폼 프로젝트는 분기 단위로 소요
    • 좋은 제안서의 필수 요소: 해결하려는 문제, 수혜자, 범위, 명시적으로 범위 밖인 것, 성공의 정의
    • 코드 작성 전에 문서를 먼저 쓰고 리뷰받은 후 구체적 마일스톤이 있는 실행 계획으로 전환
    • "장기 수렁(long slog)" 실패 모드 — 프로젝트가 수년간 끌리고 아무도 이유를 기억하지 못함 — 는 거의 항상 이 단계를 건너뛴 결과
  • 바텀업 로드맵 계획

    • 플랫폼 로드맵의 네 가지 업무 유형: KTLO(keep-the-lights-on), 리더십 명령, 자체 결정 시스템 개선, 직접적 고객 요청
    • 고객 수요만으로 순위를 매길 수 없으며, KTLO가 1순위, 명령이 2순위, 나머지는 이해관계자와 솔직한 논의 필요
  • 격주 성과와 도전(Biweekly Wins and Challenges)

    • 2주마다 짧은 문서 작성: 배포한 것(성과), 막힌 것(도전), 짧고 공개적이며 과장 없이
    • 세 가지 동시 효과: 팀이 진행 상황을 명확히 표현, 이해관계자에게 실제 상황 전달, 도전을 조기에 노출해 리더십 지원 유도
    • 성과만 있는 문서는 아무도 신뢰하지 않는 문서이므로 도전을 생략하지 말 것

리아키텍처와 마이그레이션

  • v2 대신 리아키텍처

    • 플랫폼이 낡았을 때 "v2를 만들자"는 본능은 거의 항상 오답
    • v2 프로젝트 실패 이유: v1 투자 동결, 예상보다 긴 소요 시간, v2 마이그레이션 비용이 회피한 리아키텍처 비용보다 높음
    • 기존 플랫폼 내에서 리아키텍처하고, 가능한 한 호환성을 유지하며, 하위 환경·느린 롤아웃·트랜치 기반 마이그레이션 활용
    • 네 가지 계획 단계
      • 최종 아키텍처 목표를 크게 사고
      • 마이그레이션 비용 반영 (항상 2~3배)
      • 지속 투자를 정당화하는 12개월 주요 성과 식별
      • 리더십 동의 확보, 기다릴 준비
  • 보안은 아키텍처적

    • 구축 후에 보안을 덧붙이는 것은 불가능하며, 아키텍처가 설계 시점부터 최소 권한, 격리, 추적 가능성을 강제해야 함
    • 모든 팀이 올바른 IAM 바인딩을 기억해야 하는 플랫폼이라면, 팀이 아니라 플랫폼에 버그가 있는 것
  • 마이그레이션: 과소평가되는 어려운 문제

    • 가장 흔한 안티패턴
      • 모든 팀에게 클립보드와 데드라인을 주고 스스로 마이그레이션하라고 요구
      • 명확한 온램프·오프램프 없이 명령만 내리기
      • 특이 사용 사례의 롱 테일 과소평가
    • 쉬운 마이그레이션 엔지니어링 방법
      • 사용 메타데이터를 추적해 구 버전 사용자를 정확히 파악
      • 200개 팀이 마이그레이션해야 하면 앱 팀이 아닌 플랫폼 팀이 스크립트를 작성
      • 새 시스템이 구 API를 사용하는 투명한 마이그레이션 아키텍처 설계
      • 새 팀이 셀프서비스할 수 있을 정도로 온램프를 명확히 문서화
    • 명령(mandate)은 한두 번만 효과가 있으며, 그 이후엔 소음이 됨
    • 대부분의 경우 새 경로를 충분히 좋게 만들어 구 경로가 자연히 시들도록 하는 것이 최선
  • 서비스 종료(Sunsetting)

    • 제품을 없애는 것을 두려워하지 말 것
    • 반쯤 지원되는 배포 시스템 7개보다 견고한 배포 시스템 1개가 우월하며, 서비스 종료는 성숙한 팀의 특성

이해관계자 관계

  • 파워-관심 그리드(Power-Interest Grid)

    • 이해관계자를 권한(power)과 관심도(interest) 두 축으로 매핑
      • 높은 권한·높은 관심: 정기 업데이트와 협의
      • 낮은 권한·낮은 관심: 상태 페이지로 충분
    • 관심 낮은 VP에게 Kubernetes 업그레이드 정보를 제공하며 팀 시간 낭비 금지
  • 과잉 공유 없는 소통

    • 투명하되 과하지 않게 — 시니어 리더는 세 가지 gRPC 재시도 전략 논쟁이 아닌, 마일스톤 달성 여부와 리스크를 알아야 함
    • 1:1 미팅을 신중하게 활용하고 기대치·약속을 보이는 곳에 추적
  • 관계를 망치지 않고 거절하기

    • "이 기능을 추가하면 마이그레이션이 한 분기 밀리며, 이는 회사에 $X 비용"처럼 비즈니스 임팩트를 명확히
    • "타협과 함께 예스", "거절하되 경로 제시", 때로는 섀도우 플랫폼을 허용하는 것이 싸우는 비용보다 나을 수 있음
    • 예산 시즌에는 인원별이 아닌 팀·역량 단위로 묶어 제시하고, 무엇을 줄이고 유지할지 강한 의견을 가져야 함 — 그렇지 않으면 재무 부서가 대신 결정하며 잘못 결정

성공의 모습

  • 정렬된 플랫폼(Aligned)

    • 목적 정렬(왜 존재하는지), 전략 정렬(베팅이 팀 간 일관), 계획 정렬(마일스톤 충돌 없음) 필요
    • 런타임 팀은 모두 Kubernetes를 원하고 관측성 팀은 모든 프레임워크를 지원하려 할 때 정렬 불일치 발생
      • 상충하는 고객 가이드, 중복 작업, 중간에 낀 분노한 개발자로 표면화
      • 합의(consensus)가 아닌 원칙 있는 리더십으로 해결
  • 신뢰받는 플랫폼(Trusted)

    • 신뢰는 천천히 쌓이고 단 한 번의 나쁜 마이그레이션으로 상실
    • 운영 방식(장애 시 소통, 약속 이행), 투자 방식(판매한 큰 베팅 실제 배포), 전달 우선순위에서 신뢰 형성
    • "과결합 플랫폼(overcoupled platform)" 사례: 지나치게 많은 커스텀 로직을 플랫폼에 넣어 모든 변경에 수개월 소요 — 해결책은 추가 엔지니어링이 아닌 범위에 대한 가정 도전
      • 때로 신뢰 문제는 너무 적게가 아니라 너무 많이 하고 있기 때문
  • 복잡성을 관리하는 플랫폼

    • 소프트웨어 복잡성은 불가피하나, 우발적 복잡성(accidental complexity) 은 아님
    • 환원 불가능한 문제 복잡성과 인간 조정의 부실, 같은 문제를 두 번 푸는 섀도우 플랫폼, 무한 성장이 만드는 우발적 복잡성을 구분
    • 세 가지 실용적 레버
      • 성장 통제: 모든 것을 지원하는 플랫폼은 아무것도 잘 지원하지 못함, 범위를 명시
      • 제품 디스커버리를 무엇을 추가할지뿐 아니라 무엇을 중단할지 파악에 활용
      • 섀도우 플랫폼 관리: 팀이 병렬 솔루션을 만들면 플랫폼에 실제 부족한 것이 있거나 누군가 영역 확장 중이라는 신호 — 둘 다 대응 필요
  • 사랑받는 플랫폼(Loved)

    • 세 가지 형태
      • "그냥 작동하는" 사랑: 대부분의 사용자가 플랫폼을 인식하지 못하고, 배포가 되고, CI가 통과 — 지루한 것이 최고의 칭찬
      • "해킹 같은" 사랑: 별도 설명 없이 명백히 올바른 동작을 하는 CLI 커맨드 같은 작은 기쁨
      • "명백한" 사랑: 설문 점수, 리텐션, 유기적 채택, 다른 팀에 플랫폼을 추천
    • 플랫폼이 사랑받으면 예산 요청 시 사람들이 대신 싸워주지만, 단순 허용이면 한 번의 나쁜 인시던트로 대체될 위기

실전 우선순위

  • 제로부터 시작하거나 재구축할 때의 대략적 순서
    • 1순위: 지원 범위를 결정하고 문서화하며 방어
    • 2순위: 위키가 아닌 소프트웨어 추상화에 투자 (Score, Crossplane, 자체 SDK 등 실제 API가 있는 소프트웨어)
    • 3순위: 메타데이터 레지스트리 구축 (Backstage 등으로 무엇이 어디서 실행되고 누가 소유하는지 파악)
    • 4순위: 가장 시끄러운 팀이 아닌 중간값 팀을 위해 구축
    • 5순위: SLO, 온콜, 지원 티어 등 운영을 일급 기능으로 취급
    • 6순위: 시스템 역량만큼 공감 능력을 기준으로 채용
    • 7순위: 격주 성과·도전, 투명한 로드맵, 솔직한 이해관계자 관리 등 무자비한 소통
    • 8순위: 필요 없는 것을 종료, 통합, 거절
  • DORA 데이터와 일관되게, 플랫폼 품질은 AI 채택을 포함한 모든 것의 배수 — 나쁜 플랫폼은 AI 도구가 혼란을 증폭, 좋은 플랫폼은 처리량을 증폭
  • 로켓을 만들기 전에 바닥을 먼저 만들어야 함

댓글과 토론