그동안 서버는 사는 것이었다. 장비를 고르고 사고 IDC 에 넣고 안 되면 직접 가야 했다. 이번 프로젝트는 빌려 쓰는 방식이라 화면에서 클릭하면 몇 분 만에 서버가 생긴다.
Table of contents
Open Table of contents
만들기 쉬워서 관리가 안 됐다
EC2 인스턴스를 만드는 데 몇 분이면 충분했고 승인을 받을 필요도 없었다. 물리 서버는 주문하고 며칠 걸리는데 여기는 5분이다.
그런데 이것이 좋기만 한 것이 아니었다. 너무 쉬워서 계속 만들었고 테스트한다고 만들고 지우지 않은 것이 2주 만에 여섯 대가 됐다.
IDC 시절에는 서버를 하나 넣으려면 견적과 입고 일정이 있어서 개수가 저절로 관리됐다. 그 제동이 없어지니 몇 대가 돌고 있는지 세는 사람도 없어졌고 한 달쯤 지나 목록을 보니 무엇인지 모르는 것이 몇 개 있어 지워도 되는지 몰라서 못 지웠다.
그래서 만들 때 이름을 규칙대로 붙이기 시작했다.
프로젝트-용도-번호 예: slots-web-01, slots-db-01
태그도 붙여 누가 만든 것인지 남기게 했다. 태그가 없는 자원은 매주 목록으로 뽑아 만든 사람에게 물었다.
원인 — 껐는데 멈추지 않은 요금
첫 달 요금을 보고 예상보다 많아서 항목을 뜯어봤다. 인스턴스 목록만 보면 대수가 많지 않아 원인이 거기 있어 보이지 않았다.
Cost Explorer 에서 항목별로 갈라 보니 EBS 가 EC2 와 비슷한 비중이었다. 인스턴스를 종료해도 거기 붙어 있던 볼륨이 그대로 남아 요금을 내고 있었다.
문서를 보니 종료할 때 함께 지워지는 것은 DeleteOnTermination 이 설정된 볼륨뿐이었다. 나중에 붙인 볼륨은 그 값이 안 걸려 있어 인스턴스만 사라지고 볼륨은 available 상태로 남는다.
Elastic IP 도 어디에도 안 붙은 채로 잡혀 있으면 요금이 붙었다. 고정 주소를 받아 두고 그 서버를 지웠더니 주소만 남아서 요금이 나온 것이다.
나가는 데이터에도 요금이 붙었다. 들어오는 것은 무료인데 나가는 것은 돈이고 이미지가 많은 서비스라 이 항목이 생각보다 컸다. 물리 서버는 한 달에 얼마로 고정이라 이런 것을 생각할 일이 없었다.
관리형 DB가 못 하게 막은 것
DB 도 서비스로 제공하는 것이 있어서 직접 설치하는 대신 RDS 를 쓰기로 했다. 백업이 자동이고 다른 지역에 사본을 두는 것도 설정 하나였다.
대신 못 하는 것이 있었다.
- 설정 파일을 직접 못 고친다. 파라미터 그룹으로 정해진 항목만 바꿀 수 있다
- 서버에 접속할 수 없다. 로그도 정해진 방법으로만 본다
- 버전을 마음대로 못 올린다
IDC 시절 my.cnf 를 직접 고치던 방식은 여기서 통하지 않는다. SUPER 권한이 없어서 SET GLOBAL 이나 이벤트 스케줄러를 직접 못 켠다는 것도 그때 알았다.
처음엔 답답했는데 못 하게 막힌 것들이 대부분 하면 안 되는 것이었다. 직접 관리할 때 설정을 잘못 만져서 문제가 생긴 적이 있었다.
RDS 문서에는 인스턴스를 중지해도 스토리지와 백업은 계속 과금된다고 돼 있었다. 중지가 곧 요금 정지를 뜻하지 않는다는 것도 거기서 알았다.
사라지는 것을 정상으로 본다
문서를 읽다가 이 문장을 봤다.
인스턴스는 언제든 종료될 수 있으므로, 중요한 데이터는 인스턴스 안에 두지 마십시오.
물리 서버에서는 이런 생각을 안 했다. 서버가 죽으면 고치면 되니까. 여기서는 서버가 사라지는 것이 정상 동작이라 구조를 바꿔야 했다.
| 전에 | 지금 | |
|---|---|---|
| 업로드 파일 | 서버 디스크 | S3 버킷 |
| 세션 | 서버 메모리 | Redis |
| 로그 | 서버 파일 | 모아서 별도 보관 |
| 설정 | 서버 안 파일 | 만들 때 주입 |
이렇게 하고 나니 서버를 지웠다가 다시 만들어도 아무 일이 없다. 처음에는 번거로웠는데 해 놓으니 서버를 부담 없이 다룰 수 있게 됐다.
재고 나서 남은 것을 적었다
한 달 요금을 EC2 와 EBS 와 RDS 와 데이터 전송으로 갈라 표로 만들었다. available 상태 볼륨과 안 붙은 Elastic IP 를 정리하니 다음 달이 30%쯤 내려갔다. 인스턴스를 줄인 것이 아니라 붙어 있던 것들을 정리한 결과였다.
읽어도 모르는 것이 남았다. 요금을 어떻게 예측하는지 모르겠는데 지난달 얼마 나왔는지는 보이지만 이번 달에 얼마 나올지는 감이 안 오고 트래픽이 늘면 얼마나 늘어나는지도 모른다.
얼마짜리를 써야 하는지도 모르겠다. 크게 잡으면 낭비고 작게 잡으면 느린데 지금은 넉넉하게 잡아 뒀고 이것이 맞는지 확인할 방법을 찾아야겠다.
자동으로 늘리는 기능이 있다고 하는데 아직 안 써 봤다. 트래픽이 몰릴 때 알아서 서버를 늘린다는데 그러면 요금도 알아서 늘어나는 것이라 겁이 난다.
정리
- 만들기 쉬우면 개수가 저절로 관리되지 않는다 — 이름 규칙과 태그를 처음부터 정한다
- 종료할 때 지워지는 것은
DeleteOnTermination이 설정된 볼륨뿐이다 - 나머지는
available로 남고Elastic IP도 안 붙은 채로 요금이 붙는다 - 나가는 데이터에 요금이 붙고 이미지가 많으면 그 항목이 크다
RDS는 중지해도 스토리지와 백업이 과금된다- 설정은 파라미터 그룹으로만 바꾸고
SUPER가 없어SET GLOBAL도 안 된다 - 못 하게 막힌 것들이 대부분 하면 안 되는 것이었다
- 요금은
EC2·EBS·RDS·전송으로 갈라 봐야 어디서 나오는지 보인다 - 안 쓰는 볼륨과
Elastic IP정리만으로 30%가 내려갔다 - 서버가 사라지는 것을 정상으로 보고 파일·세션·로그·설정을 밖으로 뺀다
- 요금 예측과 적정 규격은 아직 모르겠다