Amazon RDS(Relational Database Service)란?

분산 관계형 데이터베이스 서버 인스턴스로서 관계형 데이터베이스의 설치, 관리, 업데이트를 알아서 해준다.

따라서, RDS를 통해 관계형 데이터베이스를 손쉽게 사용, 관리할 수 있고 스토리지 확장 같은 기능들을 활용할 수 있다.

프리티어 계정이라면 aws에서 직접 운용하는 Aurora는 사용할 수 없고 Microsoft SQL, Oracle, MySQL, Aurora, Maria DB 중에서 하나를 택해서 임대 받으면 된다.


1. RDS 데이터베이스 생성받기

검색창에서 RDS 검색 후 데이터베이스 클릭

필자는 이미 임대 받은 RDS가 있어서 저렇게 뜨지만 원래는 목록이 비어있다.

데이터베이스 생성 클릭

원하는 데이터베이스 종류 선택

Aurora는 프리티어 무료 계정으로 사용할 수 없다.

버전을 확인할 수도 있고 변경을 원할 시 변경도 가능하다.

무료로 사용할 예정이므로 프리 티어를 선택한다.

데이터베이스 이름, 마스터 이름, 비밀번호를 설정한다.

이후 워크벤치, 데이터그립등을 활용하여 데이터베이스에 접근할 때 필요한 정보이므로 신중하게 설정해야한다.

과금을 막기 위해 범용 SSD 스토리지 유형 선택, 자동 조정 활성화 체크를 해제한다.

외부에서도 데이터베이스에 접근할 수 있도록 퍼블릭 엑세스를 예로 바꿔준다.

aws의 모든 인스턴스들은 내부/외부 상호작용을 위해 vpc 설정을하는데 필자는 기본 vpc를 선택했다.

외부에서 DB에 접근할 때 인증 옵션을 선택해야한다.

현업이 아니고 사이드 프로젝트용으로 사용할 것이기 때문에 간단하게 암호 인증으로 선택했다.

이후 데이터 베이스 생성 버튼 클릭하면 데이터베이스 인스턴스가 생성되며 RDS 데이터베이스 탭에서 확인가능하다.

 

2. RDS 파라미터 그룹 변경

Time Zone, Character Set, Max Connection 파라미터 값을 변경해줘야한다.

RDS에 들어가서 파라미터 탭->파라미터 그룹 생성 클릭

그룹 이름과 설명을 적어준 뒤 생성 버튼 클릭

 

아래 사진들의 왼쪽 이름을 검색 후 오른쪽과 같이 설정 변경

time_zone

charcter_set

한글과 이모지 지원

max_connection

 

 

최종 변경 사항 저장 클릭

다시 RDS 데이터베이스 탭으로 이동하여 해당 데이터베이스를 클릭한 후 수정 클릭

추가 구성에서 방금 생성한 파라미터 그룹으로 설정 후 초기 설정이므로 즉시 적용 클릭

예시로 만들던 파라미터 그룹과 이름이 다른건 이전 파라미터 그룹을 설정한 것으로 신경안쓰셔도 됩니다.

 

3. 보안그룹 설정

RDS 데이터베이스 탭에서 원하는 인스턴스의 이름 클릭

연결&보안에서 vpc 보안 그룹 밑 이름 클릭

 

인바운드 규칙 탭에서 인바운드 규칙 편집 클릭

외부에서 접속하려는 ip 추가(로컬에서 접근시 네이버에서 내 ip 주소치면 ip주소 확인 가능)

이때  ip주소 뒤에 /32를 넣어줘야된다.

ec2 보안 그룹 ID를 복사해서 넣어줘도 된다. 

다 추가했으면 규칙 저장

 

이제 초기 설정은 다 끝났다. 

 

이후 원하는 프로그램을 써서 데이터베이스에 접근하면 된다.

필자는 주로 데이터그립을 사용하며 데이터그립을 활용해 연결하는 방법은 아래 게시물을 참고하면 된다.

https://cofls6581.tistory.com/60

 

Datagrip으로 MySQL 외부에서 접속하기

Datagrip이란? 외부 접속위한 DB 개발과 관리를 용이하게 해주는 GUI 개발 툴 Datagrip 다운 www.jetbrains.com/ko-kr/datagrip/download/#section=windows 학생 인증 후 무료 라이센스 pack 다운로드 new project..

cofls6581.tistory.com

 

참고 사이트

https://overcome-the-limits.tistory.com/294

https://bcp0109.tistory.com/357?category=1073811

https://8iggy.tistory.com/71

https://brunch.co.kr/@topasvga/696

스프링 부트에서 Redis 서버를 연결해서 작동하는 로직이 있는데 코드를 작성한 후 관련 api를 실행시켜보니 ERR Client sent AUTH, but no password is set라는 에러로그가 출력됐다.

Redis 서버에 비밀번호 설정을 안해줬거나 설정해줬는데 yml과 같은 Redis 서버 연결관련 설정 파일에 비밀번호를 제대로 적지 않아줘서 생기는 오류이다.

분명 초반에 깔 때 비밀번호를 설정해주고 확인까지 했었는데 비밀번호가 날라가있었다. 
+원인을 알았다. 집에서 사용하는 IP가 고정적인 IP가 아니여서 가끔씩 IP가 바뀌는데 IP가 바뀌면 redis 설정을 다시 해줘야하는 것 같다.

 

참고용 내 redis 서버 yml 설정 파일 코드는 아래와 같다.

spring:
  redis:
    host: localhost
    port: 6379
    password: '설정한비밀번호'
    lettuce:
      pool:
        max-active: 10
        max-idle: 10
        min-idle: 2

 

비밀번호를 설정해주지 않았거나 기억이 안난다면 아래를 따라오면 된다.

 

비밀번호 확인

 

redis-cli 실행

config get requirepass

 

"requirepass"

""

뜨면 비밀번호 설정이 안된 상태로 설정해줘야 한다.

 

비밀번호 설정법

 

redis-cli 실행

config set requirepass 비밀번호

이후 아래 코드를 치면

auth 설정한비밀번호 

config get requirepass

"requirepass"

"설정한비밀번호"

정상적으로 비밀번호가 변경됐음을 확인할 수 있다.

 

 

confing폴더에 securityConfig 생성

securityConfig에 아래와 같은 코드로 passwordEncoder를 Bean으로 추가

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class SecurityConfig {

    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}

참고사이트

https://stackoverflow.com/questions/60848619/consider-defining-a-bean-of-type-org-springframework-security-crypto-bcrypt-bcr?rq=1

스프링 부트 실행 시 cannot access MimeMessage와 같은 오류가 떴다.

구글링 후 build.gradle dependices에 다음과 같은 설정 추가

implementation 'org.springframework.boot:spring-boot-starter-mail'

 

참고 사이트 

https://youtrack.jetbrains.com/issue/IDEA-276659

스프링 부트 2.6 이상에서 Querydsl 5.0을 사용하려고 할 때 이전의  build.gradle에서의 Querydsl 설정법을 사용하면 발생하는 오류이다.

 

아래 코드를 build.gradle에 추가해주면 정상적으로 스프링 부트가 실행된다.

 

buildscript {
   ext {
      queryDslVersion = "5.0.0"
   }
}

plugins {
   //querydsl 추가
   id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

dependencies {
   //querydsl 추가
   implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
   implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
}

def querydslDir = "$buildDir/generated/querydsl"

querydsl {
   jpa = true
   querydslSourcesDir = querydslDir
}
sourceSets {
   main.java.srcDir querydslDir
}
compileQuerydsl{
   options.annotationProcessorPath = configurations.querydsl
}
configurations {
   compileOnly {
      extendsFrom annotationProcessor
   }
   querydsl.extendsFrom compileClasspath
}

Querydsl 사용하는 이유

data jpa의 @Query로는 다양한 조회 기능 사용에 한계가 존재

->해결 하기 위해 정적 타입을 지원하는 가장 유명한 조회 프레임워크 Querydsl 사용

동적 쿼리 작성이 편리

1. build.gradle 수정

 

plugin 블럭에 추가

id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"

dependencies 블럭에 추가

 implementation 'com.querydsl:querydsl-jpa'

querydsl 설정 부분 블럭으로 추가

//querydsl설정

def querydslDir = "$buildDir/generated/querydsl"

querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}

sourceSets {
    main.java.srcDir querydslDir
}

configurations {
    querydsl.extendsFrom compileClasspath
}

compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

2. configuration 추가

이 설정을 통해 jpaQueryFactory를 프로젝트 어느 곳에서나 주입받아 사용 가능

@Configuration
public class QuerydslConfiguration {
    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory jpaQueryFactory(){
        return new JPAQueryFactory(entityManager);
    }

}

 

참고 사이트

https://hello-gg.tistory.com/62

https://jojoldu.tistory.com/372

 

 

 

+ Recent posts