⚙️Spring cloud config 두번째 이야기 - 잘쓰면 약💊 못쓰면 독☠️ 지난 포스팅에서 Spring cloud config(SCC)가 무엇인지, 이를 활용해 환경변수를 외부에서 관리
⚙️Spring cloud config 두번째 이야기 - 잘쓰면 약💊 못쓰면 독☠️ 지난 포스팅에서 Spring cloud config(SCC)가 무엇인지, 이를 활용해 환경변수를 외부에서 관리하는 이점에 대해 소개했습니다. 환경변수를 어플리케이션과 분리하여 관리하는 것은 매우 편리한 구조입니다. 서버가 아무리 늘어나도 서버별로 모두 동일한 환경변수를 제공할 수 있고, 일괄 수정도 편리하니까요.☺️ 과연 단점은 없는 것일까요?🤔 이번에는 Spring cloud config 도입시 고려해야할 부분들을 소개하려 합니다~ 첫번째 단점은 우선순위에 대한 이해가 필요하다는 것입니다. 회사 서비스에 적용하고 운영해본 결과 가장 많이 받은 질문이, "환경 변수를 변경했는데 적용이 안돼요." 라는 문의였습니다. (많이 왔어요 많이 많이 😩) 왜? 어째서? 분명 수정도 쉽고! 서버마다 작업할 필요도 없고! 서비스 배포도 필요 없다고 했을텐데..? 🤨 원인은 대부분 설정파일이 여러개일때 우선순위에 의해 설정정보가 덮어씌워지는 경우였습니다. 가장 큰 단점이라고 할 수 있습니다.👿 설정파일을 한곳에서 관리하자는 취지로 도입한 기술이, 오히려 설정파일이 관리되는 포인트를 한 군데 더 늘리는 효과를 가져왔거든요. (우선순위의 이해는 SCC의 운영의 필수요소!) 여러 곳에 있는 설정파일이 우선순위는 아래와 같습니다. 1. spring cloud config 2. 어플리케이션 소스내 설정파일 3. 서버내에 있는 설정파일(JVM 실행옵션으로 지정하는) 아래로 갈수록 우선순위가 높구요. 우선순위가 높다 = 가장 나중에 읽힌다. 즉 마지막으로 읽힌 값으로 덮어써진다! 🫢 따라서 특정파일을 아무리 수정해도 우선순위에 의해 적용이 안될 수 있는거죠. (spring, springboot 설정 우선순위는 대부분 '가까울수록, 구체적일수록 더 높게'의 정책을 따르고 있습니다.) 심지어 application-prd.yml, appication.yml, 서비스이름.yml 과 같이 여러 파일이 어플리케이션, 서버, 중앙저장소(=SCC) 여러곳에 산재되어 있다면 환경변수 추적은 더더욱 어려워집니다. (파일이름에 따른 우선순위도 있거든요😱) 개발조직이 클수록 여러 개발자가 함께 작업하게 되고, 개발자별로 환경변수를 추가하는 위치가 달라진다면 더더욱 복잡한 모양이 되겠죠. 두번째 단점은 git서버나 SCC의 장애가 다른 서비스로 전파된다는 점입니다. 단적인 예로, ⛔️ 설정파일을 제공해주는 config server가 죽으면? ⛔️ 설정파일을 저장하는 git repository에 문제가 생긴다면? 손잡이가 없어서 할일을 못하는 상황이 벌어지는거죠. (어이가 없네..? 😕) 장애 포인트가 한군데 늘어나는 순간입니다. (야호) 모든 상황에서 좋은 기술은 없습니다. 다만 많은 상황에서 좋거나, 특정 상황에서 최고의 대안이 되는 기술은 있을 수 있죠. spring cloud config도 그렇습니다. 환경변수 변경이 잦고, MSA와 같이 적용해야하는 서버가 많은 경우, 그리고 비교적 최신 springboot 기반으로 동작하는 서비스로만 구성된 곳에서는 SCC는 좋은 선택이 될 수 있습니다. 하지만 기존 레거시 설정파일이 많고, 여러곳에 산재한 경우, 개발인력들의 개선의지가 부족하고 새로운 정책 전파가 힘든경우, 먼저 이 환경을 개선하지 않으면 SCC는 오히려 독이될 수 있습니다. 보통 이런 글을 읽고나면 에이~ 안하는게 낫겠다~ 하는 경우도 많을텐데요, 그럼에도 불구하고 적극적으로 검토하자는 것이 저의 개인적인 의견입니다. 💁🏼♀️ 실보단 득이 많고, 무엇보다 환경변수를 일괄로 변경하거나 자주 변경해야할 때 매우 편리하거든요.🧞♂️ (운영중인 서비스의 환경변수들을 한눈에 볼 수 있는 기능도 있어요) 예를들어 DB가 바뀌어서 DB접속정보를 모두 바꿔야하는 경우, 각 서비스 담당자들 여러명이 작업해야 하는 것을(서버에 있는 경우는 서버마다...) 혼자서 몇 분만에 끝내버릴 수 있습니다. 🦸🏼♂️ : ? 👨🏻💻🧑🏼💻👩🏾💻👨💻👩🏻💻 : ... 휘유~ 쓰다보니 글이 길어졌네요 이만 이번 포스팅 + Spring Cloud Config에 대한 이야기는 마무리 하려고 합니다! 분량조절 대실패입니다...아무리봐도 글이 너무 길어졌어요 😂 간단한 내용이라고 생각했는데 드리고 싶은 말씀이 많았나봅니다. 🫠 긴글 읽어주셔서 감사하구요, SCC가 뭔지 궁금했거나 SCC 도입을 고민하는 분들께 작은 도움을 드렸다면 좋겠습니다! 🫶 그럼 다음에 또 만나요~ 👏