Spring Boot/Java/Gradle 프로젝트를 EC2 배포하고자한다.
이번 글에는 로컬에서 Jar 파일 생성 후 git bash에서 scp 명령어로 EC2 서버로 복사-실행방법을 알아보겠습니다.
- 배포하는 방법은 여러가지가 있습니다. (자세한 내용은 링크 참고)
- 로컬에서 Jar 파일 생성 후 git bash에서 scp 명령어로 EC2 서버로 복사-실행
- EC2 서버에서 repository를 Git clone을 하여 프로젝트 실행
- 배포 도구 사용
- Docker 사용
- 설정 관리 도구 활용
환경
Amazon Linux 2/Spring Boot3,Java17/Gradle/MySQL/Git Bash 입니다.
요약
1. 로컬에서 프로젝트를 jar 파일로 만든다.
2. EC2 인스턴스를 생성한다.
3. Git Bash를 사용하여 EC2 인스턴스에 접속한다.
4. EC2서버에 jar 파일 실행을 위해 EC2에 jdk17을 설치한다.
5. 로컬의 jar 파일을 scp 명령어를 사용해 EC2로 전송한다.
6. EC2에서 jar 실행한다.
이전 글에서 git bash 설치까지 하였고 이번 글에서는 EC2에 연결하는 단계부터 시작한다.
AWS EC2 인스턴스에 연결하는 방법은 4가지
(이번 글은 그 중 3번-SSH 클라이언트를 사용하는 방법을 적용)
1. EC2 인스턴스에 연결
2. Sesstion Manager
3. SSH 클라이언트
4. EC2 직렬 콘솔
git bash 열기(설치 방법은 작성된 블로그 참고)
해당 키 페어가 있는 경로로 이동
$ cd "경로"
예: $ cd "/c/Users/lijna/OneDrive/바탕 화면/"
(띄어쓰기가 있는 경우 쌍따옴표로 감싸주어야한다고 합니다.)
$ ls
명령어로 해당 키 페어가 있는지 확인합니다.
존재하면 해당 위치에서 키 페어에 400이라는 권한을 부여해야합니다.
EC2->인스턴스에 연결->SSH 클라이언트에 있는 명령어 입력하면 됩니다.
명령어
$ chmod 400 {키 페어 이름}.pem
예: $ chmod 400 "ward_server_key.pem"
인스턴스에 연결 - SSH 클라이언트 하단에 보이는 ssh 쉘 접속 명령어를 통해 EC2 서버에 접속합니다.
$ ssh -i {키페어 이름}.pem ec2-user@{퍼블릭 IPv4 DNS}"
예: $ ssh -i ward_Server_key.pem ec2-user@{퍼블릭 IPv4 DNS}
처음 접속할 경우 알림 발생 - (yes/no/fingerprint)? 나오면 yes 하면 접속 완료.
여기까지 진행하면 현재 bash 쉘은 내 컴퓨터가 아닌 EC2 서버에 연결되어있게됩니다.
jar 를 동작하기 위해 AWS 컴퓨터에 java를 설치해야합니다. 설치 확인을 위해 java - version
명령어 실행합니다. 없는걸 확인하면 java17 설치해야합니다.
Amazon Linux 2 에서는 sudo yum -y install openjdk-17-jdk
or sudo yum install java-17-amazon-corretto
명령어 실행하여 java17 다운로드11의 경우 17만 11로 변경해주면 된다고합니다.ubuntu나 다른 것은 명령어가 다른 듯 합니다.
Is this ok [y/d/N]: 명령어 나오면 y 입력
설치 중간에 Ctrl+C 사용하여 중단된 경우
이를 이어서 설치하려면yum load-transaction /tmp/yum_save_tx.2024-01-02.09-25.v98HWm.yumtx
이 명령어를,
다 삭제했다가 다시 설치하려면sudo yum clean all
이 명령어를 입력하고,sudo yum install java-17-amazon-corretto
를 다시 입력하여 재설치합니다.
$ java -version
명령어를 통해 설치 확인(버전 뜨면 성공)
$ chmod 400 {키페어}.pem
$ ls
명령어로 파일 존재 확인""
쌍따옴표로 감싸기$ scp -i .{키페어}.pem {보낼 파일 경로} ec2-user@{퍼블릭 IPv4 DNS}:받을 경로
예시: $ scp -i "/c/Users/lijna/OneDrive/바탕 화면/son/개발/Ward 프로젝트/ward_server_key.pem" ./ward_server-0.0.1-SNAPSHOT.jar ec2-user@{퍼블릭 IPv4 DNS}:~/
* {퍼블릭 IPv4 DNS} 부분은 AWS 인스턴스에 연결-SSH클라이언트 제일 하단 내용과 동일
* 예시의 scp 명령어는 jar 파일 경로에서 작성하였음.
$ ls
명령어$ sudo java -jar ward_server-0.0.1-SNAPSHOT.jar
$ sudo java -jar ward_server-0.0.1-SNAPSHOT.jar
이 명령어 실행하니 MySQL DB 가 없어서 오류 발생java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
http://{퍼블릭 IPv4 DNS}:8080/ 입력하여 동작시켜봅니다.
로컬에서 jar 파일을 만들고 scp 명령어로 EC2로 옮기는 방식에서는
1. 보안 정보가 들어 있는 application.yml 파일이 그대로 옮겨지는건 보안상 괜찮은가?
2. 나중에 CI/CD 하는데 문제 없는가?
3. 그럼 코드가 바뀔 때마다 jar 만들고 옮겨야되나?
참고 : velog - [AWS] EC2(Amazon Linux 2)에 MySQL 설치/연결하기