김쥬르에 개발일지
Spring Boot AWS 배포 본문
지금까지 만든 웹 서비스를 AWS Elastic Beanstalk를 이용하여 배포해보도록하겠습니다.
Elastic Beanstalk?
서버 구축 및 배포에 필요한 EC2 RDS를 한 번에 설정하는 AWS 서비스입니다.
서버 업로드용 코드 작성만으로 서버를 쉽게 올릴 수 있고, 그외의 기능들
로드 밸런싱, 오토 스케일링, 모니터링, 배포 등을 일래스틱 빈스토크 메뉴 안에 직접 구성하거나
설정 파일로 자동 처리할 수 있습니다. 일래스틱 빈스토크는 추가 비용 없이 애플리케이션을 저장 및 실행하는데 필요한 AWS 리소스에 대해서만 요금을 지불하게됩니다.
(AWS 계정 생성 과정은 생략합니다)
https://ap-northeast-2.console.aws.amazon.com/elasticbeanstalk/home?region=ap-northeast-2#/welcome

애플리케이션 생성 버튼을 클릭해줍니다.

자유롭게 애플리케이션 이름을 설정해줍니다.

저희는 JAVA를 사용하니 플랫폼을 JAVA로 설정해주고 나머지는 JAVA로 설정하였을때 디폴트값으로 둡니다.

외에 사항들은 전부 디폴트 값으로 두고 다음 버튼을 눌러줍니다.

새 서비스 역할 생성 및 사용을 눌러주고
EC2 인스턴스 프로파일에 권한 세부정보 보기를 눌러줍니다.

위와 같은 화면이 나오면 IAM 콘솔을 눌러
IAM 대시보드 화면으로 이동합니다.

저는 이미 만들어둔 역할이 있어 9로 나오고 AWS 사용여부에 따라 숫자는 달라집니다.
역할에 숫자를 눌러줍니다.

역할 생성을 눌러줍니다.

사용 사례에 "서비스 또는 사용 사례" 를 EC2로 선택해주고 다음을 눌러줍니다.

AWSElasticBeanstalk 를 검색해준후
AWSElasticBeanstalkWebTier
AWSElasticBeanstalkWorkerTier
AWSElasticBeanstalkMulticontainerDocker
3개를 찾아 선택해주고 다음 버튼을 눌러줍니다.

역할 이름에 aws-elasticbeanstalk-ec2-role 를 적어주고
나머지는 디폴트 값으로 둔 후 스크롤을 내려 역할 생성을 눌러줍니다.
화면이 전환되면 설정하던 ElaticBeanstalk 화면으로 이동해서
EC2 인스턴스 프로파일 오른쪽에 새로고침 버튼을 눌러줍니다.

IAM에서 생성 해준 역할 이름으로 설정해준뒤 검토 단계로 건너뛰기를 눌러준 후
다음 화면이 나오면 스크롤을 내려서 제출 버튼을 누릅니다.

제출이 완료되면 이러한 화면이 나오며 서버를 자동으로 세팅하는 중이니
작업이 완료될 때 까지 기다려줍니다.

상단에 환경이 성공적으로 시작되었습니다. 또는 상태에 OK표시가 되면
도메인에 링크를 눌러 접속이 잘 되는지 확인해줍시다.

이제 데이터베이스를 생성해줍니다.
처음 화면으로 돌아와 왼쪽 카테고리에 구성을 눌러줍니다.

네트워킹 및 데이터베이스 에 편집 버튼을 눌러줍니다.

스크롤을 내려 데이터베이스 부분에 데이터베이스 활성화 버튼을 눌러주고
사용자 이름과 암호를 자유롭게 기입합니다.
나머지 설정은 디폴트로 둔후 적용 버튼을 눌러줍니다.
해당 작업도 어느정도에 소요시간이 있으므로 기다려준 후
다시 카테고리에 구성을 누르고 다시 데이터베이스 편집에 들어갑니다.
스크롤을 내려보면 데이터베이스 엔드포인트 라는것이 생겼을겁니다.

엔드포인트 주소를 복사해줍니다.
구성 화면으로 돌아와 이번에는
업데이트 , 모니터링 및 로깅에 편집을 눌러줍니다.

스크롤을 쭉 내려 환경 속성에 해당 내용을 입력 후 적용 버튼을 눌러줍니다.

RDS_HOSTNAME : 복사해두었던 엔드포인트 숫자4개와 : 을 지우고 입력해줍니다.
RDS_PORT : 지웠던 엔드포인트 맨 뒤에 숫자 4개 (3306)
RDS_DB_NAME : ebdb 고정입니다.
RDS_USERNAME : DB 설정할 때 적은 ID
RDS PASSWORD : DB 설정할 때 적은 PW
이제 RDS 로 이동하여 DB 인스턴스를 눌러줍니다.

방금 생성된 DB 식별자를 눌러줍니다.

VPC 보안 그룹에 링크를 눌러줍니다.

Security group ID 에 링크를 클릭합니다.

인바운드 규칙 편집을 눌러줍니다.

규칙 추가 버튼을 누른후 유형은 MYSQL/Aurora로 선택해주고
소스는 Anywhere-IPv4로 해준 뒤에 저장해주고 먼저 있던 TCP 유형의 인바운드 규칙은 삭제해주고 규칙 저장을 눌러줍니다.

이제 인텔리제이를 열어 DB를 연결해주겠습니다.

먼저 application.properties 파일을 연뒤 해당 내용을 지워줍니다.
ctrl + shift + A 를 누른후 Plugins 를 검색후 Database Navigator를
다운받고 다시 시작해줍니다.

왼쪽 DB Brower를 누른 후 플러스 버튼을 누르고 MySQL을 선택해줍니다.


내용을 적어준 후 TEST CONNECTION를 눌러 위와 같이 나오면 성공입니다.
적용된 스프링 부트 DB에서 sql 콘솔 창을 추가해준 후 SQL 문을 작성하고
순서대로 실행시켜줍니다.

create database blog;
use blog;
create table article (
id bigint not null AUTO_INCREMENT,
author varchar(255) not null,
content varchar(255) not null,
title varchar(255) not null,
created_at timestamp,
updated_at timestamp,
primary key (id)
);
create table refresh_token (
id bigint not null AUTO_INCREMENT,
refresh_token varchar(255) not null,
updated_at timestamp,
primary key (id)
);
create table users (
id bigint not null AUTO_INCREMENT,
email varchar(255) not null,
nickname varchar(255),
password varchar(255),
updated_at timestamp,
primary key (id)
);
이제 오른쪽에 Gradle 탭에서 Tasks -> build -> build를 더블클릭해줍니다.

이렇게 나오면 성공입니다.

프로젝트 구성에서 build -> libs -> SNAPSHOT.jar -> open in -> explorer
를 눌러 파일에 위치를 기억해주고 다시 Elastic Beanstalk로 돌아가

업로드 및 배포를 누르고 파일선택을 눌러 파일을 업로드합니다.

배포가 완료되었다면 다시 구성에
업데이트 , 모니터링 및 로깅 편집에 들어가

내용을 추가해줍니다.
SERVER.PORT : 5000
JWT_SECRET_KEY : study-springboot
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_ CLIENT_ID
<구글 OAuth2에서 발급받은 클라이언트 아이디>
SPRING_SECURITY_0AUTH2_CLIENT_REGISTRATI0N_G00GLE_ CLIENT_SECRET
SPRING_SECURITY_0AUTH2_CLIENT_REGISTRATI0N_G00GLE_ SCOPE : email,profile
여기서 설정한 값은 배포 파일에 비밀키를 보호해줍니다.
이제 구글 클라우드 콘솔로 이동하여

elastic beanstalk 주소 + /login/oauth2/code/google 을 승인된 리디렉션 ID로 추가해줍니다
이제 본인 서버에 도메인 주소로 접속해보면

로컬 환경에서 와 같은 화면이 나오는걸 볼수 있고

구글 로그인을 통해 홈페이지 접속도 문제없이 되는걸 확인할수 있습니다.

위는 EC2 서버로 접속한 화면이며 다른 PC에서도 접속이 잘되는걸 확인할수 있습니다.
다음 포스팅은 CI/CD에 대해서 포스팅해보도록 하겠습니다.
'Spring boot' 카테고리의 다른 글
| Spring Boot OAuth2 (0) | 2024.01.08 |
|---|---|
| Spring Boot JWT TestCode (1) | 2024.01.06 |
| Spring Boot JWT (1) | 2024.01.05 |
| Spring Boot 스프링 시큐리티 (0) | 2024.01.01 |
| Spring Boot 각종 뷰 (1) | 2023.12.31 |