티스토리 뷰

최근에 회사 서비스에 AWS X-RAY를 적용하면서 요청 파라미터에 대한 정보를 트레이스 하려고 Reflection을 이용해서 파라미터의 변수이름과 값을 조회했는데 파라미터 값은 잘 나왔는데 변수이름이 'arg0', 'arg1' 이런식으로 나왔었다.

 

스프링 부트 환경의 서비스에서는 파라미터 이름이 정상적으로 나왔는데 스프링 부트가 아닌 XML 기반설정의 스프링 환경에서 저렇게 나왔었다. 문제원인은 해당 애플리케이션을 빌드할 때 컴파일 옵션을 추가해야하는데 추가가 안되있어서 발생된 것이다. 코드를 한번 살펴보자

예제

helloWorld 메서드의 첫번째 매개변수엔 String 타입의 message라는 이름의 매개변수가 있는데 이 message라는 이름을 출력하고 싶어서 다음과 같이 코드를 작성했는데 결과는 'arg0' 이 출력됐다.



공식문서를 확인해보니 다음과 같은 내용이 있었다.

.class파일은 기본적으로 매개변수 이름을 저장하지 않는다. 그 이유중 하나는 보안에 민감한 메서드에 대한 정보가 노출될 수 있기 때문이다. 매개변수 이름을 Reflection API을 통해 얻으려면 컴파일 옵션에 -parameters 옵션을 추가한 후 컴파일 해야한다.



Maven Plugin Version 3.6.2 미만
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArgument>-parameters</compilerArgument>
            </configuration>
          </plugin>
    </plugins>
</build>

Maven Plugin Version 3.6.2 이상
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <parameters>true</parameters>
            </configuration>
        </plugin>
    </plugins>
</build>

현재 해당 프로젝트의 Maven Plugin버전은 3.1이라 설정옵션을 위코드처럼 컴파일옵션에 -paramters를 추가해주었다. 만일 버전이 3.6.2이상이면 아래처럼 설정해두면 된다.



정상적으로 매개변수 이름이 출력되었다.

참고

스프링 부트 프로젝트를 Maven환경으로 생성 후 pom.xml 하단을 보면 spring-boot-maven-plugin이 존재하는데 해당내용을 살펴보면 위와같은 사진이 있는데 컴파일옵션 -parameters가 디폴트로 추가되있는 걸 볼 수 있다.

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함