Back-End

Mapped Diagnostic Context 멀티 쓰레드 환경에서 로그가 뒤섞이는 문제를 해결하기 위해 사용할 수 있는 객체로 현재 실행 중인 쓰레드에 메타 정보를 넣고 관리하는 공간이다. 내부적으로 쓰레드 로컬을 사용한다. Map 형태로 구성되어 (키, 값) 형태로 값을 저장하고 사용할 수 있다. 다양한 데이터를 저장해 구체적이고 유용한 로그 메시지를 제공할 수 있다. 주로 각각의 요청에 대한 로깅을 구분하기 위해 고유한 요청 ID를 설정하거나 사용자 정보, 세션, 트랜잭션, 로깅 수준 등을 설정한다. MDC 사용 implementation 'org.springframework.boot:spring-boot-starter-logging' 위의 디펜던시를 추가하면 org.slf4j 패키지에 있는 MDC..
정의 N + 1 보다는 1 + N이라고 볼 수 있는데 한 개의 쿼리에 예상과는 다른 N개의 추가 쿼리가 발생하는 문제다. 원인 즉시로딩, 지연로딩, 연관 관계와 상관 없이 언제든 N + 1 문제가 발생할 수 있다 즉시로딩의 경우 N:M 관계에서 N을 조회하는 쿼리를 날렸을 때 M을 즉시로딩으로 가져오게 되어있다면 N을 조회할 때 M을 한 번의 쿼리만 날려서 조회할거라 예상할 수 있지만 JPQL은 N을 먼저 조회하는 쿼리를 날린 후에 M을 즉시로딩으로 가져오게 설정된걸 확인하고 M을 가져오는 추가 쿼리를 날리게 된다. 일대일 관계라면 쿼리가 한 번이 아닌 2번 발생할 것이고 일대다 관계라면 1 + M개만큼의 쿼리가 발생한다. 지연로딩의 경우 N:M 관계에서 N을 조회한 후에 지연로딩으로 가져온 M의 객체들..
GitHub - da9dac/blank Contribute to da9dac/blank development by creating an account on GitHub. github.com 전체 코드는 해당 깃허브 레포지토리에서 볼 수 있습니다. 환경 설정 가장 많이 사용되는 OAuth2.0 서비스 제공업체인 구글, 카카오, 네이버를 이용한 인증을 구현하기 전에 yml / properties 파일에 설정을 추가해주겠다. 각 API 사용을 위한 사전 설정은 구글링 혹은 아래의 사이트를 참고하길 바란다. OAuth 2.0을 사용하여 Google API에 액세스하기 | Authorization | Google for Developers OAuth 2.0을 사용하여 Google API에 액세스하기 | Autho..
GitHub - da9dac/blank Contribute to da9dac/blank development by creating an account on GitHub. github.com 전체 코드는 해당 깃허브 레포지토리에서 볼 수 있습니다. 이번 게시글에서는 액세스 토큰과 리프래시 토큰 발급, 리프래시 토큰을 이용한 액세스 토큰 재발급, 액세스 토큰 검증 이렇게 3개의 필터를 구현하겠다. 로그인 처리 및 토큰 발급 필터 사용자의 로그인 요청을 받아 서버에 저장된 인증 정보와 일치하는지 판단하여 사용자의 로그인을 처리하고 성공 시 액세스 토큰과 리프래시 토큰을 발급하는 필터를 구현하겠다. public class JwtAuthenticationFilter extends UsernamePasswordAu..
GitHub - da9dac/blank Contribute to da9dac/blank development by creating an account on GitHub. github.com 전체 코드는 해당 깃허브 레포지토리에서 볼 수 있습니다. 이번에 프로젝트를 마무리하면서 사용했던 기술들을 정리해 보는 시간이 필요할 것 같아 스프링 시큐리티부터 정리해 보겠다. 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'io.jsonwebtoken:jjwt-ap..
Storage Mechanisms Username과 Password를 읽기 위해 제공되는 저장 기술들(UserDetailsService의 구현체)은 아래와 같다. In-Memory Authentication JDBC Authentication (JDBC를 사용하는 경우) UserDetailsService (커스텀 데이터 베이스를 사용하는 경우) LDAP Authentication (LDAP 저장소를 사용하는 경우) UserDetailsService 저장 기술들의 종류로 해당 인터페이스를 구현한 클래스들을 사용하여 UserDetails의 관리를 제공하고 인증을 할 수 있게 한다. (기본적으로 인메모리 방식과 JDBC 방식을 지원한다.) 이를 사용한 인증 방식은 Username과 Password를 사용하는 ..
Username/Password 가장 일반적으로 사용되는 인증 방식으로 아이디와 패스워드를 사용해 로그인하는 방식이라고 볼 수 있다. 스프링 시큐리티는 HttpServletRequest에서 Username과 Password를 읽기 위해 아래와 같은 방식을 지원한다. Form Basic Digest Form 우선 로그인하지 않은 사용자가 인증이 필요한 리소스에 요청한 경우 로그인 페이지로 리다이렉트 되는 과정을 먼저 살펴보겠다. 우선 인증되지 않은 사용자가 인증이 필요한 리소스에 요청을 보내면 AuthorizationFilter가 AccessDeniedException 예외를 던진다. 인증되지 않은 사용자이기 때문에 ExceptionTranslationFilter가 인증을 시작하고 Authenticatio..
SecurityContextHolder 스프링 시큐리티 인증 모델의 핵심으로 SecurityContext를 포함한다. Holder라는 단어의 의미를 생각해 보면 이해하기 쉬운데 여기서 Holder는 소유자, 보유자 같은 의미로 SecurityContext를 가지고 있는 존재라는 것이다. 위의 사진을 보면 SecurityContext는 인증과 관련된 정보들을 가지고 있는데 즉, SecurityContextHolder는 이러한 SecurityContext들을 저장하는 공간이다. //SecurityContextHolder에 저장할 SecurityContext를 하나 생성 SecurityContext context = SecurityContextHolder.createEmptyContext(); //Securi..
da9dac
'Back-End' 카테고리의 글 목록 (2 Page)