
'스프링 부트3 백엔드 개발자 되기' 책을 참고하며 작성 중 입니다.
다른 PC에서도 서비스에 접속하려면 실제 서버에 스프링 부트 서버를 올려 실행 해야 한다. 이런 행위를 실무에서는 배포 라고 한다.
- 서버용 PC를 구매
- AWS와 같은 클라우드 컴퓨팅 서비스 이용
컴퓨팅 서비스, 네트워크 서비스, 데이터베이스 서비스, 스토리지 서비스 등 다양한 서비스를 지원하는
AWS 를 사용하여 배포해보자.
우리가 사용할 AWS의 서비스 ⬇️
EC2 : AWS에서 제공하는 원격 서버
- 오토 스케일링 그룹
- 타깃 그룹
- 로드 밸런서
RDS : AWS에서 제공하는 원격 데이터베이스

EC2는 AWS에서 제공하는 클라우드 컴퓨팅 서비스로 가상의 PC 즉, 서버 한 대를 임대하는 서비스
사용자의 요청이 많아지면 서버 하나로는 처리가 어렵기 때문에 여러 EC2가 필요!
그때 사용자의 요청 횟수에 따라 EC2를 유동적으로 늘이거나 줄여주는 서비스
사용자의 요청이 한 경로로 들어오는 것을 분산시켜주는 서비스
그때 요청을 어디로 분산시킬지 그룹을 정해야 하는데,
이러한 그룹을 대상 그룹 이라고 한다.
AWS에서 제공하는 클라우드 데이터베이스 서비스 중 범용 데이터베이스
AWS에서 제공하는 서비스는 굉장히 많기 때문에, 서비스를 이해하고 사용하는 방법을 파악하기 어렵다.
이러한 어려움을 해결하고자 일래스틱 빈스토크 (Elastic Beanstalk) 서비스가 등장!
AWS는 계정 생성 후 1년 동안 프리티어 자격을 준다!
계정 생성은 알아서 셀프
혹시나 다른 서버에 만들어서 쓸데없는 결제가 되지 않도록 조심하자 ..

[IAM -> 역할 -> 역할 생성]



[Elastic Beanstalk -> 환경 -> 환경 생성]



현재 제작한 환경에 들어가 [도메인] URL을 눌러 아래와 같은 창이 뜨면 성공!

[Elastic Beanstalk -> 환경 -> (방금 만든 환경) -> 구성 -> 네트워킹 및 데이터베이스 편집]


생성한 데이터베이스에 들어가 엔드포인트 복사
엔드포인트는 RDS 연결 시에 사용한다.

[Elastic Beanstalk -> (내가 만든 환경) -> 구성 -> 업데이트, 모니터링 및 로깅 편집]
환경 속성 추가
| 이름 | 값 |
|---|---|
| SPRING_DATASOURCE_URL | jdbc:mysql://(엔드포인트)/blog |
| SPRING_DATASOURCE_USERNAME | 전에 입력한 값 |
| SPRING_DATASOURCE_PASSWORD | 전에 입력한 값 |
애플리케이션 실행 시 위에 설정한 환경 속성 값으로 yml 값을 덮어쓰게 된다.
spring:
~~datasource:
url: jdbc:h2:mem:testdb~~ 삭제
[RDS -> 데이터베이스 -> VPC 보안 그룹]



[File -> Setting -> Plugins -> Databse Navigator]
설치 후 Intellij Restart

왼쪽 도구 메뉴에서 DB Browser 선택
만약 보이지 않으면 [View -> Tool Windows -> DB Browser]
[ + 버튼 -> Data Source -> MySQL]


Test Connection으로 연결 테스트 후 아래와 같이 잘 연결된 모습!

[ Connection 우클릭 -> Open SQL Console ]
!! 실행 시 내가 원하는 만큼 드래그 후 RUN 버튼 누르기
create database blog;
use blog;
create table article(
id bigint not null AUTO_INCREMENT,
author varchar(255) not null,
content varchar(255) not null,
created_at timestamp,
title varchar(255) not null,
updated_at timestamp,
primary key (id)
);
create table refresh_token (
id bigint not null AUTO_INCREMENT,
refresh_token varchar(255) not null,
user_id bigint not null,
primary key(id)
);
create table users(
id bigint not null AUTO_INCREMENT,
created_at timestamp,
email varchar(255) not null,
nickname varchar(255),
password varchar(255),
updated_at timestamp,
primary key (id)
);
show tables;
실행 후 Schemas Reload

show tables 로 테이블 확인

dependencies {
implementation 'com.mysql:mysql-connector-j'
}
[Gradle -> Tasks -> build -> build 더블 클릭]

[Gradle -> Tasks -> build -> build 우클릭 -> Run 환경 수정하기]


[build -> libs] 를 확인하면 jar 파일이 두 개가 생긴다.
그 중에서 plain이 아닌 것을 배포한다.

[Elastic Beanstalk -> 환경 -> (내가 만든 환경) -> 업로드 및 배포]


파일 선택 후 아까 위에서 봤던 jar 파일을 업로드 하여 배포한다.
아까 데이터베이스의 환경 변수를 설정하는 것과 동일하게 환경 변수를 설정한다.
[(내가 만든 환경) -> 구성 -> 업데이트, 모니터링 및 로깅 -> 편집 -> (아래) 환경 속성 ]
| 이름 | 값 |
|---|---|
| SERVER_PORT | 5000 |
| JWT_SECRETKEY | application.yml에서 설정한 값 |
| SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_ID | google에서 발급받은 아이디 |
| SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_SECRET | google에서 발급받은 비밀키 |
| SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_SCOPE | email,profile |
(도메인) + /login 으로 접속하여 로그인 화면 확인하기

해당 도메인으로 반환하는 url이 없기 때문에 google 로그인에 액세스 거부 에러 메세지가 발생한다.
아래처럼 추가해주자!

전에 구성했던 화면들과 기능들이 잘 동작되는 것을 확인한다!

[(내가 만든 환경) -> 로그 -> 로그 요청 -> 전체]
로그 파일 다운로드 후 var/log/web.stdout.log 를 확인하면 intellij에서 보던 화면들을 확인할 수 있다.
Jul 25 12:53:08 ip-172-31-12-250 web[6530]: . ____ _ __ _ _
Jul 25 12:53:08 ip-172-31-12-250 web[6530]: /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
Jul 25 12:53:08 ip-172-31-12-250 web[6530]: ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
Jul 25 12:53:08 ip-172-31-12-250 web[6530]: \\/ ___)| |_)| | | | | || (_| | ) ) ) )
Jul 25 12:53:08 ip-172-31-12-250 web[6530]: ' |____| .__|_| |_|_| |_\__, | / / / /
Jul 25 12:53:08 ip-172-31-12-250 web[6530]: =========|_|==============|___/=/_/_/_/
Jul 25 12:53:08 ip-172-31-12-250 web[6530]: :: Spring Boot :: (v3.2.0)
AWS의 일래스틱 빈스토크를 사용해 실제 서버에 배포하는 방법을 실습했습니다.
배포, 클라우드 서비스, AWS, EC2, RDS, 일래스틱 빈스토크