티스토리 뷰

배포

EC2에 배포하기

도라지보다더덕 2020. 9. 1. 17:57

 

 

 

AWS EC2와 RDS 서버 생성과 기본 설정을 마치고 실제 서버에 저의 프로젝트를 배포하겠습니다.

 

전체적인 순서는 이렇습니다. 

 

1. Github에서 AWS 서버로 코드를 가지고 옵니다.

2. gradle을 이용하여 build하고 jar 파일을 생성합니다.

3. jar파일을 실행합니다.

 

 

처음 서버를 실행했을 경우 Git이 설치되어있지않습니다. 따라서 git을 설치하고 github에 올라간 코드의 master branch를 clone하여 가지고 옵니다.  clone한 프로젝트 디렉토리에 들어가 

 

./gradlew test를 실행하여 코드가 제대로 수행하는 지 확인합니다.

(현재 EC2 서버에는 gradle이 설치되어있지 않지만 ./gradlew 가 실행됩니다. 이것이 가능한 이유는 프로젝트에 포함된 gradlew라는 파일 때문입니다. gradlew는 그레들이 설치되어있지 않는 환경, 버전이 다른 환경에서 해당 프로젝트에 한해서 gradle 명령어가 실행되도록 해주는 wrapper 파일입니다.)

 

그 이후 위 과정을 수행하는 스크립트를 실행하면됩니다.

 

하지만 실제로 매번 배포 시 마다 스크립트를 일일이 작성하기가 어렵습니다. 따라서 쉘 스크립트를 작성하여 실행하도록 하겠습니다.

 

 

우선 스크립트를 작성할 deploy.sh 파일을 생성합니다. 확장자 .sh는 쉘 스크립트를 의미합니다.

 

deploy.sh

 

1.REPOSITORY, PROJECT_NAME 은 변수입니다. 쉘에서는 타입없이 변수를 선언합니다. 그리고 사용할 때 ($변수명)을 이용해 사용합니다.

 

2. cd: change directory, 현재 디렉토리를 변경해주는 명령어입니다.

 

3. echo: 터미널에 argument를 출력해줍니다.

 

4. ./gradlew build: 프로젝트를 빌드하여 실행파일로 만들어줍니다.

 

5. CURRENT_PID=$(pgrep -f ${PROJECT_NAME}*.jar) : pgrep은 프로세스의 id만 가져와줍니다. -f 옵션은 프로세스 이름으로 프로세스를 찾습니다.

 

6. if-else: 프로세스가 구동 중일 경우 process kill을 해줍니다.

 

7. JAR_NAME=$(ls -tr $REPOSITORY/ | grep *.jar | tail -n 1) : REPOSITORY 디렉토리에 존재하는 파일들을 시간 순으로 나열해줍니다. 실행 결과를 |(pipe)를 통해 전달해주고 grep 명령어를 통해 확장자가 .jar인 파일만 가지고 옵니다. 이 실행결과의 마지막 줄에 있는 파일을 JAR_NAME 변수에 저장합니다 (마지막으로 빌드된 파일을 얻기 위해)

 

8. nohup : nohup은 no hangups의 줄임말인 명령어입니다. 해당 명령어는 프로세스를 데몬 형태로 실행시켜줍니다. 즉, 터미널이 끊겨도 실행되도록 하는 명령어입니다.

 

9. java -jar를 통해 실행 파이를 실행시켜줍니다.

 

10. 2>&1 은 에러를 출력하는 명령어입니다. (0 입력, 1 출력, 2 에러) 마지막에 붙어있는 &의미는 백그라운드로 실행시키라는 의미입니다.

 

deploy.sh 를 생성했으면 해당 파일에 실행권한을 줍니다. 

 

 

실행권한을 준 뒤 실행시키면 다음과 같이 실행됩니다. 

 

실행이 제대로 수행되었는지 보려면 nohup.out 파일을 보면 됩니다. (nohup.out 파일은 애플리케이션의 모든 출력을 가지고 있습니다.)

 

cat nohup.out

애플리케이션이 제대로 수행되었습니다!

 

 

 

다음은 데이터베이스를 설정해주어야합니다. 기존의 프로젝트는 인메모리형 h2 디비를 사용하고 있었습니다. 하지만 RDS 서버를 이용해 MariaDB를 사용하도록 변경해주어야 실제 배포 시 데이터베이스를 관리할 수 있습니다.

 

MariaDB를 사용하기 위해 해야할 기본적인 설정은 아래와 같습니다.

  • 테이블 생성
  • 프로젝트 설정
  • EC2 설정 

 

1. 테이블 설정

테이블 생성같은 경우는 h2 디비를 사용할 경우 자동으로 생성해주고 드랍해주었지만 MariaDB에서는 실제 배포되는 디비기 때문에 직접 쿼리를 사용해 테이블을 생성해주어야합니다. 

 

resource에 application.properties에서

 

spring.jpa.properties.show_sql=true 

spring.jpa.properties.hibernate.format_sql=true

 

로 설정해주세요. sql문을 mysql 포맷으로 보여주는 설정입니다. 그 후 프로젝트를 실행할 경우 나오는 쿼리를 이용해 RDS 서버에 테이블을 생성해주세요. 

 

2. 프로젝트 설정

프로젝트 설정같은 경우는 MariaDB 드라이버와 디비에 접근하기위한 datasource를 설정하기 위해 꼭 필요합니다. 우선 gradle에서 MariaDB 드라이버를 가져와주세요.

 

resource 디렉토리에 application-real.properties를 생성한 뒤 아래와 같이 설정해주세요. (application.properties 파일의 -XX를 형태의 이름을 사용할 경우 profile=XX인 환경에서 실행되는 설정파일이라는 뜻입니다. )

위 설정을 마쳤으면 github로 push 해주세요.

 

 

3. EC2 설정

마지막으로 EC2 설정입니다. 

 

RDS에 접근하는 정보는 보호되어야하므로 설정파일을 EC2 서버에 생성하여 둡니다. 프로젝트 디렉토리에 application-real-db.properties를 생성해주세요. (profile=real인 환경이 실행될 때 위 application-real.properties 설정파일에서 real-db를 include 했으므로 함께 실행됩니다.)

application-real-db.properties

spring.jpa.hibernate.ddl-auto=none			
spring.datasource.url=jdbc:mariadb://rds주소:포트명(default: 3306)/database이름
spring.datasource.username=db계정
spring.datasource.password=db계정 비밀번호
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

 

spring.jpa.hibernate.ddl-auto=none : jpa 테이블 자동생성 옵션을 생성되지않음으로 변경합니다.

datasource.**: 데이터베이스에 접근을 위한 설정들입니다.

 

 

 

마지막으로 profile=real로 실행되도록 deploy.sh 를 변경합니다.

 

nohup 부분을 아래와 같이 변경해주세요. (\는 줄바꿈을 의미합니다. 줄을 바꾸지 않으면 오류가 발생하니 주의해주세요)

 

-Dspring.config.location 옵션은 설정파일의 위치를 지정해줍니다. classpath가 붙으면 jar파일의 설정위치를 기본 경로로 파일이 지정됩니다. 외부경로에 있는 properties는 절대경로로 지정해서 설정해줍니다. 

-Dspring.profiles.active=real은 profile=real을 활성화시켜 실행시켜줍니다.

 

 

저장한 뒤 

./deploy.sh를 실행하면 성공적으로 연결됩니다. 이제 내 컴퓨터의 로컬환경에서 프로젝트에 접근해봅시다. 

 

AWS EC2 콘솔에 들어가 퍼블릭 DNS 주소를 복사해 브라우저 URL에 입력해봅시다. 

 

성공적으로 배포되었습니다.

 

 

 

 

 

 

reference


 

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스

 

 

'배포' 카테고리의 다른 글

CI/CD 적용하기  (0) 2020.09.04
AWS RDS 사용하기  (0) 2020.08.28
AWS 사용하기  (0) 2020.08.26
클라우드 서비스  (0) 2020.08.20
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함