Spring Security - 시작하기
Spring Security는 예전부터 아주 간간히 Reference 문서를 보면서 공부를 했지만 실제 프로젝트에는 아직도 적용해 보지 못하고 있다.
변화를 두려워하지는 않지만 업무를 하다 보면 현재의 상태를 유지하면서 맡은 업무를 유지보수하고 유지시키는 것.... 또한 중요하다...는 그리 좋지 않은 핑계를 몇년간 스스로에게 말하면서 실제 프로젝트에는 적용시켜 보지 못했다.
물론 Spring Security 에 대한 기반지식이 매우 낮은 상태이기 때문에 함부로 '자! 우리 이제부터 적용해 봅시다!' 라는 말을 함부로 하지 못한 것도 있다.
지금이라도 다시 체계적으로 공부를 시작하고 정리하면서 여러 시도를 해야 할 것 같다.
우리가 진행하는 모든 프로젝트에는 '로그인' 과 관련된 개발을 진행한다.
현재는 주로 Interceptor 를 이용하여 Session 관리를 하는데 '인증'은 뭐 그렇다 치고 '권한'과 관련해서는 그리 썩 좋은 형태로 개발되어 있지 않다. 문제가 있는 것은 아니지만 체계적인 이해와 유지보수를 하기에는 다소 주먹구구식으로 개발되어 있다는 표현이 더 적당하다.
일단 오늘은 다시 Spring Security 에 대한 개념만 정리해 본다.
Spring Security란 Java EE 기반의 Enterprise Software Application을 위한 포괄적인 보안 서비스들을 제공하는 오픈 플랫폼이다.
Spring Security를 이해하기 위해서는 '인증(Authentication)' 과 '권한(Authorization)' 에 대해서 먼저 이해해야 한다.
인증(Authentication)이란, 사용자가 맞는지 아닌지 확인하는 것이다.
즉, 로그인 시 아이디와 비밀번호를 통해 인증하는 것을 인증이라고 생각하면 쉽다.
물론 위와 같은 형태 (Form 기반 형태로 아이디 비밀번호를 통한 인증 매커니즘)를 Spring Security Reference 에서는 '폼 기반 로그인' 이라고 설명하며 이는 결국 아이디와 비밀번호를 통한 인증 매커니즘 이기 때문에 HTTP Basic Authentication 매커니즘이라고 한다.
이렇게 인증 과정을 거쳐 확인이 되면 해당 사이트의 메뉴를 이것저것 클릭하며 Application 을 활용할 수 있게 된다. 그런데 여기서 잠깐, 우리가 만드는 대부분의 Web Application 은 관리자 메뉴, 엔지니어 메뉴 등 일반 사용자가 접근하면 안되는 메뉴들이 있고 사용자 또한 여러 단계로 권한을 분리하여 메뉴 접근 권한을 달리 해야 하는 경우가 많다. 이것을 바로 '권한(Authorization)' 이라고 한다.
Spring Security에서는 이러한 인증과 권한의 과정을 Filter 들의 흐름에 따라 이루어지도록 하고 있다.
Spring Security에서는 많은 Filter 들을 제공하며 Filter 의 순서(흐름)에 따라 다양한 역할을 나누고 있다.
오늘은 개념에 대한 이해만 하고 다음 시간에 더 자세하게 정리 하기로 하자.