[웹 개발 프로젝트] 7. 스프링 aws ec2 배포 (이제는 더 이상 물러날 곳이 없다..)

adorableco·2024년 1월 24일
0

#mood

원래 계획은 aws 프리티어도 얼마 안남았을텐데 그냥 프론트 쪽에서 스프링 application 런해서 사용하는걸루 하자.. 했는데
역시나 쉬운 일이 아니었다. 어쩌면 걍 배포 한번 딱 해놓는게 오랫동안 힘들진 않을 것 같다...! 그래서 그냥 배포를 하게 됐다

프론트엔드로 리액트 코드는 이미 ec2에 배포해본 경험이 있으므로 대충 비슷하겠지 하고 시작!

근데 바로 이슈가 발생했다. 리액트로 개발을 할 땐 보안 설정이 많이 없다보니 거의 다 깃허브에 바로 푸시를 했었고 gitignore 했던 node_modules 마저도 그냥 npm install하면 바로 생성되던 것들이었는데, 스프링은 일단 gitignore 해둔게 많았고 깃허브 클론해서 원 상태로 복구시킬 수도 (npm install 처럼) 없었다.

일단 검색해보니 scp를 이용해서 로컬 파일을 인스턴스 내로 전송하면 된다는데 그럼 스프링 프로젝트를 다 그렇게 전송해야 돼...? 하는 의구심에 일단 친구한테 물어보고 왔다.

다행히.. 역시나..! 그냥 파일 하나만 로컬에서 인스턴스 내로 전송하면 된다고 한다.

프로젝트의 상위 디렉토리에서 아래와 같이 빌드를 해주면

./gradlew build

/build/libs 내에 아래와 같이 jar 파일이 생성된다.


✅ **plain.jar 은 실행 불가능한 파일, 그냥 **.jar은 실행 가능한 파일이다. 즉, 인스턴스 내로 전송해야할 파일은 후자이다.

scp -i "/Users/**directory 이름**/Downloads/a-hi-frontend.pem" fit_friends-0.0.1-SNAPSHOT.jar ec2-user@1.12.123.1234:~/

scp -i "pem 파일 경로" {전송할 파일 이름} ec2-user@{public Ipv4 주소}:~/
  • 나는 전송할 파일이 있는 디렉토리 내에서 바로 진행하였다.
  • 이렇게 하면 이제 ec2 인스턴스 내에서 jar 파일을 실행할 수 있게 된다!

이제 ec2 인스턴스로 접속해서 디렉토리로 이동한다

cd /etc/nginx/sites-available/
sudo vim server.conf

➡️ server.conf 는 이전에 프론트 배포에 사용했던 것인데 나는 한 nginx에 포트를 두개로 나눠서 사용할거라 같은 파일에 설정 정보를 함께 담을 것이다.

  • 기존에 있던 프론트 서버는 80 포트 (기본) 을 사용하므로 지금 진행 중인 백엔드는 8081 포트를 listen 한다.
    ❓ 스프링 어플리케이션이 기본적으로 8080 포트를 사용해서 그런지 nginx에서 8080 포트를 사용하려고 하니 오류가 났다. 아무튼 8081 포트로 하니 정상 작동!

그리고 scp를 이용해 인스턴스로 파일을 전송한 그 디렉토리에서! jar 파일을 실행해준다

java -jar fit_friends-0.0.1-SNAPSHOT.jar

터미널을 종료해도 백그라운드에서 실행되도록 하려면 앞에 nohup 을 붙여준다.

nohup java -jar fit_friends-0.0.1-SNAPSHOT.jar

정상작동... 하는 줄 알았으나

한가지 문제가 구글 소셜 로그인에서 발생한다. ec2 인스턴스의 public Ipv4 주소를 그대로 리디렉션 URI 으로 사용할 수 없다는 것이다.

방법이 없는 것 같다.. 그냥 도메인을 연결하는 수 밖에..!
한창 모각코하고 있을 때 문제가 발견해서 빨리 해결할 방법을 찾았는데 Duck DNS 에서 무료로 DNS 도메인을 연결할 수 있다고 한다. 홈페이지에 들어가서 로그인 후 current ip 에 ec2 인스턴스의 public Ipv4 주소를, domain 에는 도메인 명을 입력해주면 http://fit-friends.duckdns.org:8081/api/login 이런 식으로 이용할 수 있게 된다.

해보니 정상 작동된다! 근데 사이트가 믿음직스럽게 생기지 않아서... 음..!



다음 할 일

  • 출석 체크 용 QR 코드 생성 및, 출석 체크는 오늘 구현이 끝났는데 배포와 분리하고 싶어서 내일 중으로 작성해야겠다.
  • 이제 본격적으로 회원 페이지에서 사용할 기능을 구현해야 한다.
    - 출석 체크 횟수를 기반으로 출석률, 결석률을 제공해야 하고
    • 승률 등도 제공해야한다.

내일도 화이팅 👍👏

profile
👩🏻‍💻

0개의 댓글