Spring 5

[Spring] Spring Security - SecurityContextHolder와 ThreadLocal에 관한 의문

☞ 여기에서 SecurityContextHolder는 ThreadLocal을 사용하고 있다고 했다. ThreadLocal은 쓰레드 별로 생성되는 저장소로, 해당 쓰레드 내에서라면 어디에서든 사용할 수 있으며 다른 쓰레드와는 공유하지 않으므로 쓰레드끼리 꼬이는 일 없이 해당 쓰레드를 할당받은 사용자별로 Authentication객체가 생긴다고 한다. 초기 의문 사용자별로 쓰레드가 할당되는 거라고 하면 10,000명의 사용자가 있으면 10,000개의 쓰레드가 있어야 하는가? 쓰레드는 생성 비용도 크고, 생성 가능한 개수도 경우에 따라 상이하고 (가령 Spring의 WAS가 생성하는 ThreadPool에는 기본적으로 200개의 쓰레드가 생성됨) 각 쓰레드는 할당받은 요청에 대한 작업이 끝날 때 까지는 다른 요..

Spring 2022.06.15

[Spring] Spring Security - 필터

Spring Security는 필터 기반으로 동작하며, 인증 및 인가를 필터 흐름에 따라 처리한다. (Spring에서 사용자의 요청은 Filter → DispatcherServlet → Interceptor → Controller 순으로 도착) 그렇다면 필터의 종류와 각각의 역할은 무엇일까 Spring Security의 FilterChain (필터의 종류와 흐름) 각 필터의 역할 SecurityContextPersistentFilter SecurityContextRepository에서 SecurityContext를 가져와서 SecurityContextHolder에 주입하는 역할 참고하면 좋을 글 : https://anjoliena.tistory.com/30 LogoutFilter logout 요청을 감시..

Spring 2022.06.14

[Spring] Spring Security - 주요 모듈

Spring Security Spring 기반 애플리케이션의 인증로그인, 인가 등을 담당하는 스프링 하위 프레임워크 필터 기반으로 동작 → 인증, 인가를 필터 흐름에 따라 처리 보안과 관련하여 다양한 옵션을 제공해주고 커스텀도 가능하기 때문에 개발자의 편의성을 높여줌 근데 처음 마주하는 순간에는 세상에서 제일 막막한 사람 될 수 있음 관련 용어 Resources (리소스) : 접근 주체가 접근하고자 요청하는 자원 (글 작성 페이지, 관리자 페이지 등) Principal(접근 주체) : 리소스에 접근하려는 사용자 Credential(비밀번호) : 리소스에 접근하는 대상의 비밀번호 Authentication(인증) : 접근 주체가 해당 어플리케이션을 사용할 수 있는 사용자인지를 확인 쉽게 말하면 로그인 했을..

Spring 2022.06.13

파일과 텍스트 함께 전송하기2 - 지양해야 하는 이유

☞ 파일과 텍스트 함께 전송하기 ← 이 방법을 지양해야 하는 이유 파일 첨부가 가능한 게시글 등록 처리 시, 파일 등록 / 텍스트 등록 처리 컨트롤러를 분리하는 것이 좋다고 함. 파일을 포함한 게시글 등록 시, 클라이언트 쪽에서 요청을 2번 보내는 거. 텍스트 데이터는 '텍스트만' 처리하는 컨드롤러로 / 파일은 '파일만' 처리하는 컨트롤러로 근데 이미 파일 업로드 로직은 분리되어 있고, 서비스단에서 해당 메소드를 끌어와서 사용하는데 뭐가 문제인지 감이 안 와서.. 개발자 분들 계신 카톡방에 '컨트롤러'를 쪼개야 하는 이유를 여쭤봄 바이너리 파일과 json데이터를 별도로 처리해야 하는 이유 파일 업로드가 여러 기능에서 필요할 때, 필요 시마다 파일 업로드 메소드를 끌어와서 사용할 경우 해당 로직이 여기저기..

Spring 2022.06.09

파일과 텍스트 함께 전송하기1 - RequestPart

프로젝트 하던 중 게시글 작성 시 파일과 텍스트데이터를 함께 주고 받을 일이 생겼다. 기존에는 json데이터만 주고받으면 되어서 RequestBody를 사용했었는데, 후에 파일도 넣을 수 있도록 수정된 것. 파일이랑 json 데이터 함께 넘기려다보니까 RequestBody 말고 다른 방식을 찾아야 했음 (다만 기능 완성 후 ☞이런 방법은 지양해야 한다는 것을 알게 됨) RequestBody가 불가능한 이유 Content-Type이 보통 텍스트는 json / 파일은 multipart/form-data 포맷인데 하나의 요청에 json과 multipart/form-data를 각각 넣는 것은 불가 → 하나의 요청에는 하나의 Content-Type이 있어야 함 그리고 json 포맷에 multipart/form-d..

Spring 2022.06.09