본문 바로가기
[IT]/AWS

[AWS] RDS & Travis (좌충우돌 배포 성공기)

by dop 2021. 4. 27.

AWS, Travis 배포

SSAFY에서 프로젝트를 진행하면서 항상 배포는 다른 팀원이 담당했기 때문에, 정확하게 어떤 과정으로 배포하는지 알 기회가 없었다. 이번에 리팩토링을 하면서 AWS EC2, S3, RDS, CodeDeploy 등을 활용하여 배포를 진행하였고, SSAFY에서는 jenkins서버를 따로 제공해줬기 때문에 그것을 사용했지만, 개인적으로 jenkins를 사용하려면 EC2 인스턴스가 추가로 필요하기 때문에 Travis로 진행하게 되었다.

80번 만에 배포 성공

서적과 구글링을 하면서 80번만에 제대로 배포에 성공할 수 있었다.

80번만에 배포 성공!

배포를 80번이나 하게된 가장 큰 이유는, RDS로 배포 테스트를 진행하려고 했기 때문이었다. 로컬 환경, EC2 환경에서는 문제없이 실행되었지만 Spring Boot Test 코드에서 RDS를 접근만 하면 오류를 내뱉어 냈다. 처음에는 RDS와 SpringBoot의 방언 불일치에서 발생하는 줄 알고, 몇 시간 동안 방언 설정을 바꿔가며 배포를 진행했지만, 결과는 항상 fail이었다.

심지어 변경할 때 마다 오류 로그가 변경돼서 잘 짚었다고 생각했다...

MariaDB 버전
rds : 10.4 / spring 기본설정

TestDBInit > 유저 데이터 생성 FAILED
    java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:132
        Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1786
            Caused by: org.hibernate.service.spi.ServiceException at AbstractServiceRegistryImpl.java:275
                Caused by: org.hibernate.HibernateException at DialectFactoryImpl.java:100
2021-04-26 11:32:57.766  INFO 4758 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'

MariaDB 버전
rds : 10.4 / spring 10.3 명시 (spring.jpa.hibernate.dialect: org.hibernate.dialect.MariaDB103Dialect)

TestDBInit > 유저 데이터 생성 FAILED
    org.springframework.transaction.CannotCreateTransactionException at TestDBInit.java:86
        Caused by: org.hibernate.exception.JDBCConnectionException at TestDBInit.java:86
            Caused by: java.sql.SQLNonTransientConnectionException at TestDBInit.java:86
                Caused by: java.sql.SQLNonTransientConnectionException at TestDBInit.java:86
                    Caused by: java.net.SocketTimeoutException at TestDBInit.java:86

아무튼! 지금까지 결론은 RDS에 접근권한을 줘야 하는데 Travis서버가 어떤 ip로 실행하는지 알 수 없었고, 3306 포트를 전부 열어두기엔 문제가 생길 가능성이 크다고 판단했다. 배포 테스트 관련해서 여러 자료를 찾던 중, 테스트만 h2 DB의 인메모리 설정으로 실행하고, 실 서버는 RDS를 이용하는 방법으로 해결할 수 있었다.

[참고서적] : 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

728x90