CS/데이터베이스

Cloud - 운영 환경 구성 5

RangA 2023. 6. 18. 00:41

데이터베이스 연결

RDS 인스턴스 연결

인스턴스 생성 및 연결 과정

RDS 인스턴스 생성

  1. AWS 메인 콘솔 창에서 RDS를 검색하여 RDS 메인 화면으로 이동함
  2. 사이드 바에 위치한 '데이터베이스' 메뉴를 클릭하여 이동함
  3. 데이터베이스 메뉴로 이동한 뒤, 화면에 보이는 '데이터베이스 생성' 버튼을 클릭함
  4. 데이터베이스 생성 버튼을 클릭하면 DB 인스턴스의 생성과 관련해서 여러 가지 옵션을 지정할 수 있는 페이지가 보이는데, 우선 데이터베이스 엔진 옵션을 선택해야 함
    • MySQL을 사용할 것이기 때문에 MySQL을 선택함
  5. 데이터베이스 엔진을 MySQL로 선택하고 페이지의 스크롤을 살짝 아래로 내리시면 템플릿 옵션이 나오는데, 여기서 프리 티어 옵션을 선택함
  6. 설정 옵션 창으로 이동하여 DB 클러스터 식별자 이름, 마스터 사용자 이름과 마스터 암호를 기재함
    • 마스터 사용자 이름과 암호는 나중에 데이터베이스를 연결할 때 쓰이는 정보로 반드시 기억하거나 기록해야 함
  7. RDS 인스턴스 클래스는 t2.micro를 선택함
  8. 연결 옵션으로 이동하여 퍼블릭 액세스 가능 부분을 '예'로 설정함
  9. 보안 그룹 같은 경우는 기본값인 'default' 보안 그룹을 선택하며, 다른 보안 그룹을 선택 시 로컬 환경 터미널에서 테스트가 불가능함
  10. '추가 연결 구성' 토글을 열면 데이터베이스 포트 번호를 지정할 수 있는 창이 보이고, 여기서는 흔히 사용되는 3306번 포트 대신, 포트 번호 노출을 방지하려는 목적으로 13306번으로 지정함
  11. 포트 번호 변경이 완료된 뒤, 페이지의 스크롤을 아래로 내려 '추가 구성' 토글 창을 찾아 클릭함
    • 여기서 초기 데이터베이스 이름을설정함
    • 서버 코드가 데이터베이스 이름을 찾도록 작성해야 함
  12. 초기 데이터베이스 이름을 기입하고 나면 모든 설정이 끝나며, '데이터베이스 생성' 버튼을 클릭하여 DB 인스턴스를 생성함
    • DB 인스턴스가 생성되기까지 시간이 오래 걸리며, '상태' 부분이 현재 '생성 중'으로 보인다면 잠시 대기해야 함
    • '사용 가능'으로 변화하면 DB 인스턴스 생성이 완료됨

데이터베이스 연결

  1. MySQL 클라이언트를 통해 RDS의 DB 인스턴스에 연결하기 위해서는 세 가지 정보가 필요함
    1. DB 인스턴스 생성 시 기재한 마스터 이름, 마스터 비밀번호
    2. 포트 번호
    3. 생성한 DB 인스턴스의 엔드 포인트 주소
  2. 엔드 포인트 주소를 확인하기 위해서 생성한 DB 인스턴스를 클릭함
    • 연결 & 보안 메뉴 부분을 보시면 엔드 포인트 주소를 확인할 수 있음
    • 엔드 포인트 주소를 복사하여 저장함
  3. MySQL 을 통해서 DB 인스턴스에 접속함
    • 'mysql -u [마스터 이름] --host [엔드 포인트 주소] -P 13306(포트 번호) -p' 명령어를 입력함
    • 해당 명령어를 입력하면 비밀번호를 요구하는데, 마스터 비밀번호를 입력함
    • 명령어와 비밀번호를 바르게 작성했지만 접속이 되지 않는 경우 생성한 RDS 인스턴스의 보안그룹을 확인하여 인바운드 규칙에 접근하려는 IP(혹은 모든 곳에서 접근 허용)가 추가되어있는지 확인함
  4. MySQL에 접속 되면, 데이터베이스 연결 테스트를 하기 위해 터미널에 'show databases;' 를 입력함
  5. 초기 데이터베이스 이름이 보인다면 정상적으로 연결이 된 것



서버 환경 설정

  • EC2 인스턴스에서 실행되고 있는 서버는, 그 자체로는 작동하고 있지만, 아직 데이터베이스와 클라이언트에 연결하지는 않았음
  • 서버의 환경 설정을 통해 지난 실습에서 생성한 RDS 인스턴스에 접속하고, 클라우드 데이터베이스를 사용할 수 있게 해야 함

1. 서버 코드에 저장된 application.properties 파일에 환경 변수 설정하기

  • EC2 인스턴스에서 실행하고 있는 서버를 종료하고, 로컬이 아닌 EC2 인스턴스의 터미널에서 다음 단계를 진행함
  • application.properties 파일을 nano 에디터를 사용하여 수정함
$ cd [프로젝트폴더]/DeployServer/
$ nano src/main/resources/application.properties

  • application.properties 파일에서 변경해야 할 환경변수
    1. spring.datasource.url 변수에서 {} 부분에는 AWS RDS '엔드포인트 주소:포트'가 들어가야 함
    2. spring.datasource.username 변수에는 AWS RDS Mysql 마스터 사용자 이름을 입력함
    3. spring.datasource.password 변수에는 AWS RDS Mysql 마스터 암호를 입력함
    4. config.domain 에는 AWS S3 Endpoint 주소를 넣음
      • 해당 부분에는 꼭 앞에 http:// 가 포함되어야 함
      • CORS 설정을 위해 통신할 클라이언트의 도메인 입력이 필요함
    5. 환경 변수를 할당하는 과정이 끝나면, ctrl + x 키를 입력하여 변경 내용을 저장함

  • application.properties 파일을 통한 환경 설정이 완료되면, 이전 빌드를 삭제하고, 다시 빌드를 진행한 이후에, 서버를 다시 실행함


  • 아래 명령어를 사용하여, 이전 빌드를 모두 삭제함


$ ./gradlew clean

  • 아래 명령어를 사용하여 수정된 환경변수가 적용하여 다시 빌드를 진행함
$ ./gradlew build

2. 서버 실행

  • java -jar build/libs/[서버 코드 디렉터리]-0.0.1-SNAPSHOT.jar 명령어를 입력하여 서버를 재실행함
  • Shell script를 이용해서 프로세스로 실행할 수도 있음
    • ./restart.sh 명령어를 이용하여 서버를 다시 실행함

  • 서버를 실행하고 다시 s3 버킷의 엔드포인트 주소로 접속해서 연결 테스트를 진행하며, 이름과 비밀번호를 입력함
    • 정상적으로 로그인 되지 않을 경우
      1. DB 인스턴스가 정상적으로 실행되고 있는지 확인함
      2. 환경 변수에 제대로 된 값을 할당했는지 확인함
        • DB 인스턴스의 엔드포인트 값을 환경 변수에 넣을 때, 앞에 http://를 붙이면 안 되고, 포트 번호는 반드시 입력해야 함
        • S3 주소를 입력할 때 다른 엔드포인트가 붙어있진 않은지 확인함
      3. RDS 엔드포인트를 사용해서 MySQL에 접속을 시도하지만, 타임오류로 접속이 되지 않는 경우
        1. AWS RDS 페이지에 접속한 후, 사용 중인 인스턴스를 클릭, 이후 연결/보안탭에서 VPN 보안그룹 정보를 클릭함
        2. 우측 하단에 Edit inbound rules 버튼을 클릭함
        3. 규칙 추가 클릭 후, 유형에 모든 TCP, 소스에 모든 IP-V4를 클릭한 후 해당 규칙을 추가한 이후에, 저장 후 다시 확인하면 접속이 가능함
      4. 크롬 개발자 도구의 Network 탭에 들어가서 요청, 응답 과정에서 어떤 오류가 발생하는지 확인함