Properties,YAML 포멧 변환기

Kimtaeyeon·2022년 4월 23일
0

서버 운영 환경에 따라 property를 유동적으로 주입하고 싶을 때, ${변수명:기존 값}의 형태로 properties,YAML을 변경해주는 프로젝트

프로젝트 GIT

https://github.com/taenyeon/propertiesAndYAML_Format_Parser

📌개발 취지

회사내에서 대규모 이관이 계획되었다.
이때 문제점으로 나온것이 총 2가지가 있다.

1. 향후 관리를 생각하여 MSA 환경에서 여기저기 분산된propertiesyml 설정 파일들을 통합해야한다.
2. 현재 프로젝트의 GIT을 같이 공유하는 방향으로 설정 파일들을 이관 환경에 맞게 유동적으로 변경할 수 있어야한다.

이를 해결하기 위해서는 설정 파일들이 AWS,Docker 와 같은 여러 환경에 따라 값을 주입받을 수 있도록 해야하며,
그렇게 하기위해선 모든 propertiesyml 파일을 값을 주입받을 수 있는 형태로 수정할 필요가 있었다.
현재 프로젝트에는 수십개의 API 서버가 서로 통신을 주고받고 있으며 개발, 테스트, 실용화등 여러 쓰임에 따라 하나의 API 서버가 여러 형태로 존재하고 있다.
그렇기때문에 사람이 일일이 수정하는것보단 자동화를 하면 변수명도 같은 패턴으로 통일하여 추후에 공통으로 사용되는 property 에 대해서 Global 변수로 지정하는 방향으로 진행할때도 편리할것으로 예측된다.

📌작동 원리

YAML의 경우에는 StringMap의 조합으로 깊이를 구성하고 있기 때문에, 실제 값인 String과 구조 형태의 Map을 구분하는것이 중요했다.
그래서 value 값에 따라 다음과 같이 동작할 수 있도록 정리했다.

if) Map의 value 값으로 String이 올 경우 -> String 값 변경
if) Map의 value 값으로 Map이 올 경우 -> 재귀함수를 통해, value가 String 일떄까지 반복

properties의 경우에는 YAML과 달리 모든 깊이를 '.'으로 표현하여 간단한 Map 형태로 저장해놨기 때문에 조금 더 간단하였다.
분기가 따로 필요없이 Map의 모든 값들을 변경만 해주었다.

📌개선점

변수명을 어떻게 넣어주느냐에 따라서 장단점이 존재하기 떄문에 더 연구가 필요할것으로 보인다.

변수를 지정하는 부분에서 모든 깊이로 변수명을 작성할 경우, 중복값이 절대 생기지 않는다는 장점이 있다.
단점으로는 변수명이 너무 길어진다는 단점이 존재한다.

반대로 일정 깊이만 변수명으로 작성할 경우, 변수명을 짧게 만들 수 있다는 장점이 있다.
단점으로는 상황에 따라 중복값이 생길 수 있는 여지가 있다.

profile
신입 BackEnd 개발자입니다.

0개의 댓글