첫 프로젝트의 스프링 시큐리티 구조(JWT토큰 활용) - 시큐리티 1편

JaeYeop·2022년 2월 12일
3

시작 전에

첫 프로젝트를 진행하면서 스프링 시큐리티를 처음 사용해봤다.
참... 힘든 시간이었다. 10일 넘는 삽질(?)로 전체 구조를 뒤바꾸는 행동을 3번이나 했다(다음부터는 꼭 전체 구조의 큰 틀을 만들고 시작하자).

지금도 스프링 시큐리티의 지식이 많이 부족하다는 것을 느낀다. 그렇기 때문에 이렇게 정리하면서 복습용으로 사용할 예정이고 다른 분들도 도움이 되었으면 한다.

그리고 시작전에 내가 공부한 내용에서의 핵심

내가 스프링 시큐리티를 공부하면서 제일 핵심으로 생각하고 배웠던 내용은 커스터마이징이다. 프로젝트를 진행하면서 여러 상황을 모두 충족하는 방법을 항상 생각해야한다. 이 부분에서 스프링 시큐리티가 편의성을 제공하는 것은 사실이지만, 스프링 시큐리티만으로는 모든 것을 충족하는 해결법을 찾기는 힘들다.

그래서 나는 시큐리티를 커스터마이징했고, 그러기 위해서 시큐리티의 기본 이해가 매우 중요하다고 생각한다.

스프링 시큐리티에서는 커스터마이징이 제일 중요하다고 생각한다.

먼저 우리는 인증과 인가에 대해서 알아야한다

인증이란

접근자가 누구인지 확인하는 절차

인가란

인증을 마친 접근자에게 권한을 허락하는 절차

(긴 설명은 나중에 내가 읽기도 귀찮다. 여기서는 이렇게 인증/인가를 이해하면 충분하다고 생각한다)

시큐리티를 설정 후에 구조

간단하게 말하자면 스프링 시큐리티를 설정하기 전에는 사용자 -> 컨트롤러로 바로 요청이 넘어간다(중간에 Dispatcher Servlet과 Interceptor는 사용하지 않을 것이니 생략)


하지만 스프링 시큐리티를 설정하게되면 Filter에 위의 그림과 같이 여러 인증,인가 필터들이 추가된다고 보면 된다. 이 그림을 보면 내용 파악하기가 참 어렵다.

쉽게 정리해보자

1. 사용자가 HTTP 요청을 하면 AuthenticationFilter로 들어온다. (1번 화살표)

2. 그리고 인증관련 절차를 진행한다.(3번 화살표)

3. 인증이 완료되면 건네 받은 인증 내용을 SecurityContextHolder에 저장한다.

4. 해당 그림에는 없지만 SecurityContextHolder에 저장된 인증 내용이 있다면 컨트롤러단으로 보낸다.

쉽게 설명하자면 이런 구조가 된다.


사실 이렇게 많은 필터들과 구조가 있는데 초보자가 한번에 이해하기에는 쉬운 내용이 아니다. 이 그림에서 중요한 내용은 필터들의 순서가 뭔지를 확인하고,

! 필터는 꼭 들어온 순서대로 반대로 나가는 것을 알고 있자

이 후 내용은 길어지니까 다음 글에서

profile
이게 왜 틀리지... (나의 메모용 블로그)

0개의 댓글