runlot

psql과 PostgreSQL 프로토콜 연결

기존 PostgreSQL 도구로 데이터베이스에 연결합니다. 로그인 세션을 사용하거나 시스템용 자격 증명을 발급할 수 있습니다.

가장 빠른 방법

runlot pg shell

이 명령은 psql을 찾아 데이터베이스에 연결합니다. -- 뒤에 입력한 인수는 psql에 그대로 전달됩니다.

runlot pg shell -- -c "select count(*) from posts"

비밀번호는 PGPASSWORD 환경 변수로 전달합니다. 명령행 인수는 같은 머신의 다른 사용자가 ps로 확인할 수 있기 때문입니다.

로컬 포트로 연결하기

GUI 클라이언트나 다른 도구를 사용하려면 포트 포워딩이 편리합니다.

runlot port-forward
127.0.0.1:15432에서 me/my-app 데이터베이스로 연결합니다.
psql "postgresql://…@127.0.0.1:15432/…"처럼 연결하세요. Ctrl-C를 누르면 종료합니다.
runlot port-forward --port 5555 --listen 127.0.0.1
runlot port-forward --port 0      # 사용 가능한 포트를 자동으로 선택합니다

비밀번호는 로컬 컴퓨터로 내려오지 않습니다. 포트 포워딩은 runlot login 세션을 사용합니다. CLI는 연결 정보(호스트, 포트, 데이터베이스 이름)만 받고 인증은 앞단에서 로그인 세션으로 처리합니다. 토큰이 만료되거나 조직에서 제외되면 다음 연결부터 거절됩니다.

외부에서 직접 연결하기

외부 BI 도구 또는 다른 호스팅 환경의 앱처럼 runlot login을 사용할 수 없는 곳에서는 pg token으로 자격 증명을 발급하세요.

postgresql://<user>:<password>@<프로젝트>--<조직>.wire.runlot.app:5433/<database>?sslmode=require

포트 번호는 5433입니다. 호스트 이름에는 프로젝트와 조직이 --로 이어져 있습니다. 프런트는 자격 증명을 받기 전에 이 이름으로 어느 프로젝트의 데이터베이스를 열지 정합니다. 정확한 값은 runlot pg connect가 보여 줍니다.

TLS

sslmode=require는 libpq에서 암호화만 사용하고 인증서를 검증하지 않는다는 뜻입니다. 인증서도 검증하려면 CA 디렉터리를 지정하세요.

runlot pg shell --ca-dir ./ca      # 또는 RUNLOT_CA_DIR

SNI는 인증서 검증 여부와 관계없이 항상 필요합니다. 앞단이 SNI로 대상 프로젝트를 정하므로 SNI를 끄면 연결할 수 없습니다.

드라이버 호환성

현재는 텍스트 결과 형식을 사용하는 드라이버만 연결할 수 있습니다. psql, node-postgres, psycopg(기본 설정)가 해당합니다. pgx, JDBC, Npgsql, asyncpg처럼 바이너리 결과 형식을 요구하는 드라이버는 현재 0A000 오류로 거절됩니다. 엔진 구현은 완료되었지만 프로덕션 노드 배포가 남아 있습니다.

바이너리 파라미터는 앞으로도 지원하지 않습니다. 결과 형식과는 별개의 기능이며, 지원 전까지는 명시적으로 거절합니다.

인증 방식

앞단은 SNI로 프로젝트를 식별한 뒤 연결 시작 직후 인증을 완료합니다. 사용할 수 있는 자격 증명은 다음과 같습니다.

대상자격 증명사용 위치
사용자runlot login 세션runlot port-forward, 대시보드 SQL 편집기
시스템연결 문자열의 비밀번호외부 BI 도구, 다른 호스팅 환경의 앱

클라이언트가 보낸 runlot_* startup 파라미터는 앞단에서 모두 제거하고, 확인된 역할 정보만 다시 추가합니다. 클라이언트가 역할을 위조할 수 없습니다.

이 페이지의 목차