[논문 요약] Identification of Microservices from Monolithic Applications through Topic Modelling 을 읽고,,

0

논문요약

목록 보기
1/6

🖥 접하게 된 배경

논문에서 관련 연구를 작성하면서 마이크로서비스 식별과 관련된 논문을 찾게 되었고, 읽게 되었다. 본 글에서는 평가를 제외하고 해당 논문에서 모놀리식 애플리케이션을 어떻게 마이크로서비스로 식별하는지 간단하게 다루도록 한다.

🖥 구성

본 논문에서는 마이크로서비스를 식별하기 위한 과정을 크게 3가지로 나눈다.

첫번째는 정보 추출(Extraction Information)이다. 이 과정에서는 소스코드를 정적분석하여 얻을 수 있는 정보들을 추출한다.

두번째는 토픽 모델링을 적용한다. 토픽 모델링에는 여러가지 방식들이 존재한다. 이 중 본문에서는 가장 좋은 토픽 모델링으로 LDA(Latent Dirichlet Allocation : 잠재 디리클레 할당)를 사용한다고 얘기한다.

마지막단계는 클러스터링 단계이다. 클러스터링을 거쳐 나온 각각의 그룹들이 마이크로서비스로 식별된다.

🖥 정보 추출

정보 추출 단계는 세부적으로 두 가지로 나뉘어진다.

  • Lexical Information : 간단하게 말해서 용어 추출이라고 볼 수 있다. 소스코드에서 의미를 지니고 있는 용어들을 추출한다. 추출과정을 용이하게 하기 위해서 AST(Abstract Syntax Tree)를 만들고 AST에서 필요한 부분들만 가져오는 과정을 거친다. 필터를 적용하거나 불용어 제거 또는 이와 비슷한 다른 처리 작업보다 용어를 추출하는 측면에서 더 효율적이라고 한다.

  • Structural Dependency Information : 구조적 의존성 정보를 추출한다. 이 작업 역시 AST에서 처리하기가 쉽다고 한다. 예를 들어 클래스 사이의 의존은 메소드의 호출을 찾고 해당 메소드가 속한 클래스를 확인함으로써 식별되어진다. 이 과정에서 Java Symbol Parser를 사용한다.

🖥 토픽 모델링

앞서 얘기하였듯이 LDA를 사용한다. 이 때 K 개의 토픽을 선정한다. K 의 결정 기준은 토픽 분포가 가장 적절할 때 이며, 토픽 분포에서 겹치는 부분이 적으면서 최대한 많은 부분이 포함되어질 수 있어야 한다.

🖥 클러스터링

LDA로 부터 선정된 K개의 토픽을 가지고 컴포넌트(클래스)를 벡터화한다. 벡터의 사이즈는 K개가 되며 컴포넌트 별로 각각의 토픽에 대한 분포 정도를 수치로 가진다. 그리고 1번과정에서 추출한 구조적 의존성 정보와 벡터 사이의 유사도를 이용하여 그래프를 만들고 클러스터링 한다. 예를 들어 클래스1과 클래스2가 구조적 의존성이 존재한다면 클래스1 벡터와 클래스2 벡터의 유사도를 논문에서 설명하고 있는 공식을 통해 구하여 가중치가 있는 간선이 형성된다. 이 때 각각의 노드들은 컴포넌트임을 의미한다. 결과적으로 노드와 가중치가 있는 간선으로 이루어진 그래프가 만들어지고 클러스터링의 입력으로 들어간다.

🖥 끝맺음

내가 생각했을 때 가장 깔끔한 방식이라고 생각한다. 용어적인 유사성 뿐만 아니라 구조적 의존성까지 고려하기 때문이다. 그리고 K 개의 토픽을 선정하는 과정 역시 납득하기 쉽고, 근거가 확실하다. 그러한 점에서 좋은 논문이었다고 생각한다. 하지만 모노리식 웹 앱을 전부 마이크로서비스로 식별했다고는 하지 못한다. 왜냐하면 모노리식 웹 앱을 이루는 구성요소들에는 클래스 말고도 다른 여러가지 요소들이 존재하기 때문이다. 만약 다른 요소들에서도 똑같이 용어와 구조적 의존성 정보를 추출할 수 있다면 똑같은 결과가 나올지 궁금했던 시간이었다.

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

0개의 댓글