배포 시도 시 DB 연결이 되지 않아요...

호기성세균·2024년 4월 25일
0

트러블슈팅

목록 보기
13/20
post-thumbnail

배경

Docker Image를 통한 배포 과정에서 배포된 컨테이너에서 DB 연결이 되지 않는 문제가 발생하였습니다.

문제 사항

  • JDBC 환경 설정 오류
Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)
  • 빈 생성 실패
Error creating bean with name 'jwtAuthenticationFilter' defined in URL [jar:nested:/app.jar/!BOOT-INF/classes/!/com/final_10aeat/global/security/jwt/JwtAuthenticationFilter.class]: Unsatisfied dependency expressed through constructor parameter 1: Error creating bean with name 'memberDetailsProvider' defined in URL [jar:nested:/app.jar/!BOOT-INF/classes/!/com/final_10aeat/global/security/principal/MemberDetailsProvider.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'memberRepository' defined in com.final_10aeat.domain.member.repository.MemberRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Cannot resolve reference to bean 'jpaSharedEM_entityManagerFactory' while setting bean property 'entityManager'

시도

1. 배포 환경에서 프로필이 정상적으로 develop 으로 실행되는지 확인

  • 문제 파악을 위한 콘솔 출력 로그를 DEBUG 레벨로 변경
  <root level="DEBUG">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="RollingFile"/>
  </root>
  • 실제 로그
2024-05-08T08:03:56.439Z  INFO 1 --- [           main] c.final_10aeat.Final10aeatApplication    : The following 1 profile is active: "develop"
  • develop profile로 실행 되는것을 확인 함

2. yml에 실제 URL과 Password를 입력

  • 정상적으로 실행 됨
  • 하지만 깃에 실제 DB의 URL과 비밀번호가 남게됨
  • yml에 DB 환경설정이 정상적으로 입력되지 않는다는 사실을 확인

3. 파일 중 의심되는 항목들 변경

  • 워크플로우 yml 파일의 secrets.값 변경
  • Docker 이미지 내부에 빌드되는 application.yml 확인
    • Docker 이미지 내부의 app.jar을 압축해제 파일로 압축 해제
    • classes 내부의 application.yml에 입력된 값 확인
    username: ${LOCAL_DB_ROOT_USERNAME}
    password: ${LOCAL_DB_PASSWORD}
- 값이 그대로 빌드되는것을 확인함
  • DokcerFile의 환경변수 값 변경

결론

  • 환경변수 설정의 문제였음
  • 도커 이미지가 빌드될 때 devleop profile이 올라가고, 이를 워크플로우 yml에서 빌드와 푸시를 실행하고, EC2에서 이미지를 실행시킴.
  • Dockerfile에서 주입되는 환경변수와 application.yml의 변수가 서로 이름이 달라 발생한 문제
    image
    image
  • yml에서 주입받는 변수명과 dockerfile의 변수명을 일치시켜 해결
    image
    image
  • Dockerfile에서는 주입받는것을 가정해 기본적으로 빈 텍스트로 작성
profile
공부...열심히...

0개의 댓글