프로비저닝
고친 사람 github-actions[bot]
프로비저닝은 일할 자원을 마련해 바로 쓸 수 있는 상태로 내주는 일입니다. 인프라에서 이 말은 주로 서버를 준비하는 일을 가리킵니다. 사용자 계정이나 기기를 쓸 수 있게 갖추는 일도 같은 이름으로 부릅니다.
쉽고 빠른 이해
프로비저닝은 쓸 자원을 준비해서 내주는 일입니다. 새 서비스를 올릴 서버 한 대를 만들어 접속할 수 있게 열어 두는 것이 그 예입니다.
이게 없으면 코드를 올릴 곳이 없습니다. 사람이 손으로 매번 준비하면 기다리는 시간이 길어집니다. 서버마다 조금씩 다르게 만들어지기도 합니다.
어떻게 도나:
- 필요한 만큼 자원을 잡습니다
- 운영체제와 주소 같은 기본 설정을 합니다
- 쓸 사람에게 접속을 열어 주고 넘깁니다
대가는 시간과 비용입니다. 준비에는 시간이 걸립니다. 그 시간을 줄이려고 미리 준비해 두면 안 쓰는 동안에도 요금이 나갑니다. 다 쓴 자원을 거두지 않아도 요금은 계속 나갑니다.
그래서 첫 응답이 늦으면 곤란한 서비스는 미리 준비합니다. 뜸하게 쓰는 서비스는 필요할 때 준비합니다.
상세
새로 문을 여는 가게를 떠올려 봅니다. 매장을 얻고, 전기와 수도를 잇고, 열쇠를 가게 주인에게 건넵니다. 이 일이 끝나야 주인이 물건을 들여놓고 손님을 받습니다.
프로비저닝은 컴퓨터 자원을 두고 이 준비를 하는 일입니다. 자원을 확보해 기본 설정을 마치고 쓸 사람에게 넘겨주기까지가 한 덩어리입니다. 새 웹 서버 한 대라면 기계를 하나 잡아 운영체제를 올립니다. 네트워크 주소를 붙이고 접속을 열어 두면 준비가 끝납니다.
이 준비에 따로 이름이 붙은 까닭은 애플리케이션이 올라갈 곳이 저절로 생기지 않기 때문입니다. 배포는 코드를 서버에 올리는 일입니다. 올릴 서버가 먼저 있어야 합니다. 「서버 한 대 더 주세요」라는 요청에 그 서버를 만들어 내는 일이 프로비저닝입니다.
이 일을 사람이 손으로 하면 먼저 기다림이 길어집니다. 관리 화면을 눌러 서버를 하나씩 만들면, 열 대가 필요할 때 열 번을 기다려야 합니다.
손으로 하면 서버마다 조금씩 달라지기도 합니다. 같은 절차를 사람이 되풀이하다 보면 어느 한 대에서 한 단계를 빠뜨립니다. 그 차이는 나중에 그 서버에서만 나는 오류로 드러납니다.
준비하는 자원 넷
프로비저닝이 준비하는 것은 요청마다 다릅니다. 흔히 넷으로 나뉩니다.
| 자원 | 무엇을 준비하나 | 빠지면 |
|---|---|---|
| 계산 | 프로그램을 돌릴 서버 | 코드를 돌릴 곳이 없다 |
| 저장 | 데이터를 담을 디스크 | 데이터를 담을 곳이 없다 |
| 네트워크 | 주소 · 드나드는 길을 여닫는 규칙 | 밖에서 서버에 닿지 못한다 |
| 접근 | 계정 · 접속 키 · 권한 | 만든 사람 말고는 아무도 못 쓴다 |
이 넷은 대개 한 번에 같이 준비합니다. 서버만 있고 주소가 없으면 아무도 그 서버에 닿지 못하기 때문입니다.
서버 한 대가 준비되는 순서
서버 한 대를 예로 들면 프로비저닝은 요청을 받는 데서 시작합니다. 요청한 사람에게 주소를 알리는 데서 끝납니다.
flowchart TD
A["요청을 받는다 · 크기와 대수"] --> B["남는 자원에서 기계를 잡는다"]
B --> C["운영체제를 올리고 디스크를 붙인다"]
C --> D["네트워크 주소를 붙인다"]
D --> E["접속 키와 권한을 준다"]
E --> F["요청한 사람에게 주소를 알린다"]
접속을 여는 일은 끝 쪽에 둡니다. 설정이 반쯤 된 서버를 누가 먼저 쓰기 시작하면 빠진 설정 때문에 오류가 납니다. 다 갖춘 뒤에 넘겨야 받는 사람이 바로 쓸 수 있습니다.
서버를 만드는 방식이 정하는 준비 시간
준비에 걸리는 시간은 서버를 어떤 방식으로 만드느냐에 따라 크게 다릅니다. 흔히 쓰는 세 방식을 차례로 견줍니다.
베어메탈 서버는 실물 기계 한 대를 한 사용자가 통째로 쓰는 서버입니다. 준비하려면 기계에 전원을 넣고, 디스크에 운영체제를 설치하고, 부팅까지 거쳐야 합니다.
가상 머신은 실물 기계 한 대를 소프트웨어로 나눠 만든 컴퓨터입니다. 이미 켜진 기계 위에서 만들어 내므로 실물을 만질 일이 없습니다.
가상 머신은 운영체제를 매번 새로 설치하지 않습니다. 운영체제와 프로그램을 미리 깔아 둔 틀을 복사해서 띄웁니다. 이 틀이 머신 이미지입니다.
컨테이너는 이미 도는 운영체제 위에서 프로그램 하나를 따로 떼어 가둬 실행하는 단위입니다. 운영체제를 새로 띄우지 않으므로 준비할 것이 가장 적습니다.
세 방식이 준비할 때 하는 일을 한 표로 모읍니다.
| 방식 | 준비할 때 새로 하는 일 | 걸리는 시간 |
|---|---|---|
| 베어메탈 | 전원 넣기 · 운영체제 설치 · 부팅 | 가장 길다 |
| 가상 머신 | 이미지 복사 · 운영체제 부팅 | 중간 |
| 컨테이너 | 프로그램 시작 | 가장 짧다 |
이 차이가 프로비저닝을 언제 해도 되는지를 정합니다. 금방 끝나는 준비는 요청이 올 때마다 해도 됩니다. 오래 걸리는 준비는 미리 해 두어야 합니다.
미리 준비하기와 필요할 때 준비하기
준비하는 시점은 둘 중 하나로 잡습니다. 미리 해 두면 기다림이 없습니다. 필요할 때 하면 안 쓰는 동안 요금이 안 나갑니다.
서버리스는 서버를 직접 띄우지 않고 함수만 올려 두면 부를 때마다 대신 실행해 주는 방식입니다. 오래 안 불린 함수를 다시 부르면 실행 환경부터 새로 준비합니다.
그 준비 시간은 첫 요청이 떠안습니다. 이렇게 첫 요청만 오래 걸리는 현상을 콜드 스타트라고 부릅니다. 프로비저닝을 필요할 때로 미룬 대가를 사용자가 기다림으로 치릅니다.
부하에 맞춰 서버 대수를 자동으로 바꾸는 오토스케일링도 같은 일을 겪습니다. 대수를 늘릴 때마다 새 서버를 프로비저닝합니다. 그 서버가 준비될 때까지는 기존 서버들이 부하를 버팁니다.
두 시점을 한 표로 모읍니다.
| 미리 준비 | 필요할 때 준비 | |
|---|---|---|
| 첫 요청의 기다림 | 없다 | 준비 시간만큼 |
| 안 쓰는 동안의 요금 | 나간다 | 안 나간다 |
| 어울리는 경우 | 몰리는 때를 알거나 첫 응답이 늦으면 안 될 때 | 부르는 일이 뜸하고 조금 늦어도 될 때 |
둘 중 하나만 고르지 않는 경우가 많습니다. 평소 몫은 미리 준비해 두고, 넘치는 몫만 필요할 때 준비합니다.
손으로 하는 준비와 코드로 적는 준비
프로비저닝을 누가 하느냐는 두 갈래입니다. 사람이 관리 화면을 눌러 만들 수도 있습니다. 파일에 적어 두고 도구가 만들게 할 수도 있습니다.
사람이 누르는 방법은 한두 대일 때 가장 빠릅니다. 대수가 늘면 앞에서 본 두 문제가 함께 커집니다. 기다림이 길어지고 서버끼리 어긋납니다.
코드형 인프라는 이 두 문제를 풉니다. 필요한 자원을 파일에 적어 두면 도구가 그 파일을 읽고 자원을 만듭니다. 같은 파일을 다시 돌리면 같은 모양의 자원이 나옵니다.
이 파일에는 대개 만드는 순서가 아니라 원하는 결과를 적습니다. 「서버 세 대, 한 대마다 디스크 하나」처럼 적으면 도구가 지금 있는 것과 견줘 모자란 것만 만듭니다. 이렇게 결과를 적는 방식이 선언적 설정입니다.
파일로 적어 두면 버전 관리에 넣을 수 있습니다. 누가 언제 무엇을 바꿨는지가 남습니다. 바꾸기 전에 동료가 검토할 수도 있습니다.
코드로 만든 서버를 누가 손으로 고치면 파일과 실제가 어긋납니다. 실제 자원이 적어 둔 상태에서 벗어나는 이 현상을 구성 드리프트라고 부릅니다. 파일을 다시 돌려 적어 둔 상태로 되돌리는 것이 흔한 대응입니다.
설정 관리 · 배포와 나누는 선
서버가 요청을 받기까지는 대개 세 단계를 거칩니다. 프로비저닝은 그중 첫 단계입니다.
프로비저닝이 빈 서버를 만듭니다. 설정 관리가 그 안에 필요한 프로그램과 설정 파일을 채웁니다. 마지막으로 배포가 애플리케이션 코드를 올립니다.
이 선은 부르는 사람마다 조금씩 다릅니다. 넓게 부를 때는 안쪽을 채우는 일까지 프로비저닝에 넣습니다. 좁게 부를 때는 자원을 만드는 데서 멈춥니다.
다 쓴 자원 거두기
만든 자원은 언젠가 돌려줘야 합니다. 디프로비저닝은 다 쓴 자원을 돌려주고 붙어 있던 접근 권한을 거두는 일입니다. 프로비저닝이 넘겨준 것을 거꾸로 하나씩 회수합니다.
이 단계를 잊으면 먼저 요금이 남습니다. 아무도 안 쓰는 서버와 디스크에도 요금은 계속 나갑니다.
거두지 않은 계정과 접속 키도 남습니다. 누군가 쓸 수 있는 채로 열려 있는 문입니다. 그래서 만들 때와 같은 방식으로 지우는 절차까지 함께 적어 둡니다.
인프라 밖에서 쓰는 같은 이름
프로비저닝이라는 낱말은 인프라 밖에서도 씁니다. 준비하는 대상은 달라도 「쓸 수 있게 갖춰 내준다」는 뜻은 같습니다.
사용자 프로비저닝은 사람이 조직에 들어올 때 여러 시스템에 계정을 만들고 권한을 주는 일입니다. 입사한 날부터 메일과 사내 도구에 들어갈 수 있게 해 둡니다. 퇴사할 때 계정을 거두는 일도 함께 다룹니다.
기기 프로비저닝은 공장에서 나온 기기가 서비스에 붙을 수 있게 신원과 설정을 넣는 일입니다. 센서나 가전처럼 네트워크에 붙는 사물 인터넷 기기가 처음 켜질 때 흔히 거치는 단계입니다.
신원을 넣는 흔한 방법은 인증서를 심는 것입니다. 인증서는 기기가 누구인지 증명하는 전자 문서입니다. 이것을 심어 두면 서버가 그 기기를 알아봅니다.
관련 항목
프로비저닝이 준비하는 자원
서버 · 가상 머신 · 베어메탈 · 컨테이너 · 디스크 · 볼륨 · 네트워크 · 서브넷 · IP 주소 · 방화벽
프로비저닝 앞뒤에 서는 단계
설정 관리 · 배포 · 디프로비저닝 · 부트스트래핑 · 지속적 배포
프로비저닝을 코드로 적는 방식과 도구
코드형 인프라 · 선언적 설정 · 버전 관리 · 테라폼 · CloudFormation · Pulumi · 앤서블 · cloud-init
서버를 빨리 띄우려고 미리 만들어 두는 틀
머신 이미지 · 컨테이너 이미지 · 골든 이미지 · 불변 서버 · Packer
프로비저닝 시간이 드러나는 현상
콜드 스타트 · 웜 스타트 · 서버리스 · 오토스케일링 · 웜 풀
적어 둔 상태와 실제가 어긋나는 문제
프로비저닝이 속하는 상위 분류
인프라 · 클라우드 · 가상화 · 데이터센터 · 용량 계획 · 자원
인프라 밖에서 같은 이름으로 부르는 준비
사용자 프로비저닝 · SCIM · 싱글 사인온 · IAM · 기기 프로비저닝 · 인증서 · 사물 인터넷
이름이 겹쳐 헷갈리는 이웃
오버프로비저닝 · 씬 프로비저닝 · 오버커밋
다른 이름: provisioning · 인프라 프로비저닝 · 자원 프로비저닝