전체 글65 기본 API & Filter 이해 (2) - UsernamePasswordAuthenticationFilter 인증 API - Login Form 인증 UsernamePasswordAuthenticationFilter : Login Form 인증 처리를 하는 filter. 1. 사용자가 인증을 시도하면 UsernamePassWordAuthenticationFilter가 이를 처리 2. AntPathRequestMathcher : 사용자가 요청한 요청정보의 URL이 맞는지 확인 (http.loginProcessingUrl( )로 변경 가능. 디폴트 주소 값은 "/login") 3. Authentication : Authentication 객체를 만들어서, 사용자가 로그인 시 입력한 Username과 Password를 저장 4. AuthenticationManager : 인증 관리자. 위에서 만들어진 인증 객체를 전.. 2024. 2. 2. 기본 API & Filter 이해 (1) 1. 인증 API - 사용자 정의 보안 기능 구현 인증 (Authentication) 사용자의 신원을 검증하는 행위 , 회원가입하고 로그인 하는 것. 인가(Authorization) 사용자에게 특정 리소스나 기능에 액세스할 수 있는 권한을 부여하는 프로세스 Spring Security에는 HttpBasic 인증 방식과 formLogin 인증방식 두 가지 인증방식이 있다. HttpBasic 인증 방식 : Http 프로토콜에서 정의한 기본 인증 방식. formLogin 인증 방식 : 서버에 해당 사용자의 session 상태가 유효한지를 판단해서 처리하는 인증 방식. 2. 인증 API - HttpBasic 인증 • HTTP는 자체적인 인증 관련 기능을 제공하며 HTTP 표준에 정의된 가장 단순한 인증 기법이다.. 2024. 2. 2. [Spring] Service, 인터페이스 사용하는 이유? 개요 지금 진행하고 있는 Socket 이라는 사이드프로젝트를 계획할때, 같은 백엔드 팀원과 최대한 객체지향성을 지키면서 코딩을 하자고 했었다. 그래서 Service에서도 인터페이스를 만들어 진행해 왔다. 이 부분에 대해서 조금더 자세히 파고들어가보자 한다. 그렇다면 왜 예전부터 서비스에 인터페이스를 습관적으로 사용하였을까? 예전에는 Spring 에서 AOP Proxy 를 만드는 방식이 JDK Dynamic Proxy 를 사용하여 인터페이스 기반으로만 만들게 되어 있었다. 예를 들어, 인터페이스가 있어야지 @Transactional 이런 어노테이션이 동작이 가능하기 때문이다. (AOP Proxy 만들어서 트랜잭션을 처리하기 때문에) 특정 버전부터 CGLIB 라이브러리를 사용하여, 클래스 기반으로 AOP P.. 2024. 1. 25. [Spring] @Transactional에 private 접근 제한자가 불가능한 이유 개요 Socket 사이드 프로젝트를 진행하던 중 git에 push를 하기 전에 외부 패키지에서 사용할 일이 없는 메소드의 경우 private로 접근제한자를 설정하기 위해서 살펴보던 와중에, 아래와 같이 @Transaction이 붙은 메소드는 private 접근 제한자가 불가능한것을 발견했다. 그리고 아래와 같은 오류메시지를 알려줬다. Methods annotated with '@Transactional' must be overridable. @Transactional은 spring AOP를 사용하여 구현되는데 기본적으로 AOP는 proxy패턴 을 사용하여 구현이 된다. 결론부터 말하자면, 1. spring의 @Transactional은 proxy로 동작한다. 2. 그러므로 private 사용이 불가하다... 2024. 1. 25. [Java] Collections.emptyList( ) vs List.of( ) 개요 Socket 사이드 프로젝트를 하는 중에 List 타입의 해시태그 값들을 받는데, 테스트 코드를 작성하면서 빈 리스트를 반환해야 할 일이 생겨서 두 방법의 차이점은 무엇인지 쓴다면 어떤것을 써야하는지 헷갈려서 정리하게 된 글이다. - Collections.emptyList( ) EmptyList라는 클래스가 별도로 존재했고, 이를 List타입으로 캐스팅해 반환해 주고 있었다. EmptyList의 경우 get() 호출 시, IndexOutOfBoundsException을 터트리고, size( )는 0을 반환하고, isEmpty( ) 메소드 또한 true인것을 확인할 수 있다. 즉 완전히 빈 리스트를 정의하는 특징들을 갖고 있다. 위의 초록 글씨에서 볼 수 있듯이, Returns an empty lis.. 2024. 1. 25. Stack / Queue Stack ⭐️Stack의 특징 1. 먼저 들어간 자료가 나중에 나옴 LIFO(Last In First Out) 구조 2. 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 때 스택 메모리의 영역에서 함 3. 인터럽트처리, 수식의 계산, 서브루틴의 복귀 번지 저장 등에 쓰임 4. 그래프의 깊이 우선 탐색(DFS)에서 사용 5. 재귀적(Recursion) 함수를 호출 할 때 사용 ⭐️ Stack의 사용법 import java.util.Stack; //import Stack stack = new Stack(); //int형 스택 선언 Stack stack = new Stack(); //char형 스택 선언 ⭐️ Stack값 추가 Stack stack = new Stack(); //int형 스택 선언 .. 2024. 1. 22.