셀렉트 클라우드의 새로운 데이터베이스 연결 방법 (Secure Tunnel)
안녕하세요 셀렉트팀 이진혁입니다.
셀렉트 어드민은 기존 데이터베이스를 연결하여 쉽게 조회, 수정등 페이지를 만들고 계정 초대로 팀원에게 쉽게 공유가능한 서비스입니다.
기존에는 이러한 어드민 개선과 데이터 업무를 위해 개발자, 개발팀 단위로 시간과 노력이 필요했지만 셀렉트 어드민은 SQL, API, DB, UI등 복잡한 단계를 통합하여 누구나 빠르게 데이터를 다루고, 협업이 가능한 환경을 추구해왔습니다.
셀렉트 클라우드는 서비스 이용을 위해 데이터베이스를 셀렉트 클라우드에 연결하는 과정이 필요합니다.
서비스 데이터베이스 연결
운영 데이터를 연결하고 화면을 표시하기 위한 과정으로 필수적이지만 몇가지 어려움이 있습니다.
- 셀렉트 클라우드가 접근 가능하도록 IP 허용이 필요합니다.
- 셀렉트 클라우드에 계정정보를 입력하고 연결 테스트를 진행합니다.
- 데이터베이스가 내부망에 존재하는 경우 외부 접속을 위해 추가 작업이 필요합니다. (VPC Peering, SSH Tunnel)

그러나 셀렉트 어드민을 빠르게 써보고 싶은 사용자 분들에게는 이런 문제들은 바로 해결하기 어렵습니다.
- 셀렉트 클라우드 IP 허용 요청을 위해 개발자 도움이 필요 (방화벽 설정 필요)
- 통계 분석용 데이터베이스에 접속하도록 계정을 받았는데 동일한 계정 정보로 쉽게 클라우드에 접속이 불가능 (MySQL Workbench, Sequel Pro, DataGrip, DBeaver)
개발자 입장에서도 어려움이 있습니다.
- 데이터베이스 계정정보가 외부에 저장되는 것에 대한 걱정
- VPC Peering 연결을 위해 별도 IP 관리 필요
- SSH Tunnel 만들기 위해 키 관리 필요 (서버 비용 발생, 키 유출시 위험)
- 내부용 HTTP API를 외부에 공개하기 위해 추가 비용 발생 (ELB, ALB, Public IP, DNS)
- 설치형 CLI(Self-hosted)로 하는 경우 클라우드 만큼 빠른 편집이 어려움 (사용자가 git, npm등 이해 필요)
안전하고 빠른 방법
클라우드로 빠른 협업을 하고 싶은 사용자에게 더 나은 데이터베이스, API 연결 방법을 제시합니다.
- 더 이상 데이터베이스를 외부에 열지 않아도 셀렉트 클라우드에 접속됩니다.
- 내부망 API도 안전하게 셀렉트 클라우드에서 호출합니다.
- 안전한 사내망(VPN), 내 노트북 환경에서 셀렉트 클라우드와 연결합니다.
(1/4) 셀렉트 CLI 설치
npm i -g selectfromuser
slt -v
를 통하여 설치된 버전을 확인해주세요. 2.4.1 이상
(2/4) 설정 파일 추가
resources:
- name: mysql.qa
type: mysql
host: tm.xxxxxxxx.ap-northeast-2.rds.amazonaws.com
port: 3306
username: user_xxxxx
password: xxxxxxxxxxxx
database: xxxxxxx
extra:
charset: utf8mb4_general_ci
예: index.yml (이름은 변경 가능) 같은 폴더에 추가 (참고: $DB_HOST 이렇게 환경변수 이용가능)
(3/4) 셀렉트 CLI 시작
slt connect
로그인, 프로젝트 생성(연결) 과정이 진행됩니다.slt login
slt link

네임스페이스를 지정하는경우: NAMESPACE=dev slt connect
(환경변수)
(4/4) 클라우드 테스트
CLI의 API를 호출하여 사용합니다.
- http 블록으로 cli query를 호출
- resource에 사용하려는 데이터베이스 이름을 입력
- sql에 쿼리 입력

네임스페이스(dev
)를 지정하는경우:url: https://dev@cli/query
*네임스페이스는 환경(local, dev, stage, prod), 데이터위치(service, logdb), 기기(office1)등에 따라 구분
- type: http
url: https://cli/query
method: GET
data:
resource: mysql.sample
sql: |
SELECT * FROM wine_stock
WHERE name LIKE CONCAT (:name)
LIMIT 10
params:
name: "%{{ name }}%"
params:
- key: name
:id등 치환자 사용 가능


_api/findUsers.js
파일을 추가하여 클라우드에 JSON 응답더 알아보기
데이터베이스 일부만 연결 가능한가요?
- 네 가능합니다.
resources
에 입력된 데이터베이스만 연결됩니다.
특정 테이블만 연결 가능한가요?
- 네 가능합니다. 별도 계정 설정 없이 ACL 옵션을 통해 제공하고 있습니다.
데이터 전송은 안전한가요?
- CLI 서버는 api.selectfromuser.com의 WebSocket 서버와 연결됩니다. 모든 과정은 SSL 기반으로 통신합니다.
- 소켓 연결시 세션을 안전하게 검증합니다. 서버단에서 로그아웃 가능하도록 적절한 방식과 유효기간을 가지고 있습니다.
데이터가 저장되나요?
- 저장되지 않습니다. 데이터 전송에 필요한 임시 데이터로 존재하며 전송 후 즉시 삭제됩니다. (캐시, 보관의 경우 별도 비용이 발생합니다.)
해당 프록시, 터널의 코드가 안전한가요?
- 네 오픈소스로 공개되어 있습니다. https://github.com/eces/select/blob/main/connect.js
에러 문구
- websocket connection not ready: 서버가 켜지지 않음
- 응답 타임아웃(Timeout): 쿼리가 실행되지 않음
- url 위치에
timeout: 5000
입력으로 타임아웃 증가 가능. 기본값 3초
- url 위치에
- internal resource not found: 설정 파일에서 리소스이름을 찾을 수 없음

감사합니다.