부자 되기 위한 블로그, 머니킹

안녕하세요! 오늘도 열심히 프로젝트를 개발중입니다. 드디어 Spring으로 만든 이력서 제작 사이트가 어느저도 완성되었습니다. 처음에 배포 환경에 대해서 정말 많이 고민하였습니다. 서버같은 경우는 EC2를 사용하기로 결정하였지만 db의 경우 임시로 h2를 연결하여 사용하고 있다가 aws rds를 사용할지 mariadb를 서버에 설치하여 사용할지 고민하다가 mariadb를 사용하기로 마음 먹어놨죠.

 

db의 경우 미리 연동해놔서 이제 jar파일로 배포만 하면 되는상황입니다. 오늘은 spring boot 빌드 및 ec2 배포에 대해서 알아보겠습니다.

 

spring boot gradle

gradle 설정

jar {
   manifest {
      attributes 'Main-Class': 'com.jelly_develop.passprofile.PassprofileApplication\n'
   }
}

먼저 실행할 main class를 지정해주어야 합니다. 처음에는 Intellij에 있는 배포 기능을 이용하려다가 에러가 많이나서 gradle에서 직접 배포하는 것으로 변경하였습니다. 따라서 gradle에 위의 코드를 복붙해줍시다.

 

 

thymeleaf 경로 설정

<div th:replace="/main/public/navbar :: basic_navbar()"></div>
이거 안됩니다.

<div th:replace="main/public/navbar :: basic_navbar()"></div>
이렇게 변경해주세요 (첫번째 / 빼서, 이 부분은 Controller에 return 경로로 똑같습니다)

return "main/basic/index";
(컨트롤러의 경우 MVC 이용해 index 불러올떄 첫번째 슬래쉬 뺴주세요)

이 문제 때문에 고생이란 고생은 다 한 것 같습니다. war 파일의 경우는 상관 없다고 하지만 jar 파일로 배포하는 경우 Thymelea에서 정해진 경로 형식이 아니면 못 찾는 문제가 있습니다. 그런데 웃긴건 intellij 에서 로컬로 빌드할 때는 잘 동작하던 것이 jar 파일로 서버를 돌리면 안됩니다.

 

아마 이 문제를 많이 겪으실 것이라고 생각됩니다. thymeleaf를 사용하신다면 html이나 fragment를 찾는 모든 경로에서 첫번째 슬래쉬는 빼주세요.

 

 

gradle-build-bootjar

intellij에서 gradle 창을 열면 참조 패키지들을 볼 수 있는데요. 그 중에 [build] - [bootjar] 을 더블 클릭해줍니다. 그러면 자동으로 build 되면서 프로젝트 하위에 build 폴더가 생깁니다.

 

주의할 점이 있다면 local로 돌릴때도 build 폴더가 생기는데 이미 build 폴더가 있다면 안되기 때문에 삭제해주세요. 만약 intellij를 이용해 build 하기 위해서 MF 파일을 만들어둔 상태였다면 해당 Mf 파일도 제거해야 합니다 (manifest 파일입니다)

 

 

build-libs jar 파일 실행

[build] - [libs] 에 들어가면 jar 파일이 보입니다. 해당 파일로 쉽게 서버를 실행할 수 있습니다. 이제 aws 환경으로 가보죠

 

 

Filezlia 연결

AWS 보안 그룹 추가

기본적으로 접속하려는 포트는 aws에서 열어주어야 합니다. 기본적으로 jar 파일 실행시 8080을 사용하기 때문에 해당 보안 규칙을 추가해줍시다.

 

java 설치

sudo amazon-linux-extras install java-openjdk11

먼저 jar 파일을 실행하려면 Java가 설치되어 있어야 합니다. EC2에 접속하여 java를 설치해줍시다. 이 때 프로젝트 만든 java 버전과 꼭 맞춰주세요. 저 같은 경우 amazon linux 환경이여서 위와 같이 입력해주었습니다. 참고로 ec2는 ssh 터미널로 접속하였습니다. ssh를 통한 ec2 접속을 알고 싶다면 아래 포스팅을 봐주세요. 

 

https://to-moneyking.tistory.com/57

 

[aws] EC2 SSH 로 접속하는 방법, 간단히 알아보자

요즘 서버 및 데이터베이스를 사용하는데 있어 클라우드 서비스를 많이 활용하는데요. 그 중에서 단연코 유명한 클라우드 서비스라면 aws가 있습니다. 아마 전세계적으로 가장 많이 사용되는 클

to-moneyking.tistory.com

 

 

연결 (pem 파일 통해)

 

이 부분은 취향 차이이긴 한데 어떤 분은 git을 통해서 jar 파일을 옮기기도 합니다. 저 같은 경우는 일일이 명령어 쳐서 옮기기 귀찮기 때문에 Filezila를 사용하기로 마음 먹었습니다.

 

기본적으로 처음 aws instance를 만들면 이름은 "ec2-user"입니다. 포트를 비워두고 호스트는 인스턴스의 IP 주소를 입력해주시면 됩니다. 그리고 인스턴스를 만들 때 pem 파일을 받으셨을 것인데, 로그인 유형을 키 파일로 선택하고 해당 pem을 등록해주면 됩니다.

 

 

업로드

Filezlia에서 왼쪽은 보통 로컬 폴더이고 오른쪽이 접속한 원격 서버입니다. 파일을 두번 클릭하면 원격 서버에 접속된 폴더로 파일이 업로드 됩니다. jar 파일을 업로드 해주세요.

 

 

서버 실행

java -jar [Jar 파일 이름]

해당 명령어로 jar 파일을 실행시켜주시면 됩니다.

 

접속 확인

Ip주소 + 8080 포트 url을 입력하니 잘 접속된 모습을 볼 수 있습니다.