1 ~ 5장 스프링부트로 서비스 코드 개발
6 ~ 7장 배포 환경 구성.
이제 이들을 조합해 실제로 서비스를 배포해보자.
8.1 EC2에 프로젝트 clone 받기
git yum install git
EC2에 git 설치
git --version
git version 확인
mkdir ~/app && mkdir ~/app/step1
디렉토리 생성
git clone 깃허브프로젝트주소
프로젝트 깃헙에서 받아오기
./gradlew test
로확인
chmod +x ./gradlew
권한 없다 뜨면 권한 주기
8.2 배포 스크립트 만들기
배포-> 작성한 코드를 실제 서버에 반영하는 것.
이 책에서는 배포라고 하면 다음의 과정을 모두 포괄하는 의미.
- git clone 혹은 git pull 을 통해 새 버전의 프로젝트 받음.
- gradle이나 maven을 통해 프로젝트 테스트와 빌드
- EC2 서버에서 해당 프로젝트 실행 및 재실행
앞선 과정을 개발자가 하나하나 명령어를 실행하는 것은 불편함.
그래서 이를 쉘스크립트로 작성해 스크립트만 실행하면 앞의 과정이 차례로 지행되도록 하겠다.
참고
쉘 스크립트와 vim은 서로 다른 역할을 한다.
쉘 스크립트는 .sh라는 파일확장자를 가진파일
노드js가 .js라는 파일을 통해 서버에서 작동하는 것처럼 쉘스크립트 역시 리눅에서 사용할 수 있는 스크립트 파일의 한 종류
vim은 리눅스 환경과 같이 GUI가 아닌 환경에서 사용할 수 있는 편집도구
vim ~/app/step1/deploy.sh
파일 하나 생성.
#!/bin/bash
REPOSITORY=/home/ec2-user/app/step1
PROJECT_NAME=springboot2-webservice
cd $REPOSITORY/$PROJECT_NAME/
echo "> Git Pull"
git pull
echo "> 프로젝트 Build 시작"
.gradlew build
echo "> step1 디렉토리 이동"
cd $REPOSITORY
echo "> Build 파일 복사"
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=${prgrep -f ${PROJECT_NAME}.*.jar}
echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID"
if [ -z "$CURRENT_PID"]; then
echo "> 구동 중인 어플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -14 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 어플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)
echo "> JAR Name: $JAR_NAME"
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
REPOSITORY=/home/ec2-user/app/step1
- 프로젝트 디렉토리 주소는 스크립트 내에서 자주 사용하는 값이라 변수로 저장.
- 프로젝트 이름도 마찬가지로 저장.
- 쉘에서는 타입 없이 선언하여 저장
- 쉘에서는 $변수명으로 변수사용가능.
cd $REPOSITORY/$PROJECT_NAME/
- 처음 git clone 받았던 디렉토리로 이동
git pull
- 디렉토리 이동후, master 브랜치의 최신내용을 받음.
./gradlew build
- 프로젝트 내부의 gradlew로 build를 수행한다.
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
- build의 결과물인 jar파일을 복사해 jar 파일을 모아둔 위치로 복사.
CURRENT_PID=${prgrep -f ${PROJECT_NAME}.*.jar}
- 기존에 수행 중이던 스프링 부트 애플리케이션 종료
- prgrep은 process id만 추출하는 명령어
- -f옵션은 프로세스 이름을 찾는다.
if ~ else ~ fi
- 현재 구동 중인 프로세스가 있는지 없는지를 판단해서 기능을 수행한다.
- process id 값을 보고 해당프로세스가 있으면 해당 프로세스를 종료한다.
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)
- 새로 실행할 jar 파일명을 찾는다.
- 여러 jar파일이 생기기 때문에 tail -n으로 가장 나중의 jar 파일(최신 파일)을 변수에 저장한다.
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
- 찾은 jar파일명으로 해당 jar 파일을 nohup으로 실행합니다.
- 스프링 부트의 장점으로 특별히 외장 톰캣을 설치할 필요가 없다.
- 내장 톰캣을 사용해서 jar 파일만 있으면 바로 웹어플리케이션 서버를 실행할 수 있다.
- 일반적으로 자바를 실행할때는 java -jar라는 명령어를 사용하지만, 이렇게 하면 사용자가 터미널 접속을 끊을 때 애플리케이션도 같이 종료된다.
- 애플리케이션 실행자가 터미널을 종료해도 애플리케이션은 계속 구동될 수 있도록 nohup명령어를 사용한다.
이후 deploy.sh 파일 실행하면 오류가남.
vim nohup.out 으로 로그 확인
ClientRegistrationRepository를 찾을 수 없다는 에러가 발생하며 애플리케이션 실행에 실패한다.
왜 why???
8.3 외부 Security 파일 등록하기
ClientRegistrationRepository를 생성하려면 clientId와 clientSecret가 필수.
로컬 PC에서 실행할때는 application-oauth.properties가 있어 문제가 없었다.
하지만 이파일은 .gitignore로 git에서 제외대상이라 깃허브에 올라가있지 않다.
애플리케이션 실행을 위해 공개된 저장소에 ClientId와 ClientSecret을 올릴 수 없으니 서버에서 직접 이 설정들을 가지고 있게 해보자.
먼저 step1이 아닌 app 디렉토리에 properties 파일을 생성하자.
로컬 pc의 oauth설정 복붙
deploy.sh 파일 수정
nohup java -jar /
-Dspring.config.location=classpath:/application.properties,/home/ec2-user/app/application-oauth.properties \ $REPOSITORY/$JAR_NAME 2>&1 &
-Dspring.config.location
스프링 설정 파일 위치를 지정한다.
기본 옵션들을 담고 있는 application.properties과 Oauth설정들을 담고 있는 applicaiton-oauth.properties의 위치를 지정한다.
classpath가 붙으면 jar안에 있는 resources 디렉토리를 기준으로 경로가 생성된다.
application-oauth.properties 은 절대경로를 사용한다. 외부에 파일이 있기 때문이다.
8.4 스프링 부트 프로젝트로 RDS 접근하기
RDS는 MariaDB를 사용중이다. 이 MariaDB에서 스프링 부트 프로젝트를 실행하기 위해서 몇가지작업이 필요하다.
- 테이블생성
- H2에서 자동생성해주던 테이블들을 MariaDB에선 직접 쿼리를 이용해 생성한다.
- 프로젝트설정
- 자바 프로젝트가 MariaDB에 접근하려면 DB driver가 필요하다. MariaDB에서 사용가능한 드라이버를 프로젝트에 추가.
- EC2(리눅스 서버) 설정
- DB의 접속 정보는 중요하게 보호해야 할 정보입니다. 공개되면 외부에서 데이터를 모두 가져갈 수 있기 때문이다. 프로젝트 안에 접속 정보를 갖고 있다면 깃허브와 같이 오픈된 공간에선 누가나 해킹할 위험이 있다. 따라서 EC2서버내부에서 접속 정보를 관리하도록 설정한다.
RDS 테이블 생성
먼저 RDS에 테이블을 생성하자. 여기선 JPA가 사용될 엔티티 테이블과 스프링 세션이 사용될 테이블 2가지 종류를 생성한다.
JPA가 사용할 테이블은 테스트 코드 수행시 로그로 생성되는 쿼리를 사용하면 됨.
프로젝트 설정
먼저 build.gradle에 MariaDB driver 등록
implementation("org.mariadb.jdbc:mariadb-java-client")
resources에 application-real.properties 추가
앞서 이야기한 대로 이 파일을 만들면 profilie=real인 환경이 구성된다고 보면 된다.
실제 운영될 환경이기 때문에 보안/로그 상 이슈가 될 만한 설정들을 모두 제거하며 RDS환경 profile 설정이 추가됩니다.
spring.profiles.include=oauth,real-db
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.session.store-type=jdbc
EC2 설정
OAuth와 마찬가지로 RDS 접속 정보도 보호해야 할 정보이니 EC2 서버에 직접 설정 파일을 둔다.
app 디렉토리에 application-real-db.properties 파일 생성
spring.jpa.hiberante.ddl-auto=none
spring.datasource.url=jdbc:mariadb://rds주소:포트명/database이름
spring.datasource.username = db계정
spring.datasource.password = db계정 비밀번호
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.hiberante.ddl-auto=none
- JPA로 테이블이 자동 생성되는 옵션을 None(생성하지 않음)으로 지정한다.
- RDS에는 실제 운영으로 사용될 테이블이니 절대 스프링 부트에서 새로 만들지 않도록 해야한다.
- 이 옵션을 하지 않으면 자칫 테이블이 모두 새로 생성될 수 있다.
- 주의해야하는 옵션.
마지막으로 deploy.sh가 real profile을 쓸 수 있도록 개선.
nohup java -jar \ -Dspring.config.location=classpath:/application.properties, /home/ec2-user/app/application-oauth.properties, /home/ec2-user/app/application-real-db.properties, classpath:/application-real.properties \
-Dspring.profiles.active=real \
$REPOSITORY/$JAR_NAME 2>&1 &
-Dspring.profiles.active=real
- application-real.properties를 활성화시킴.
- application-real.properties의 spring.profiles.include=oauth,real-db옵션 때문에 real-db 역시 함께 활성화 대상에 포함된다.
curl localhost:8080
으로 html코드가 보이면 정상 작동.
8.5 EC2에서 소셜 로그인하기
curl 명령어를 통해 EC2에 서비스가 잘 배포된 것을 확인.
이제 브라우저에서 확인해볼텐데 그전에 몇가지 작업을 해야함.
AWS보안 그룹 변경
먼저 EC2에 스프링 부트 프로젝트가 8080포트로 배포되었으니, 8080포트가 보안 그룹에 열려있는지 확인.
AWS EC2 도메인으로 접속
본인이 생성한 EC2 인스턴스를 확인하면 퍼블릭 DNS를 확인할 수 있다.
이주소가 EC2에 자동으로 할당된 도메인이다. 인터넷이 되는 장소 어디나 이 주소를 입력하면 우리의 EC2주소에 접근 할 수 있다.
요 주소에 :8080을 더해 브라우저에 입력하면 EC2 퍼블릭 DNS로 접속 가능.
그러나 아직 문제가 있다.!
저 주소로 들어가면 네이버로그인이 되지 않는다. 해당서비스에 EC2의 도메인을 등록하지 않았기 때문이다. 따라서 구글 네이버, 카카오의 로그인이 동작하지 않음. 이제 등록해보자.
네이버의 경우
서비스 URL
- 로그인을 시도하는 서비스가 네이버에 등록된 서비스인지 판단하기 위한 항목
- 8080포트는 제외하고 실제 도메인 주소만 입력한다.
- 네이버에서 아직 지원되지 않아 하나만 등록 가능
- 즉 EC2의 주소등록시 localhost는 안됨.
- 개발단계에서는 등록하지 않는 것을 추천.
- localhost도 테스트하고 싶으면 네이버 서비스를 하나 더 생성해서 키를 발급받으면 됨.
Callback URL
- 전체 주소를 등록한다.
간단하게나마 스프링부트 프로젝트를 EC2에 배포해 보았다. 스크립트를 작성해서 간편하게 빌드와 배포를 진행했는데 현재 방식에는 몇가지 문제점이 있다.
수동 실행되는 Test
- 본인이 짠 코드가 다른 개발자의 코드에 영향을 끼치지 않는지 확인하기 위해 전체 테스트를 수행해야한다.
- 현재 상태에선 항상 개발자가 작업을 진행할 때마다 수동으로 전체테스트를 수행해야함.
수동 Build
- 다른 사람이 작성한 브랜치와 본인이 작성한 브랜치가 합쳐졌을 때(Merge) 이상이 없는지는 Build 를 수행해야만 알 수 있다.
- 이를 매번 개발자가 직접 실행해봐야함.
- 다음장에서는 이런 수동 Test&Build 를 자동화시키는 작업을 해본다.
- 깃허브에 푸쉬하면 자동으로 Test&Build&Deploy가 진행되도록 개선하는 작업.
이번 장에서 배운것
- AWS EC2 서비스에 스프링 부트 프로젝트를 배포하는 방법
- 간단한 쉘 스크립트 사용방법
- 스프링 부트 프로젝트와 AWS RDS 연동 방법
- EC2에서 구글, 네이버 로그인 설정 방법
'Spring > 스프링부트와 AWS로 혼자구현하는 웹 서비스' 카테고리의 다른 글
섹션10. 24시간 365일 중단 없는 서비스를 만들자. (0) | 2023.02.24 |
---|---|
섹션9. 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화 (0) | 2023.02.12 |
섹션7. AWS RDS (1) | 2023.02.05 |
섹션 6. AWS 서버 환경을 만들어보자 - AWS EC2 (0) | 2023.01.30 |
5장. 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (0) | 2023.01.29 |
1 ~ 5장 스프링부트로 서비스 코드 개발
6 ~ 7장 배포 환경 구성.
이제 이들을 조합해 실제로 서비스를 배포해보자.
8.1 EC2에 프로젝트 clone 받기
git yum install git
EC2에 git 설치
git --version
git version 확인
mkdir ~/app && mkdir ~/app/step1
디렉토리 생성
git clone 깃허브프로젝트주소
프로젝트 깃헙에서 받아오기
./gradlew test
로확인
chmod +x ./gradlew
권한 없다 뜨면 권한 주기
8.2 배포 스크립트 만들기
배포-> 작성한 코드를 실제 서버에 반영하는 것.
이 책에서는 배포라고 하면 다음의 과정을 모두 포괄하는 의미.
- git clone 혹은 git pull 을 통해 새 버전의 프로젝트 받음.
- gradle이나 maven을 통해 프로젝트 테스트와 빌드
- EC2 서버에서 해당 프로젝트 실행 및 재실행
앞선 과정을 개발자가 하나하나 명령어를 실행하는 것은 불편함.
그래서 이를 쉘스크립트로 작성해 스크립트만 실행하면 앞의 과정이 차례로 지행되도록 하겠다.
참고
쉘 스크립트와 vim은 서로 다른 역할을 한다.
쉘 스크립트는 .sh라는 파일확장자를 가진파일
노드js가 .js라는 파일을 통해 서버에서 작동하는 것처럼 쉘스크립트 역시 리눅에서 사용할 수 있는 스크립트 파일의 한 종류
vim은 리눅스 환경과 같이 GUI가 아닌 환경에서 사용할 수 있는 편집도구
vim ~/app/step1/deploy.sh
파일 하나 생성.
#!/bin/bash
REPOSITORY=/home/ec2-user/app/step1
PROJECT_NAME=springboot2-webservice
cd $REPOSITORY/$PROJECT_NAME/
echo "> Git Pull"
git pull
echo "> 프로젝트 Build 시작"
.gradlew build
echo "> step1 디렉토리 이동"
cd $REPOSITORY
echo "> Build 파일 복사"
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=${prgrep -f ${PROJECT_NAME}.*.jar}
echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID"
if [ -z "$CURRENT_PID"]; then
echo "> 구동 중인 어플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -14 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 어플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)
echo "> JAR Name: $JAR_NAME"
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
REPOSITORY=/home/ec2-user/app/step1
- 프로젝트 디렉토리 주소는 스크립트 내에서 자주 사용하는 값이라 변수로 저장.
- 프로젝트 이름도 마찬가지로 저장.
- 쉘에서는 타입 없이 선언하여 저장
- 쉘에서는 $변수명으로 변수사용가능.
cd $REPOSITORY/$PROJECT_NAME/
- 처음 git clone 받았던 디렉토리로 이동
git pull
- 디렉토리 이동후, master 브랜치의 최신내용을 받음.
./gradlew build
- 프로젝트 내부의 gradlew로 build를 수행한다.
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
- build의 결과물인 jar파일을 복사해 jar 파일을 모아둔 위치로 복사.
CURRENT_PID=${prgrep -f ${PROJECT_NAME}.*.jar}
- 기존에 수행 중이던 스프링 부트 애플리케이션 종료
- prgrep은 process id만 추출하는 명령어
- -f옵션은 프로세스 이름을 찾는다.
if ~ else ~ fi
- 현재 구동 중인 프로세스가 있는지 없는지를 판단해서 기능을 수행한다.
- process id 값을 보고 해당프로세스가 있으면 해당 프로세스를 종료한다.
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)
- 새로 실행할 jar 파일명을 찾는다.
- 여러 jar파일이 생기기 때문에 tail -n으로 가장 나중의 jar 파일(최신 파일)을 변수에 저장한다.
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
- 찾은 jar파일명으로 해당 jar 파일을 nohup으로 실행합니다.
- 스프링 부트의 장점으로 특별히 외장 톰캣을 설치할 필요가 없다.
- 내장 톰캣을 사용해서 jar 파일만 있으면 바로 웹어플리케이션 서버를 실행할 수 있다.
- 일반적으로 자바를 실행할때는 java -jar라는 명령어를 사용하지만, 이렇게 하면 사용자가 터미널 접속을 끊을 때 애플리케이션도 같이 종료된다.
- 애플리케이션 실행자가 터미널을 종료해도 애플리케이션은 계속 구동될 수 있도록 nohup명령어를 사용한다.
이후 deploy.sh 파일 실행하면 오류가남.
vim nohup.out 으로 로그 확인
ClientRegistrationRepository를 찾을 수 없다는 에러가 발생하며 애플리케이션 실행에 실패한다.
왜 why???
8.3 외부 Security 파일 등록하기
ClientRegistrationRepository를 생성하려면 clientId와 clientSecret가 필수.
로컬 PC에서 실행할때는 application-oauth.properties가 있어 문제가 없었다.
하지만 이파일은 .gitignore로 git에서 제외대상이라 깃허브에 올라가있지 않다.
애플리케이션 실행을 위해 공개된 저장소에 ClientId와 ClientSecret을 올릴 수 없으니 서버에서 직접 이 설정들을 가지고 있게 해보자.
먼저 step1이 아닌 app 디렉토리에 properties 파일을 생성하자.
로컬 pc의 oauth설정 복붙
deploy.sh 파일 수정
nohup java -jar /
-Dspring.config.location=classpath:/application.properties,/home/ec2-user/app/application-oauth.properties \ $REPOSITORY/$JAR_NAME 2>&1 &
-Dspring.config.location
스프링 설정 파일 위치를 지정한다.
기본 옵션들을 담고 있는 application.properties과 Oauth설정들을 담고 있는 applicaiton-oauth.properties의 위치를 지정한다.
classpath가 붙으면 jar안에 있는 resources 디렉토리를 기준으로 경로가 생성된다.
application-oauth.properties 은 절대경로를 사용한다. 외부에 파일이 있기 때문이다.
8.4 스프링 부트 프로젝트로 RDS 접근하기
RDS는 MariaDB를 사용중이다. 이 MariaDB에서 스프링 부트 프로젝트를 실행하기 위해서 몇가지작업이 필요하다.
- 테이블생성
- H2에서 자동생성해주던 테이블들을 MariaDB에선 직접 쿼리를 이용해 생성한다.
- 프로젝트설정
- 자바 프로젝트가 MariaDB에 접근하려면 DB driver가 필요하다. MariaDB에서 사용가능한 드라이버를 프로젝트에 추가.
- EC2(리눅스 서버) 설정
- DB의 접속 정보는 중요하게 보호해야 할 정보입니다. 공개되면 외부에서 데이터를 모두 가져갈 수 있기 때문이다. 프로젝트 안에 접속 정보를 갖고 있다면 깃허브와 같이 오픈된 공간에선 누가나 해킹할 위험이 있다. 따라서 EC2서버내부에서 접속 정보를 관리하도록 설정한다.
RDS 테이블 생성
먼저 RDS에 테이블을 생성하자. 여기선 JPA가 사용될 엔티티 테이블과 스프링 세션이 사용될 테이블 2가지 종류를 생성한다.
JPA가 사용할 테이블은 테스트 코드 수행시 로그로 생성되는 쿼리를 사용하면 됨.
프로젝트 설정
먼저 build.gradle에 MariaDB driver 등록
implementation("org.mariadb.jdbc:mariadb-java-client")
resources에 application-real.properties 추가
앞서 이야기한 대로 이 파일을 만들면 profilie=real인 환경이 구성된다고 보면 된다.
실제 운영될 환경이기 때문에 보안/로그 상 이슈가 될 만한 설정들을 모두 제거하며 RDS환경 profile 설정이 추가됩니다.
spring.profiles.include=oauth,real-db
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.session.store-type=jdbc
EC2 설정
OAuth와 마찬가지로 RDS 접속 정보도 보호해야 할 정보이니 EC2 서버에 직접 설정 파일을 둔다.
app 디렉토리에 application-real-db.properties 파일 생성
spring.jpa.hiberante.ddl-auto=none
spring.datasource.url=jdbc:mariadb://rds주소:포트명/database이름
spring.datasource.username = db계정
spring.datasource.password = db계정 비밀번호
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.hiberante.ddl-auto=none
- JPA로 테이블이 자동 생성되는 옵션을 None(생성하지 않음)으로 지정한다.
- RDS에는 실제 운영으로 사용될 테이블이니 절대 스프링 부트에서 새로 만들지 않도록 해야한다.
- 이 옵션을 하지 않으면 자칫 테이블이 모두 새로 생성될 수 있다.
- 주의해야하는 옵션.
마지막으로 deploy.sh가 real profile을 쓸 수 있도록 개선.
nohup java -jar \ -Dspring.config.location=classpath:/application.properties, /home/ec2-user/app/application-oauth.properties, /home/ec2-user/app/application-real-db.properties, classpath:/application-real.properties \
-Dspring.profiles.active=real \
$REPOSITORY/$JAR_NAME 2>&1 &
-Dspring.profiles.active=real
- application-real.properties를 활성화시킴.
- application-real.properties의 spring.profiles.include=oauth,real-db옵션 때문에 real-db 역시 함께 활성화 대상에 포함된다.
curl localhost:8080
으로 html코드가 보이면 정상 작동.
8.5 EC2에서 소셜 로그인하기
curl 명령어를 통해 EC2에 서비스가 잘 배포된 것을 확인.
이제 브라우저에서 확인해볼텐데 그전에 몇가지 작업을 해야함.
AWS보안 그룹 변경
먼저 EC2에 스프링 부트 프로젝트가 8080포트로 배포되었으니, 8080포트가 보안 그룹에 열려있는지 확인.
AWS EC2 도메인으로 접속
본인이 생성한 EC2 인스턴스를 확인하면 퍼블릭 DNS를 확인할 수 있다.
이주소가 EC2에 자동으로 할당된 도메인이다. 인터넷이 되는 장소 어디나 이 주소를 입력하면 우리의 EC2주소에 접근 할 수 있다.
요 주소에 :8080을 더해 브라우저에 입력하면 EC2 퍼블릭 DNS로 접속 가능.
그러나 아직 문제가 있다.!
저 주소로 들어가면 네이버로그인이 되지 않는다. 해당서비스에 EC2의 도메인을 등록하지 않았기 때문이다. 따라서 구글 네이버, 카카오의 로그인이 동작하지 않음. 이제 등록해보자.
네이버의 경우
서비스 URL
- 로그인을 시도하는 서비스가 네이버에 등록된 서비스인지 판단하기 위한 항목
- 8080포트는 제외하고 실제 도메인 주소만 입력한다.
- 네이버에서 아직 지원되지 않아 하나만 등록 가능
- 즉 EC2의 주소등록시 localhost는 안됨.
- 개발단계에서는 등록하지 않는 것을 추천.
- localhost도 테스트하고 싶으면 네이버 서비스를 하나 더 생성해서 키를 발급받으면 됨.
Callback URL
- 전체 주소를 등록한다.
간단하게나마 스프링부트 프로젝트를 EC2에 배포해 보았다. 스크립트를 작성해서 간편하게 빌드와 배포를 진행했는데 현재 방식에는 몇가지 문제점이 있다.
수동 실행되는 Test
- 본인이 짠 코드가 다른 개발자의 코드에 영향을 끼치지 않는지 확인하기 위해 전체 테스트를 수행해야한다.
- 현재 상태에선 항상 개발자가 작업을 진행할 때마다 수동으로 전체테스트를 수행해야함.
수동 Build
- 다른 사람이 작성한 브랜치와 본인이 작성한 브랜치가 합쳐졌을 때(Merge) 이상이 없는지는 Build 를 수행해야만 알 수 있다.
- 이를 매번 개발자가 직접 실행해봐야함.
- 다음장에서는 이런 수동 Test&Build 를 자동화시키는 작업을 해본다.
- 깃허브에 푸쉬하면 자동으로 Test&Build&Deploy가 진행되도록 개선하는 작업.
이번 장에서 배운것
- AWS EC2 서비스에 스프링 부트 프로젝트를 배포하는 방법
- 간단한 쉘 스크립트 사용방법
- 스프링 부트 프로젝트와 AWS RDS 연동 방법
- EC2에서 구글, 네이버 로그인 설정 방법
'Spring > 스프링부트와 AWS로 혼자구현하는 웹 서비스' 카테고리의 다른 글
섹션10. 24시간 365일 중단 없는 서비스를 만들자. (0) | 2023.02.24 |
---|---|
섹션9. 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화 (0) | 2023.02.12 |
섹션7. AWS RDS (1) | 2023.02.05 |
섹션 6. AWS 서버 환경을 만들어보자 - AWS EC2 (0) | 2023.01.30 |
5장. 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (0) | 2023.01.29 |