[논문 소개]마이크로서비스의 자동 식별을 위한 효과적인 재사용 기반 접근 방법

0

논문요약

목록 보기
4/6

📕 서론

Software Engineering 랩실에서 생활을 하면서 2022년 7월부터 내가 구상한 아이디어로 실험을 진행했다. 바로 TF-IDF(Text Mining 기법 중 하나)를 사용하여 모노리식 애플리케이션의 마이크로서비스를 식별하는 연구이다. 최근 소프트웨어 아키텍처에서 마이크로서비스 아키텍처가 급 부상함으로 인해, 대규모 기업들도 레거시 모노리식 웹 애플리케이션 또는 시스템을 마이크로서비스 아키텍처 형태로 전환하고 있다. 모노리식 아키텍처가 하나의 코드 베이스에 모든 기능과 서비스가 담겨있다보니 유지보수가 어렵고 기능의 추가나 삭제에 개발자들의 많은 노력이 들어간다. 따라서 모노리식 아키텍처를 마이크로서비스 아키텍처로 전환하여 웹 앱을 개선할 수 있다. 그래서 모노리식 아키텍처로부터 마이크로서비스를 식별하고자 하는 연구들도 많이 진행되고 있다. 하지만 이런 연구들은 모노리식 웹 앱의 다양한 정보를 활용하기 때문에 많이 복잡하다. 그리고 웹 앱의 모든 구성 요소를 고려하지 않는다. 반면에 본 논문이 제안하는 기법은 단순히 웹 앱의 구성 요소의 단어만 고려하기 때문에 단순할 뿐만 아니라 기존 연구들에서 고려되지 않는 구성 요소까지 고려한다. 제안하는 기법을 검증하기 위해서 오픈 소스 웹 앱 5가지에 대해서 실험을 진행하고 마이크로서비스 식별 결과를 평가한다.

📕 제안하는 기법에 대한 소개

제안하는 기법의 전체적인 과정은 Step1과 Step2 두 단계로 구분지을 수 있다. 간략하게 소개하자면 Step1에서는 웹 앱의 컴포넌트를 임베딩한다. 그리고 기존 기법의 식별 결과를 재사용하기 위한 준비를 한다. 임베딩 된 컴포넌트들 중 기존 기법의 식별 결과에 포함되어 있는 컴포넌트의 벡터와 식별 결과의 마이크로서비스 라벨을 활용하여 지도 학습 분류기(KNN)를 학습시킨다.
Step2에서는 기존 기법에서 고려되지 않는 컴포넌트들을 학습된 KNN을 통해 분류하게 된다.

📕📒 Step1 재사용을 위한 준비

먼저 웹 앱의 컴포넌트들을 TF-IDF 수치를 이용하여 임베딩한다. 컴포넌트의 소스코드로부터 단어들을 추출한다. 이 때, 본 논문에서는 특정 기준을 가지고 컴포넌트의 특징을 가진 단어들만 추출한다. 이후, 자연어처리와 동일하게 특수기호나 숫자를 제거하고, 소문자화, 불용어 제거 작업을 적용한다. 그러면 컴포넌트는 자기 자신에게서 추출된 단어들로 이루어진 하나의 문서로 볼 수 있다. 모든 컴포넌트에 대해서 단어 추출이 완료되면 컴포넌트 개수만큼 문서가 만들어지며, 해당 문서들의 집합이 TF-IDF의 입력으로 들어가게 된다. TF-IDF는 출력으로 Matrix를 내뱉는데, 하나의 행은 컴포넌트를 의미하며 하나의 열은 문서 집합에서 추출된 하나의 단어를 의미한다.

여기에서는 설명되지 않는 하나의 문제가 존재한다. 클래스나 jsp, html같은 경우에는 소스코드가 존재한다고 볼 수 있지만, table과 같은 것은 소스코드가 존재하지 않는다. 하지만 본 논문에서는 단어만을 이용하기 때문에 table 컴포넌트의 경우 table 명, table이 갖는 column 명들이 해당 컴포넌트에서 추출된 단어가 될 수 있다.

이때, Matrix의 i번째 행, j번째 열의 의미는 i번째 컴포넌트에서 j번째 단어의 TF-IDF 수치가 된다. 만약 j번째 단어가 i번째 컴포넌트에서 등장하지 않는다면 수치는 0이 될 수 있다. 최종적으로 Matrx의 사이즈는 n x 문서 집합에서 추출된 총 단어의 수가 된다. 또한 Matrix의 하나의 행이 컴포넌트를 나타내는 하나의 벡터 표현으로 간주된다.

다음으로는 기존 기법의 결과를 재사용한다. 사용된 기존 기법으로는 M2M, Bunch, MEM이 있다. 해당 기법들은 웹 앱의 모든 컴포넌트를 고려하지 않는다. 따라서 해당 기법들이 식별한 결과에는 웹 앱의 컴포넌트들 중 일부만 포함되어 있다. 앞서 웹 앱의 모든 컴포넌트가 임베딩이 완료되었으므로, 각 컴포넌트는 벡터 표현을 지닌다. 기존 기법의 결과에서 고려된 컴포넌트들의 임베딩 벡터와 해당 컴포넌트가 속하는 마이크로서비스 라벨(e.g. partition 0, partition 1,,,)을 활용하여 지도 학습 분류기 KNN을 학습시킬 수 있다. 추후에 학습된 KNN을 기존 기법이 고려하지 않는 컴포넌트를 분류하는데 사용한다.

📕📒 Step2 기존 기법에서 고려되지 않는 컴포넌트의 분류

기존 기법에서 고려되지 않은 컴포넌트의 임베딩 벡터를 Step1에서 생성한 KNN의 입력으로 하여 모두 분류 완료한다. 최종적으로 웹 앱의 모든 컴포넌트가 특정 마이크로서비스로 속하게 된다.

📕 평가

평가에는 정답(Ground-Truth)이 사용된다. 실험 대상 웹 앱의 일부는 마이크로서비스 버전이 따로 존재한다. 이러한 경우에는 마이크로서비스 버전을 참고하여 정답을 생성한다. 만약 마이크로서비스 버전이 존재하지 않는 경우에는 2~3명의 웹 앱 전문가들이 각각 정답을 만들고 서로 검증하면서 생성하게 된다. 마이크로서비스 식별 결과를 정답과 비교하여 정확도를 측정할 수 있다.

실험 대상 웹 앱으로는 기존 연구에서 많이 사용된 JPetStore2, JPetStore6, PetClinic, DayTrader와 추가적으로 ShoppingApp을 사용한다.
또한 재사용을 위해 사용된 기존 기법으로는 M2M, Bunch, MEM이 있다.

본 논문에서는 총 2개의 Research Question(RQ)에 답하고 있다.
RQ 1: 기존 기법보다 성능을 개선하는가?
RQ 2: TF-IDF를 사용한 임베딩이 효과적인가?
Research Question에 대한 답변은 본 논문에서 직접 찾아보길 바란다.

소감

실험과 논문 작성에 1년이 소요되었다. 사실 실험은 3~4개월 정도 걸렸던 것 같고, 논문을 작성하는게 7~8개월 정도 걸렸다. 원래는 한글로 논문을 다 작성하고 영문으로 바꾸어서 영문 저널에 투고하는게 목표였으나 시간이 너무 지체되는 바람에 실현하지 못했다. 해당 논문을 찾아보면 알 수 있듯이 논문이 15페이지로 굉장히 길다. 너무 세세하게 기술하다 보니 읽는 사람의 입장에서는 쉽게 읽힐 수 있지만 쓰는 사람입장에서는 공을 엄청 많이 들였던 것 같다.
첫 논문인데 아주 마음에 든다. 물론 교수님과 엄청난 개인 면담을 통해 이뤄낸 성과이기도 하다. 아쉬운 점은 기쁨을 즐길 시간도 없이 다음 논문, 또 다음 논문을 연달아 작업 중에 있어서 바쁘다는 점이다.
다음 논문은 SCI급 저널,, 음,, 이 전에 Scopus급도 한번 실어보고 싶다. 또한 영작 실력을 좀 발전시켜서 영문으로 작성할 수 있는 사람이 될 수 있으면 좋을 것 같다.

원문 링크 : https://doi.org/10.6109/jkiice.2023.27.6.673

profile
최악의 환경에서 최선을 다하기

0개의 댓글