Project

cloudtype을 통한 Spring boot + MariaDB 배포

기매_ 2023. 1. 18. 05:06

cloudtype 으로 배포하려고 찾아보니 생각보다 자료가 많이 없어서 직접 배포를 경험해보고 과정을 공유하려고 한다.

 

참고로 클라우드타입의 요금은 https://cloudtype.io/pricing 이곳을 확인하면 된다 !

토이(사이드) 프로젝트 배포용으로는 문제 없는 것 같다 ~

더불어 깃허브 자동 연동(?)과 같은 편리한 기능도 많이 제공하니 굳굳 !


클라우드타입 https://cloudtype.io

클라우드타입 이용가이드 https://help.cloudtype.io/guide


[1] 먼저 cloudtype을 통한 MariaDB 배포를 먼저 진행해야 한다. (공유 DB 만들기)

https://www.youtube.com/watch?v=m8LCXvPQe40 

1. 프로젝트를 생성한다

 

2. + 버튼을 누르고 MariaDB 선택 !

( https://app.cloudtype.io/create/list?preset=mariadb   아님 이걸로 시작해도 상관 없음 ! )

 


3. 배포할 MariaDB를 만들어주는 과정이다 !

 

3-1. 알맞은 버전 선택하고, Root 비밀번호 입력하면 된다

3-2. Database 이름을 지정하고 싶으면 더 많은 옵션을 클릭해서 이름을 설정해주면 된다.

3-3. 배포하기 클릭


4. 잘 배포된 모습 !

 

5. 이 다음 단계로 넘어가기 전에 꼭 설정해줘야 되는 것이 있다. : 프로젝트의 TCP/IP 접속 허용

5-1. 프로젝트를 클릭 후, 톱니바퀴 설정에 들어가 TCP 외부 접속 허용을 눌러줘야 한다 (필수필수)

이것을 허용해주지 않으면 remote에서 연결되지 않는다

 


6. MySQL Workbench 에 들어간다 ( DBeaver도 사용 가능 )

 

7. + 버튼을 눌러 New Connection을 생성해준다.

 

 

7-1. Connection Name은 원하는 이름 입력

7-2. Hostname과 Port 번호는 아까 cloudtype 에서 할당받은 것들로 똑같이 입력해야 한다.

7-3. Password - Store in Vault 클릭 후 비밀번호 입력

7-4. Test Connection으로 잘 연결되어있는지 test.

8. 이렇게 뜨면 성공 ! OK - OK 를 누르면 잘 연결되어 있는 모습을 확인할 수 있다.

이곳에서 SQL 문을 작성하여 데이터 CRUD를 할 수 있다.

 


공유 DB 사용 시 주의해야 할 점

 

참고로 이렇게 생성된 DB 의 캐릭터셋이 utf8이 아니여서 한글을 insert 하는데 오류가 발생하였다.

error code: 1366. incorrect string value: '\xec\x95\x84\xeb\xb0\x94...' for column `movie`.`movie_detail`.`movie_nm` at row 1 0.016 sec

 

DB의 캐릭터셋 설정을 바꿔주거나 아래 명령어를 통해 해당 테이블의 캐릭터셋을 utf8로 설정해주면 정상적으로 한글이 insert 된다 !

ALTER TABLE (테이블명) convert to charset utf8;

[2] 배포하기 전, 프로젝트에서 설정해줘야 하는 것들 !

https://github.com/maemae22/Movie/tree/Deploy

 

GitHub - maemae22/Movie: 영화예매사이트 개발 (사이드 프로젝트)

영화예매사이트 개발 (사이드 프로젝트). Contribute to maemae22/Movie development by creating an account on GitHub.

github.com

 

참고로 배포를 위한 고려를 따로 하지 않고 만들었던 프로젝트이기 때문에 몇가지 수정해줘야 할 것이 있었다

 

application.properties 파일 변경

 

기존에 localhost 8080 에서 개발할 때는 

application.properties 가 아래와 같이 되어있었다.

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3307/movie
spring.datasource.username=root
spring.datasource.password=0000

mybatis.mapper-locations=mybatis-mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case= true

spring.mvc.pathmatch.matching-strategy=ant_path_matcher

spring.jpa.properties.hibernate.format_sql=true

 

배포 시 환경변수들을 외부에서 입력해줄 수 있게 이를 바꿔줘야 한다.

 

 

application-properties

spring.profiles.active=${PROFILE}
spring.main.allow-bean-definition-overriding=true

 

application-staging.properties (상단 4줄을 수정해줘야함)

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://${DB_HOST}:${DB_PORT}/${DB_NAME}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}

mybatis.mapper-locations=mybatis-mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case= true

spring.mvc.pathmatch.matching-strategy=ant_path_matcher

spring.jpa.properties.hibernate.format_sql=true

 

${} 으로 되어있는 DB 설정값들은 추후 환경변수로 넣어줄 수 있게 변경한 것이다 !

 

 


 

[3] cloudtype을 통한 Spring boot + MariaDB 배포 방법

https://www.youtube.com/watch?v=HVZrp_PuCuo 

사용할 MariaDB가 배포되어 있는 프로젝트에서 + 선택 후 Spring Boot 선택

 

 

1. Github 저장소 선택 + branch 선택

 

2. 개발에 사용한 Java 버전 선택

 

3. 환경변수 설정

아까 properties 파일에서 ${}로 넣어뒀던 부분들을 여기서 추가해줘야 한다

- PROFILE : 어떤 properties 파일을 넣을건지 설정하는 곳. - 뒤의 값을 적어주면 된다.

                     ex. application-staging.properties 일 경우에는 staging 이라고 적기

(만약 따로 application.properties 설정을 하지 않고, application-staging.properties 만 있는 상태라면

키에 SPRING_PROFILES_ACTIVE 라고 적고, 값에 - 뒤에 나오는 값(staging)을 적어주면 된다. )

 

- DB_어쩌고 5가지 : 공유 DB(MariaDB) 생성 시 설정해준 값을 차례대로 적으면 된다.

 

 

4. Build Command 설정 : ./gradlew build 를 적어준다

( 기본적으로 cloudtype 에서는 build를 할 때 ./gradlew build -x test 를 통해 테스트를 제외하고 빌드를 하게 된다. 따라서 테스트를 위한 build command 를 설정 해줘야 한다. 설정 하지 않을 경우 문서가 생성 되지 않고 빌드에 실패하게 됨.)

./gradlew build

배포하기 버튼 클릭 !

 

배포가 잘 되었다면, 접속하기를 통해 배포된 사이트를 확인해보면 된다 !


https://help.cloudtype.io/403fc9f1-c9a7-4b8b-bf06-741c01a0a43e

profile 설정에 관한 도움말


[4] 내가 직면한 문제점

 

4-1. Build Fail (해결)

두번의 Build Fail을 경험하였는데,

첫번째 Fail 났을 때에는 자바 버전 문제인가 싶어 11버전에서 17버전으로 변경하였다.

하지만 두번째도 Fail 나는 것을 보고 자세히 에러 메세지를 확인해보니

MovieControllerTest 파일에서 오류가 나는 것을 확인하고,

해당 파일을 삭제하였다. (Test용이기도 하고, 원래 안쓰는 파일이였음)

 

그랬더니 Build Success를 볼 수 있었다 !!

 


4-2. url 이동이 제대로 안되는 것 같은 문제점 (아직 해결 못함)

 

내가 배포한 사이트 https://port-0-movie-1jx7m2gld0gpk48.gksl2.cloudtype.app

Github repository https://github.com/maemae22/Movie/tree/Deploy

 

https://port-0-movie-1jx7m2gld0gpk48.gksl2.cloudtype.app/movie

/movie 페이지를 내가 개발하였는데,

원래 이곳에 들어가면 ajax init() 함수로 movie_detail 테이블에 있는 모든 영화 정보가 반환되어

목록으로 출력되어야 한다.

 

하지만 정적으로 되어있는 부분만 나타났고, 나머지 ajax 로 채워져야 하는 부분은 전혀 나오지 않는 문제점이 있었다.

DB 랑 연결은 잘 되어있어서 DB연결 문제는 아닌 것 같은데 이런 문제점이 발생하는 나름의 이유를 추측해보았다. 

https://port-0-movie-1jx7m2gld0gpk48.gksl2.cloudtype.app/movie 로 들어가보면 정적으로 구현된 부분만 나오는 것을 확인할 수 있다

 

https://port-0-movie-1jx7m2gld0gpk48.gksl2.cloudtype.app/swagger-ui.html#/

+ Swagger 페이지도 500 에러로 정상적으로 나오지 않는다.

 

원인 (추측)

과거 Spring Legacy 프로젝트 ( https://github.com/maemae22/spring-project ) 를 하고

배포( http://itwill.xyz/team138/ )  까지 성공적으로 하였을 때에는

 

url 에서 ${pageContext.request.contextPath} 를 사용하여 context path 가 자동으로 지정될 수 있게 구현했었다.

 

 

 

하지만 배포한 현재 프로젝트에는 따로 context path 에 대해서 설정한 부분이 없다.

ajax 에서도 그냥 url 을

이런식으로 호출해놓은 상태 ...

 

따라서 local에서는 http://localhost:8080/api/movies 이런식으로 호출했었던 api 가 현재는

https://port-0-movie-1jx7m2gld0gpk48.gksl2.cloudtype.app/api/movies

 이런식으로 호출되면서 ?  뭔가 context path 설정이 안 맞아서 500 에러가 뜨고 값이 제대로 불러와지지 않는 것 같다 ...

 

따라서 Spring Boot 프로젝트에서 context path 관련 설정하는 법에 대해서 구글링을 열심히 해보았지만,

정확한 방법 발견 및 오류 해결은 아직 못했다 .....

 

추후 방법을 찾아 수정하고, 해결 방법을 공유하도록 하겠다 !


참고

https://velog.io/@gudcks0305/CloudType%EC%9D%84-%ED%86%B5%ED%95%9C-Spring-boot-MariaDB-%EB%B0%B0%ED%8F%AC

 

😎 CloudType을 통한 Spring boot + MariaDB 배포

😎 CloudType [ Spring + MariaDB ] ‼️ 이번에 소개할 내용은 CloudType 을 통한 배포에 대한 내용입니다. Spring , Gradle , MariaDB 를 사용하여 개발한 프로젝트를 CloudType 을 통해 배포해보겠습니다. C

velog.io

 


배포 화이팅입니닷