기록

SpringBoot Azure window instance에 배포하기 본문

DevOps

SpringBoot Azure window instance에 배포하기

youngyin 2023. 7. 31. 10:00

시작하면서

최근에 토이프로젝트로 전화번호를 수집해서, 문자를 보내는 sms 서버를 구현하였다. 이 과정에서, 검증용 서버를 빠르게 띄워달라는 요구가 있었고, 이를 위해서 최근에 사용해봤던 Azure를 사용해 빠른 배포를 해보았다.

Azure window instance

계정을 만들고, 로그인을 하면 다음과 같은 화면을 볼 수 있다. 

1. 리소스 만들기
2. 가상머신 만들기

관리자 계정은 인스턴스에 접근하기 위해서 필요한 정보로, 어떤 정보를 입력했는지 기억해 두어야 한다. 나머지 필요한 정보를 설정하고 검토 후 설정을 완료한다. 이후 왼쪽 연결탭에서 RDP 파일을 다운로드 받을 수 있고, 이를 통해 VM을 통해 인스턴스에 직접 접속할 수 있다.

install java

  • check version

해당 프로젝트는 Java17를 사용하고 있다. 

java {
    sourceCompatibility = JavaVersion.VERSION_17
}
  • install jdk

인스턴스 안에 jdk를 설치한다. jdk 17을 검색하면 oracle 페이지가 나오는데, 그 중에서 window 64bit를 다운받아서, 설치한다.

  • 환경변수 설정

jdk가 설치된 경로를 JAVA_HOME으로 설정하고, PATH에 등록한다.

cmd에서 java, javac의 버전을 확인하여 제대로 설치되었는지 확인한다.

build project

로컬 환경에서 개발하던 프로젝트를 빌드해보자. 이 글에서는 로컬에서 빌드해서 만들어진 jar 파일을 사용하지만, 깃을 인스턴스에 설치해서 인스턴스 내부에서 프로젝트를 직접 빌드할 수도 있다.

  • build(InteliiJ)

대상이 되는 메세징 서버는 gradle를 사용하고 있다. clean>builb>jar 순서로 클릭하면, build/libs 안에 jar 파일이 만들어진다.

  • copy jar : jar 파일을 복사해서 인스턴스 안에 붙여넣는다.
  • 인스턴스에서 실행하기 

방화벽 설정

외부에서 특정 포트에 접근하기 위해서는 방화벽을 설정해주어야 한다. 해당 프로젝트는 localhost:8080으로 설정되어 있어서, 다음의 과정을 통해 인스턴스의 8080 포트를 열어주었다.

  • window instance

  • azure networt setting

test

위의 네트워크 탭에서 NIC 공용 IP를 확인한 후 POSTMAN에서 확인해보면 응답값을 잘 받아 오는 것을 볼 수 있다.

더 공부할 것

  • 배포 자동화, 배포 환경 분리

AWS EC2를 쓰는게 나을까도 했었지만, Azure 크레딧이 남아 있는 것 알고 있었고 최근에 데브옵스 교육을 들으면서 Azure를 썼어서 Azure를 이용해 배포를 진행했다. 지금은 window에 배포를 했지만, 이후에는 window에 젠킨스를 두고 ubuntu나 리눅스 instance를 하나 두어서, 그쪽에 배포를 연결하는 게 좋을 것 같다.
이번달에, 데브옵스 교육을 들으면서 젠킨스와 깃을 연결해 배포 자동화하는 걸 배웠었다. 프로젝트가 조금 더 진행되면 검증용 서버와 운영용 서버를 나누어서, 배포 자동화도 해보고 SonnarSanner 같은 테스트 도구도 연결해 보려고 하려고 한다.

  • 암복호화

메세징 서버가 연락처를 직접 다루다 보니, 개인정보를 그대로 저장하는 건 적절하지 않다. 암호화 된 전화번호를 받아서 데이터 베이스에 저장하고, 인증된 사용자 또는 문자를 보낼 때만 전화번호를 복호화 할 수 있도록 변경이 필요하다.

  • Postman envoronments

포스트맨은 환경별로 변수를 지정할 수 있어서, 환경 별로 테스트를 용이하게 할 수있다. 예를 들어서, 테스트 할 때 사용한 http://{{public-ip}}:8080/contract/save 의 public-ip변수에 로컬 환경에서는 localhost를, 검증이나 운영 환경에서는 각 인스턴스의 등록해두고 사용할 수 있다. 

Comments