배포 방식
- .jar 를 AWS EC2에 배포
- java -jar app.jar → 바로 실행 가능 (EC2에서 아주 간단)
EC2 생성
- AWS 가입 및 로그인
- EC2 선택 후 인스턴스 시작
인스턴스 기본 정보 입력
- 인스턴스 이름 입력
- OS : Amazon Linux
보안 그룹 설정
- SSH와 HTTP 체크
유형 | 프로토콜 | 포트 | 소스 | 설명 |
SSH | TCP | 22 | 내 IP(권장) 또는 0.0.0.0/0 | EC2 접속용 (관리용) |
HTTP | TCP | 80 | 0.0.0.0/0 | React 프론트 접속용 |
(선택) HTTPS | TCP | 443 | 0.0.0.0/0 | 나중에 SSL 사용 시 |
Custom | TCP | 8080 | 0.0.0.0/0 | Spring Boot 직접 확인용 |
키 페어 생성
- Mac이나 리눅스 사용자는 .pem 선택
- 윈도우 사용자는 .ppk 선택 (최신 윈도우에서는 .pem이 가능하나, 일반적으로 PuTTY + .ppk 권장)
- 생성 시 파일이 자동으로 다운로드되고, 인스턴스 생성 시 키페어를 선택할 수 있다. (파일은 잃어버리지 않게 잘 보관해야 한다.)
EC2 초기 설정
PuTTY 접속
- IP : ec2-user@<EC2_PUBLIC_IP>
- Port : 22
- Connection Type : SSH
참고로 EC2_PUBLIC_IP는 아래 사진 위치에 있다.
PuTTY 연결
- 왼쪽 메뉴 → Connection → SSH → Auth
- Private key file for authentication → key.ppk 선택
정상 연결 확인
- open 클릭 시 나타나는 화면
DB 연결
MySQL DB 덤프 추출
- 로컬 cmd에서 실행
- 현재 경로에서 .sql 파일이 생성된다.
mysqldump -u root -p <DB명> > dump.sql
# mysqldump -u root -p reactboard > reactboard_dump.sql
.ppk → .pem 전환
- PuTTYgen 실행
- Load → key.ppk 선택
- 상단 메뉴 Conversions → Export OpenSSH key → key.pem 저장
- (git bash에서는 .pem만 가능하기 때문에 변환)
덤프파일을 EC2로 전송
- 전송하려면 ssh에 EC2가 연결되어 있는 상태여야 한다.
- git bash에서 실행
scp -i /path/to/key.pem dump.sql ec2-user@<EC2-PUBLIC-IP>:/home/ec2-user/
AWS RDS 생성
- Aurora and RDS → 데이터베이스 생성 → MySQL 선택
- 이름, 암호 설정
- 초기 DB 이름 입력 (reactboard)
- 데이터베이스 생성 클릭 → 약 5~10분 정도 소요
EC2 보안 그룹 설정
- EC2 콘솔 → 해당 인스턴스 선택 → 보안 그룹
- 인바운드 규칙 편집:
- 유형 : MySQL/Aurora
- 포트 3306
- 소스: 내 IP (또는 테스트용 0.0.0.0/0, 단 외부 공개 시 위험)
RDS 보안 그룹 설정
- RDS 콘솔 → 해당 인스턴스 선택 → 보안 그룹
- 인바운드 규칙 편집:
- 유형 : MySQL/Aurora
- 포트 3306
- 소스: EC2 인스턴스가 속한 보안 그룹 선택
PuTTY에서 EC2로 RDS 접속
mysql -h <RDS-ENDPOINT> -u <DB_USER> -p
- <RDS-ENDPOINT> : RDS 콘솔 → 데이터베이스 → 엔드포인트 복사
- <DB_USER> : RDS 생성 시 설정한 마스터 사용자
덤프 씌우기
mysql -h <RDS-ENDPOINT> -u <DB_USER> -p <DB_NAME> < exam_dump.sql
- 확인 결과 정상 이관됨을 볼 수 있다.
MySQL Workbench 연결
- Hostname : RDS 엔드포인트
- Username : root, admin 등의 마스터 사용자
- Password : Store in Vault 클릭하여 입력
- 만약, PuTTY에서는 DB 접속 되지만 workbench 등 DB 툴에서 접속 안 된다면 보안그룹이나, 라우팅이 잘못된 것
라우팅 세팅은 아래 글 참고
AWS RDS가 PuTTY에선 연결되지만 workbench 연결 안 되는 오류
AWS RDS DB로 MySQL을 생성한 뒤PuTTY에선 접속되지만 클라우드 콘솔이나 MySQL Workbench에서 접속되지 않는 오류 오류 원인DB RDS의 보안 그룹 설정은 됐으나, 서브넷 연결 오류VPC > 라우팅 테이블 > RDS에
oeuni.tistory.com
Spring Boot [application.properties] 수정
- url 부분 : localhost:3306 → <RDS-ENDPOINT>:3306
- username, password 수정
배포
리액트쪽 요청 url 수정
기존 url
const res = await axios.post("http://localhost:8080/join", {
수정 후 url
const res = await axios.post("http://<EC2_PUBLIC_IP>:8080/join", {
로컬에서 빌드하여 .jar 생성
# 그래들 빌드
PS C:\ReactProject\exam> .\gradlew build
# jar가 있는 폴더로 이동
PS C:\ReactProject\exam> cd .\build\libs
# jar 확인
PS C:\ReactProject\exam\build\libs> ls
서버 업데이트 & Git/Docker 설치
- 이후 PuTTY에 아래 명령어 입력하여 설치
# 서버 업데이트
sudo dnf update -y
# Docker, Git 설치(선택사항)
sudo dnf install -y docker git
.jar를 EC2로 전송
- git bash에서 명령어 실행
# 워크스페이스로 이동
cd /c/ReactProject
# .jar를 EC2로 전송
scp -i /c/key.pem <.jar Path> ec2-user@<EC2_PUBLIC_IP>:/home/ec2-user/
.jar 실행
- PuTTY에서 명령어 실행
# java 설치
sudo yum install java-17-amazon-corretto -y
cd /home/ec2-user/
# .jar 실행
java -jar exam-0.0.1-SNAPSHOT.jar
- 또는 백그라운드 실행(서버 종료 시에도 지속)
nohup java -jar exam-0.0.1-SNAPSHOT.jar > log.txt 2>&1 &
브라우저 접속 확인
http://<EC2_PUBLIC_IP>:8080
정상 배포됨을 확인!