• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

/actuator/refresh 가 동작하지 않습니다.

23.12.12 08:57 작성 조회수 280

2

안녕하세요~

강의를 듣다가 제가 뭔가 잘못한건지 actuator에 refresh가 동작하지 않아 질문글을 남깁니다.

강의 2-10번 DB 비밀번호 암호화까지 문제 없이 잘 진행하다

재가동 없이 설정파일 갱신하는 부분을 진행하는데

item-service에서 build.gradle에 의존성 추가하고 bootstrap.yml에 설정 옵션 추가했는데

config-server 설정 파일 변경 후 postman 에서 refresh 요청을 날려도 response body 에는 []

빈 배열만 찍히고 별다른 문구가 없고 변경된 설정이 적용되지 않더라고요

강의를 봐도 크게 설정하는 부분이 많은건 아니어서 잘 적용된 것 같은데 작동하지 않는 원인이 콘솔에 찍히지 않아서 헤메고 있습니다.

 

 

build.gradle 의존성과 bootstrap.yml 에 설정 추가하고

config-server 실행시키고 item-service 실행시킨 후

 

설정 파일에 변경점을 주고

 

localhost:5000번으로 /actuator/refresh 요청을 날렸습니다.

 

그리고 물품등록 요청을 보내서 200코드 성공했는데 별도의 logs 폴더에 api-local2.log는 생기지 않았습니다.

 

강의와 다르게 한건 인텔리제이로 프로젝트 구성한 것과 스프링부트 마이너 버전만 달라서 크게 문제가 있지는 않을 것 같은데..

 

2-10 강의까지 해본 깃 주소도 올려봅니다.

https://github.com/doyoun8813/Microservice

답변 2

·

답변을 작성해보세요.

1

"file://경로"로 처리해서 해결하셨군요!
보통 classpath에 속하지 않은 경로에 있는 설정 파일을 바라볼 때
file://로 처리하곤 했습니다.
운영Live 리눅스 서버에 기동할 때 아래와 같이 폴더가 구성될 경우,
file://로 처리했습니다!
config-service
ㄴapp.jar
ㄴconf
ㄴitem-service.yml

이런 경우, yaml파일이 app.jar에 있는 게 아닌 app.jar 밖 (conf폴더)에 존재하여, 그럴 땐 아래와 같이 설정했습니다.
file://config-service/conf/item-service.yml

그래도 해결하셨다니 다행입니다!
인텔리제이에서 어떤 설정이 classpath 감지를 가로막고 있는 지 원인을 알게 되면, 다시 답글 달도록 하겠습니다.
강의 재밌게 봐주셔서 감사합니다 ㅎㅎ궁금하신 점은 언제든지 문의 부탁드리겠습니다~!

0

네, 안녕하세요! 내용은 잘 확인했습니다.

build.gradle에 진행하신 내용으로 제가 동일하게 진행해도 정상적으로 처리되는 것은 확인했습니다.

image

참고로 콘솔에는 다음과 같이 출력됩니다.

image

말씀하신 대로 소스는 정상적으로 보입니다만, 콘솔에 아무 것도 출력이 안 된다는 것은 item-service의 actuator가 config서버의 설정파일 변경을 제대로 인식 못 하는 것으로 판단됩니다.

몇 가지 아래 확인사항들에 대해서 확인이 필요해 보입니다.

  1. config-server 실행 후, http://localhost:8080/item-service/local 접속시, item-service-local.yml파일 내용이 잘 나오는 지 출력
    => 이 상태에서 item-service-local.yml 파일내용 수정 후, 다시 url 접속시 변경된 내용으로 바뀌는 지 확인

 

  1. item-service 실행 시, profile에 local모드로 잘 실행됐는 지 console 내용 확인


    => 실행 시 콘솔 시작 내용은 아래와 같습니다.
    Fetching config from server at : http://localhost:8080
    Located environment: name=item-service, profiles=[local], label=null, version=null, state=null
    => 여기가 local이 아닌 경우, item-service.yml 파일을 바라볼 수 있습니다.

    위 내용 확인 부탁드립니다. 소스 문제보단, 어떠한 설정이나 환경 문제일 것으로 추측됩니다.

     

권도윤님의 프로필

권도윤

질문자

2023.12.13

답변 감사드립니다 강사님.

제가 확인해 봤을 때

1번 사항에 config-server 실행 후, http://localhost:8080/item-service/local 접속시, item-service-local.yml파일 내용이 잘 나오는 지 출력

여기까진 무사히 파일내용이 출력됩니다.

하지만 item-service-local.yml 파일내용 수정 후, 다시 url 접속시 변경된 내용으로 바뀌어지지 않는 것을 확인했습니다.

이럴 경우 어느 부분을 살펴봐야 할까요?

알려주신 2번 내용은 local모드로 잘 실행되는 부분 확인하였습니다.

네~ 확인 감사합니다.
2번이 문제가 없다면, config-server 자체 문제일 가능성이 높아 보입니다.
내용을 변경했는 데 불구하고 인식을 못 한다는 건,
config-server가 classpath내 파일 수정에 대한 변경을 제대로 reload하지 못 하는 것으로 인지됩니다. 개발툴 때문에 그런 현상이 생기는 지는 확실치 않습니다만,
우선 classpath 내용에 대해 좀 더 인지할 수 있도록, 아래 프로젝트에 대해서 추가 작업을 시도해보셨으면 합니다.

  1. [config-server] > build.gradle 열기

  2. dependencies 블록내에 spring boot devtools 의존성 추가
    developmentOnly 'org.springframework.boot:spring-boot-devtools'image

  3. build.gradle 에 대해서 build 진행

  4. 재테스트 진행

권도윤님의 프로필

권도윤

질문자

2023.12.14

dependencies 블록내에 spring boot devtools 의존성 추가
developmentOnly 'org.springframework.boot:spring-boot-devtools'

 

위에 의존성을 추가해도 변화가 없어 찾아보았는데

정확한 이유를 찾을 수 없었지만 classpath:/config 경로대신 파일패스 절대경로로 설정하니 변경점을 확인할 수 있었습니다.

 

imagehttps://www.daddyprogrammer.org/post/4347/spring-cloud-msa-configuration-server/

 

imagehttp://localhost:5000/actuator/refresh 요청도 잘 처리되었고 변경된 로그파일이 생성이 잘 되었습니다.

 

인텔리제이에서 왜 클래스패스 경로로 지정하면 재시작없이 파일 변경이 안 되는건지 알고싶었지만 시간이 너무 뺏겨버려서 일단 파일 절대 경로로 한 번 진행해보고 어딘가에서 다시 막힌다면 이클립스로 다시 프로젝트 구성하여 강의 따라가 보려고 합니다.

귀중한 시간 내주셔서 감사합니다.

MSA 프로젝트는 도대체 뭔가.. 궁금하여 강의 듣고 있는데 ㅎㅎ 신기하기도 하고 재미도 있습니다.

즐거운 연말 보내시고 다시 궁금점이 생겼을 때 글 남기도록 하겠습니다.