1. AWS
- 다른 PC에서도 서비스에 접속하려면 실제 서버에 스프링 부트 서버를 올려 실행해야 한다. 이런 행위를 실무에서는 배포라고 한다.
- 배포는 서버용 PC를 구매해서 배포하는 방법과 AWS와 같은 클라우드 컴퓨팅 서비스를 이용해 배포하는 방법이 있다.
- AWS는 컴퓨팅 서비스, 네트워크 서비스, 데이터베이스 서비스, 스토리지 서비스 등 다양한 서비스를 제공한다.
- 서비스를 AWS에 배포하려면 AWS 상에서 서버를 구성해야 한다. 쉽게 말해 AWS 상의 가상 PC를 마련해야 한다.
EC2
- AWS에서 제공하는 클라우드 컴퓨팅 서비스로 가상의 PC 즉, 서버 한 대를 임대하는 서비스
오토 스케일링 그룹
- 유동적으로 EC2를 관리
- 사용자의 요청 횟수에 따라 EC2를 늘이거나 줄인다.
로드 밸런서
- 요청들을 분산시키는 역할
- 로드 밸런서를 만들 때는 요청을 어디로 분산시킬지 그룹을 정해야 하는데, 이러한 그룹을 대상 그룹(Target Group, TG)라고 한다.
RDS
- 범용 데이터베이스인 아마존 관계형 데이터베이스(amazon relational database service)
- 데이터베이스도 클라우드에 올려야 한다.
- AWS에서 제공하는 클라우드 데이터 서비스는 RDS, Redshift, DocumentdB, ElastiCache 등이 있다.
1) 일래스틱 빈스토크
- 개발자가 애플리케이션을 쉽게 배포하고 확장할 수 있도록 해주는 Pass(Platform as a Service)이다.
- 개발자가 애플리케이션 코드를 업로드하면, Elestic Beanstalk는 배포, 프로비저닝, 로드 밸런싱, 확장, 모니터링 등을 자동으로 처리해준다.
일래스틱 빈스토크를 사용하는 과정
- 애플리케이션 생성
- 애플리케이션의 소스를 번들 형태, 예를 들어 Java .war 파일로 애플리케이션 버전을 일래스톡 빈스토크에 업로드한다.
- 그 뒤에는 일래스틱 빈스토크가 자동으로 환경을 실행하고 코드 실행에 필요한 AWS 리소스를 생성하고 구성한다.
- 환경 실행 후에는 환경을 직접 관리하고 필요한 경우 버전 업데이트를 하거나 새로운 앱 버전을 배포할 수 있다.
2. 일래스틱 빈스토크로 서버 구축하기
1) 일래스틱 빈스토크 서비스 생성하기
- 우리가 만들 서버의 제공 위치 서울로 지정
- 검색 창에서 IAM을 검색해서 들어간다.
- IAM은 AWS 리소스에 접근하는 권한을 관리하는 서비스
- 일래스틱 빈즈토크 서비스에 부여할 역할을 IAM에서 만들어야 한다.
- IAM 화면으로 이동한 다음에는 [역할 -> 역할 생성]을 누른다.
- '신뢰할 수 있는 엔티티 유형' 항목은 [AWS 서비스]를 선택하고 '사용 사례' 항목은 [EC2]를 선택
- '2단계 권한 추가' 화면에서 다음 3개의 권한을 검색하여 체크하고 [다음] 클릭
- AWSElasticBeanstalkMulticontainerDocker
- AWSElasticBeanstalkWebTier
- AWSElasticBeanstalkWorkerTier
- 역할 이름은 [aws-elasticbeanstalk-ec2-role]로 적고, 신뢰할 수 있는 엔티티와 권한이 잘추가되었는지 확인한 후에 [역할 생성] 버튼을 눌러 역할을 생성
- 검색 창에 Elastic Beanstalk를 입력하여 서비스에 들어간다.
- [환경-> 환경생성] 을 누른 다음 '환경 구성' 화면이 나타나면 아래 목록을 참고하여 메뉴를 선택하거나 입력
- 애플리케이션 이름: springboot-developer
- 플랫폼 : Java(Corretto 17)
- 서비스 액세스 구성에서 아래와 같이 선택. 그 이후에는 검토 단계로 건너뛰기 후 검토 화면에서 [제출]을 선택하여 마무리
- 서비스 역할 : 새 서비스 역할 생성 및 사용 > [aws-elasticbeanstalk-service-role] 기본 값 그대로 두기
- EC2 인스턴스 프로파일 : [aws-elasticbeanstalk-ec2-role] 선택
- [환경]을 눌러 일래스틱 빈즈토크 환경 목록을 본다. 환경 목록에 방금 생성한 환경의 상태가 OK로 보이는지 확인하고, URL을 클릭해 해당 URL에 잘 접속되는지 확인
2) 일래스틱 빈스토크에서 RDS 생성하기
- 아마존 RDB 서비스를 사용하여 클라우드에 올릴 데이터베이스 생성
- 일래스틱 빈스토크 [환경-> <내가 만든 환경>]을 눌러 들어간 다음 [구성]을 눌러 환경 설정 메뉴에 들어갇나.
그 다음 스크롤바를 내려 네트워킹 및 데이터베이스 메뉴에서 [편집]을 눌러 데이터베이스 설정을 추가
- 데이터베이스 활성화 토글을 클릭한 다음 사용할 데이터베이스 엔진으로는 [mysql]을 선택하고 용량은 프리티어를 지원하는 [db.t3.micro]를 선택한다. 사용자 이름과 암호를 채운 다음 [적용] 버튼을 눌러 데이터베이스 생성
- 데이터베이스가 얼마나 생성되었는지 상태를 확인하기 위해 검색 창에 RDS를 검색하여 들어간 다음 [데이터베이스-> <DB 식별자>]를 눌러 상태를 확인한다. DB 식별자를 누르면 생성된 데이터베이스의 정보를 확인할 수 있다. 특히 앤드포인트 정보는 RDS로 연결할 때 사용한다.
- 데이터베이스가 생성되었으니 애플리케이션도 생성한 데이터베이스를 사용하게 변경
- AWS 일래스틱 빈스토크에서 만들었던 환경으로 이동한 다음 [구성]을 누르고 업데이트 및 로깅에서 [편집]을 선택해 데이터베이스의 정보를 입력한 다음 [적용] 버튼을 눌러 마무리한다. 그러면 일래스틱 빈스토크가 환경을 업데이트한다.
SPRING_DATASOURCE_URL | jdbc:mysql://엔드포인트 입력/blog |
SPRING_DATASOURCE_USERNAME | 사용자 이름 |
SPRING_DATASOURCE_PASSWORD | 비밀번호 |
- 이렇게 설정한 환경 속성 값은 애플리케이션 실행 시 스프링 부트의 환경 변수, 즉, properties.yml 파일의 설정값의 역할을 한다. application.yml에서 spring 항목의 datasource 항목들만 지운다.
3) 로컬에서 RDS 연결하기
- 지금까지 로컬에서 사용하던 H2 대신에 AWS의 RDS를 사용
- 로컬에서만 동작하는 H2와 달리 RDS는 클라우드 위에 띄어져 있기 떄문에 로컬에서 접속하려면 몇 가지 설정을 해주어야 한다.
- RDS 메뉴로 이동한 다음 [데이터베이스]로 이동하여 생성한 데이터베이스의 DB 식별자를 누르고 VPC 보안 그룹 링크를 클릭
- security group ID를 누르고 보이는 화면에서 인바운드 규칙 탭을 눌러 이동한 뒤 [인바운드 규칙 편집] 버튼을 클릭한다. 인바운드 편집 메뉴에서는 데이터베이스 인스턴스의 트래픽을 관리할 수 있다.
- [규칙 추가]를 눌러 값을 추가한다. 유형은 [MYSQL/Auroral], 소스는 [내 IP]를 선택하고 [저장]을 누른다.
그러면 로컬에서 일래스틱 빈스토크 데이터베이스에 접근할 수 있다.
- 로컬에서 일래스틱 빈스토크 데이터베이스에 연결할 수 있는지 확인
- 인텔리제이 커뮤니티의 database navigator 플러그인을 설치해 데이터베이스르 ㄹ연결한다.
- 설치 후에는 인텔리제이를 재시작해야 한다.
- 인텔리제이를 켜고 왼쪽 도구 메뉴에서 [DB Browser]를 선택한다. 만약 보이지 않는다면 맨 위의 메뉴바에서 [View->Tool Windows->DB Browser]를 선택한다. 그 뒤에는 [+] 버튼을 누른 뒤 [Data Source->MySQL]을 선택한다.
- 데이터베이스 정보 창에 RDS의 정보인 Host, Port, User, Password를 입력한다.
- Host는 RDS 구성에서 보았던 엔드포인트이다.
- Port는 자동으로 입력된 값인 3306이 맞는지 확인한다.
- 데이터베이스 역시 자동으로 입력된 값인 mysql이 맞는지 확인한다.
- 입력을 마치면 [TestConnection] 버튼을 눌러 데이터베이스 연결이 잘되는지 테스트
- IDEA 화면의 [DB Browser] 탭에 연결항목이 나타날 것이다.
- Connection에 마우스 우클릭을 하고 [Open SQL Console] 버튼을 눌러 콘솔을 연다.
- 여기에 데이터베이스와 테이블을 생성하는 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,
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;를 입력하여 테이블 3개가 모두 생성되었는지 확인
- 이제 아마존 서버에서 MySQL을 사용하므로 프로젝트를 빌드해 배포하기 전에 의존성을 추가
- build.gradle 파일을 열어 의존성을 추가하고 새로고침을 눌러 의존성 추가
...
implementation 'com.mysql:mysql-connector-j'
3. 일래스틱 빈스토크에 서비스 배포하기
1) 애플리케이션 배포하기
- 인텔리제이를 실행해서 [Gradle] 탭을 누른 다음 [Tasks->build->build]를 더블 클릭해 빌드를 진행
- 빌드가 끝나면 [build->libs]에 빌드 완성 파일이 생성된다. jar 파일은 -<버전>으로 끝나는 것과 -<버전>-plain으로 끝나는 것 두 가지 이다. 이 중 -<버전>으로 끝나는 것을 기억하기 쉬운 위치에 복사해둔다.
- 일래스틱 빈스토크로 돌아가 생성된 환경의 이름을 선택하고 [업로드 및 배포]를 누른 다음 [파일 선택] 버튼을 눌러 jar 파일을 선택
- 일래스틱 빈스토크의 [구성] -> 업데이트, 모니터링 및 로깅의 [편집]을 선택
- 여기서는 애플리케이션을 실행하기 위한 하위 포트 값과 공개 사이트에 올리면 안되는 민감한 정보를 추가
- 일래스틱 빈스토크에서 제공하는 서버의 URL에 접속하여 /login 패스를 붙여 로그인 화면에 제대로 접속되는지 확인
2) OAuth 서비스에 승인된 URl 추가하기
- 구글 클라우드 콘솔에 접속한 후 [API 및 서비스 -> 사용자 인증 정보 -> OAuth 2.0 클라이언트 ID]에 추가되어 있는 클라이언트 ID를 클릭한다.
- [OAuth 클라이언트 수정 -> 승인된 리디렉션 URI] 에 일래스틱 빈스토크에서 띄어준 서버의 URL을 추가한다.
ex) 승인된 리디렉션 입력 예
http://...생략...//login/oauth2/code/google
'SpringBoot' 카테고리의 다른 글
[스프링 부트 3 백엔드 개발자 되기] ch 12 CI/CD 도입하기 (0) | 2024.07.26 |
---|---|
[스프링 부트 3 백엔드 개발자 되기] ch 10. OAuth2로 로그인/로그아웃 구현하기 (0) | 2024.07.25 |
[스프링 부트 3 백엔드 개발자 되기] ch 9. JWT로 로그인/로그아웃 구현하기 (1) | 2024.07.24 |
[스프링 부트 3 백엔드 개발자 되기] ch 8. 스프링 시큐리티로 로그인/로그아웃, 회원가입 구현하기 (28) | 2024.07.19 |
[스프링 부트 3 백엔드 개발자 되기] ch 7. 블로그 화면 구성하기 (0) | 2024.07.17 |