7주차 - 2) API

변현섭·2023년 6월 12일
0

4th UMC Server-Spring Study

목록 보기
22/30
post-thumbnail

아래 링크에 실습 코드를 올려놓았습니다. 이 파일을 본인의 인텔리제이로 옮기셔서 실습을 진행하시면 되겠습니다.
>> 실습 코드

깃허브에서 인텔리제이로 코드를 옮기는 방법을 모르신다면, 아래의 링크를 참조하시면 됩니다.
>> 인텔리제이 파일 깃허브에 업로드하기

Ⅱ. 실습

1. EC2인스턴스에 Spring 배포하기

1) 코드 파일 수정

맨 위의 하이퍼링크를 클릭하면, 실습코드를 다운 받을 수 있는 깃허브 페이지로 이동한다. 이 프로젝트 파일을 인텔리제이에서 열고, 아래와 같이 수정해주자.

① appication.yml 파일을 연다.

② (RDS 엔드포인트)에 RDS의 엔드포인트를 붙여넣고, 스키마 명에 본인의 초기 데이터베이스 이름을 넣는다.

url: jdbc:mysql://(RDS 엔드포인트):3306/(스키마 명)?userSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=True
  • 참고로 스키마란, 아래 캡쳐본의 MyDB와 같은 것을 의미한다.

③ username에 root를 입력하고 password에 본인의 비밀번호를 입력한다.

2) SSH Key 설정

putty로 EC2 인스턴스에 접속한 후 아래의 명령을 입력한다.

javac // 다운받을 수 있는 옵션을 알려줌
sudo apt install default-jdk -y

github에 있는 프로젝트를 AWS EC2에 git clone으로 내려 받아 jar 파일 빌드를 할 수 있도록 개발환경을 구축해보자. 먼저는 EC2 인스턴스를 만들어 ubuntu에 접속해주어야 한다. 이는 2주차에 설명한 내용이므로 생략하겠다.

할당 받은 탄력적 ip에 putty로 접속하고 sudo apt update -> sudo apt-get install git 명령으로 git을 설치한다. 설치가 완료되었는지 git --version명령으로 확인해볼 수 있다.

이번에는 깃헙에서 SSH KEY를 생성해보겠다. 아래의 명령을 실행한다.


예전에 key파일을 생성한 적이 있어 overwrite 해주었지만, 처음이라면 위의 사진같이 될 것이다. 참고로, ~/는 홈 디렉토리를 기준으로 한 상대 경로를 의미하고 .은 숨김 파일을 의미한다. 이 명령을 통해 .ssh 디렉토리에서 키페어를 생성하게 되고 id_rsa.pub파일이 생성된다. cat명령으로 내용을 출력한다.

cat으로 확인한 id_rsa.pub 파일의 내용을 복사해주자. Your Repositry > Code > SSH의 경고창이 뜬다면 경고창을 클릭하거나, github > setting > SSH and GPG keys 탭으로 이동하여 New SSH key버튼을 클릭하면 아래와 같은 창이 나온다. Title은 UMCtest라 하고, Key에는 복사한 내용을 그대로 붙여 넣으면 된다.

이제 완성된 인텔리제이 파일을 github에 업로드해야 한다. 업로드하는 방법을 잘 모르겠다면, 아래의 링크를 참조하기 바란다.
>> Github에 파일 업로드

업로드가 완료되었다면, EC2에 접속한 터미널에서 git clone할 디렉토리로 이동해야 한다. /home/ubuntu/.ssh로 옮기기로 하자. 디렉토리 이동 후 git clone의 파라미터로 복사한 값을 전달하면 된다.

이제 git clone을 위한 모든 준비가 끝났다. 깃헙 repository에서 code > ssh 탭을 눌러 나온 주소를 복사해주자.

EC2에 원격접속 된 putty에 git clone의 인자로 복사한 값을 넣어주자. (ssh 탭 링크가 잘 안되면 HTTPS 링크를 사용해도 된다.)

이후에 나오는 질문에 yes라고 답하면 다운로드가 진행된다. 다운로드가 마쳐지면 ls를 입력하여 다운로드가 잘 진행되었는지 확인하자.

3) 파일 빌드를 위한 사전 작업

EC2에서는 자바를 기본으로 제공하지 않으므로 sudo apt install openjdk-11-jdk명령으로 자바를 설치해주자. 그 후 cd ./UMC 명령으로 UMC디렉토리로 이동한 후, ./gradlew build 명령을 실행하여 파일을 빌드하면 되는데 권한이 없다며 빌드를 실행하지 못할 것이다.

이 상황을 해결하기 위해 몇 가지 해주어야 할 것이 있다.

① 보안그룹 설정

  • 기존에 사용하던 lauch-wizard-1에 들어가 사용자지정 TCP / 8080포트 / Anywhere IPv4를 추가해주자.

② default파일 수정

  • sudo vi /etc/nginx/sites-available/default에서 아래와 같이 UMC파일의 경로로 바꾸어주자.
  • 이후 sudo systemctl restart nginx로 서버 재시작해야 한다.

③ 실행 권한 부여
상위 디렉토리인 .ssh로 이동한 후 chmod -R 777 UMC로 권한을 부여

④ 인텔리제이에 접속한 후 Tools > Deployment > Configuration로 들어간 후 + > SFTP를 클릭해 spring_edu라는 서버를 만들어주자.

서버를 만들었다면 SSH configuration에 …을 클릭하고 다시 +를 누르면 된다. Host에는 EC2의 IP주소를 넣으면 되고, User name에는 ubuntu를, Authentication type은 Key pair을 선택한 후 .pem파일을 넣어주면 된다. Test Connection을 클릭하면 아래와 같이 Successfully Connected 창이 뜨게 될 것이다.

다시 spring_edu SFTP로 돌아와서 Root Path에는 ~/.ssh/UMC을 입력하고 Web server URL에는 EC2 ip주소를 넣으면 된다. 만약 도메인 설정을 하였다면 도메인을 넣어도 된다. OK를 누른 후 다시 Tools > Deployment > Browse Remote Host에 들어가 spring_edu가 잘 나오는지 확인하자. 이것도 수차례 실패를 거듭한 결과 umc_test로 이름을 변경하게 되었다.

이제 원격호스트에서 프로젝트 탐색기를 사용할 수 있게 되었다. 즉, 파일 읽기, 추가하기, 삭제하기가 가능해졌다.

변경사항이 생기면 이런 문구가 나오는데 우측의 업로드 버튼을 누르면 서버에 변경사항이 적용된다. 자동 업로드하는 방법도 있으니 필요하면 찾아보길 바란다.

4) 파일 빌드하기

자바를 리눅스에 설치하기 위해 아래의 코드를 입력한다.

$ sudo apt update
$ sudo apt install openjdk-17-jdk // 본인이 인텔리제이에서 사용하는 JDK와 동일한 버전
$ java -version // 버전 확인 

루트 디렉토리에서 cd /usr/lib/jvm에서 방금 설치한 파일이 어디에 있는지 찾아보자.

위에 보이는 java-17-openjdk-amd64에 저장이 되어있다. 이제 sudo vi /etc/profile에 들어가서 가장 아래에 export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64를 입력해주자.

echo $JAVA_HOME으로 환경변수 설정이 잘 되었는지 확인할 수 있다. 이를 제대로 확인하려면 재접속하거나 duplicate된 session으로 접속해야 한다.
sudo apt install gradle로 gradle을 설치하고 설치가 완료되면 gradle -v로 설치를 확인해주자.

$ sudo apt install gradle
$ gradle -v

cd명령으로 UMC파일로 돌아와서 ./gradlew build를 입력해주자. 무료 EC2 서비스이다보니 스펙이 매우 낮아 빌드에 매우 오랜 시간이 소요되거나 빌드가 아예 안될 것이다. 아래의 내용을 참고하자. 명령을 순서대로 입력 후 free로 결과를 확인하면 된다.

5) jar파일 실행시키기

RDS에서 사용하는 보안그룹에 내 IP도 추가되어있는지 확인하자(나중에 API를 로컬환경에서 테스트할 예정이기 때문).

빌드가 완료되면 build 디렉토리가 생성된다. libs 디렉토리로 이동해보면 SNAPSHOT.jar파일이 생성된 것을 확인할 수 있다. 참고로 이름이 UMC에서 UMCtest로 바뀌었는데, 이건 오류가 발생해서 UMCtest라는 이름으로 다시 시도했기 때문이다. 크게 중요한 내용은 아니다.

밑에 나온 이름을 java -jar의 파라미터로 전달해주면 실행된다.

하지만 실수로 application.yml을 gitignore하지 않았다. 당연히 .gitignore 파일에 아래와 같이 확장자가 yml인 파일은 gitignore 해달라고 입력했어야 한다.

.gitignore는 업로드에서 제외하고 싶은 파일 또는 폴더를 의미한다. 진작에 추가했으면 상관 없겠지만, 지금처럼 늦게 추가한 경우에는 먼저 .gitignore 파일을 알맞게 수정(.gitignore파일에 아무데나 *.yml을 추가한다.)하고 프로젝트 파일 우클릭 > Git Bash here을 열어 아래의 명령을 입력해야 한다.

$ git rm -r --cached . // cache에 기록된 tracking 중인 파일 리스트 삭제
$ git add .
$ git commit -m 'remove ignored file'
$ git push origin main 

변경사항이 잘 적용되었는지 확인해보자. application.yml파일이 없어진 걸 확인할 수 있다.

만약 잘 안된다면 IntelliJ > Git > Manage Remotes에 들어가서 origin이 원하는 Repository 주소를 잘 담고 있는지 확인해보아라. origin을 알맞은 주소로 수정하면 잘 진행될 것이다.

대신 문제가 하나 있다. git clone으로 이 파일을 putty로 받아오면, application.yml파일이 없기 때문에 빌드 되지 않을 것이다. 이는 putty에서 직접 해당 경로에 붙여 넣어줘야 한다. 그럴바엔 아까처럼 .yml파일을 업로드하고 putty에서 받은 다음에 gitignore을 수정하는게 더 괜찮지 않겠냐고 생각한다면 다소 위험하다. 그 잠깐 사이에 데이터가 도난당할 수 있음에 유의하자. 어떻게 추가하는지를 다루지는 않겠으나 대강은 설명하도록 하겠다. 이번에는 신선하게 putty가 아닌 인텔리제이의 Tools > Start SSH session으로 원격접속해보겠다(putty와 동일하므로 아무거나 해도 된다). 원래 .yml파일이 어디에 저장되어 있는지 알아보자.

cd로 타고타고 들어가보니 application.yml은 /home/ubuntu/.ssh/UMCtest/build/resources/main
안에 위치한다. 따라서 git ignore을 했다면 sudo vi를 이용해 이와 똑같은 위치에 파일을 작성해주면 될 것이다. 만약 빌드하기 전에 yml 파일을 넣고 싶다면, src > main > resources에서 sudo vi application.yml을 입력하면 된다.

또한 깃허브의 최신 파일로 기존의 파일을 업데이트(pull)하고 싶다면, 프로젝트 디렉토리에서(위 예시에서는 ~/.ssh/UMCtest) 아래의 명령을 순차적으로 입력하면 된다.

$ git stash # 현재 Staging 영역에 있는 파일의 변경사항을 스택에 저장
$ git pull 
$ git stash pop # 변경 사항을 적용하고, 스택에서 제거 

다음시간에는 PostMan에서 API가 잘 동작하는지 테스트해보기로 하자.

[이미지 출처]

profile
Java Spring, Android Kotlin, Node.js, ML/DL 개발을 공부하는 인하대학교 정보통신공학과 학생입니다.

0개의 댓글