2024.08.17 - [DevOps/AWS] - [AWS] Amazon RDS 사용해보기
이전 포스팅까지 AWS에서 제공하는 다양한 서비스들을 활용하며 테스트 해봤다.
서버/백엔드 개발자로서 많이 사용하는 Spring 프로젝트를 이때까지 진행했던 클라우드 서비스에 올려보려고한다.
전체과정
- 테스트 스프링 프로젝트 준비(property / yml 파일 변경)
- Gradle로 패키징 -> jar 파일 생성
- EC2에 jar 파일 업로드
- EC2 서버 내부에서 스프링부트 실행(8080 포트)
- 보안그룹 인바운드 규칙에 8080 포트 추가
- MySQL 연결 확인
SpringBoot
로컬 설정파일
server:
port: 8080
spring:
datasource:
url: jdbc:h2:mem:admin;mode=mysql
username: admin
password: admin
driver-class-name: org.h2.Driver
h2:
console:
enabled: true # 웹 콘솔 사용 설정
path: /h2-console
settings:
web-allow-others: true
jpa:
# jpa 수행 쿼리 확인.
show-sql: true
hibernate:
ddl-auto: create-drop
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
defer-datasource-initialization: true
output:
ansi:
enabled: always
sql:
init:
platform: h2
data-locations: classpath:sql/admin.sql
mode: always
logging:
level:
org.hibernate.type: trace
EC2에 연결될 설정
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://test1-rds-mysql8.ctcbbrvzgs2x.ap-northeast-2.rds.amazonaws.com:3306/projectdb
username: developer
password: developer123!
jpa:
# jpa 수행 쿼리 확인.
show-sql: true
hibernate:
ddl-auto: create-drop
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
defer-datasource-initialization: true
output:
ansi:
enabled: always
sql:
init:
platform: h2
data-locations: classpath:sql/admin.sql
mode: always
logging:
level:
org.hibernate.type: trace
- RDS 엔드포인트 설정
> 활성 yml파일 설정
>> 연결 확인!
admin.sql
INSERT INTO SampleProject (id,projectName, description) VALUES (1,'project-1', 'project-1-DESCRIPTION');
INSERT INTO SampleProject (id,projectName, description) VALUES (2,'project-2', 'project-2-DESCRIPTION');
INSERT INTO SampleProject (id,projectName, description) VALUES (3,'project-3', 'project-3-DESCRIPTION');
> API 작동 확인
> h2 데이터베이스 확인
- 로컬, RDS 연결 모두 확인
gradle로 패키징 (jar 파일)
> build로 jar파일 생성
> jar 파일 확인
> jar 파일 실행
java -jar projectsample-0.0.1-SNAPSHOT.jar
EC2에 jar파일 업로드
- EC2 퍼블릭 IP 주소 필요
scp -i ~/desktop/Spring정리/AWS/developer.pem projectsample-0.0.1-SNAPSHOT.jar ec2-user@43.202.62.115:~/
- 원격 파일 복사 명령 : scp -i [.pem위치] [jar파일] [EC2사용자아이디@EC2 퍼블릭 IPv4주소]:~/[원하는 주소]
> EC2에 원격접속해서 복사된 파일 확인
ssh -i [.pem 파일] [EC2 사용자 아이디]@[EC2 퍼블릭 IPv4 주소]
EC2에 java 설치
- 루트 권한 부여
sudo su
- Java 설치할수 있는 목록 확인
yum list | grep java-11
- Java설치
yum install java-11-amazon-corretto.x86_64
> 중간에 "y" 로 설치 계속 진행
> 설치완료 확인
java -jar projectsample-0.0.1-SNAPSHOT.jar
> EC2 내부에서 jar 파일 실행
배포된 EC2의 퍼블릭 IPv4 주소로 접속
빙글빙글 로딩되는 것만 보이고 접속이 안됨..
왜 안되지???
-> 8080 PORT를 보안그룹의 인바운드 규칙에서 안열어줬기 때문!
- AWS -> EC2 -> 보안그룹 이동
- 인바운드 규칙 8080포트 추가
> 간단 서버 배포 성공!
근데 이렇게 배포된 스프링부트는 아까 두가지의 설정이있었는데, 디폴트 설정만 적용되어서 배포되지 않나..?
CLI 명령어를 통한 옵션 설정
java -jar -Dspring.profiles.active=prd [jar 파일]
> prd로 구동되는것을 확인
로그 확인
nohup java -jar -Dspring.profiles.active=prd [jar 파일] &
- nohup : 백그라운드로 jar 파일을 실행할수 있게하는 옵션
- & : 실행시킨 프로세스의 PID를 반환
> 백그라운드로 실행되고, 로그를 확인할수 있게됨
EC2 내부 MySQL 접속 확인
mysql -h [RDS 엔드포인트] -u [사용자아이디] -p
- -p : 패스워드로 접속한다는 옵션
> 잘 접속 되었음!
백그라운드 실행 프로세스 종료
ps -ef
- 실행 프로세스 확인
ps -ef | grep java
- java에 관련된 실행중인 프로세스 확인
kill -9 [PID]
- 프로세스 죽이기
간단하게 배포하는 방법을 살펴봤다!
'DevOps > AWS' 카테고리의 다른 글
[AWS] AWS 리소스 삭제하기! (0) | 2024.09.04 |
---|---|
[AWS] Route 53으로 도메인 서비스 구축하기 (0) | 2024.09.04 |
[AWS] Amazon RDS 사용해보기 (0) | 2024.08.17 |
[AWS] Amazon EC2 원격 로그인 (0) | 2024.08.16 |
[AWS] Amazon EC2 인스턴스 만들기 (3) | 2024.08.15 |