스프링 부트를 사용한 예제 애플리케이션을 AWS를 통해 모노리식에서 MSA로 MSA에서 다시 컨테이너 오케스트레이션으로 개선해나가는 과정을 모두 담은 강의를 출시하게 되었습니다.
강의 과정에서 15개 이상의 서비스를 사용하게 됩니다.
그래서 클라우드 개발자가 아닌 개발자, 학생 분들도 AWS의 폭넓은 지식을 쉽고 빠르게 습득할 수 있는 기회가 될 수 있다고 생각합니다!
배너를 누르면 강의로 이동됩니다.
블로그를 통해 구매하시는 분들에게만 10%할인 쿠폰을 증정중입니다.
꼭 아래 쿠폰번호를 입력해 주세요!
16861-259843d6c2d7
시작전 참고 사항
- 기본적으로 spring 프로젝트의 개발 및 테스트가 끝났다고 가정하고 진행함
- docker, nginx 등 부가 프로그램은 사용하지 않음
- ssl 인증서 적용하지 않음
위 생략된 내용들은 해당 블로그 다른 글들에 작성되어있음
진행 순서
- EC2 인스턴스 생성
- RDS 인스턴스 생성
- EC2, RDS 보안 설정
- EC2에 ssh 접속하여 Java,postgres 설치
- EC2에서 RDS 접속하여 DB 생성
- Spring Boot DB연결 설정 및 빌드 및 Jar파일 생성
- EC2에 scp 명령어로 Jar파일 전송 및 실행
- postman으로 접속 확인
EC2 인스턴스 생성 (같은 내용의 작성된 글로 대체함)
https://kanoos-stu.tistory.com/29
(선택) https://kanoos-stu.tistory.com/52
RDS 인스턴스 생성
Spring boot에서 연결할 DB 생성
* rds의 프리티어는 마리아DB, Mysql 에서만 사용가능함
데이터베이스 생성 화면에서 중요한 입력 내용
- DB 인스턴스 식별자 - 고유한 인스턴스 이름
- 마스터 사용자 이름 - DB접근 시 사용되는 마스터 유저 이름
- 마스터 암호 - DB접근 시 사용되는 마스터 유저 암호
- 스토리지 유형
- 범용 SSD - 스토리지 크기에 따라 IOPS(초당 입출력 성능)이 정해진다. 가성비가 좋으므로 많이 사용
- 프러비저닝된 IOPS SSD - IOPS와 SSD를 각각 할당할 수 있다. 최소 3000IOPS 이며 성능은 좋지만 가격이 비싸다.
- 마그네틱 - 권장되지 않음.
- 할당된 스토리지 - DB에 할당될 용량, 1GiB당 3IOPS가 제공되며 최대 3000IOPS까지 할당가능. (용량이 클 수록 성능이 좋아짐)
- 스토리지 자동 조정 활성화 - 체크 시 할당된 스토리지 용량이 가득 찰 경우 최대 스토리지 임계값까지 오토스케일링된다.
- 다중 AZ 배포 - 복제본 인스턴스를 생성해 주 인스턴스가 장애가 발생하면 자동으로 복제본을 통해 장애 조치, 비용이 약 2배가 된다.
- 퍼블릭 액세스 - '예' 선택 시 VPC 외부에서도 해당 RDS에 접근이 가능, 같은 VPC의 EC2에서만 접근할 경우 '아니오' 선택
EC2 보안 설정
클라이언트에서 REST API 요청을 보낼 EC2 포트 개방 설정 진행
보안 그룹 클릭
인바운드 규칙 편집 클릭
우측 하단의 규칙 추가
- 포트 범위 - 규칙을 설정할 포트 번호, Spring Boot의 서버 포트 번호 입력
- 소스 - 접근을 허용할 ip입력, Anywhere-IPv4 선택 시 모든 ip 접근 허용
RDS 보안 설정
EC2에서 postgres에 연결할 RDS의 5432 포트 개방 설정 진행
생성된 DB 인스턴스 화면에서 VPC보안 그룹 클릭
인바운드 규칙 편집 클릭
- 유형 - 자신이 생성한 DB의 기본 포트 또는 사용자 지정 TCP 선택하여 포트 범위 직접 입력
- 소스 - 사용자 지정 후 EC2의 보안 그룹 지정
EC2에 ssh 접속하여 Java,postgres 설치
Spring Boot Jar 파일을 실행시키기 위해 Java, Spring Boot에서 DB 연결을 위해 postgres 설치 진행
ec2에 ssh 접속
$ ssh -i [pem파일경로] [ec2-user계정명]@[ec2 instance의 public IP 또는 public DNS]
자바 설치
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install openjdk-11-jdk
자바 설치 확인
# 자바 설치 확인
$ java -version
openjdk 11.0.14 2022-01-18
OpenJDK Runtime Environment (build 11.0.14+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.14+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)
# 자바 컴파일러 설치 확인
$ javac -version
javac 11.0.14
postgres 설치
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql
https://www.postgresql.org/download/linux/ubuntu/
postgres 설치 확인
$ psql --version
psql (PostgreSQL) 14.2 (Ubuntu 14.2-1.pgdg20.04+1)
EC2에서 RDS 접속하여 DB 생성
EC2에서 RDS접속하여Spring boot에서 연결할 DB 생성
$ sudo -i -u postgres
EC2 에서 postgres 계정으로 변경
postgres$ psql \
--host=<DB instance endpoint> \
--port=<port> \
--username=<master username> \
--password
postgres 계정에서 RDS Postgres 접속
postgres=> create database <database name>;
Spring Boot DB연결 설정 및 빌드 및 Jar파일 생성
Spring Boot에서 연결할 DB 엔드포인트 및 유저 정보, 비밀번호 설정 및 배포할 Jar파일 생성 진행
#application.yml
spring:
datasource:
url: jdbc:postgresql://<RDS Endpoint>/<database name>
username: <master user name>
password: <master user password>
driver-class-name: org.postgresql.Driver
배포할 Spring 프로젝트 appllication.yml 파일에 연결할 DB 정보 입력
# 해당 spring 프로젝트 폴더
$ ./gradlew clean build --exclude-task test
빌드 및 Jar파일 생성
/build/libs 폴더에 jar 파일 생성 확인
EC2에 scp 명령어로 Jar파일 전송 및 실행
$ scp -i [pem파일경로] [jar 파일 경로] ubuntu@[ec2 instance의 public DNS]:~/[파일 받을 EC2 경로]
로컬에서 해당 명령어로 EC2에 jar파일 전송
jar파일이 잘 전송되었는지 확인
$ java -jar <jar파일.jar>
서버 구동
postman으로 연결 상태 확인
요청은 EC2의 Public IP 주로와 SpringBoot에 기존에 작성한 /health_check GET 요청을 보냈고
정상적으로 응답 코드 200과 문자열이 잘 도착하였다.
'Spring' 카테고리의 다른 글
[SpringDoc] Spring에서 Swagger 문서 작성 (with springdoc-openapi) (0) | 2022.04.01 |
---|---|
[Spring Cloud] Resilience4j 를 이용한 circuitbreaker 기능 구현 (0) | 2022.03.17 |
[Spring Boot] Websocket 통신 시 JWT 인증 (interceptor 적용) (0) | 2022.02.17 |
[Spring Boot] 소켓 통신을 위한 Websocket 서버 구성 (0) | 2022.02.16 |
[Spring Boot] log4j2 보안 문제 해결 방안 - CVE-2021-44228 (0) | 2021.12.13 |