본문 바로가기
버블 개발/중급

40. SQL Database Connector (중급) : 버블 SQL 데이터베이스 커넥터 설정, 외부 SQL 연결하기, SQL 데이터FETCH, UPDATE, 삭제

by 스타트업 사업가 마르코 2023. 7. 18.
이 섹션에서는 외부 SQL 데이터베이스에 연결할 수 있는 SQL 데이터베이스 커넥터의 설정, 사용을 설명합니다.

 

Bubble 앱을 최대한 활용하기 위해 외부 데이터베이스에 연결해야 하는 경우가 있습니다. SQL 데이터베이스 커넥터 플러그인은 다음과 같은 데이터베이스에 연결할 수 있는 편리한 도구입니다.

  • 포스트그레스
  • MySQL
  • 마이크로소프트 SQL
  • Bubble 내에서 SQL 쿼리를 실행하여 정보에 액세스 하거나 작업을 트리거할 수 있습니다.

 

*SQL 이란?
  • SQL(Structured Query Language)은 관계형 데이터베이스를 관리하고 조작하는 데 사용되는 언어입니다.
  • 주로 데이터베이스 내에서 데이터를 검색, 삽입, 업데이트 및 삭제하고 데이터베이스 구조를 만들고 수정하도록 설계되었습니다.
  • SQL은 MySQL, PostgreSQL 및 Microsoft SQL Server와 같은 다양한 데이터베이스 관리 시스템에서 널리 사용되고 지원됩니다.
  • Bubble은 PostgreSQL을 데이터베이스의 기반으로 사용합니다. PostgreSQL을 사용함으로써 Bubble은 수년에 걸쳐 개발되고 개선된 안전 하며 효율적인 데이터베이스 시스템을 활용합니다.
  • 또한 다른 데이터베이스 및 도구와의 호환성을 보장하여 필요할 때 외부 시스템과 쉽게 통합하고 연결할 수 있습니다.

 

(1) 플러그인 설치

: SQL Database Connector는 기본 제공기능이 아니라 플러그인 저장소를 통해 설치해야 하는 선택적 플러그인입니다.

  1. 설치하려면 메인 panel의 좌측 plugins를 클릭하여 플러그인 저장소로 이동하십시오
  2. 상단 우측 모서리의 add plugins 버튼 클릭 검색창에서 "SQL Connector"를 검색하고 플러그인을 설치하십시오
  3. 선택한 플러그인의 플러그인 항목 오른쪽 하단에 By Bubble 가 있는지 확인하십시오. by Bubble표시는 버블에서 제작한 플러그인입니다. (좌측 filter에서 built by  bubble 체크하면 bubble에서 제작한 plugin만 나옴)
  4. install를 클릭하여 앱에 설치합니다.

 

(2) 연결 설정

플러그인을 설치하면 새 연결을 설정할 수 있는 목록이 표시됩니다. 필요한 만큼 연결을 설정할 수 있으며 각 연결에서 필요한 만큼 쿼리를 설정할 수 있습니다.
  1. 먼저 Add a new connection(새 연결 추가) 버튼을 클릭하여 새 연결을 만듭니다.
  2. 그런 다음 연결 이름(name)을 정하십시오. 이것은 내부용으로만 사용되며 연결 작동 방식에는 영향을 미치지 않습니다.
  3. 다음으로 Database Type(데이터베이스 유형)을 선택합니다 . Bubble은 공식적으로 Postgres, MySQL 및 Microsoft SQL과의 연결을 지원합니다.
  4. 다음 단계는 Connection string(연결 문자열)을 설정하는 것입니다. 여기에서 연결하려는 SQL 데이터베이스의 인증 및 URL을 설정합니다.
    • 여기에서 설정한 정보는 Bubble의 서버에서 암호화되어 전송되며 앱 사용자에게는 표시되지 않습니다. 연결 문자열의 형식은 다음 예시와 같습니다. (설명은 아래 '2. 연결문자열 이해' 참고)
mysql://username:password@my-db-instance.endpoint.us-east-1.rds.amazonaws.com:PORT/db_name

 

1. 연결 설정 찾기

SQL 데이터베이스에 대한 연결 설정을 찾으려면 다음 단계를 따르십시오.
  1. DBMS(데이터베이스 관리 시스템) 설명서 찾기: 연결 설정 찾기에 대한 구체적인 지침은 DBMS 공급업체(예: MySQL, PostgreSQL, Microsoft SQL Server 등)에서 제공하는 설명서를 참조하십시오.
  2. DBMS 관리 도구에 접속: MySQL용 phpMyAdmin, PostgreSQL용 pgAdmin 또는 Microsoft SQL Server용 SQL Server Management Studio와 같이 DBMS 공급업체에서 제공하는 적절한 관리 도구를 사용합니다.
  3. 연결 세부 정보 찾기: 관리 도구에서 호스트 이름 또는 IP 주소, 포트 번호, 데이터베이스 이름, 사용자 이름 및 암호를 포함한 연결 세부 정보를 찾습니다. 이러한 세부 정보는 서버 구성, 연결 속성 또는 사용자 계정 설정에서 찾을 수 있습니다.
  • 찾은 정보를 사용하여 앞에서 언급한 연결 문자열을 생성할 수 있습니다.
  • 아래에서 문자열의 각 섹션이 무엇을 나타내는지 살펴보겠습니다.

 

2. 연결 문자열 이해

연결 문자열은 아래와 같이 연결에서 각각의 목적을 제공하는 여러 부분으로 구성됩니다.
  1. mysql://: 연결 문자열이 MySQL 데이터베이스용임을 나타내는 프로토콜 접두사
  2. username: 액세스 권한이 있는 데이터베이스 사용자 이름
  3. password: 해당 사용자의 비밀번호
  4. @: 이 기호는 나머지 연결 문자열에서 인증 자격 증명(사용자 이름 및 암호)을 구분
  5. my-db-instance.endpoint.us-east-1.rds.amazonaws.com: 데이터베이스 서버의 호스트 이름 또는 주소 ( 이 예시는 미국 동부(버지니아 북부) 리전에 위치한 Amazon RDS 인스턴스 주소)
  6. :PORT: MySQL 서버가 연결을 수신하는 포트 번호(숫자), 실제 포트 번호로 적어야 함(일반적으로 MySQL의 경우 3306)
  7. /db_name: 연결하려는 특정 데이터베이스의 이름

 

3. 비밀번호 포맷 (URL 인코딩)

비밀번호에 특수 문자가 포함된 경우 올바른 연결을 위해 URL 인코딩이 되어야 합니다.

예를 들어 '#' 기호를 '%23'으로 바꿉니다. URL 인코딩 교체의 전체 목록은 아래 링크에서 찾을 수 있습니다.

 

아래의 링크를 방문하여 자동 변환기를 사용하여 문자열을 입력하면 쉽게 변환할 수 있습니다.
https://www.urlencoder.io/
 

URL Encode Online

URL Encode online. URLEncoder is a simple and easy to use online tool to convert any string to URL Encoded format in real time. It also contains several articles on how to URL Encode a query string or form parameter in different programming languages.

www.urlencoder.io

 

예시) 같은 문자열을 URL인코딩 적용시

  1. URL인코딩 없음 : my password/U2n(
  2. URL인코딩 적용: %22my%20password%2FU2n%28%22

 

4. 암호화된 연결

특정 매개변수를 추가하지 않으면 연결이 암호화되지 않아 타인이 데이터 전송을 가로채서 일반 텍스트로 읽을 수 있습니다. 민감한 정보 또는 개발진행시 항상 암호화된 연결을 사용하는 것이 좋습니다.

 

  • 암호화된 연결을 설정하려면 연결 문자열에 매개변수를 추가해야 합니다.
  • 매개변수는 연결하려는 SQL 데이터베이스의 유형에 따라 다릅니다.

1) MySQL :? ssl={} 연결 문자열에 매개변수를 추가합니다. 매개변수가 추가된 문자열 결과는 다음과 같습니다.

mysql://username:password@hostname:port/database_name?ssl={}

 

2) PostgreSQL :? ssl=true 연결 문자열에 매개변수를 추가합니다. 매개변수가 추가된 문자열 결과는 다음과 같습니다.

postgres://username:password@hostname:port/database_name?ssl=trueMicrosoftSQL

 

3) Server의 경우:? encrypt=true 연결 문자열에 매개변수를 추가합니다. 매개변수가 추가된 문자열 결과는 다음과 같습니다.

sql://username:password@hostname:port/database_name?encrypt=true

 

  • 경우에 따라 DBMS 및 호스팅 공급자의 요구사항에 따라 SSL 인증서 또는 SSL 키와 같은 추가 매개 변수를 제공해야 할 수도 있습니다.
  • 암호화된 연결 구성에 대한 자세한 지침은 데이터베이스 공급업체의 설명서를 확인하십시오

 

5. 연결 테스트

필요한 모든 연결 세부 정보를 입력했으면 Test the Connection(연결 테스트)를 클릭하여 제대로 작동하는지 확인합니다. 문제가 있는 경우 Bubble은 문제를 식별하고 해결하는 데 도움이 되는 오류 메시지를 표시합니다.

 

(3) Query(쿼리) 추가

1. Query(쿼리)란? 

쿼리는 데이터베이스에 데이터 찾기, 추가, 변경 또는 제거를 요청하는 방법입니다.
  • 외부 데이터베이스의 데이터로 작업하는 방법입니다. 버블 데이터베이스에서 사용하는 Do a search for , Create a new thing 및 Make changes to a thing과 같은 기본 제공 작업을 사용하는 대신, 외부 데이터베이스에서는 동일한 작업을 수행하는 쿼리를 설정합니다.
  • Bubble은 널리 채택된 PostgreSQL 언어를 사용하기 때문에 Bubble 앱은 유사한 언어를 사용하는 다른 많은 데이터베이스 시스템과 문제없이 통신할 수 있습니다.
  • 이 문서는 SQL 쿼리에 대한 소개를 제공하지만 전체 정보는 아닙니다. SQL 쿼리에 대한 자세한 가이드는 아래의 W3 School의 SQL 자습서 섹션을 권장합니다.
W3School의 SQL 자습서 > 바로가기

 

2. 퀴리 추가

: 연결이 설정되고 작동하면 원하는 쿼리를 추가할 차례입니다.

  1. 먼저 쿼리의 이름(name)을 설정합니다. 이것은 내부용으로만 사용되며 쿼리 작동방식에는 영향을 미치지 않습니다.
  2. Connection 드롭다운 메뉴에서 사용할 연결을 선택할 수 있습니다. 이전에 설정한 연결입니다.
  3. 다음으로 Use as 드롭다운 메뉴를 사용하면, 쿼리를 Action 또는 Data Source로 사용할지, 아니면 둘 다로 사용할지 여부를 지정할 수 있습니다. 쿼리 자체에는 영향을 미치지 않으며 앱에서 쿼리를 사용할 수 있는지 여부에 영향을 미칩니다.
  4. 마지막으로 쿼리 자체를 설정합니다.

 

3. 주의사항

  • SQL에서 사용되는 용어는 Bubble에서 사용되는 용어와 약간 다릅니다.
  • 여기서 데이터베이스 Table에 대해 이야기할 때 Bubble에 사응하는 용어는 데이터베이스 Type(유형)입니다.
    • 예시) User Table은 User Type의 데이터로 작업하고 있음을 의미합니다.

 

(4) 데이터를 가져오기 (Fetching data)

 

1. 제약 조건 없이 데이터 가져오기

먼저 외부 데이터베이스에서 사용자(users) 목록을 가져온다고 가정해 보겠습니다.

제약 조건 없이 모든 사용자를 반환하는 간단한 쿼리는 다음과 같습니다.

SELECT * FROM users;
  • 이 문자열은 "users" 테이블의 모든 열(*)과 모든 행을 반환하도록 PostgreSQL 데이터베이스에 지시합니다.
  • 쿼리 끝에 있는 세미콜론(;)은 명령문의 끝을 나타냅니다.
  • 이 예시는 기본적으로 제약 조건을 추가하지 않고 Do a search for를 설정하는 것과 동일합니다.

 

2. 제약 조건 추가

이제 쿼리에 몇 가지 제약 조건을 추가해 보겠습니다. 계속해서 사용자를 검색하지만 다음 항목만 검색합니다.

 

*제약조건

  • 만 25세 이상(숫자/정수)
  • "인도" 국가에서(텍스트/문자열)
SELECT * FROM users WHERE age > 25 AND country = 'India';
  • users 테이블에서 나이가 25세 이상이고 국가가 india인  항목을 원한다고 지시하고 있습니다.

 

3. 동적 제약

위의 예에서 잘 작동하는 제약 조건을 설정했지만 한 가지 단점이 있습니다.
위에서는 정적인 값(25 및 인도)을 지정하고 있는 데, 실제 앱의 경우 쿼리를 보낼 때 제약 조건을 동적(Dynamic)으로 지정하는 경우가 많습니다.
동적 제약 조건을 지정하기 위해서는 매개변수를 사용해야 합니다.
  • SQL 쿼리에서 각 매개변수는 $1로 지정하며 숫자 1은 각 매개변수의 개수를 나타냅니다.
  • 즉, 추가하는 매개변수가 늘어날수록 숫자를 1씩 늘립니다.
  • 이 경우 두 매개변수(나이 및 국가)가 필요하므로 이 두 매개변수의 키를 $1 및 $2로 만듭니다.
SELECT * FROM users WHERE age > $1 AND country = $2;
  • 보시다시피 정적 값(25 및 인도)을 두 개의 매개변수로 대체했습니다.
  • 이제 우리는 두 매개변수(숫자(연령) 및 텍스트(국가))에 대해 예상되는 데이터 종류를 Bubble에 알리기 위해 아래에서 이러한 매개변수를 설정해야 합니다.

 

쿼리에 동적변수 설정
쿼리에 동적변수 설정

 

동적 변수 설정

매개변수 아래의 섹션을 참고하십시오, Bubble은 생성한 각 매개변수($1, $2 등)에 대해 번호가 매겨진 식별자를 자동으로 생성합니다.

  1. 매개변수 추가: 추가하려는 각 매개변수에 대해 add parameter(매개변수)를 클릭
  2. name 설정 : 앱에서 내부적으로 사용되며 쿼리에 영향을 주지 않습니다.
  3. data Type 설정: 숫자 및 텍스트와 같은 데이터 유형 설정
  4. test value 설정 : 이 값은 초기화에만 사용
  5. initialize this query(쿼리 초기화)를 클릭하여 외부 서버에 요청을 보내고 작동하는지 확인합니다.

 

4. 결과 제한 (Limit 사용)

위의 쿼리는 일치하는 모든 결과를 다시 보내도록 데이터베이스에 요청합니다. 대부분의 경우 그렇게 많은 데이터를 다시 보낼 필요가 없습니다. 또한 Bubble에는 SQL 데이터베이스 커넥터에서 반환되는 레코드가 한 번에 200개로 제한됩니다.

 

LIMIT 키워드를 사용하여 결과 수에 제한을 추가할 수 있습니다.

위의 쿼리를 기반으로 10개의 레코드만 받아오게 제한을 추가합니다.

 

결과는 다음과 같아야 합니다.

SELECT * FROM users WHERE age > $1 AND country = $2 LIMIT 10;

 

5. 결과 정렬 (order by 사용)

결과를 정렬해야 하는 경우 ORDER BY 키워드를 사용할 수 있습니다.

SELECT * FROM users WHERE age > $1 AND country = $2 ORDER BY age ASC LIMIT 10;

 

위의 예에서는 두 개의 키워드를 사용하고 있습니다.

  • ORDER BY는 사용자의 age에 따라 주문하도록 합니다.
  • ASC는 정렬이 오름차순인지 확인합니다.

 

정리)

위에서부터 이 전체 쿼리가 수행하는 작업을 반복해 보겠습니다.

  • 나이가 $1이 나타내는 값보다 크고 국가가 $2가 나타내는 값과 같은 사용자 테이블의 모든 열(*)입니다.
  • 결과는 오름차순(ASC)의 age 열을 기준으로 정렬되며 10개의 레코드로 제한됩니다.

 

(5) 데이터 업데이트 (Updating Data)

지금까지 일부 데이터를 가져오기 위해 쿼리를 보내는 방법을 살펴보았습니다.
SQL쿼리는 레코드 생성, 업데이트 및 삭제와 같이 데이터베이스를 변경할 수도 있습니다.

 

1. 레코드 생성

: 새 레코드를 생성하려면( Bubble의 기능 Create a new thing과 같은 의미 ) INSERT INTO 키워드를 사용합니다.

 

해당 쿼리를 사용하려면 몇 가지 추가 정보가 필요합니다.

  • 레코드를 추가할 테이블(사용자)
  • 데이터를 추가할 필드
  • 해당 필드에 저장할 값

 

(예시)

예를 들어 다음과 같은 쿼리를 설정할 수 있습니다.

INSERT INTO users (first_name, last_name, age, country)
VALUES ('John', 'Doe', 28, 'USA');

 

여기에는 두 개의 행이 있습니다.

  • 첫 번째 행은 테이블과 필드를 지정하고 두 번째 행은 저장하려는 값을 포함합니다.
  • Bubble에서와 마찬가지로 SQL 데이터베이스는 Unique ID, 만든 날짜 및 수정된 날짜에 대한 필드를 자동으로 생성합니다. (Unique ID가 반드시 Bubble과 동일한 구조를 가질 필요는 없습니다.)

 

2. 레코드 업데이트

레코드를 업데이트하려면( Bubble에서 Make changes to a thing과 유사 ) UPDATE 키워드를 사용합니다.

 

이 쿼리의 경우 다음 정보를 제공해야 합니다.

  • 변경하려는 테이블
  • 만들고 싶은 변화
  • 데이터베이스 검색에 적용할 제약 조건입니다.

 

아래 예에서는 ID 필드(Bubble의 고유 ID와 유사)를 사용하여 올바른 레코드를 얻었는지 확인합니다.

UPDATE users
SET age = 29, country = 'Canada'
WHERE id = 123321;

 

이 예에서는 ID가 123321인 사용자의 age 및 country 필드를 변경합니다.

  • UPDATE 키워드는 WHERE에 지정된 제약 조건을 변경하여 데이터 목록을 변경하는 데에도 사용할 수 있습니다.
  • 예를 들어 id = 123321을 first_name = 'John'으로 교체하여 John이라는 모든 사용자를 변경할 수 있습니다.
  • 단일 레코드를 작업하려면 항상 ID를 사용하여 올바른 레코드에서 작업하고 있는지 확인하는 것이 좋습니다.

 

3. 레코드 삭제

이제 레코드를 삭제해 보겠습니다.

 

다시 ID로 사용자를 지정하고 다음의 정보를 제공해야 합니다.

  • 삭제 작업을 수행하려는 테이블
  • 적합한 사용자를 찾기 위한 제약 조건
DELETE FROM users
WHERE id = 123321;

 

이 명령은 ID가 123321인 사용자를 삭제합니다.

  • DELETE 키워드는 WHERE에 지정된 제약 조건을 변경하여 사물 목록을 삭제하는 데에도 사용할 수 있습니다.
  • 예를 들어 id = 123321을 first_name = 'John'으로 바꾸면 John이라는 모든 사용자를 삭제할 수 있습니다.
  • 단일 레코드를 작업하려면 항상 ID를 사용하여 올바른 레코드에서 작업하고 있는지 확인하는 것이 좋습니다.

 

(6) Response 제약사항

Bubble에서는 response당 최대 200줄까지만 가져오기를 허용합니다.