RSS듀오랩스
웹 인프라

Vercel DB 통합: 비밀번호를 몰라도 되는 이유

작성자
듀오랩스 대표·4분 읽기

하루에 관리형 Postgres 두 개를 배포에 붙였습니다. 하나는 비밀번호를 재설정하고 연결 문자열을 손으로 옮겨 적었고, 다른 하나는 비밀번호를 끝내 보지 않았습니다. 후자가 더 빨랐고, 무엇보다 틀릴 자리가 없었습니다.

사고가 난 쪽은 손으로 옮기는 구성

먼저 한 쪽은 손으로 옮기는 구성이었습니다. 콘솔에서 비밀번호를 재설정하고, 연결 문자열을 받아 자격증명 저장소에 넣고, 거기서 배포처로 밀었습니다. 단계마다 사람이 값을 보고 옮깁니다.

배포하니 500 이 났습니다. 계정 이름이 틀렸습니다. 직결로 붙던 시절의 계정을 풀러 URL 에 그대로 넣었는데, 풀러는 계정 이름의 접미사로 어느 프로젝트인지 판단합니다. 접미사가 없으니 인증까지 가지도 못했습니다.

비밀번호는 맞았습니다. 호스트도 포트도 맞았습니다. 틀린 것은 조립이었습니다.

그 단계 자체가 없는 통합 쪽

다른 한 쪽은 배포 플랫폼과 데이터베이스 사이에 공식 통합이 있었습니다. 붙일 때 한 번 권한을 승인하고 나면, 데이터베이스 쪽이 연결 문자열을 배포처의 환경변수로 직접 씁니다.

환경변수 목록을 열어 보니 이런 이름들이 이미 들어와 있었습니다.

DATABASE_URL            풀러 엔드포인트
DATABASE_URL_UNPOOLED   직결 엔드포인트
POSTGRES_URL, PGHOST, PGUSER, PGPASSWORD, …

제가 만든 것이 하나도 없습니다. 그래서 조립할 것도 없고, 조립을 틀릴 수도 없었습니다.

"몰라도 된다" 가 아니라 "알 이유가 없다"

비밀번호는 콘솔에 가면 언제든 볼 수 있습니다. 접근이 막힌 것이 아닙니다.

차이는 사본이 생기느냐 입니다. 값을 한 번 옮겨 적는 순간 원본과 사본이 둘이 되고, 둘은 언젠가 갈립니다. 비밀번호를 바꿨는데 한 곳만 고쳤다거나, 호스트를 바꿨는데 계정 표기를 그대로 뒀다거나 하는 식으로요. 통합은 그 사본을 만들지 않습니다.

같은 이유로 비밀번호를 교체할 때도 할 일이 없습니다. 데이터베이스 쪽에서 갈면 통합이 배포처를 따라 갱신합니다. 손으로 옮기는 쪽은 교체할 때마다 옮기는 절차가 한 번씩 더 생기고, 그 절차마다 틀릴 기회가 한 번씩 생깁니다.

대가는 주인이 둘이 된다는 것

값의 정본을 한곳에 모으는 중이었기 때문에, 이 구조는 원칙과 어긋납니다. 다른 값들은 자격증명 저장소가 주인인데 데이터베이스 URL 만 통합이 주인입니다.

그래서 대조를 돌리면 그 둘이 늘 "저쪽에만 있음" 으로 뜹니다. 처음에는 빠뜨린 것처럼 보이는데 정상 상태입니다. 다만 그 표시가 눈에 익으면, 진짜로 빠진 값이 생겼을 때 못 알아채게 됩니다. 이게 실질적인 비용이라고 봅니다.

그리고 위험한 명령이 하나 생깁니다. 저쪽에만 있는 값을 지워 정본과 일치시키는 옵션인데, 이 구성에서 그걸 돌리면 통합이 넣어 둔 데이터베이스 URL 이 지워집니다. 쓰는 CLI 가 통합 소유 변수를 이름 패턴으로 알아보고 보호하고 있었지만, 그 목록에 DATABASE_URL 은 없었습니다. 이름이 너무 일반적이라 어느 쪽 것인지 이름만으로는 알 수 없기 때문입니다.

그래서 어느 쪽을 고를까

저는 통합이 있으면 쓰는 쪽을 고르겠습니다. 사람이 값을 옮기는 단계가 사라지는 이득이, 주인이 둘이 되는 불편보다 큽니다. 오늘 사고가 난 곳이 정확히 사람이 옮긴 쪽이었다는 점도 그 판단을 굳혔습니다.

다만 그 결정을 적어 두어야 합니다. "이 값은 여기서 관리하지 않는다" 가 문서에 없으면, 다음 사람이 빠진 값으로 보고 채워 넣습니다. 그러면 주인이 둘인 상태가 아니라 값이 둘인 상태가 되고, 그때부터는 어느 쪽이 진짜인지 아무도 모릅니다.

마지막 수정:

공유하실 때는 출처(Duolabs)와 원문 주소를 표시해 주세요.