Infra

GCP ubuntu에 설치된 mariadb에 java Spring JDBC 연결 테스트

isaac.kim 2021. 5. 9.
728x90
반응형

GCP ubuntu에 설치된 mariadb에 java Spring JDBC 연결 테스트

 

이 글을 쓰기에 앞서 현재 상태를 얘기하면, GCP VM 인스턴스에 ubuntu OS 생성 및 mariadb를 설치했고, 로컬 컴퓨터엔 java spring 프로젝트를 열어둔 상태에서 JDBC 연결 테스트를 진행하려고 합니다.

 

spring project는 maven으로 라이브러리를 받아오고 있었기 때문에 maven 사이트에서 mariadb전용 JDBC를 설치해야 했습니다.

 

1. mariadb 전용 jdbc 설치

먼저 maven에서 mariadb jdbc를 설치하기 위해 maven repo 사이트에 접속합니다. 

mvnrepository.com/

 

mariadb를 검색하고 MariaDB Java Client 를 선택합니다.

2.7.2 버전을 선택하여 사용하기 위해 해당 버전을 클릭합니다.

 

해당 버전에 대해서 어떤 이슈가 있는지 확인하기 위해 Homepage에 접속합니다. 문제가 없다면 Maven의 코드를 복사하여 spring project의 pom.xml에 <dependency>를 추가해줍니다.

홈페이지에서 최소 java 8 version과 맞는 것을 확인하였고, 해당 버전을 사용하기로 하여 pom.xml에 <dependency>를 추가합니다. pom.xml 파일을 저장하고, 프로젝트 우클릭 Maven > update 를 진행합니다.

		<dependency>
		    <groupId>org.mariadb.jdbc</groupId>
		    <artifactId>mariadb-java-client</artifactId>
		    <version>2.7.2</version>
		</dependency>

Maven Dependencies에 라이브러리르 설치된 것을 확인합니다.

프로젝트에 mariadb jdbc는 설치가 완료되었습니다.

 

 

2. JDBC와 mariadb의 연결 테스트

mariadb 데이터베이스에 jdbc 연결 테스트를 위해 [HOST IP], [DB Name], [username], [password]가 준비되어 있어야 하고 아래와 같이 입력해주어 테스트를 진행합니다.

package org.test.jdbc;

import static org.junit.Assert.fail;

import java.sql.Connection;
import java.sql.DriverManager;

import org.junit.Test;

import lombok.extern.log4j.Log4j;

@Log4j
public class JDBCTEST {
	
	static {
		try {
			Class.forName("org.mariadb.jdbc.Driver");
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void testConnection()
	{
		try (Connection connection = DriverManager.getConnection( 
				"jdbc:mariadb://[GCP HOST IP ADDRESS]:3306/[DB NAME]",
				"[username]",
				"[password]"
				)) {
			log.info(connection);
			if (connection != null) {
				System.out.println("DB Connection Success!");
			}
		} catch (Exception e) {
			fail(e.getMessage());
		}
	}
}

 

JAVA 테스트 코드를 작성한 후, JUnit으로 간단히 테스트하여 JDBC의 연결이 올바른지 확인합니다. 저는 처음에 연결이 되지 않았습니다. 여기서 어떤 부분이 잘못되었는지 확인해야 합니다.

성공적으로 연결되었다면, 아래와 같이 출력될 것입니다.

INFO : org.test.jdbc.JDBCTEST - org.mariadb.jdbc.MariaDbConnection@1e6454ec
DB Connection Success!

 

3. 연결되지 않을 시 체크해야 할 것.

 

※로컬 컴퓨터에 mariadb가 설치되어 있다면 원격 접근 시도를 해보는 방법도 있습니다.

원격 접근 방법

> mysql -u [username] -p -h [GCP HOST IP ADDRESS]

안 된다면 다음 사항들을 점검해야 합니다.

 

1) GCP의 방화벽 점검

2) GCP Ubuntu의 ip, port listen 상태 점검

3) mariadb의 접근 ip 점검 및 변경

 

 

▣ 1) CGP 방화벽 확인

 

먼저 GCP의 네트워크에서 mariadb의 기본 포트인 3306이 있는지 확인합니다. 해당 포트의 방화벽 규칙이 없다면 새로 생성해줘야 합니다.

이름, 설명, 트래픽 방향, 대상(네트워크의 모든 인스턴스), 소스 IP 범위, 지정 포트 3306 등을 입력해주고, [만들기]를 눌러 방화벽을 생성합니다.

 

 

▣ 2) GCP Ubuntu의 ip, port listen 상태 점검

 

명령어를 입력하여 점검합니다.

$ netstat -antp

 처음 mariadb를 설치하게 되면 접근할 수 있는 ip address와 port number는 127.0.0.1:3306 으로 설정되어 있습니다.

127.0.0.1:3306으로 되어 있으면 localhost의 3306 포트만 접근을 허용하며, 외부 접근은 할 수 없습니다. 따라서 mariadb의 설정 파일을 변경하여 외부에서도 접근이 가능하도록 해줘야 합니다.

 

 

▣ 3) mariadb의 접근 ip 점검 및 변경

 위 2) 에서 확인했듯이 mariadb는 기본적으로 로컬호스트의 3306 포트 접근을 허용하고 있습니다. 이를 변경하기 위해 설정파일에 접근해야 합니다. mariadb의 설정파일은 다음 경로에 있습니다. /etc/mysql/mariadb.conf.d/50-server.cnf 

 

해당 파일을 열어서 기본 ip 주소를 변경합니다.

sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf

기존 bind-address 값 = 127.0.0.1

이를 주석처리하거나 제거한 뒤 0.0.0.0 으로 수정합니다.

그리고 mysql 서비스를 재시작합니다.

 

재시작 명령어

$ sudo service mysql restart

 

다시 netstat 확인

$ netstat -antp

 

 

여기까지 마쳤다면, 외부 접근도 가능하고 JDBC TEST도 정상적으로 될 것입니다.

 

이번 글에는 GCP, linux(ubuntu), Java spring, mariadb 등 다양한 내용이 담겨 있습니다. 혼란스럽지 않도록 파트를 나누어 작성했습니다. 틀린 내용이 있다면 정정해주십시오. 감사합니다.

728x90
반응형