😅 Java Spring, JPA 프로젝트 배포 도전기 1
에 이어 계속해서 진행 중이다. 지난번 gradlew test
를 성공시키는 것 까지 진행했는데.. 오류는 끝이 없다 ㅎㅎ
./gradlew test
성공 이후 deploy.sh
를 작성하여 호기롭게 실행했지만... 역시나 오류를 접할 수 있었다.
Could not compile build file '~~~/build.gradle'
~~
dependencies {
메세지 상으론 build.gradle
에서의 문제인 듯 보였지만, application.yml
에서 datasource
에 대한 정보를 정확하게 적어주지 않아 발생한 문제였다. branch를 삭제하려고 하니 아래와 같은 에러메세지가 발생했다.
aws RDS에 대한 정보를 정확히 적어넣어 주었다.
위 application.yml
을 수정하고 git push, EC2 인스턴스에서 git pull 등을 진행했지만, 중간 다른 수정사항 때문에 tree형태가 꼬여있었다.
you need to resolve your current index first
https://euna501.tistory.com/entry/Github-error-needs-merge
git reset --merge
를 통해 해결할 수 있었다.
위 git 오류와 관련하여 rebase한 file을 받으니 권한이 사라져 있었다.
다시 chmod +x ./gadlew
로 권한을 주었다.
Execution failed for task ':processResources'.
> Entry application.yml is a duplicate but no duplicate handling strategy has ..
다음과 같은 에러 메세지였다. 해당 내용은 구글링을 해도 잘 나오지 않아 애를 먹었다. 결국 구글링보단 내 프로젝트의 코드를 좀 더살펴보자는 생각이 들었고, build.gradle
파일을 좀 더 살펴보았다.
살펴보던 중 해당 프로젝트에서 우리 팀원이 다른 branch에서 작업하는, 나의 branch에선 쓰이지 않는 내용을 발견했다.
혹시..? 하는 마음과 함께 삭제 후 빌드를 시도했는데 .. 빌드는 성공했다!
ps -ef|grep dnd-5th-4-backend
는 dnd-5th-4-backend
라는 이름을 가진 실행되고있는 프로세스를 찾는 명령어이다.
빌드는 성공했지만, 아래 캡쳐본 처럼 실행중인 jar파일을 찾을 수 없었다.
우선 첫번째로 발견한 문제점은 다음과 같았다. 빌드 후 생성된 파일을 살펴보니 이름 형태가 아래 캡쳐와 같은 형태였다.
team4backend
의 형태인데, 무언가 이상함을 느껴 내가 작성한 deploy.sh
를 다시 살펴보았다.
하단 JAR_NAME
을 설정하는 코드를 살펴보면 dnd-5th-4-backend
라고 설정한 것을 확인할 수 있었다. 우리 프로젝트는 archivesBaseName
을 따로team4backend
로 설정해놓았는데, 이를 무시하고 그냥 git 저장소 이름으로 설정한 것이었다.
CURRENT_PID=$(pgrep -f team4backend)
JAR_NAME=$(ls $REPOSITORY/ |grep 'team4backend' | tail -n 1)
이렇게 수정한 뒤 정확한 JAR의 이름을 찾는것을 확인할 수 있었다.
이렇게 오류가 반복되어 로컬, gradle로 aws RDS로 datasource를 설정하여 실행해 보았다. table이 생성되지않아 오류가 발생했는데,
https://deep-dive-dev.tistory.com/31
ddl-auto
를 none으로 유지해놓아 생긴 문제였다. create로 바꾸어 한번 실행해주니 table이 잘 생성되었다.
로컬, gradle로 정상적으로 실행되는 것이 확인되어 -> 로컬, jar 형태로 실행해보았다.
no main manifest attribute, in team4backend-0.0.1-SNAPSHOT-plain.jar
위와 같은 에러메세지와 함께 jar파일이 실행되지 않았다.
구글링 결과 다음의 stackoverflow 게시글을 발견할 수 있었다.
https://stackoverflow.com/questions/9689793/cant-execute-jar-file-no-main-manifest-attribute
META-INF/MANIFEST.MF
라는 파일을 jar로 만들어야 했는데, 다음과 같은 코드로 가능했다.
자신의 main method가 있는 클래스를 위와 같이 추가해주었다.
하지만 계속해서 다른 오류가 발생했다.
이와 같은 에러가 또다시 나타났는데, 이 역시 생각보다 구글링해도 찾기 어려웠다.
https://ashespia.tistory.com/44
그래도 해당 게시글이 자세히 설명된 것 같아 따라하며 나의 jar파일을 둘러보려는 중
~plain.jar
와 ~~.jar
의 용량 차이가 상당한 것을 발견했다. 이를 보고 설마...? 라는 느낌과 함께 plain이 아닌 파일을 실행해 보았다.
로컬에서 정상적으로 실행되었다.
나는 일반 jar파일과 plain.jar파일의 차이를 알지 못했고, ec2 인스턴스에서 계속해서 plain.jar 파일을 실행했음에도 나는 이상한 점을 알지 못했던 것이다. 멍청
이렇게 enabled = false
를 추가하여 plain.jar이 생성되지 않도록 했다.
이렇게 다양한 고난을 거쳐