런타임 데드 코드 분석 툴 Scavenger로 Dead Code를 청소해보자

Zaan·2023년 4월 23일


개발용으로 잠깐 만들어둬야지 하고 까먹었던 코드, 기획이 변경돼서 안 쓰게 됐지만 나중에 쓸지도 모르니 남겨뒀던 코드가 쌓이고 쌓여서 이젠 도무지 손댈 수가 없어졌다..


이때, 우연히 들어간 Deview 2023에서 알게된 Scavenger..!

당장 써보러 가자.

발표 자료와 리드미에서 사용 방법을 친절하게 설명해주고 있지만, 간단한 데모 프로젝트와 함께 사용법을 알아보자


데모 프로젝트 생성

  • Port는 80으로 설정했다.
	@GetMapping("/")
	public String demo() {
		if (false) {
			deadCode();
		}

		return "Hello Scavenger!";
	}

	@GetMapping("/dead-api")
	public String deadApi() {
		return "안쓰는 API";
	}

	public void deadCode() {
		System.out.println("This is dead code");
	}

Scavenger 다운로드

https://github.com/naver/scavenger/releases 에서
scavenger-agent-java-1.0.*jar
scavenger-api-boot-1.0.*jar
scavenger-collector-boot-1.0.*jar

총 세 개 파일을 다운 받는다.


실행하기

먼저, 데모 프로젝트의 jar 파일을 생성해야 한다.
터미널에서 ./gradlew clean build를 입력한 뒤, /build/libs에 들어가서 demo-0.0.1-SNAPSHOT.jar을 위 세 개의 파일이 있는 곳으로 이동시킨다.


java -Dspring.profiles.active=h2 -Darmeria.port=8080 -jar scavenger-collector-boot-1.0.4.jar
java -Dscavenger.collector-server-url=http://localhost:8080 -Dspring.profiles.active=h2 -jar scavenger-api-boot-1.0.4.jar

위 명령어로 각각의 터미널에서 collector와 api를 실행한다.


http://localhost:8081/scavenger/ 에 접속하면

이런 화면이 나온다. 새로운 워크스페이스를 생성하고 들어가보자.


Scavenger 설정 파일 생성하기를 누른다.


나는 이렇게 생성했다.

다운 받은 scavenger.conf 파일을 아까 파일 모아둔 곳에 위치시킨다.


scavenger % java -Dscavenger.configuration=scavenger.conf -javaagent:scavenger-agent-java-1.0.4.jar -jar demo-0.0.1-SNAPSHOT.jar

명령어로 agent를 실행한다.


다시 http://localhost:8081/scavenger/ 에 접속한 뒤, 스냅샷을 눌러서 생성해준다.

돋보기 아이콘을 눌러보자.


코드를 일부 수정해서 위의 코드와 아래 사진의 메서드에 차이가 있습니다.

처음엔 이렇게 보일 텐데 데모 프로젝트의 API를 호출한 뒤, 왼쪽 위에 재설정을 눌러보자.

만약 보이지 않는다면 agent에 아래 로그가 찍혔는지 확인해보자. 일정 주기로 업데이트해서 약간의 딜레이가 발생하는 것 같다.

[scavenger] publishing invocation data: 1 invocations
[scavenger] invocation data published

위 사진처럼 사용되고 있지 않은 deadCode와 deadApi가 보이는 것을 확인할 수 있다.


결론

0개의 댓글