사전 서비스 수준 계약
개념

서비스 수준 계약

gabury1고친 사람 github-actions[bot]

서비스 수준 계약은 서비스를 파는 쪽이 어느 수준까지 내주겠다고 약속합니다. 그 약속을 어기면 무엇을 물어 줄지도 미리 적어 둡니다. 약속은 말이 아니라 숫자로 적습니다. 그래서 지켰는지 못 지켰는지를 나중에 계산으로 따질 수 있습니다.

쉽고 빠른 이해

「이만큼은 해 드리겠습니다, 못 하면 이만큼 돌려 드리겠습니다」를 한 장에 적어 둔 약속입니다. 서버를 빌려주는 업체가 내건 가동 시간 약속이 그런 문장입니다.

약속을 말로만 하면 다툼이 납니다. 「요즘 자꾸 끊기던데요」와 「저희 쪽은 정상입니다」가 맞붙으면 판정할 방법이 없습니다. 숫자와 그 숫자를 재는 방법을 같이 적어 두면 다툼이 계산으로 바뀝니다.

어떻게 도는가:

  1. 무엇을 잴지 정합니다. 요청이 성공한 비율이나 응답이 돌아오는 데 걸린 시간입니다
  2. 어느 기간 동안 얼마를 지킬지 적습니다
  3. 못 지킨 기간에는 적어 둔 만큼 요금을 깎아 줍니다

안에서만 쓰는 서비스에는 목표만 두고 맙니다. 돈을 받고 바깥에 파는 서비스에서 그 목표가 계약이 됩니다.

대가가 있습니다. 물어 주는 몫은 그 서비스에 낸 요금 안에서 정해집니다. 장사를 못 해서 잃은 매출까지 받아 내지는 못합니다. 계약이 있다고 장애가 덜 나는 것도 아닙니다.

상세

새 가전을 사면 일 년 보증서가 함께 옵니다. 고장이 나도 수리가 저절로 오지는 않습니다. 영수증을 챙겨 뒀다가 기간 안에 접수해야 무상으로 고쳐 줍니다.

서비스 수준 계약(SLA, Service Level Agreement)은 서비스를 파는 쪽과 쓰는 쪽이 맺는 약속입니다. 약속한 수준을 못 지켰을 때 따르는 결과가 함께 적혀 있다는 것이 이 계약을 가르는 특징입니다. 이번 달에 서비스가 멈춘 시간이 얼마를 넘으면 그달 요금의 일부를 깎아 준다, 같은 꼴입니다.

약속을 말로만 주고받으면 다툼이 났을 때 판정할 방법이 없습니다. 파는 쪽은 정상이었다고 하고 쓰는 쪽은 끊겼다고 합니다. 숫자와 그 숫자를 재는 방법을 계약서에 같이 적어 두면, 다툼이 서로의 인상이 아니라 계산으로 옮겨 갑니다.

계약서의 여섯 조항

계약서가 길어 보여도 어겼는지를 계산하는 데 쓰이는 조항은 여섯입니다. 이 여섯이 갖춰져야 양쪽이 같은 답을 냅니다.

조항 무엇을 적나
재는 대상 무엇을 재서 판정할지. 요청이 성공한 비율, 응답이 돌아오는 데 걸린 시간
약속한 수준 그 값이 얼마 이상이어야 하는지, 또는 얼마 아래여야 하는지. 가용성이면 99.9 같은 값
재는 기간 한 달치를 모아 판정할지, 한 해치를 모아 판정할지
재는 방법 어디서 잰 값을 쓸지. 분 단위로 끊어 셀지 요청 단위로 셀지
빼는 시간 미리 알린 점검처럼 판정에서 제외하는 구간
어겼을 때 무엇을 얼마나 돌려주는지, 언제까지 신청해야 하는지

재는 방법이 빠지면 같은 장애를 놓고 양쪽 숫자가 갈립니다. 파는 쪽은 자기 서버가 응답한 요청만 세고, 쓰는 쪽은 연결조차 안 된 시간까지 셉니다. 그래서 무엇을 세는지가 약속한 숫자만큼이나 무게를 집니다.

두 숫자가 갈리는 까닭은 재는 지점이 경로 위 서로 다른 곳에 있어서입니다.

flowchart TD
    C["쓰는 쪽 · 여기서 재면 연결이 안 된 시간도 센다"] --> N["인터넷 구간"]
    N --> S["파는 쪽 서버 · 여기서 재면 서버에 닿은 요청만 센다"]

재는 기간을 준수 기간이라고 부릅니다. 한 달로 끊어 재면 한 번의 긴 장애가 그달 비율을 통째로 끌어내립니다. 한 해로 끊어 재면 같은 장애가 나머지 열한 달에 묻힙니다. 그래서 약속한 숫자가 같아도 재는 기간이 길수록 파는 쪽이 지키기 헐거워집니다.

가장 흔한 재는 대상은 가용성입니다. 한 기간 동안 서비스를 쓸 수 있던 시간의 비율입니다. 백분율로 적습니다.

거의 언제나 백에 가까운 값이라 실무에서는 아홉이 몇 개 이어지느냐로 수준을 부릅니다. 99.9 는 아홉이 셋, 99.99 는 넷입니다. 아홉이 하나 늘 때마다 같은 기간에 멈춰도 되는 시간이 열 분의 일로 줄어듭니다.

지표와 목표와 계약의 구분

세 낱말이 나란히 쓰여서 헷갈립니다. 잰 값 · 그 값에 그어 둔 선 · 그 선을 바깥에 건 약속 순으로 층이 다릅니다.

서비스 수준 지표(SLI, Service Level Indicator)는 잰 값입니다. 지난 한 달 동안 요청이 성공한 비율이 얼마였나 같은 것입니다. 서비스 수준 목표(SLO, Service Level Objective)는 그 값에 미리 그어 둔 목표선입니다.

서비스 수준 계약은 그 목표선을 바깥에 약속합니다. 어겼을 때 따르는 결과까지 붙입니다.

셋을 가르는 물음은 하나입니다. 못 지키면 무엇이 따르는가. 따르는 것이 안 적혀 있으면 계약이 아니라 목표를 보고 있는 것입니다.

안에서만 쓰는 서비스에는 대개 목표선까지만 두고 계약은 안 맺습니다. 돈을 받고 바깥 고객에게 파는 서비스에서 그 선이 계약이 됩니다.

그때도 안에서 보는 목표선은 계약에 적은 선보다 빡빡하게 잡습니다. 가용성처럼 값이 클수록 잘 지킨 것이면, 안에 그은 선이 계약에 적은 선보다 높다는 뜻입니다. 그래야 약속을 어기기 전에 알아채고 손을 쓸 여지가 생깁니다.

목표선이 허용하는 실패분을 예산처럼 세어 쓰는 것이 오류 예산입니다.

네 낱말이 어느 층에 얹히는지는 이렇습니다.

flowchart TD
  subgraph 안["안에서 보는 것"]
    SLI["서비스 수준 지표 · 지난 기간에 잰 값"] --> SLO["서비스 수준 목표 · 그 값에 그어 둔 선"]
    SLO --> EB["오류 예산 · 그 선이 허용하는 실패분"]
  end
  SLO --> SLA["서비스 수준 계약 · 바깥에 건 약속 + 어겼을 때 돌려줄 것"]

세 층은 안에서만 봅니다. 바깥으로 나가는 것은 계약 하나뿐입니다.

위반 판정과 크레딧 신청

어겼을 때 돌려주는 것은 대개 현금이 아니라 서비스 크레딧입니다. 다음 달 요금에서 그만큼 깎아 주는 이용권입니다.

크레딧은 저절로 돌아오지 않습니다. 재는 쪽은 대개 파는 쪽입니다. 신청하는 쪽은 쓰는 쪽입니다.

그래서 쓰는 쪽도 자기 모니터링 기록을 남겨 둡니다. 장애가 난 시각과 길이를 자기 기록으로 갖고 있어야 신청서에 적을 것이 생깁니다.

신청이 오가는 차례는 이렇습니다.

sequenceDiagram
    participant 쓰는 쪽
    participant 파는 쪽
    쓰는 쪽->>쓰는 쪽: 장애 시각과 길이를 자기 기록에 남긴다
    파는 쪽->>파는 쪽: 한 달치 가용성을 집계한다
    Note over 파는 쪽: 약속한 선을 지켰으면 끝난다
    쓰는 쪽->>파는 쪽: 기한 안에 크레딧을 신청한다
    파는 쪽->>파는 쪽: 자기 집계와 맞춰 본다
    파는 쪽-->>쓰는 쪽: 다음 달 요금에서 깎아 준다

신청에는 기한이 붙습니다. 어긴 달의 다음 달 안에 신청하라는 꼴이 흔합니다. 기한을 넘기면 어긴 것이 맞아도 돌려받지 못합니다.

서비스 크레딧의 한도

깎아 주는 몫은 그 서비스에 낸 요금 안에서 정해집니다. 장애 때문에 못 판 물건값이나 떠난 손님은 셈에 안 들어갑니다. 계약을 끊고 나가는 쪽에게는 값이 없는 보상이기도 합니다.

그래서 계약서의 숫자를 손해 배상으로 읽으면 어긋납니다. 이 숫자는 파는 쪽이 멈춤을 방치하지 않도록 묶어 두는 장치에 가깝습니다.

판정에서 빼는 시간

계약서에는 판정에서 빼는 구간이 함께 적힙니다. 미리 알린 점검 시간인 유지보수 창이 대표입니다. 쓰는 쪽의 잘못으로 난 장애나, 지진처럼 어느 쪽도 어쩔 수 없는 불가항력으로 난 장애도 뺍니다.

멈춘 시간 하나는 이 세 갈림을 지나면서 남거나 빠집니다.

flowchart TD
    A["멈춘 시간"] --> B{"미리 알린 점검인가"}
    B -->|그렇다| X["판정에서 뺀다"]
    B -->|아니다| C{"쓰는 쪽 잘못인가"}
    C -->|그렇다| X
    C -->|아니다| D{"어느 쪽도 어쩔 수 없는 사건인가"}
    D -->|그렇다| X
    D -->|아니다| Y["계약상 장애로 센다"]

그래서 겪은 장애와 계약상 장애가 갈립니다. 쓰는 쪽은 멈췄다고 느낍니다. 그런데 계약서 셈으로는 안 멈춘 시간이 생깁니다.

계약서를 읽을 때는 약속한 숫자와 이 목록을 같이 봅니다. 빼는 목록이 길수록 같은 숫자를 지키려고 파는 쪽이 감당해야 하는 시간이 줄어듭니다.

관련 항목

서비스 수준 계약과 같은 장에서 정의되는 용어

서비스 수준 지표 · 서비스 수준 목표 · 오류 예산 · 번 레이트

계약에 숫자로 적히는 지표

가용성 · 가동률 · 다운타임 · 지연 · 꼬리 지연 · 오류율 · 요청 성공률 · 처리량 · 백분위수 · 준수 기간

약속을 지켰는지 재는 수단

모니터링 · 관측성 · 골든 시그널 · 대시보드 · 경보 · 상태 점검 · 합성 모니터링

약속한 수준을 지키려고 두는 장치

고가용성 · 다중화 · 장애 조치 · 용량 계획 · 타임아웃 · 백업과 복구

약속을 어겼을 때 치르는 대가

서비스 크레딧 · 위약금 · 면책 조항 · 불가항력 · 유지보수 창

장애를 겪고 나서 밟는 절차

사후 분석 · 장애 대응 · 온콜 · 평균 복구 시간 · 평균 장애 간격

서비스 수준 계약을 맺는 당사자와 문서

클라우드 사업자 · 관리형 서비스 · 이용 약관 · 공유 책임 모델

서비스 수준 계약이 속하는 상위 분류

신뢰성 · 인프라와 SRE · 클라우드

다른 이름: SLA · Service Level Agreement