데이터베이스
데이터를 저장하고 빠르게 다시 꺼내는 도구.
데이터베이스
이 카테고리에 속하는 도구
데이터를 보관하고 빠르게 다시 꺼내는 곳입니다. 관계형 엔진, 문서 저장소, 키-값 캐시, 검색 인덱스, 시계열 저장소, 그리고 이 중 무엇이든 대신 운영해 주는 관리형 서비스가 여기에 속합니다.
대부분의 팀은 공급사가 말하는 것보다 적은 수가 필요합니다. 관계형 데이터베이스 하나로 대다수 애플리케이션을 오랫동안 감당할 수 있고, 두 번째 엔진을 추가하면 장애, 백업, 그것을 이해하는 사람도 두 번째 묶음이 늘어납니다.
그 데이터에 대한 분석과 보고는 분석에 속합니다. 애플리케이션 자체가 실행되는 곳은 호스팅·클라우드입니다.
엔진 고르기
데이터의 모양과 그것에 던질 질문에서 출발하세요.
관계형 엔진은 관계, 트랜잭션, 제약 조건, 보고가 있는 모든 것에 맞으며, 대부분의 업무용 소프트웨어가 여기에 해당합니다.
나머지는 전문 엔진입니다. 문서 저장소는 모양이 제각각이고 대개 통째로 읽는 레코드에 맞습니다. 키-값 저장소는 단순 조회의 속도를 위한 것입니다. 검색 인덱스는 관계형 텍스트 검색이 어느 규모를 넘으면 모자라서 존재하고, 시계열 저장소는 지표가 다른 어떤 것보다 빠르게 들어오기 때문에 존재합니다.
정직한 기본값은 무언가가 부족하다고 증명될 때까지 관계형 엔진입니다. 없는 확장 문제를 피하려고 이색적인 저장소로 시작한 팀은 보통 다른, 더 나쁜 문제를 먼저 만납니다.
브랜드보다 호환성이 중요합니다. 널리 구현된 프로토콜을 쓰는 엔진은 도구, 드라이버, 채용, 그리고 출구를 줍니다. 독자 인터페이스는 마이그레이션 프로젝트를 줍니다.
관리형, 자체 호스팅, 서버리스
관리형 서비스는 프리미엄을 받고, 그렇지 않았다면 불편한 시간에 해야 했을 일을 없애 줍니다. 패치, 버전 업그레이드, 페일오버, 백업 검증입니다.
자체 호스팅은 장부상 더 저렴하고, 실제로 더 저렴한 때는 그 역량이 이미 사내에 있을 때뿐입니다. 디스크가 가득 차는 저녁에 쓰는 시간까지 포함해서 시간을 솔직하게 세어 보세요.
서버리스 제품은 부하에 따라 용량을 조정하고 놀고 있을 때는 요금이 적습니다. 트래픽이 고르지 않을 때 맞고, 개발 환경에는 더 잘 맞습니다. 콜드 스타트 동작, 연결 한도, 멈추지 않는 백그라운드 작업을 계량기가 어떻게 취급하는지 확인하세요.
안정성을 결정하는 질문
- 백업: 얼마나 자주, 얼마나 오래 보관하는지, 원하는 시점으로 복원할 수 있는지.
- 복원: 내 데이터 크기에서 전체 복원이 얼마나 걸리는지, 약속이 아니라 시험한 결과로.
- 페일오버: 자동인지 수동인지, 얼마나 걸리는지, 그동안 애플리케이션에 무엇이 보이는지.
- 복제: 읽기 복제본, 리전 간 사본, 코드가 감수해야 하는 지연.
- 연결: 상한이 얼마인지, 풀링이 포함되는지 직접 운영해야 하는지.
체험 기간에 복원을 한 번 실행해 보세요. 아무도 복원해 보지 않은 백업은 희망이며, 이 카테고리는 희망이 가장 비싼 곳입니다.
성장, 마이그레이션, 나중에 아픈 부분
큰 테이블의 스키마 변경은 주말을 망치는 작업입니다. 트래픽이 계속되는 동안 엔진이 컬럼 추가, 타입 변경, 인덱스 생성을 어떻게 처리하는지 물어보세요.
첫날부터 마이그레이션을 애플리케이션과 함께 버전 관리에 두세요. 대안인 콘솔에서 손으로 적용한 변경은 아무도 재구성할 수 없는 방식으로 서로 다른 환경을 만듭니다.
데이터 위치도 살피세요. 애플리케이션과 다른 리전에 있는 데이터베이스는 모든 쿼리에 지연을 더하고, 한 페이지에 쿼리를 쉰 번 날리는 애플리케이션은 이를 분명히 느낍니다.
청구서는 어떻게 만들어지는가
컴퓨트, 스토리지, 백업 스토리지, 네트워크 송신, 그리고 일부 서비스에서는 읽기와 쓰기 단위입니다.
송신이 사람들을 놀라게 하는 항목이며, 특히 분석이나 복제본이 리전을 넘어 많은 양을 끌어갈 때 그렇습니다. 스토리지는 저절로 줄어드는 일이 드물어서, 삭제한 행도 정리 작업이 돌 때까지 요금이 나갈 수 있습니다. 개발과 스테이징 사본은 크기를 줄이거나 밤새 멈추지 않으면 모든 것을 두 배로 만듭니다.
오늘의 규모가 아니라 오늘의 세 배 규모에서 가격이 얼마가 되는지 물어보세요. 실제로 내게 될 숫자이기 때문입니다. 관련된 관행은 요금 페이지가 감추는 것에 모여 있습니다.
데이터베이스를 지루하게 유지하는 관행
이 카테고리의 목표는 소동이 없는 것이며, 소수의 습관이 대부분을 만들어 냅니다.
마이그레이션은 버전 관리에 두고 모든 환경에서 같은 방식으로 적용하세요. 콘솔에서 손으로 한 변경은 나중에 아무도 재구성할 수 없는 차이를 만듭니다.
인덱스는 의도적으로 추가하고 가끔 검토하세요. 쓰이지 않는 인덱스는 무해해 보이지만 쓰기 성능과 저장 공간을 갉아먹습니다.
느린 쿼리는 장애 중이 아니라 일상적으로 지켜보세요. 오늘 4초 걸리는 쿼리는 테이블이 커진 다음 분기의 장애입니다.
그리고 일정에 맞춰 백업을 복원해 보세요. 한 번도 복원해 보지 않은 사본은 안전장치가 아니라 파일이며, 이 카테고리는 그 사실을 늦게 알아챌 때 가장 비싼 곳입니다.
자주 묻는 질문
관리형 서비스와 자체 호스팅 중 무엇이 나을까요?
관리형은 월 비용이 더 들지만, 패치, 업그레이드, 백업, 누군가 깨어 있어야 하는 밤까지 계산하면 총비용은 더 적습니다. 운영 역량이 이미 있고 배치나 튜닝을 직접 통제해야 할 때 자체 호스팅이 이득입니다.
데이터베이스에서 서버리스는 무슨 뜻인가요?
부하에 따라 용량이 늘고 줄며, 놀고 있는 시간에는 비용이 거의 또는 전혀 들지 않습니다. 트래픽이 고르지 않은 경우와 개발 환경에 좋습니다. 콜드 스타트, 연결 한도, 백그라운드 작업이 계속 돌 때의 청구액을 살피세요.
종속을 피하려면 어떻게 하나요?
다른 곳에서도 돌릴 수 있는 오픈 구현의 엔진을 선호하고, 스키마 변경을 마이그레이션 파일로 관리하며, 일반 인스턴스로의 복원을 한 번 시험해 보세요. 독자 확장 기능이 떠나는 비용을 조용히 키우는 부분입니다.
데이터베이스는 애플리케이션 기준으로 어디에 두어야 하나요?
같은 리전, 가능하면 같은 영역에 두세요. 쿼리당 몇 밀리초가 쌓이면 애플리케이션이 쿼리를 쉰 번 날리는 페이지에서는 몇 초가 되고, 아무리 캐시를 써도 잘못 배치된 프라이머리는 가려지지 않습니다.
요금은 보통 어떻게 계산되나요?
컴퓨트, 스토리지, 백업, 네트워크 송신, 때로는 읽기 단위를 각각 따로 과금합니다. 송신과 리전 간 복제가 첫 한 달 전체 청구서에서 예상보다 크게 나타나는 두 항목입니다.