Framework/Spring

[Spring Security] Intro. Deep Dive

검은 까마귀 2024. 5. 8. 13:14

# Overview

Spring Security를 쓰면서 뭔가 [어 되네?]에서 그친 이론과 알고리즘을 제대로 이해하고 내가 원하는 User Level 및 다양한 기능을 활용하기 위해서 Deep Dive 해보고자 한다. 이론부터 실전까지!

 

항상 무턱대고 공부하는 것보다는 흐름을 이해하고 공부하는게 좋은거 같다. Spring Security하기 전에 먼저 MVC 패턴에서 Spring 동작원리를 살펴보는 것이 좋다.

2023.10.26 - [Framework/Spring] - [Spring] Spring MVC 패턴의 LifeCycle

 

[Spring] Spring MVC 패턴의 LifeCycle

# 목적 이번의 면접 질문중에 Spring MVC 패턴의 Process Flow에 대한 인터뷰 질문을 받았습니다. 워낙 급하게 주먹구구식으로 공부하는 편이라 이론?이라고 해야하나? 기본을 잘 모르기 때문에 면접에

blaj2938.tistory.com

 

공식문서를 기반으로한 블로그 작성과 필요하면 여러 레퍼런스도 체크하고 읽어보려고한다.

버전은 6.2.x 버전까지 나왔는데 Commercial Support(아래에 더보기 글 첨부)가 가장 긴 5.8.x 버전으로 선택했다.

 

더보기

Commercial 버전은 Open Source Software 지원기간동안 Spring전문가의 비즈니스 지원을 받을 수 있고 OSS가 끝나더라도 이후에 지원을 받을 수 있게 된다.

버전별 차이는 차차 학습하면서 알아가보도록하고 Spring Security의 5.8.x를 뜯어봤다.

 

공식사이트에 들어가면 "SNAPSHOT", "GA"가 나온다. 둘 중 어느 것을 봐야할까?

 

  • GA(General Ability) - 테스트가 완료된 버전으로 안정적인 운영하는데 사용
  • SNAPSHOT - 아직 개발 단계라는 의미이며, 백업시점을 의미

GA를 사용하는 것이 옳다고 보인다. (뭐 Spring Security에 기여를 하고싶다면야....)

그래서 일단 서비스를 개발하고 배포하고자 해서 5.8.12버전을 채택했다.

 

아직 입문의 단계니 일단 Spring Security가 뭐하는 놈인지 알아보아야한다.

Spring Security is a powerful and highly customizable authentication and access-control framework.

It is the de-facto standard for securing Spring-based applications.

Spring Security is a framework that focuses on providing both authentication and authorization to Java applications.
Like all Spring projects, the real power of Spring Security is found in how easily it can be extended to meet custom requirements

 

위의 글은 정식문서의 개요 내용이다.

당연히 Spring의 프레임워크니깐 관리의 용이성, 확장성 뭐 다 되지만 중요한건 [인증], [인가] , [보안] 측면에 특화된 프레임워크라는 것이다. 또한 de-facto standard, Spring 기반 어플리케이션에서 사실상 표준이다.

 

용어 정리부터 하자. 나도 공부할때도 헷갈렸지만, 인증(authentication)과 인가 (authorization)에 대해서 많이 헷갈린다.

  • 인증 (authentication): authentication은 내가 신원 조회를 당하는 프로세스이다. 예를 들어 로그인
  • 인가 (authorization): 권한 부여라고도 할 수 있다. 시스템이 나에게 접근을 할 수 있는 시설이나 자원을 결정하는 것이다.

쉽게 말해서 인증은 열쇠 같은 것이다. 내가 문을 따고 들어갈 수 있다. 인가는 그 열쇠키로는 남의 집 문을 따고 들어갈 수 없다. 그 집이 내가 들어오는 것을 인가받지 못했기 때문이다.

 

기능들은 이렇게 있고, 공식문서에서 어떤걸 선택해야할지 모르겠는걸 발견했다.

 

서블릿 어플리케이션? 리액티브 어플리케이션? 내가 아는 Reative는 반응형 UI가 전부였는데....? 그래서 또 열심히 찾아봤다.

 

Spring5 버전부터 Reactive Application을 지원했다고 하며 SpringWebFlux라고 한다. 회사의 JD를 보다보면 많이 등장하는 용어이긴한데 공부하다 알았다.

 

Servlet Appliaction과 Reactive Application을 주요 차이점은 비동기성과 동기성이다. Servlet Appliaction은 동기적으로 요청을 처라하며 Reactive Application비동기적으로 요청을 처리한다. SpringWebFlux를 학습하는게 아니니 일단 이렇다는 점만 알고 넘어가자...!

2024.01.22 - [Computer Science/Network] - [Network] Async & Sync (비동기와 동기)

 

[Network] Async & Sync (비동기와 동기)

간간히 네트워크 관련해서 포스팅을 진행했다. 가장 재밌게 했던 글을 썼던건 아마 loadBancler였다. 항상 뭔가 주먹구구식 외우기 공부였다면, 사실 로드밸런싱을 공부를 하면서 꼬리에 꼬리를 무

blaj2938.tistory.com

 

그래서 나는 뭘 선택해야하는가? 일단 나는 Servlet Application으로 학습을 시작하려한다. 일단, 전통적이기도 하고 아직 SpringWebFlux에 대해서 잘 알지못하기 때문이고 지금 내가 개발하고자하는 서비스는 대량의 요청을 받아서 처리하지는 않을거 같다. 필요하면 따로 어플리케이션을 만들어서 운영하는게 나을지도 모르겠다.

# End

정리해보자면, Spring Security 5.8.12, Servlet Application으로 포스팅을 진행할 예정이다. 이론을 학습후 실제로 적용하는 과정을 포스팅할 것이다.

반응형