728x90
반응형

Spring

0. 서론

새로 참여하게된 비대면 고객케어 솔루션 프로젝트에서 로그인 연동 개발을 맡게 되었고, 다른 팀원분이 작성한 인증 관련 코드를 합쳐야 했다.


해당 인증관련 코드에는 Spring Security 프레임워크가 활용되었고, 적절하게 잘 합치기 위해서는 해당 코드에 대한 이해가 수반되어야 했다.
이를 위해 Spring Security에 대해 알아보았다.

1. 사전 학습

A. Spring Security란?

Spring Security는 Spring기반 애플리케이션의 보안을 담당하는 Spring 하위 프레임워크 중 하나로서, 해당 프레임워크를 활용하여 인증인가에 대한 처리를 진행하게 된다.

B. 인증과 인가

  • 인증(Authentication) : 접근을 요청한 사용자와 입력한 사용자정보가 일치하는지 확인하는 절차. 여기서 사용자는 접근주체, 사용자정보는 접근 시 입력했던 ID/PW와 같은 정보를 가리킨다.
  • 인가(Authorization) : 접근 사용자의 권한으로 요청 자원에 접근할 수 있는지 확인하는 절차. 예를들어 '/config' 라는 path로 사용자가 접근했을 때, Spring Security가 해당 path로의 권한이 사용자에게 있는지 확인한 후, 없다고 판단이 되면 접근을 통제하게 된다.

C. 인증 처리 flow

상황을 가정해보자.

국민 플랫폼인 naver가 Spring Security 프레임워크를 활용하여 인증과 인가처리를 한다고 가정해보자.

사용자 A는 naver에 가입되어 있지 않고, 사용자 B는 naver에 가입되어 있다.
이때, 두 사용자가 naver를 활용하기 위해 로그인이라는 행위를 통해 인증을 시도한다면,
가입되어 있지 않은 사용자 A는 인증처리가 되지 않을 것이고,
가입되어 있는 사용자 B는 인증처리에 성공하여 naver를 활용할 수 있게 될 것이다.

naver는 Spring Security를 통해 자체 인증 로직을 구성했을 것이다.
그리고 해당 인증 로직은 일반적으로 로그인을 시도한 사용자의 정보가 자체 DB에 있는지 확인하는 절차일 것이다.

사용자 B의 정보는 가입되어 있는 사용자이기 때문에 자체 DB에 해당 정보가 저장되어 있을 것이고,
사용자 A의 정보는 가입되어 있지 않은 사용자이기 때문에 자체 DB에 해당 정보가 저장되어 있지 않을 것이다.
그렇기 때문에, 자체 DB를 확인하는 절차를 통해 인증을 수행하는 naver에 사용자 A가 로그인을 시도할 경우, 인증처리가 되지 않는 것이다.

이러한 상황을 Spring Security에 적용해보자.(다음 글에서...)

D. Dispatcher-Servlet과 Filter

일반적으로 Spring Framework는 아래 사진과 같은 flow를 통해 Http 요청이 처리된다.

dispatchef-servlet filter

Security의 동작원리를 이해하기 위해 짚고 넘어가자.

위 사진에서 참고할 주요 키워드는 Web Context, Spring Context, Filter, Dispatcher Servlet이다.

  1. Web Context : Servlet Context라고도 불린다. Tomcat과 같은 Servlet Container에 의해 실행된다.
    a. Servlet : 웹 프로그래밍을 위한 Java 기술이다. HTTP요청/응답 처리, 동적 웹사이트 처리 등의 작업을 수행한다. 그리고 이러한 Servlet이 객체형태로 구현된 것을 Servlet Context라고 한다.

  2. Spring Context : Spring MVC를 처리하는 Java 객체이다. Spring Container에 의해 실행된다. Spring Context의 proxy역할을 하는 Dispatcher ServletServlet Context에 의해 관리되기 때문에, 위 사진과 같은 구조로 구성되어 있다고 한다.

  3. Dispatcher Servlet : 위에서 언급한 것처럼 Spring Context의 proxy 역할을 하는 Java 객체이다. Servlet Context를 통해 들어온 HTTP요청을 분석하여 Spring Context내부의 어떤 Controller를 호출할 지 결정하고, 호출된 Controller 내부 비즈니스 로직에 의해 반환된 응답 객체를 HTTP응답으로서 client에 반환하거나 매핑된 view에 연결시켜준다.

  4. Filter : Dispatcher Servlet에 HTTP요청이 전달되기 전후에 http url path에 맞게 실행되는 기능이다. Servlet Context가 실행되는 Servlet Container에 의해 실행되고, Spring Context내부의 Spring Bean을 주입받아 처리될 수도 있다.

위 사진에 대한 설명을 최대한 간략하게 적어봤는데, 사실 이렇게 간단하게 언급할 수 있는 내용은 아니었다. 추후에 별도로 자세히 알아봐야겠다.

이어서

Spring Security를 알아보기 위해 사전에 알고 있어야할 개념들이 너무나 방대했고 파악하는 데 시간이 오래걸렸다. 하지만 위 개념들을 먼저 알고있어야 Security에 대한 이해가 쉬울 것 같아서 먼저 언급하였다.

위에서 언급한 개념들은 Spring Security와 밀접한 관련이 있다. 우리가 Java 소스코드로 구현한 비즈니스 로직은 일반적으로 Spring Context로 구현되어 실행될 것이다. 그리고 Security에서 제공하는 인증인가기능은 Spring Context가 아닌 Servlet ContextFilter단에서 실행될 것이다.

다음 글부터는 본격적으로 Spring Security에 대해 알아볼 것이다.

반응형

+ Recent posts