This is the Main Heading You Can Edit

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

 

HOW TO DEPLOY MICRONAUT APPLICATION

  1. Create an Oracle Cloud Compute Instance

모든 현재 기업과 기관들은 버추얼 머신에 부하 분산과 자동 크기 조정으로 기업의 어플리케이션 솔류션들을 제작하고 클라우드 기반에 구현하고 빌드하고 있습니다. 오라클에서 제공하는 OCI 역시 이와 마찬가지입니다. 오라클에서 제공하는 ‘컴퓨텅 호스트 관리’라는 말로 대신할 수 있는 버추얼 머신 컴퓨팅 인스턴스를 새로 생성하여 지금까지 제작한 마이크러넛 어플리케이션을 빌드해보기로 하죠. 참고로 컴퓨팅 인스턴스는 있죠.[1]

        Task 01 - How to create Oracle Cloud Compute Instance

  1. 우분투에서 제공하는 왼쪽에 있는 Favorites bar 중 Firefox 웹 브라우저 아이콘을 클릭하여 오라클 OCI 공식 웹 사이트로 이동합니다. 웹 사이트 주소는 다음과 같이 https://cloud.oracle.com/ 입니다. 혹은 http://oracle.com/cloud/ 로 이동하여 Try Oracle Cloud for free 버튼을 클릭합니다.

  1. 오라클 클라우드 무료 티어에서 오라클 클라우드 계정으로 들어가고자 Sign in to Oracle Cloud 버튼을 클릭합니다.

  1. 아래와 같이 Cloud Account Name 클라우드 계정 이름이 나타나면 본인이 생성한 계정을 확인하시고 Next 버튼을 누르세요.

  1. 만약 구현하는 과정에서 OCI 웹 사이트가 자동으로 세션이 종료되어 로그아웃 되었다면 다음과 같은 화면이 보일 겁니다.

  1. OCI 싱글 사인 온 사이트에서 Continue 버튼을 눌러 OCI 클라우드 컴퓨팅 인스턴스 생성을 시작해보죠.

  1. OCI 오라클 클라우드 메인 페이지에서 Launch Resources 를 클릭합니다.

  1. 다음과 같은 Create compute instance 창에서 VM 인스턴스를 새로 만들고자  인스턴스 생성 이름을 다음과 같은 내용(mnoci-instance-ci)을 기입합니다.

  1. SSH 키를 다운받아 로컬 사이트에서 원격 접속하고자 다음과 같이 Add SSH Keys 패널로 드래그 다운하신 뒤 Save Private Key 버튼을 클릭합니다. 물론 “Generate a key pair for me”라는 콤보를 클릭해야 합니다.


  1. 잠시 기다리시면 Openning ssh-key-****(년도월일).key 팝업창이 뜨면서 SSH 암호키 파일을 로컬 호스트로 받아 사용가능하도록 될 겁니다. Save File 라디오 버튼을 선택하시고 OK 버튼을 눌러 파일을 다운로드를 시작합니다.

  1. 다운이 진행 중이거나 완료되었다면 확인하고자 웹 브라우저 창 오른쪽 위 메뉴 바 중 다운로드 진행바를 클릭합니다. 그후 아래와 같이 암호키 파일을 보았다면 키 이름을 클릭하세요.

  1. 다음과 같이 본인만 가지고 있어야 할 ssh 키 인증 파일을 받았다면 정상적으로 로컬 호스트에 다운받은 것입니다.

  1. 다시 Create VM Instance 창으로 돌아와서 아래와 같이 Create 버튼을 눌러 VM 인스턴스 생성을 완료 합니다.

  1. 잠시 기다리시면 Provisioning -> 인스턴스 일반 정보 사이트 화면에서 인스턴스 엑세스 할 수 있는 처리를 하고 있는 것을 보실 수 있으며, Public IP Address 가 자동으로 생성된 것을 보실 수 있습니다. 이제 인스턴스 정보 창에서 Public IP Address 주소 옆에 Copy 버튼을 눌러 자신의 고정 아이피 주소를 로컬 호스트에 임의의 폴더에 txt 파일을 만들어 저장하시길 바랍니다. 추후 해당 아이피 주소로 마이크로넛 웹 어플리케이션을 디플로이할 때 유용하게 쓰일 것입니다. (클릭 후 Copied 라고 바뀌는 것을 볼 수 있습니다.)

  1. 정확한 Ip address 주소를 사용하도록 subnet 주소를 기입할 것입니다. Subnet 관련된 일련번호를 클릭하여 subnet 주소창으로 들어갑니다.

  1. 아래 화면은 subnet 세부 사항 화면입니다. 내용을 읽어보신 뒤 마우스를 아래로 드래그 하여 Security Lists 리스트 중 Default Security List for vcn-2021092-1127 과 같은 Subnet Security 이름을 클릭하세요.

  1. 방화벽 규칙에 관련된 내용들 중 Add Ingress Rules 버튼을 눌러 새롭게 수신 규칙을 추가합니다.

  1. 해당 화면에서 다음과 같이 Source Type 을 CIDR로 선택하고, Source CIDR은 0.0.0.0/0으로 기입합니다. Destination Port Range 포트 범위는 8080으로 입력하시고 Add Ingress Rules 버튼을 눌러 수신 규칙을 눌러 저장합니다.

  1. 아래 화면처럼 리스트 중 맨 아래에 8080 포트와 같은 내용들을 추가한 내용이 나타나게 됩니다. 가상 VM 인스턴스 관련 클라우드 정보를 생성하였습니다.

  1. 인스턴스에 접속할 수 있는 SSH Key Pair 로서 다운 받아 두었던 Private Key 곧 공유키 디렉토리로 이동해봅니다. 개인적으로 /neu-atp/sshkey 폴더 디렉토리에 담아두었습니다. 우분투 화면에서 ssh key 파일을 저장했던 폴더로 이동하여 마우스 오른쪽을 눌러 드랍 메뉴 중 Open in Terminal 을 클릭하여 어플리케이션 디플로이 작업을 진행합니다.

  1. 우분투에서 제공하는 터미널 창에서 다음과 같이 읽기모드로 되어 있는 ssh key 파일을 수정 모드로 전환하고자 리눅스 명령어 chmod를 추가하여 모드를 전환합니다. 물론 계정 암호를 묻는 질문에 암호를 입력하시고 다음으로 진행합니다.

~/neu-atp/sshkey$ sudo chmod 600 ssh-key-2021-10-12.key

  1. 리눅스 커멘드 라인 명령어인 scp 를 사용하여 SSH 키와 함께 오라클 인프라스트럭쳐와 원격 접속을 진행하고자 다음과 같은 명령어를 던져봅니다.

~/neu-atp/sshkey$ scp -i ssh-key-2021-10-12.key -r /tmp/wallet opc@[ip address]:/tmp/wallet

[참고사항] ssh key 파일의 디렉토리 내에서 실행하였음으로 디렉토리 경로가 없이 SSH 암호키 파일을 입력하는 것이며 opc@ 다음의 IP 주소는 VM 인스턴스 생성시 자동 생성해준 IP 주소입니다. 반드시 동일한 주소를 입력하시길 바랍니다.

네트워크 상으로 시스템 보안을 지나 디렉토리와 파일을 이송시킬 수 있도록 scp 커멘드 라인 툴을 사용하여 ssh 커넥션을 맺어보겠습니다. opc@ public ip address 명령어는 공식 서브넷 위에 존재하는 OCI 인스턴스를 접속하기 위해 SSH를 사용하게 되며 사용자의 로컬 개발 환경에서 시작할 수 있습니다.

scp <option> <file or directories> user id@[your ip address]:/tmp/wallet

  1. 다음과 같은 질문 창이 나타나면 yes 버튼을 누릅니다. 이는 opc 연결 접속을 계속 진행하겠는지 묻는 질문입니다.

  1. 진행 에러가 없다면 다음과 같은 내용으로 opc 접속 준비를 갖추게 되었습니다. 물론 자신의 로컬 호스트 파일을 인스턴스 ip address 관련 서버에 올려준 것도 연결 준비를 하게 된 것입니다.

  1. 인텔리제이 터미널로 다시 돌아와 그래들 빌드 툴을 사용하여 로컬 머신에서 jar 파일을 실행하고자 nue-atp 프로젝트 폴더에서  ./gradlew assemble 이라고 명령을 던지세요.

[참고로] 그래들 타스크 중 어샘블 타스크는 프로젝트 안에 존재하는 모든 소스들을 압축파일로 묶어 조립하는 과정입니다. 바로 application jar 파일로 모든 소스들이 하나로 묶는 것이죠.

  1. 다음으로 할 작업은 이제 보안작업을 진행하면서 어셈블리 명령어로 압축을 묶어두었던 jar 파일을 opc 오라클 원격지 호스트로 보안 업로딩하는 작업을 진행할 것입니다. ls -l 리눅스 명령어로 sshkey 파일이 담겨 있는 폴더를 확인합니다.

  1. 이제 jar 파일을 찾고자 다음과 같은 명령어들을 던져 파일이 생성되었는 지 확인합니다.  어플리케이션 전체 압축된 neu-atp-0.1-all.jar 파일이 존재한다면 경로와 jar 이름을 기억 하였다가 추후 scp 원격 접속 연결시 유용하게 사용하시길 바랍니다.

  1. 이제 scp 명령어를 던져서 원격지 접속을 진행하고자 다음과 같이 명령어를 입력하고 엔터키를 누르세요.

 

~/neu-atp/sshkey$ scp -i ~/neu-atp/sshkey/ssh-key-2021-10-12.key ~/neu-atp/build/libs/neu-atp-0.1-all.jar opc@[ip address]:/home/opc/neu-atp-01.jar

[참고 사항]

build/libs/neu-atp-0.1-all.jar 파일은 로컬 호스트의 jar 파일과 그 경로를 지정한 것이고, /home/opc/neu-atp-01.jar 경로와 파일명은 사용자에 의하여 지정된 임시 경로와 jar 명입니다. 사용자는 경로와 파일을 임의로 지정할 수 있습니다.

  1. 사용자는 로컬 호스트에서 원격으로 VM 인스턴스로 연결하여 접속하고자 아래와 같은 SSH 명령어로 들어가보도록 하겠습니다.

ssh -i ~/neu-atp/sshkey/ssh-key-2021-10-12.key opc@[ip address]

  1. 아래 화면처럼 ssh 명령어로 opc@mnoci-instance-ci 라는 사용자가 VM 인스턴스 명을 입력한 내용으로 접속이 된 것을 볼 수 있습니다.

  1. VM 인스턴스 내에 사용자가 다음 명령으로 인스톨된 패키지들의 업데이트를 체크하는 yum 패키지 매니저(the YUM package manager with the check-update subcommand)를 던져 가능성있는 모든 레파지토리로부터 업데이트할 수 있도록 도와주는 작업을 하죠.

[opc@mnoci-instance-ci ~]$ yum check-update

  1. 현재 인스턴스 내 네이티브 이미지로 된 그랄VM 엔터프라이즈를 설치하고자 다음과 같은 명령어를 던집니다.

[opc@mnoci-instance-ci ~]$ sudo yum install graalvm21-ee-11-native-image.x86_64

  1. 설치 중 다음과 같이 다운로드 사이즈와 인스톨된 사이즈를 보여주고 있습니다. 합계는 대략 1G 정도의 하드 용량을 차지하고 있습니다. Is this OK? 묻는 질문에 키보드 y 를 누르세요.
  2. 전송제어 프로토콜인 TCP와 8080 포트를 연결시키고자 firewall-cmd 명령어를 던져봅니다.

[opc@mnoci-instance-ci ~]$ sudo firewall-cmd  --permanent -- zone=public --add-port=8080/tcp

  1. Firewall 를 재로딩하고자 다음과 같은 명령어를 던져봅니다.

[opc@mnoci-instance-ci ~]$ sudo firewall-cmd --reload


  1. VM인스턴스 내에서 파일들을 확인하고자 ls 리눅스 명령어를 던져 해당 디렉토리에서 파일들을 확인해 봅니다.
     
  2. 이제 해당 디렉토리에 jar 파일이 잘 업로딩 되었는지 확인한 뒤 다음과 같은 명령어로 마이크로넛 자바 클라우드 웹 어플리케이션을 실행시켜봅니다.

[opc@mnoci-instance-ci ~]$ java -jar neu-atp-0.1.jar

  1. 웹 사이트를 열어 owners 그리고 pets 라는 엔드포인트 url을 입력해봅니다.



  1. 더불어 오너 컨트롤러에서 findByName 메소드를 이용하여 오너 레파지토리의 필요한 이름을 가져오는 필터 기능을 사용하고자 다음과 같이 엔드포인트 URL을 입력합니다.

다른 오너의 이름도 입력하여 찾아보기로 합니다.


  1. 역시 팻 컨트롤러에서 레파지토리 findByname 메소드를 사용하는데, 이는 curly bracket  {} 네임 필터기능을 사용하여 해당 엔드포인트 URL에 팻의 이름 세 가지를 입력해봅니다.
    한가지 흥미로운 사실은 팻의 엔티티 연관관계 매핑을 오너 엔티티 객체와  Many to one 으로 설정하여 Ruby 관련 오너 네임을 JSON 파일에서 볼 수 있습니다. 애완 팻 중 Bella를 찾아보도록 Bella라고 입력하여 엔터를 쳐서 해당 JSON 파일을 열어보죠.
  2. 리모트머신의 실행 커멘드를 사용여 접속하고자 다음과 같은 명령어로 던져 접속해봅니다.

~/neu-atp/build/libs$ ssh -i ~/neu-atp/sshkey/ssh-key-2021-10-12.key opc@[ip address]

  1. 리모트 머신으로 접속이 된 프롬프트에서 curl 명령어를 던져 URL 접속으로 정상적인 엔트포인트 위치를 확인할 수 있습니다.

[opc@mnoci-instance-ci ~]$ curl -i http://[ip address]:8080/pets

[opc@mnoci-instance-ci ~]$ curl -i http://[ip address]:8080/pets/Bella

[opc@mnoci-instance-ci ~]$ curl -i http://[ip address]:8080/pets/Ruby

[opc@mnoci-instance-ci ~]$ curl -i http://[ip address]:8080/pets/Max

[opc@mnoci-instance-ci ~]$ curl -i http://[ip address]:8080/owners

[opc@mnoci-instance-ci ~]$ curl -i http://[ip address]:8080/owners/BillyLee

[opc@mnoci-instance-ci ~]$ curl -i http://[ip address]:8080/owners/James