[DevOps] 스프링 서버 모놀리식 배포하기 - 환경구축(2)

Doccimann·2022년 3월 30일
0

본격적으로 글을 작성하기 전에 할 말

이번 포스트에서는, 프로젝트를 본격적으로 설계를 하기보다는, 이전 포스트에서 마저 설명하지 못한 환경구축에 대한 내용을 마저 다루겠습니다.

본격적으로 시작해볼까요?


우선 데이터베이스부터 만들어보죠

본 실습에서는 AWS가 제공하는 RDS, EC2 기능을 사용할 예정입니다. 따라서 실습을 따라하기 이전에 AWS 계정을 먼저 만들고 오시는 것을 추천합니다.

우선 AWS RDS 서비스를 이용하여 MySQL 데이터베이스를 생성하겠습니다.

AWS에 접속하여 검색창에 RDS를 검색하여 들어갑니다.

RDS 서비스 페이지로 접근을 하셨다면, 데이터베이스 생성 버튼을 눌러줍니다.

그리고, 아래의 방법대로 데이터베이스 환경 구축을 해주면됩니다.

  • MySQL 데이터베이스 엔진을 선택합니다.

  • 템플릿 으로는 프리티어를 선택합니다.
  • DB 인스턴스 식별자 에는 RDS Instance 요약에서 해당 Instance의 이름으로 표시되기를 원하는 이름을 입력해주면 됩니다. 저는 order-test-db라는 이름으로 정했습니다. 위의 그림은 페이크다 이말이야!
  • 마스터 사용자 이름 은 admin으로 가만히 두시면 됩니다.
  • 마스터 암호 는 원하는거 적으세요.

AWS는 신규 회원에 대해서 프리티어를 제공합니다. 프리티어 서비스를 이용하면 12개월간 1개월 당 RDS 서비스를 750시간 무료 제공합니다.

주의할 점

RDS 서비스의 경우 750시간 책정 방법이 인스턴스 모두에 대한 사용 시간 으로 계산을 하기 때문에, RDS를 과도하게 생성하여 운용하게 되면 과금의 가능성이 존재합니다. 따라서 이 부분에 대해서는 조심하셔야합니다.

예를 들어, 3개의 RDS를 생성하여 운용하는 경우에는, 3개의 RDS를 250시간 풀로 돌리는 경우 프리티어가 제공하는 750시간이 모두 소진이 됩니다. 그 이후에는 RDS 사용에 대해서 온디맨드(사용당 비용) 비용이 과금됩니다. (제 경험상 이 돈...만만치 않더라구요! 제 경험에서 나오는 조언(?)입니다!

  • VPC 환경은 Default VPC로 그대로 두세요. 만약에 미리 만들어둔 VPC가 존재하고, Internet gateway가 열려있는 경우에는 사설 VPC로 하셔도 되기는합니다. 그러다가 다들 후회하지
  • 서브넷 그룹 도 그대로 두시면 됩니다.
  • 퍼블릭 액세스 이거 진짜 중 요 합 니 다 ! "예" 에다가 체크를 해주도록합니다. 저거 체크안하면 실컷 DB를 만들어두고 접근을 못 한다 이 말이야

다음으로는, 추가 구성 을 구성해주도록 하겠습니다.

  • 초기 데이터베이스 이름 에는 원하시는 스키마 이름을 저장하도록합니다. 이건 반드시 기억을 하셔야합니다! 물론 workbench를 설치해서 확인할 경우에는 굳이 기억할 필요는 없음

위의 과정을 모두 마치셨다면, 데이터베이스를 생성해줍시다. 데이터베이스 생성까지는 대략 5분의 시간이 걸리니 기다려줍시다. 3분 카레 다 뎁히면 다 생성이 되어있어요

위의 그림과 같이 데이터베이스 인스턴스가 올라와있는 모습을 확인할 수 있습니다.


본격적으로 프로젝트와 데이터베이스를 연결하겠습니다

우선 resources 폴더 내부에 있는 application.properties를 삭제해주시고, application.yml을 생성합니다. 그리고 application.yml 파일 내에 데이터베이스 연결 정보, 그리고 여러가지 설정 정보를 적어주겠습니다.

제일 중요한 부분은, spring 속성 하위에 적힌 정보들입니다. 각자 하나씩 천천히 소개를 해드리도록 하겠습니다.

  • username : RDS 생성시 작성한 마스터 사용자 이름 을 입력하면됩니다. admin이라 뒀으니 admin으로 작성합니다.
  • password : 마스터 사용자 비밀번호 를 입력합니다.
  • url : 사용할 데이터베이스의 주소 정보를 입력합니다. 아래의 포멧을 맞춰서 작성해주면 됩니다.

포맷 : jdbc:mysql://[RDS의 엔드포인트]/[RDS 초기 데이터베이스 이름]?serverTimezone=UTC&characterEncoding=UTF-8

예시 : jdbc:mysql://order-test-db.xxxxxxxxxx.ap-northeast-2.rds.amazonaws.com/devops?serverTimezone=UTC&characterEncoding=UTF-8

  • driver-class-name : com.mysql.cj.jdbc.Driver 을 입력해줍니다. mysql driver를 사용하겠다는 의미로 받아들이시면 됩니다.

그런데 RDS 엔드포인트 정보는 어디서 확인해요?

RDS Instance 정보에서 방금 생성한 Insatance를 누르시고 들어가면 아래의 그림처럼 인스턴스 정보를 확인할 수 있습니다.

여기서, 엔드포인트 주소를 복사해서 붙여넣으면 됩니다!

그 외의 application.yml 속성들은 넣으셔도 되고, 안 넣으셔도 됩니다. 그래도 jpa의 ddl-auto 속성은 넣어주면 entity를 작성한 내용에 따라서 자동으로 테이블을 만들어주는 유용한 기능은 있습니다.

그런데, ddl-auto의 경우에는 실 배포시에는 절대로 넣어서는 안 되는 속성입니다. 왜냐하면, 저 속성으로 인해서 기존에 테이블에 있는 정보들이 날아가버릴 수도 있어요! (실제로 저것 때문에 피를 본 케이스를 들어본적이 있습니다...)


연결되었는지 확인해볼까요?

다음의 클래스를 작성해줍시다.

DevopsTestApplication.java

@SpringBootApplication
public class DevopsTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(DevopsTestApplication.class, args);
    }
}

그리고 해당 클래스를 Run 시켜줍시다. 만일 에러없이 잘 동작한다면 서버 애플리케이션과 데이터베이스가 잘 연결된 것입니다.


다음 포스트에서는 본격적으로 프로젝트 아키텍처 설계, 그리고 엔티티 작성에 대해서 다뤄보도록 하겠습니다. 다음 포스트에서 뵙겠습니다!

profile
Hi There 🤗! I'm college student majoring Mathematics, and double majoring CSE. I'm just enjoying studying about good architectures of back-end system(applications) and how to operate the servers efficiently! 🔥

0개의 댓글