Spring Framework/SpringBoot

[SpringBoot] 로컬 Git -> AWS EC2까지 서버에서 jar를 실행해보자.

Razelo 2021. 9. 25. 17:07

3주 전부터 친구들과 작은 게임을 만들고 있었는데 회원가입 + 로그인 + 점수 + 랭킹을 제공하는 API를 만드는 일을 맡았다. springboot + jpa + mysql을 사용하여 만들고 있어서 내가 서버를 맡고 나머지 두명이 안드로이드와 IOS를 맡았다. 얼마 시간이 지나지 않았지만 워낙 내용이 간단한 게임이라 완성이 되었는데 AWS와 깃을 쓰면서 기억해주면 좋은 내용이 있어서 포스팅하게 되었다. 

 

우선 코드가 모두 다 작성된 상태에서 출발한다. 

 

우선 인텔리제이에서 springboot과 jpa를 사용하여 작성한 프로젝트가 있는 폴더를 깃에 업로드해주면 된다. 

 

git config --global user.name <username>

git config --global user.email <email>

 

을 해주고 해당 리포지토리에서 url을 복사해서 가지고 온다. 

 

git clone <해당 url>

 

을 진행하고 

 

git init

을 한다. 

 

그리고 

git add 파일 

 

을 진행하여 올리고 싶은 파일을 추가해주고 

 

git commit -m "commit message"

 

를 통해 커밋을 해준다. 커밋메시지도 적어주고 싶으면 적어준다. 

 

git push origin main

을 통해서 이제 실제로 리포지토리에 넣어주면 된다. 

 


추가적으로 commit 메시지를 잘못 날렸을때 사용했던 방법이 있다. 

git commit --amend

위 명령어를 치면 vim 처럼 편집기가 뜰텐데 거기서 i를 눌러서 INSERT모드로 전환하고 맨 위에서 메시지를 변경한다.

그리고 리눅스와 마찬가지로 :wq를 통해 저장하고 나와준다. 

 

git push --force origin 

을 작성해주면 마무리가 된다. 

 


위까지가 깃허브에 올리는 방법이었다. 

 

이제 aws에서 해당 리포를 다운받아 빌드하는 방법이다. 

우선 ssh를 통해서 ec2에 접근을 하게 된다. 

C드라이브의 사용자 폴더에 들어가면 본인 사용자명으로된 폴더가 있을 텐데 그 폴더로 들어간다.

그곳에 .ssh 라는 폴더를 만들어주고 이전에 aws에서 받았던 키페어인 .pen파일을 위치시켜준다.

그리고 config 파일이 필요한데

 

그 config 파일안에는 

Host

HostName

User

IdentityFile

이라는 목록을 만들어준다. (2,3,4번은 들여쓰기 해준다. )

 

1. 에는 본인이 만든 ec2이름을 적어주고 

2. 에는 ec2~~~~~ .com 이라는 긴 경로를 적어준다. 

3. 에는 시스템을 적어주면 되는데 우분투를 쓴다면 ubuntu라고 적어주면 된다. 

4. 에는 pem 즉 키페어의 경로를 적어주면 된다. ~/.ssh/kkk.pem 뭐 이런 식으로 적어주면 된다. 

그리고 나서 window terminal 에서 ssh <1에서 적어줬던 이름> 을 통해 접속을 하게 된다 .

아마 처음에는 ? 라고 물어볼 것이다. yes라고 답하고 접속을 진행한다. 

그러면 이제부터는 실제 리눅스에서 쓸때처럼 사용이 가능하고 그 다음부터는 git clone을 통해서 리포를 가져온 다음에 빌드를 진행하고 jar파일을 구동하면 된다. 

 

빌드를 할때 gradlew 를 사용할텐데 아마 실행권한이 없을것이다. 그래서 

chmod 777 gradlew 라고 쳐서 권한을 추면 된다. 

그리고 나서 ./gradlew build를 통해 빌드를 진행하면 build라는 폴더가 생성될 것이다. 

그 폴더를 들어가면 libs라는 폴더가 있을 것이고 그 안에 jar파일들이 있을 것이다. 

 

jar 파일을 실행시킬 때는 java -jar <jar파일명> 이라고 적어주면 된다. 

 

이렇게 하면 스프링부트애플리케이션이 잘 구동되는 것을 확인할 수 있다.

만약 터미널을 종료해도 해당 애플리케이션이 aws에서 계속 돌아가게 하고 싶다면 

sudo nohup java -jar <jar파일면> &

라고 실행시키면 된다. &의 의미는 백그라운드에서 계속 실행시키겠다는 소리다. 

 

나중에 다시 접속했을때 이 프로세스를 죽이거나 끄고 싶은 상황이 있을 것이다. 

아마 pe -rf였던 것으로 기억하는데 거기서 프로세스 pid를 알아낸 다음에 kill -9 <pid> 를 통해 죽이면 된다. 

(그나저나 저 9의 의미를 뭘까? 아무튼!)

 

아무튼 이렇게 하면 내 로컬 -> 깃허브 -> aws ec2 로 잘 진행됨을 확인할 수 있다. 


발생했던 문제들:

가끔 ec2를 잘만 사용하다가 말도 안되게 느려지는 경우가 있다. 그냥 느려지는게 아니라 터미널에서 키가 거의 먹히지 않는 수준으로 느려진다. 그래서 이와 알아보니 같은 문제를 겪는 사람들이 몇 있었다.

클라우드 서비스이기 때문에 실제 물리적으로 위치해있는 서버 내에서 인접한 자원에서 무거운 연산을 돌리거나 물리적 서버에 문제가 있거나(물론 후자일 경우는 극히 드물고 대부분이 전자일 것이다. ) 그럴 경우에 실제로 느려지는 경우가 생긴다고 한다. 그럴때는 ec2를 잠시 중지했다가 시작하는 것이 좋은 방법이라고 한다. 

 

이때 다시 시작하게 되면 아까 위에서 언급했던 ec2~~~.com 과 ip주소가 달라지게 되는데 

전자는 반드시 .ssh 폴더에서 다시 수정해서 넣어줘야 한다. 그리고 나서 ssh <ec2명> 으로 접근하면 다시 원활하게 작동한다. 

 

읽어보면 좋은 것: 

ec2를 처음 사용할때는 과금폭탄안맞는법이라고 검색해서 블로그 글들을 정독하는 것이 좋다. 재밌는? 재미없나? 아무튼 그런 썰들이 몇개 있다. 과금 폭탄을 맞았는데 학생이라고 사정했더니 반값만 냈다는 중의 글이다. 물론 가장 좋은 건 과금 폭탄 안맞게 프리티어내에서만 조심히 쓰는 것이 좋겠다. 그리고 나의 경우 내 이메일로 요금 제한을 넘어설 경우 알람이 오게끔 만들었다. 그래서 가꿈 결제 대시보드에서 확인하는 것도 좋고 한도를 정해서 알림이 오게끔 만드는 것도 좋겠다. 

 

API가 잘 구동하는지 확인하기 위해 테스트 코드를 작성했는데 이것 말고도 POSTMAN이라는 서비스를 이용하는 방법도 있다. 돈도 안내도 되고 가입하고 그냥 GET POST 요청을 잘 실행하는지 JSON통신으로 확인할 수 있어서 상당히 편리하다. 

 

아래는 랭킹 반환 json이다. 잘 반환해준다.

 

 

 

반응형