/profile 로 접근해서 profile이 잘 나오는지 확인하자!
ProfileController를 만들어주고 해당 기능이 문제가 없는지 테스트를 만들어놓은 후에 commit&push를 하니
com.example.board_project.ProfileControllerTest > profile은_인증없이_호출된다 FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:98
Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1804
Caused by: javax.persistence.PersistenceException at AbstractEntityManagerFactoryBean.java:421
Caused by: org.hibernate.exception.JDBCConnectionException at SQLStateConversionDelegate.java:112
Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException at SQLError.java:175
Caused by: com.mysql.cj.exceptions.CJCommunicationsException at NativeConstructorAccessorImpl.java:-2
Caused by: java.net.ConnectException at PlainSocketImpl.java:-2
알고보니 build.gradle에서
tasks.named('test') {
useJUnitPlatform()
}
이부분이 주석처리되어있었다 이전에 테스트가 아무것도 없을때 켜놓으니 문제가 발생해서 주석처리 해놓았던것을 잊어버렸다.....
주석처리를 풀어주고 진행하니
정상적으로 빌드가 됐고 s3와 codedeploy에게도 전달이되었고 프로젝트가 성공적으로 배포가 되었다.
현재 EC2환경에서 실행되는 profile값은 default입니다. 이 profile은 travis CI 배포 자동화를 위한 profile이니 무중단 배포를 위해 profile 2개를 생성해줍니다.
배포때마다 엔진엑스의 프록시 설정(스프링 부트로 요청을 보내는)이 순식간에 교체됩니다. 프록시 설정이 교체될 수 있도록 설정을 추가해보자.
nginx.conf를 수정하다가 실수로 내용의 반절정도가 사라지고 저장되었다.
이를 복구하는 방법을 찾다가 결국 방법을 발견하지못하고 nginx를 전체 삭제시키고 다시 설치했다...
재설치 후 nginx.conf 수정
&service_url은 include된 service-url.inc 에서 갖고온다.
service-url.inc 내용
무중단 배포 스크립트는 기능별로 총 5개로 구분한다.
진행중에 health.sh 에서 사용하는 Actuator 라는 springboot의 강력한 기능을 알게되었다.
기능 :
SpringBoot 어플리케이션의 상태를 실시간으로 확인할 수 있다.
현재 Context에 등록된 Bean 확인, 사용중인 Heap 사이즈, 최근 요청한 HTTP 상태 등등 관련한 모든 정보를 볼 수 있다.
속성값
이 속성값들을 사용해서
이렇게 정보를 확인할 수 있다!!
이 능력을 활용해서
health.sh 를 보면
RESPONSE=$(curl -s http://localhost:${IDLE_PORT}/profile)
# #/health의 결과는 {"status":"UP"}와 같이 나옵니다.
#이는 저희가 처음에 추가한 org.springframework.boot:spring-boot-starter-actuator 의존성 덕분입니다.
UP_COUNT=$(echo ${RESPONSE} | grep 'real' | wc -l)
이렇게 응용할 수가 있습니다!!
최대한 천천히 이해하면서 쉘 스크립트를 작성했지만 아직 많이 부족한 것 같다.
일단 진행이 중요하니 문제없이 진행된후 천천히 다시 공부하자
이제 모든 스크립트를 작성하고 배포 테스트를 진행해보자!!