티스토리 뷰

반응형

이번에는 Spring Cloud Config 사용 시의 주의사항 중 하나인 baseDir 설정에 대해 알아보겠습니다.

 

 

 

 

1. Spring Cloud Config 사용 시의 주의사항(baseDir 설정)


[ Spring Cloud Config Server의 동작 방식 ]

Spring Cloud Config Server는 기본적으로 파일 저장소를 클론하여 관리한다. 그래서 클라이언트가 설정 정보를 요청하면 클론받은 디렉토리의 파일들을 읽어 값을 반환한다. 별도의 설정이 없다면 클론받은 폴더는 config-repo-<randomId>의 형태로 시스템의 임시 저장소에 쓰여진다고 공식 문서에 설명되어 있다. 예를 들어 리눅스 환경이라면 /tmp/config-repo-<randomId>에 저장된다. 

 

 

 

 

 

[ 문제 상황 및 해결 방안 ]

문제 상황 (500 Internal Server Error)

Spring Cloud Config Server를 운영하다보니 주기적으로 특정 시간이 지나면 500 에러가 발생하기 시작하였다.

 

 

 

로그를 살펴보니 파일을 클론받은 repo를 찾을 수 없다는 것인데, 그 원인은 OS로 사용중인 CentOS 때문이였다. 스택오버플로우에서 찾아보니 CentOS는 주기적으로 /tmp 를 지켜보고, 자동으로 청소하는 Cron이 등록되어 있다고 한다. 그래서 특정 시간이 지나도 사용되지 않는 파일 및 디렉토리들이 삭제된다는 것이다.

2022-06-30 19:17:01,090 ERROR org.apache.juli.logging.DirectJDKLog [http-nio-8888-exec-2] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Cannot load environment] with root cause
org.eclipse.jgit.errors.RepositoryNotFoundException: repository not found: /tmp/config-repo-5689147535204177175
        at org.eclipse.jgit.lib.BaseRepositoryBuilder.build(BaseRepositoryBuilder.java:627)
        at org.eclipse.jgit.api.Git.open(Git.java:93)
        at org.eclipse.jgit.api.Git.open(Git.java:73)
        at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository$JGitFactory.getGitByOpen(JGitEnvironmentRepository.java:782)
        at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.openGitRepository(JGitEnvironmentRepository.java:638)
        at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.createGitClient(JGitEnvironmentRepository.java:613)
        at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.refresh(JGitEnvironmentRepository.java:296)
        at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.getLocations(JGitEnvironmentRepository.java:262)
        at org.springframework.cloud.config.server.environment.MultipleJGitEnvironmentRepository.getLocations(MultipleJGitEnvironmentRepository.java:139)
        at org.springframework.cloud.config.server.environment.AbstractScmEnvironmentRepository.findOne(AbstractScmEnvironmentRepository.java:55)
        at org.springframework.cloud.config.server.environment.MultipleJGitEnvironmentRepository.findOneFromCandidate(MultipleJGitEnvironmentRepository.java:188)
        at org.springframework.cloud.config.server.environment.MultipleJGitEnvironmentRepository.findOne(MultipleJGitEnvironmentRepository.java:173)
        at org.springframework.cloud.config.server.environment.CompositeEnvironmentRepository.findOne(CompositeEnvironmentRepository.java:64)
        at org.springframework.cloud.config.server.environment.EnvironmentEncryptorEnvironmentRepository.findOne(EnvironmentEncryptorEnvironmentRepository.java:61)
        at org.springframework.cloud.config.server.environment.EnvironmentController.getEnvironment(EnvironmentController.java:134)
        at org.springframework.cloud.config.server.environment.EnvironmentController.defaultLabel(EnvironmentController.java:110)

 

 

 

 

 

해결 방안 (baseDir 설정)

스프링 클라우드 공식 문서에서는 이미 이와 관련된 내용을 Warning으로 다루고 있다. 아래의 내용을 보면 OS에 따라서 주기적으로 임시 디렉토리가 삭제될 수 있으니, basedir을 설정해주라는 것이다.

 

 

즉, 설정 파일을 클론받는 위치를 직접 지정해서 임시 디렉토리에 받지 말라는 것이다. 그러므로 Config Server의 설정 파일에서 다음과 같이 baseDir을 설정해주면 문제가 해결된다. 아래에서는 프로젝트 폴더 하위의 repo 폴더에 클론받도록 해두었다.

server:
  port: 8888
spring:
  cloud:
    config:
      server:
        git:
          default-label: master
          uri: https://github.com/MangKyu/spring-cloud-config-sample
          search-paths: test-cloud-config-file/**
          basedir: ./repo

 

 

 

 

이번에는 Spring Cloud Config를 사용하면서 주의할 점에 대해 알아보았습니다. 전체 소스 코드는 깃 허브를 참고해주세요! 추가로 혹시 피드백 주실 부분 있으면 환영하겠습니다. 감사합니다:)

 

 

 

관련 포스팅

  1. Spring Cloud Config 도입하기 및 private 레포지토리 SSL로 연결 설정 예시
  2. Spring Cloud Config 설정 파일 내용을 갱신하는 방법, Spring Cloud Bus 없이 자동 갱신하기
  3. Spring Cloud Config 사용 시의 주의사항 및 500 에러 (Internal Server Error)

 

 

반응형
댓글
댓글쓰기 폼
반응형
공지사항
Total
2,853,142
Today
293
Yesterday
4,328
TAG
more
«   2022/08   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
글 보관함