프로그래밍 일기 — Wildcard Pattern

배우는 자(Learner Of Life)
4 min readOct 9, 2023

--

웹 상에서 특정 API에 대해 접근 권한을 주는 방법

“네게 춤을 허락하노라!”(1)

드디어 프로젝트를 시작한지 1주가 지나간다. 나와 나의 팀은 “여행 계획 앱”을 기획했다. 누구나 여행을 하고싶은데, 자신이 가는 곳에 어떻게 여행을 가야하는지 감이 안 잡히는 사람들이, 이미 그 곳에 여행을 다녀온 사람들의 정보를 참조해 본인만의 여행계획을 세울 수 있게하는 것이 앱의 목적이었다. 따라서 특정 지역에 여행을 계획한 누구나 게시물을 올릴 수 있고, 누구나 열람이 가능하며, 이러한 게시물의 내용을 참고하여 누구나 여행 계획을 올릴 수 있다.

이 기획을 실현시키기 위해서 그에 맞는 기능들이 필요한데, 누구나 회원가입없이 게시물을 열람할 수 있게 열어놓는 것이 기획의 한 부분이기도했다. 따라서, GET(읽기)요청에 대한 제한을 풀어줄 필요가 있었다.

특정 URL을 가진 HTTP GET요청에 대한 제한을 풀어주는 부분

우리는 WebSecurityConfig 라는 파일을 통해 특정 URL을 갖는 API요청을 풀어줄 수 있도록 구성했다. 그런데 여기서 궁금증이 생겼다. 이전 과정에서 * 혹은 ** 를 써서 requestMatchers() 메서드를 사용해 해당 요청에 대한 제한을 permitAll() 메서드로 풀어주었는데, 과연 여기서 *** 는 어떤 의미일까? 궁금해서 ChatGPT-3에 물어보았다.

그의 답을 정리하자면 아래와 같다.

와일드카드 패턴(Wildcard Pattern)

URL패턴을 일치(matching)시키는데 사용되는 표현식으로써, Spring Security의 antMatchers 에서 활용되며, 대표적으로 *** 가 있다.

Single Wildcard (*)

하나의 경로 세그먼트를 나타낸다. 즉, /api/object/*/subobject/api/object/123/subobject 와 같은 경로를 매칭시킨다. 하나의 세그먼트만을 대체하는 것이다.

/api/object/*/subobject 패턴은 /api/object/ 이후에 오는 어떤 값이라도 매칭시킨다.

Double Wildcard(**)

여러 경로 세그먼트를 나타낸다. 즉, /api/object/**/api/object/123/subobject 와 같은 경로를 매칭시키고, /api/object/123/subobject/456 과 같은 더 깊은 임의의 경로에 대해 매칭시킨다.

/api/object/** 패턴은 /api/object/ 뒤에 어떤 값이 오더라도 매칭시키며, 그 이하의 모든 하위 경로도 일치시키는 것이다(예: /api/object/123/subobject/456). 조금 더 깊은 경로에 대해서 매칭을 시키는 것이라 볼 수 있다.

결론

  • *.permitAll() 은 하나의 경로 세그먼트를 대체한다.
  • **.permitAll() 는 여러 경로 세그먼트를 대체한다.
  • 일반적으로 보안 규칙을 적용하려는 URL패턴에 따라서 선택하여 사용한다.

참조:

(1) https://media.cbs8.com/assets/ETONLINE/images/65b95fd4-5fe1-4f34-82e3-b83e32dcf891/65b95fd4-5fe1-4f34-82e3-b83e32dcf891_750x422.jpg

--

--

배우는 자(Learner Of Life)
배우는 자(Learner Of Life)

Written by 배우는 자(Learner Of Life)

배움은 죽을 때까지 끝이 없다. 어쩌면 그게 우리가 살아있다는 증거일지도 모른다. 배움을 멈추는 순간, 혹은 배움의 기회가 더 이상 존재하지 않는 순간, 우리의 삶은 어쩌면 거기서 끝나는 것은 아닐까? 나는 배운다 그러므로 나는 존재한다. 배울 수 있음에, 그래서 살아 있음에 감사한다.

No responses yet