스프링 부트와 AWS로 혼자 구현하는 웹 서비스
책을 참고하여 EC2와 RDS를 구축하고 프로젝트 배포 경험을 쌓을 수 있었다. 그러한 과정에서 겪은 이슈들을 기록하려 한다.
1. EC2 자바 11 설치
- 내 프로젝트에서는 자바 11 버전을 사용한다. 하지만 책에서의 방법으로는 8버전 까지만 설치할 수 있다. 참고로 AMAZON LINUX 2 AMI이다.
sudo yum install java-11-amazon-corretto-headless
로 다음과 같이 java 11 버전을 설치할 수 있다.
- 참고자료 : https://lemontia.tistory.com/941
2. EC2 hostname 변경
- IP만으로는 어떤 서비스의 서버인지 확인이 어렵다 그래서 각 서버가 어느 서비스인지 표현하기 위해 HOSTNAME을 변경한다.
- 책에서의 방법대로 하면 다음처럼 HOSTNAME이 없다. 직접 추가를 해주어도 HOSTNAME이 변경되지 않았다.
- 대신 다음의 방법을 사용하였다.
sudo -s
명령어 입력
hostnamectl set-hostname {hostname명}
명령어 입력
hostname
과 cat /etc/hostname
을 입력하여 변경 확인
- 참고 자료 : https://minjii-ya.tistory.com/24
3. ./gradlew test 예외 발생
해당 블로그의 방법과 --no-daemon
을 붙여보는 시도가 모두 실패하였다. 예외 콘솔을 다시 한번 살펴보면서 daemon이 없다는 글을 보고 ./gradlew --status
를 입력해 보았다.
로컬 PC에서는 IDLE 상태의 데몬이 있는데 여기는 모두 stopped 상태이다. 없으면 생성하면 되지 않을까?
라는 생각으로 ./gradlew test --daemon
으로 입력하니 test가 잘 동작하였다! 곧바로 ./gradlew --status
입력해보니 다음처럼 바뀌어있었다.
4. 빌드 시 두개의 jar가 생성되는 현상
- 책에서와 달리 plain.jar가 출력되어 서칭해보았다. 알고보니 스프링부트 2.5 이후부터는 그냥 jar와 plain.jar가 두개가 생성이 된다더라.
- 의존성이 제거된 plain.jar가 불필요하였기 때문에
build.gradle
에 다음의 코드를 추가하였다.
jar {
enabled = false
}
5. no main manifest attribute 에러
- nohup 열어보니 실행되지 않고 계속 해당 문구가 발생하였다. 알고보니 JVM이 Main 메소드를 찾지 못해서 발생하는 에러였다.
- 그래서
build.gradle
에 다음의 코드를 추가해주었다.
jar {
enabled = false
manifest {
attributes(
'Main-Class': 'toyproject.pyeonsool.PyeonsoolApplication'
)
}
}
6. com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure 에러
- 나를 제외한 ec2, 팀원들 모두 동일한 에러가 발생하였다. 그래서 ec2의 문제라기 보다는 rds 인바운드 설정을 빠뜨린 것 같다는 생각을 하였다.
- ec2의 보안 그룹 id를 rds 인바운드 규칙에 추가하지 않아서 발생한 문제였다. 이를 끝으로 배포가 성공적으로 이루어졌다!!