Go 개발자라면 주목! 가장 많이 사용되는 의존성은?
Go 모듈 생태계 분석을 위해 Neo4j 그래프 데이터베이스(Graph Database)를 활용하여 의존성 관계를 시각화함
GitHub 스타(Star) 수, 오픈 이슈(Open Issue) 수 등의 지표 대신, 실제 사용 빈도를 측정하여 신뢰도 높은 의존성 파악
github.com/stretchr/testify가 압도적인 사용 빈도로 1위를 차지했으며, google/uuid, golang.org/x/crypto 등이 뒤를 이음
Neo4j 덤프 파일(Dump File)을 제공하여, 개발자들이 직접 쿼리(Query)를 실행하고 분석할 수 있도록 지원
Go 모듈 생태계 분석 방법론
저자는 Go 모듈 생태계 분석을 위해 Go 프록시(Go Proxy)를 활용하여 모듈 정보를 수집했다. 특히, proxy.golang.org에서 제공하는 메타데이터(Metadata)와 인덱스(Index) 정보를 활용하여 2019년 이후 출시된 모든 모듈의 이름과 버전을 다운로드했다. 이러한 접근 방식은 GitHub API를 통한 Repository 클로닝(Repository Cloning) 방식의 단점을 보완하여, 보다 정확하고 효율적인 데이터 수집을 가능하게 했다.
Neo4j를 활용한 의존성 그래프 구축
분석에 사용된 Neo4j는 그래프 데이터베이스(Graph Database)로, 노드(Node)와 관계(Relationship)를 통해 데이터를 저장한다. 저자는 Cypher 쿼리(Query)를 사용하여 모듈 노드를 생성하고, 의존성 관계를 정의했다. 특히, `MERGE` 구문을 활용하여 중복된 노드 생성을 방지하고, `CREATE CONSTRAINT`를 통해 데이터 무결성을 보장했다. 이러한 구조는 대규모 데이터 처리(Big Data Processing)에 적합하며, 복잡한 쿼리를 효율적으로 수행할 수 있도록 지원한다.
Cypher 쿼리를 활용한 데이터 분석
저자는 Cypher 쿼리를 사용하여 특정 모듈의 직접적인 의존성 및 전이적 의존성을 분석했다. 예를 들어, `github.com/pkg/errors` 모듈의 의존성을 파악하기 위해, `MATCH` 구문을 사용하여 해당 모듈을 찾고, `DEPENDS_ON` 관계를 따라가는 쿼리를 작성했다. 또한, `WHERE dependent.isLatest` 구문을 통해 최신 버전의 모듈만을 대상으로 분석하여, 정확한 사용 빈도를 측정했다. 이러한 분석은 의존성 관리(Dependency Management)의 중요성을 강조한다.
가장 많이 사용되는 Go 의존성 Top 10
분석 결과, github.com/stretchr/testify가 가장 많이 사용되는 Go 의존성으로 나타났다. 그 뒤를 이어 github.com/google/uuid, golang.org/x/crypto 등이 높은 사용 빈도를 보였다. 저자는 이러한 결과를 통해, 개발자들이 실제로 많이 사용하는 라이브러리를 파악하고, 프로젝트에 적합한 의존성을 선택하는 데 도움을 줄 수 있다고 설명한다. 또한, Neo4j 덤프 파일을 제공하여, 개발자들이 직접 데이터를 분석하고, 맞춤형 쿼리(Custom Query)를 실행할 수 있도록 지원한다.