[DevOps] 네이버 클라우드 DB 사용하기

민찬기·2022년 12월 13일
2
post-thumbnail

멋쟁이사자처럼 백엔드 스쿨을 진행하면서 네이버 클라우드의 크레딧을 지원받게 되었다. 네이버 클라우드를 처음 사용해보면서 가장 아쉬웠던 것은 참고자료가 많이 부족했다는 것이다.

물론 많은 분들이 어렵지 않게 연결하겠지만, 하나부터 열까지 따라할 교보재가 필요한 경우도 있다. 교보재는 당연히 아니겠지만, 그래도 내가 한 방법을 소개하는 것도 의미가 있지 않을까 싶다.

Spring Boot에서 네이버 클라우드의 Cloud DB for MySQL을 연결하는 방법을 소개해보고자 한다.

DB Server 열기

네이버 클라우드 플랫폼 접속

우선 네이버 클라우드 홈페이지의 우측 상단에 콘솔 버튼을 클릭한다.

콘솔 창에서 Platform을 Classic으로 설정하고, Service를 누른 뒤, Database의 Cloud DB for MySQL을 클릭한다.

구축하려는 서비스 규모가 작으며 네트워크 설정은 신경 쓰고 싶지 않은 경우는 Classic 환경을 쓰도록 제안하고 있다. 자세한 내용은 여기서 확인할 수 있다.

DB Server 생성

이미 하나의 DB Server를 열어서 화면이 다를 수 있지만, DB Server 생성 버튼을 누르면 된다.

그러면 위와 같은 설정창이 나오는데, 여기서 MySQL 버전과 스토리지 타입을 설정할 수 있다. SSD의 경우 추가 요금이 부과되기 때문에, HDD를 사용한다.

HOST(IP)는 DB에 접속할 클라이언트의 IP 주소로, 지금은 전체 접속 허용으로 해두지만, 각자 상황에 맞춰서 설정을 해주면 좋을 것 같다.

USER 암호는 8자 이상 20자 이하로 구성되어야 하고, 영어/특수문자/숫자가 하나씩은 포함되어야 한다.

Backup 설정은 하지 않았는데, 사용하게 되면 요금이 부과된다. 각자 상황에 맞춰서 사용하면 좋을 듯 하다.

이후 최종확인 과정을 거쳐서 DB Server를 생성하게 된다. 그러면 이런 창을 확인할 수 있다.

Datagrip에 연결하기

Public 도메인 설정

DB Server를 연결했으니, DB 정보를 토대로 Datagrip에서 연결을 해보겠다.

우선 연결에 앞서, 생성한 DB Server를 보면 Public 도메인이 할당되지 않은 상태임을 확인할 수 있다.

Public 도메인 설정을 위해 DB관리에서 Public 도메인 관리를 클릭한 뒤, Public 도메인을 신청하면 미할당 상태였던 Public 도메인에 임의의 도메인이 부여된다.

ACG 설정

IP주소/포트 기반 필터링 기능을 제공하는 기능으로 AWS로 치면 보안그룹 설정과 같다. ACG 설정은 무료다.

페이지 좌측 하단에서 ACG에 관한 설정을 진행할 수 있다. 우선 규칙 보기를 눌러 현재의 규칙 상태를 확인하면, DB 생성시에 설정되는 ACG 규칙이 하나 존재한다. 이제 로컬에서 접속할 수 있도록 ACG 설정을 진행한다.

ACG 설정을 위해 기존 페이지의 좌측 하단에서, ACG 글자 옆에 존재하는 바로가기 버튼을 클릭한다.

ACG 탭에 들어오면 DB Server가 생성되면서 자동으로 만들어진 ACG가 존재한다. 해당 ACG를 선택하고, 좌측 상단의 ACG 설정 버튼을 눌러 진행한다.

접근 소스에는 접근을 허용할 IP 주소를 입력하면 된다. 0.0.0.0/0으로 설정하면 모든 IP에 대한 접근을 허용하는 것이 된다. 오른쪽의 추가 버튼을 누르고, 아래의 적용 버튼을 누르면 설정이 완료된다.

설정 이후, 앞서 DB Server에서 확인했던 ACG 규칙 보기를 다시 진행하면, 우리가 추가한 규칙이 존재함을 확인할 수 있다.

Datagrip 설정

위에서 ACG 설정까지 진행하였으므로, 이제는 Datagrip에서 연결을 진행할 수 있다.

MySQL을 클릭하고 DB Server 대시보드의 내용을 바탕으로 입력을 진행한다.

Host에는 Public 도메인을 입력하고, User와 Password는 DB Server 설정을 진행하며 입력했던 내용들을 입력한다. Database에는 DB Server 설정에서 기본 DB명을 입력한다. 이후 Test Connection을 눌러본다.

모두 올바르게 입력하고 Test Connection을 진행했다면 Succeeded가 뜨면서 연결이 성공함을 볼 수 있다. Apply, OK 버튼을 눌러 마무리를 하면 된다.

Spring에 연결

환경 설정 파일인 .properties(혹은 .yml)에 아래의 코드를 입력한다.

spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver
spring.datasource.url: jdbc:mysql://(Public도메인):(접속 PORT)/(기본db명)?characterEncoding=utf8
spring.datasource.username: (username)
spring.datasource.password: (password)

그리고 제대로 접속이 되는 지 확인을 위해 간단한 코드를 작성해보았다.

Post.java

@Getter
@Builder
@Entity
public class Post {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column
    private String name;
}

PostRepository.java

@Repository
public interface PostRepository extends JpaRepository<Post, Long> {
}

PracticeTest.java

@SpringBootTest
public class PracticeTest {

    @Autowired
    private PostRepository postRepository;

    @Test
    void post() {

        Post post = Post.builder().name("어이").build();

        Post savedPost = postRepository.save(post);

        Assertions.assertThat(post.getName()).isEqualTo(savedPost.getName());
    }
}

그리고 테스트 코드를 실행시키면 예쁘게 초록불이 들어오는 모습을 볼 수 있다.

Datagrip에도 값이 잘 들어가 있는 것을 확인할 수 있다.

UnsatisfiedDependencyException

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourceScriptDatabaseInitializer'

진행하면서 혹시 위의 에러가 발생할 수 있다. 그럴 경우 의존성에 mysql 관련 내용이 추가되지 않은 것일 수 있다.

pom.xml

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>

build.gradle

dependencies {
    implementation 'mysql:mysql-connector-java'
}

마치며

네이버 클라우드에서 제공하는 MySQL Server를 Datagrip과 SpringBoot 프로젝트에 연결해보았다.

처음 연결을 시도하면서 ACG 설정에서 가장 골머리를 썩었던 거 같다. 아무래도 AWS에 비해선 레퍼런스가 적을 수 밖에 없기 때문에 조금 더 어려움이 있었던 거 같다.

이 글이 어려움을 겪는 누군가에게 도움이 되었으면 한다!

profile
https://github.com/devmizz

0개의 댓글