프로젝트를 하면서 내가 짠 코드를 프론트와 통합하게 되었다. 나는 내 로컬 주소가 프론트에서 접속이 될 거라 생각했고 그 주소로 통신을 시도했다. 하지만 로컬 주소는 특별한 설정이나 터널링 같은 방법을 사용해야 외부에서 내 주소로 접속을 할 수 있다. 그래서 프론트에서 내 로컬로 접속을 시도했을 때 에러가 떴다. 막막하던 와중 클라우드 컴퓨팅 에 대해 알게 되었고, AWS와 네이버 클라우드 플랫폼을 찾을 수 있었다. 그런데 클라우드 서비스를 처음 접해본지라 진입장벽이 높아 서버를 배포하는데 어려움이 있었다. 그러다 주위에서 간단하게 배포할 수 있는 CloudType에 대해 알게 되었다.
이제 내가 짠 코드를 CloudType에 배포하는 과정을 작성해보겠다. 그 전 클라우드 컴퓨팅에 대해 알아보자.
클라우드 컴퓨팅 서비스
는 인터넷을 통해 컴퓨팅 리소스와 데이터를 제공하는 서비스이다. 사용자가 컴퓨터 하드웨어, 소프트웨어 등의 리소스를 직접 구입, 관리, 유지할 필요 없이 필요한 만큼의 컴퓨팅 리소스를 요금제 형태로 이용할 수 있게 한다.
클라우드 컴퓨팅 서비스는 세 가지로 나눠진다.
Infrastructure as a Service (IaaS)
: 가상화된 하드웨어 리소스를 제공하는 서비스로, 서버, 스토리지, 네트워크 등의 기본적인 컴퓨팅 자원을 제공한다. 사용자는 이 위에 운영체제, 미들웨어 등을 올려 운영할 수 있다. 대표적인 예로는 Amazon의 AWS EC2, Google Compute Engine 등이 있다.
Platform as a Service (PaaS)
: 하드웨어와 운영체제를 포함한 플랫폼을 제공하는 서비스로, 사용자는 개발에 필요한 라이브러리, 도구 등을 제공받아 애플리케이션 개발에 집중할 수 있다. 대표적인 예로는 Google App Engine, Microsoft Azure 등이 있다.
Software as a Service (SaaS)
: 사용자가 인터넷을 통해 소프트웨어를 이용하는 서비스로, 사용자는 소프트웨어의 설치, 업데이트, 유지보수 등을 신경 쓸 필요 없이 해당 소프트웨어를 이용할 수 있다. 대표적인 예로는 Google Docs, Dropbox, Salesforce 등이 있다.
우리가 사용할 클라우드타입
은 각종 언어로 작성된 어플리케이션 및 SaaS 서비스를 빠르고 편리하게 배포할 수 있는 컨테이너 기반 PaaS 클라우드 서비스이다. VM 및 VPS 기반의 클라우드와는 다른 특성을 가지고 있다.
먼저 클라우드 타입 홈페이지로 들어가 시작하기를 눌러준다. 나는 깃허브 계정으로 회원가입을 했다. 로그인을 했다면 새 프로젝트를 만들어주자. 프로젝트에서 + 버튼을 누르면 된다.
프로젝트가 만들어졌다면 프로젝트 내의 파란색 + 버튼을 눌러서 배포를 시작하자. 먼저 mariadb 서버를 열어주자. 로컬 db를 쓰면 글 첫 문단의 이유로 통신을 할 수 없다.
설정해줘야 될 건 Root Password와 Database Name이다. Root Password에는 접속할 때 비밀번호를 입력해주고, Database Name에는 생성할 스키마의 이름을 입력해준다.
mariadb 배포가 성공적으로 완료되었다.
이제 TCP 외부 접속을 허용해보자. 프로젝트 우측 상단의 설정 버튼을 눌러 하단의 방화벽 항목에서 TCP 외부 접속을 허용해준다.
스프링부트 서버를 배포하기 전에 application.properties 설정을 변경해줘야 한다. 기존에는 자기 로컬 데이터베이스의 주소로 연결되어 있었을 것이다.
spring.datasource.url=jdbc:mariadb://svc.sel5.cloudtype.app:31838/User?characterEncoding=UTF-8?createDatabaseIfNotExist=true
spring.datasource.username=root
spring.datasource.password={password}
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.hibernate.ddl-auto = update
spring.jpa.show-sql=true
createDatabaseIfNotExist=true
설정으로 스키마를 자동생성해준다.이제 개발한 스프링부트 코드를 배포해보자. 나는 깃허브 레포지토리에 코드를 커밋해놓은 상태라서 내 Github 저장소 배포하기를 했다.
개별 브랜치를 적용해서 배포를 할 수도 있다. 언어/프레임웍을 Spring Boot로 설정해주고 자바의 버전도 설정해준다. 자신이 개발하고 있는 스프링부트의 java 버전과 맞게 해주면 된다.
Environment Variables(환경변수)에 TZ 와 설정을 희망하는 시간대 값을 입력하여 배포를 진행하면 환경변수로 설정된 값은 JVM 구동 시 주입되어 Spring 어플리케이션에 적용된다. TZ : Asia/Seoul 을 하게 되면 우리나라의 시간으로 설정이된다.
실행 중이 뜨면 성공이다.
실행 로그도 볼 수 있다.
이제 로컬 주소로 보냈던 요청들을 스프링 부트로 배포한 도메인 주소로 변경하여 요청을 보내면 똑같이 요청이 가능하다. 프론트에서도 도메인 주소로 적용하여 요청을 보내면 된다.
잘못된 부분이 있으면 댓글 부탁드립니다!
참고자료 : https://azure.microsoft.com/ko-kr/resources/cloud-computing-dictionary/what-is-cloud-computing