스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - EC2서버에 프로젝트 배포하기

화나·2021년 2월 4일
0
post-thumbnail

스프링부트로 서비스 코드를 개발했고, 배포환경을 구성했으니 서비스를 배포해보자

1. EC2에 프로젝트 clone 받기

  • EC2에 접속 후 git 설치 명령어 입력
    sudo yum install git
  • 설치가 완료되면 명령어로 설치상태 확인
    git --version
  • 설치 확인 후 git clone으로 프로젝트를 저장할 디렉토리 생성
    mkdir ~/aws && mkdir ~/aws/step1
  • 생성 된 디렉토리로 이동
    cd ~/app/step1
  • git clone 하기
    git clone https://github.com/hwana/bookCommunity.git
  • clone 이 끝났으면 파일이 잘 복사되었는지 확인
    cd bookCommunity
    ll
  • 코드들이 잘 수행되는지 테스트로 검증하기
    ./gradlew test

    ./gradlew Permission denied가 발생하면 chmod +x ./gradlew 입력 후 다시 실행

2. 배포 스크립트 만들기

배포 : 작성한 코드를 실제 서버에 반영하는 것
아래의 경우도 모두 배포에 포함 됨

  1. git clone 혹은 git pull을 통해 새 버전의 프로젝트를 받음
  2. Gradle이나 Maven을 통해 프로젝트 테스트와 빌드
  3. EC2 서버에서 해당 프로젝트 실행 및 재실행

이 과정을 배포할 때마다 개발자가 하나하나 명령어를 실행하는 것은 불편함이 많음
그래서 이 과정을 쉘 스크립트로 작성해서 스크립트만 실행하면 차례대로 진행됨

  • 쉘 스크립트는 .sh라는 파일 확장자를 가진 파일, 리눅스에서 기본적으로 사용할 수 있는 스크립트 파일의 한 종류
  • Vim은 GUI가 아닌 환경에서 사용할 수 있는 편집 도구

쉘 스크립트 작성

  • 생성한 스크립트에 실행 권한 추가
    chmod +x ./deploy.sh : 해당 파일이 있는곳에 입력

  • 스크립트 실행
    ./deploy.sh : 해당 파일이 있는곳에 입력

    실행 결과

  • nohup.out 파일(실행되는 애플리케이션에서 출력되는 모든 내용을 가지고 있음) 열어보기
    vim nohup.out

    nohup.out 파일

    • ClientRegistrationRepository를 찾을 수 없다며 애플리케이션 실행에 실패함

3. 외부 Security 파일 등록하기

애플리케이션 실행에 실패한 이유

  • ClientRegistrationRepository를 생성하려면 clientId와 clientSecret이 필수
  • 로컬 PC에서 실행할 때는 application-oauth.properties가 있어서 문제가 없었으나 이 파일을 git제외 대상임
  • 애플리케이션을 실행하기 위해서 id와 secret을 공개된 저장소에 올릴순 없으니 서버에서 직접 이 설정들을 가지고 있게 하려고함

aws 폴더에 properties 파일 생성하기

vim /home/ec2-user/aws/application-oauth.properties
파일 생성후에 로컬에 있는 내용 복사해서 붙여넣기

생성한 application-oauth.properties를 사용할 수 있도록 deploy.sh 파일 수정하기


수정 후 deploy.sh 파일 다시 실행 -> nohup.out 파일 열어보면 프로젝트 정상 실행 확인

4. 스프링 부트 프로젝트로 RDS 접근하기

현재 RDS는 MariaDB를 사용중이다. MariaDB는 스프링부트 프로젝트를 실행하기 위해서는 몇가지 작업이 필요하다.

4-1. 테이블 생성

MariaDB에서는 직접 쿼리를 이용해서 생성해야함

  1. JPA가 사용될 엔티티 테이블 생성
  2. 스프링 세션이 사용될 테이블

4-2. 프로젝트 설정

자바 프로젝트가 MariaDB에 접근하려면 데이터베이스 드라이버가 필요함
MariaDB에서 사용가능한 드라이버를 프로젝트에 추가함

  1. MariaDB 드라이버를 build.gradle에 등록함
    compile("org.mariadb.jdbc:mariadb-java-client")
  2. 서버에 구동될 환경 구성
    application-real.properties 생성
    실제 운영될 환경이기때문에 보안상 이슈가 될 만한 설정들을 모두 제거해야 함

    application-real.properties

4-3. EC2(리눅스 서버) 설정

오픈된 공간에서는 데이터베이스 정보를 중요하게 보호해야하기 때문에 EC2 서버 내부에서 접속 정보를 관리하도록 설정함

application-oauth.properties와 마찬가지로 RDS 접속정보도 보호를 해야하므로 EC2 서버에 직접 설정파일을 두기로 함

  1. vim ~/app/application-real-db.properties 명령어로 파일 생성
  2. 내용 입력
  3. deploy.sh가 real profile을 쓸 수 있도록 코드 수정 후 재실행
  4. curl localhost:포트번호 입력 후 html 코드가 정상적으로 보이면 성공

5. EC2에서 소셜 로그인하기

5-1. AWS 보안 그룹 변경

EC2에 스프링부트 프로젝트가 8080 포트로 배포되었으니, 8080 포트가 보안 그룹에 열려있는지 확인

5-2. AWS EC2 도메인으로 접속

인스턴스 -> 퍼블릭DNS 확인(EC2에 자동으로 할당된 도메인)
퍼블릭DNS:포트번호 입력하면 서비스에 접속 가능

5-3. 구글에 EC2 주소 등록

구글 웹 콘솔에 접속 -> API 및 서비스 -> OAuth 동의 화면 -> 앱 수정

도메인 추가

사용자 인증정보 -> 리디렉션 URI 입력(:8080/login/oauth2/code/google 추가)

로그인 성공!

5-4. 네이버에 EC2 주소 등록

네이버 개발자센터에 접속 -> 내 애플리케이션 선택 -> API 설정 -> PC 웹 -> 서비스 URL, CALLBACK URL 수정

  1. 서비스 URL
  • 로그인을 시도하는 서비스가 네이버에 등록된 서비스인지 판단하기 위한 항목
  • 8080 포트는 제외하고 실제 도메인 주소만 입력, 네이버에서는 서비스 URL은 하나만 등록 가능
  • 즉, EC2 주소를 등록하면 localhost에서는 안됨
  1. CALLBACK URL
  • 전체 주소를 등록함(EC2 퍼블릭 DNS:8080/login/oauth2/code/naver)

로그인 성공!

현재 배포 방식은 수동으로 배포되는 방식이므로 다음 단계에서는 test & build를 자동화시키는 작업을 할것임

0개의 댓글