[ODOP] 67일차 - AntPathMatcher 사용법 분석

1일 1포스팅 67일차. AntPathMatcher 를 분석하며 내용을 정리하였습니다. Spring 내부적으로 ant-style pattern 분석을 위해 사용하는 구현체로서 Apache ant 의 코드를 일부 차용하여 만들어진 클래스 입니다.

[ODOP] 67일차 - AntPathMatcher 사용법 분석

AntPathMatcher 분석

구현부에 대한 간단한 부분은 간단히 읽어 볼 것이고 너무 길다면 테스트를 통해 작동 방식을 이해해보자

AntPathMatcher 란?

Spring 에서 uri 패턴 매치 시 사용되는 PathMatcher 의 구현체이다

Spring 에서는 Apache ant 의 일부 코드를 차용하여 AntPathMatcher 를 만들었다

우리가 Spring 을 통해 api 를 구성 할 때 사용하는 구문을 보고 ant-path style 이라고 하는데, 이를 구문분석하는 구현 클래스이다

생성자

AntPathMatcher 에는 두개의 생성자가 존재한다

하나씩 알아보자

	public AntPathMatcher() {
		this.pathSeparator = DEFAULT_PATH_SEPARATOR;
		this.pathSeparatorPatternCache = new PathSeparatorPatternCache(DEFAULT_PATH_SEPARATOR);
	}

아무런 매개변수도 받지 않는 생성자이다

기본적으로 DEFAULT_PATH_SEPARATOR 를 지정하고 있는 모습인데, 이 값은 / 기호이다.

재미있는 것은 바로 다음줄에 존재하는 코드이다

this.pathSeparatorPatternCache = new PathSeparatorPatternCache(DEFAULT_PATH_SEPARATOR);

여기서는 내부적으로 패턴에 대한 캐시를 진행하기 위해 PathSeparatorPatternCache 라는 객체를 사용해서 캐시를 구현한다

해당 구현체는 다음과 같다

    private static class PathSeparatorPatternCache {

		private final String endsOnWildCard;

		private final String endsOnDoubleWildCard;

		public PathSeparatorPatternCache(String pathSeparator) {
			this.endsOnWildCard = pathSeparator + "*";
			this.endsOnDoubleWildCard = pathSeparator + "**";
		}

		public String getEndsOnWildCard() {
			return this.endsOnWildCard;
		}

		public String getEndsOnDoubleWildCard() {
			return this.endsOnDoubleWildCard;
		}
	}

AntPathMatcher 내부에 존재하는 static class 이다

구현체로 봐서는 와일드 카드 문법을 사용하기 위한 것 같은데, 아직은 어떨 때 쓰이는지 모르겠다

일단 와일드카드를 캐싱하기 위해 this.pathSeparatorPatternCachePathSeparatorPatternCache 라는 클래스를 사용한다는 것만 기억하자