이 페이지에서는 Cloud SQL 데이터베이스 연결을 효과적으로 사용하는 애플리케이션을 만드는 데 도움이 되는 권장사항과 언어별 코드 샘플을 제공합니다.
이 샘플은 GitHub에서 제공하는 완전한 웹 애플리케이션에서 발췌하였습니다. 자세히 알아보기
Cloud SQL에 연결된 샘플 웹 애플리케이션을 실행하는 방법에 대한 단계별 안내를 확인하려면 사용 중인 환경에 해당하는 링크로 이동하세요.
- 빠른 시작: 로컬 컴퓨터에서 연결
- 빠른 시작: Compute Engine에서 연결
- 빠른 시작: Cloud Run에서 연결
- 빠른 시작: Cloud Run Functions에서 연결
- 빠른 시작: Google Kubernetes Engine에서 연결
연결 풀
연결 풀이란 연결 지연 시간 및 성능의 개선을 위해 공유 및 재사용되는 데이터베이스 연결의 캐시를 의미합니다. 애플리케이션에서 데이터베이스 연결이 필요하면 풀에서 임시로 하나를 빌려오고 연결이 필요 없어지면 연결을 풀에 반환합니다. 이 연결은 다음에 애플리케이션에서 데이터베이스 연결이 필요할 때 재사용될 수 있습니다.
TCP로 연결
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
참고:
- INSTANCE_CONNECTION_NAME은 <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME>으로 표시되어야 합니다.
- 인수 ipTypes=PRIVATE을 사용하면 SocketFactory가 인스턴스의 연결된 비공개 IP와 강제로 연결됩니다.
- pom.xml 파일에 대한 JDBC 소켓 팩토리 버전 요구사항은 여기를 참조하세요.
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
Unix 소켓으로 연결
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
연결 열기 및 닫기
연결 풀을 사용할 때는 연결을 제대로 열고 닫아야 합니다. 그래야 사용을 마쳤을 때 항상 연결이 풀로 반환됩니다. 반환되지 않거나 '유출'된 연결은 재사용되지 않으므로 리소스가 낭비되고 애플리케이션에서 성능 병목 현상이 발생할 수 있습니다.
연결 수
모든 데이터베이스 연결은 클라이언트 및 서버 측 리소스를 사용합니다. 게다가 Cloud SQL에서는 초과하면 안 되는 전체 연결 한도를 부과합니다. 연결을 적게 만들어 사용하면 오버헤드를 줄이고 연결 한도를 유지하는 데 도움이 됩니다.
PDO는 연결 한도를 구성하는 기능을 현재 제공하지 않습니다.
지수 백오프
애플리케이션에서 데이터베이스 연결을 시도하지만 성공하지 못할 경우 데이터베이스를 일시적으로 사용하지 못할 수 있습니다. 이 경우 반복 연결 요청을 보내면 리소스가 낭비됩니다. 데이터베이스에 다시 액세스할 수 있도록 하려면 추가 연결 요청을 보내기 전에 기다리는 것이 좋습니다. 지수 백오프 또는 기타 지연 메커니즘을 사용하여 이 목표를 달성할 수 있습니다.
이 재시도는 처음 연결하거나 풀에서 처음 연결할 때만 의미가 있습니다. 트랜잭션 도중에 오류가 발생하면 애플리케이션에서 트랜잭션 시작부터 재시도해야 합니다. 따라서 풀이 올바르게 구성되어 있어도 연결이 끊어지면 애플리케이션에 오류가 표시될 수 있습니다.
database/sql 패키지는 지수 백오프를 구성하는 기능을 현재 제공하지 않습니다.
PDO는 지수 백오프를 구성하는 기능을 현재 제공하지 않습니다.
연결 시간 초과
연결 시도가 성공하지 못하는 데에는 여러 가지 이유가 있습니다. 네트워크 통신이 항상 보장되는 것은 아니며 데이터베이스가 일시적으로 응답하지 못할 수도 있습니다. 끊겼거나 실패한 연결을 애플리케이션에서 적절하게 처리해야 합니다.
database/sql 패키지는 연결 제한 시간을 구성하는 기능을 현재 제공하지 않습니다. 제한 시간은 드라이버 수준에서 구성됩니다.
연결 종료
Cloud SQL에서 PROCESS
권한이 있는 사용자는 자신이 관리하지 않는 연결을 나열할 수 있습니다. MySQL 5.7.x에서는 사용자에게 SUPER
권한, MySQL 8.0.x에서는 사용자에게 CONNECTION_ADMIN
권한이 있어야 이러한 연결에 대해 KILL
문을 실행할 수 있습니다. KILL
문은 다른 mysql 사용자(Cloud SQL 관리 사용자 제외)의 연결을 종료합니다. 이러한 권한이 없는 사용자는 자신이 관리하는 연결만 나열하고 종료할 수 있습니다.
mysql 클라이언트를 사용하고 SHOW PROCESSLIST
명령어를 실행하여 인스턴스 연결을 나열할 수 있습니다. Id
를 사용하여 연결을 종료합니다.
예를 들면 다음과 같습니다.
mysql> SHOW PROCESSLIST;
mysql> KILL 6;
연결 기간
연결 수명을 제한하면 이탈한 연결이 누적되는 것을 막을 수 있습니다. 연결 수명은 연결 풀을 사용해 제한할 수 있습니다.
'mysql' Node.js 라이브러리는 연결 기간을 제어할 수 있는 함수를 현재 제공하지 않습니다.
ActiveRecord는 연결 기간을 제어하는 기능을 현재 제공하지 않습니다.
PDO는 연결 기간을 제어하는 기능을 현재 제공하지 않습니다.
완전한 애플리케이션 보기
완전한 애플리케이션을 보려면 아래 링크를 클릭하세요.
Python 프로그래밍 언어로 빌드된 완전한 애플리케이션을 확인하세요.
Java 프로그래밍 언어로 빌드된 완전한 애플리케이션을 확인하세요.
Node.js 프로그래밍 언어로 빌드된 완전한 애플리케이션을 확인하세요.
C# 프로그래밍 언어로 빌드된 완전한 애플리케이션을 확인하세요.
Go 프로그래밍 언어로 빌드된 완전한 애플리케이션을 확인하세요.
Ruby 프로그래밍 언어로 빌드된 완전한 애플리케이션을 확인하세요.
PHP 프로그래밍 언어로 빌드된 완전한 애플리케이션을 확인하세요.
다음 단계
- 비공개 IP 자세히 알아보기
- Cloud SQL 및 App Engine의 할당량 및 한도 알아보기
- Cloud SQL 작업 권장사항 알아보기
- 외부 애플리케이션에서 연결에 대해 자세히 알아보기