개요AuthenticationEntryPoint를 통해 인증되지 않은 사용자가 접근할 때에 대한 예외 처리를 하는 것이 목적이었다. 하지만 인증 예외 처리가 일어나지 말아야 할 상황에서도 인증 에러 메시지가 호출 되었다. 해당 과정에서 있었던 트러블 슈팅을 기록하려 한다. 코드CustomAuthenticationEntryPoint@Component@Slf4jpublic class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint { private final ObjectMapper mapper = new ObjectMapper(); private String toJson(ErrorResponse response) thro..
개요프로젝트가 한창이다. 프로젝트하며, 테스트 환경에서 JPA와 관련하여 발생한 이슈에 대해 글로 작성하면 좋을 것 같아 정리하였다. 이슈 1. 더티 체킹 (Dirty Checking)바로 코드로 간다.다음은 예제 코드로 시나리오는 다음과 같다.user 정보를 더티 체킹을 통해 업데이트 한다업데이트가 잘 되었는지 검증한다.@SpringBootTest@AutoConfigureMockMvcpublic class ExampleTest extends TestContainerSupport { @Autowired private UserRepository userRepository; @Autowired private TokenProvider tokenProvider; @Autowired ..
개요최종 프로젝트를 시작하면서, 인증/인가 부분을 한 번 더 맡게 되었다. 이전에는 RefreshToken을 RDB에 관리하며, 'RefreshToken을 Redis에서 관리하는 것이 더 낫지 않을까?'란 느낌이 있었는데, 정확히 어떤 점이 좋은지는 머리 속으로 그려봐도 크게 그려지지는 않았다. 인증/인가 부분을 한 번 더 맡게 된 김에 이번에는 Redis를 이용하여 RefreshToken을 관리해보고, 이전에 잘못 이해했던 RefreshToken 사용 방식을 다시 공부하며 더불어 RDB로 관리할 때의 차이점을 비교해보려 한다. 요구사항함께 살펴볼 부분은 다음과 같다.로그인 시 토큰들을 발급받으며 RefreshToken을 Redis에 저장한다.AccessToken 만료 시 RefreshToken을 통..
개요최근에 캐치 테이블을 타겟 클론하여 프로젝트를 진행하였다.예약 하기 전 해당 시간에 대한 선점을 먼저 요구하는 예약기능의 요구사항이 기억에 남는다. 최근에 이 기능에 대한 로직을 쭉 살펴보다가 개선점이 보였다.기존 로직을 리팩토링 후 글로 남겨본다. 요구사항예약 시, 요구사항은 다음과 같다.가게의 예약시간을 클릭 시, 그 시간에 대해 해당 유저는 7분 동안 예약 선점권을 갖는다.예약 선점권을 가진 유저가 상세정보를 입력 후 예약을 할 수 있다. 기존 코드@Service@RequiredArgsConstructorpublic class MemberReservationService { private final ReservationTimeRepository reservationTimeReposito..
개요DB에 관심을 갖고 테코톡과 Real MySQL을 읽으며, 트랜잭션과 동시성 처리 등에 관심을 갖게 되었다. 그 중 가장 어렵다고 느낀 트랜잭션 격리 수준에 대한 개념을 정리하려 한다. 트랜잭션 격리 수준은 4단계로 나누어지며, 각 단계 별 부정합 문제점들을 갖고 있어 뒤로 갈 수록 갖고 있던 문제점들을 해결해 나간다. 1. READ UNCOMMITTED각 트랜잭션의 변경내용이 COMMIT 혹은 ROLLBACK 여부에 상관없이 다른 트랜잭션에 노출된다. 예시사용자 A가 트랜잭션을 시작함과 동시에 emp_no = 50000 인 사원을 INSERT 후 COMMIT은 하지 않는다.하지만 사용자 B가 테이블 SELECT 시, emp_no = 50000 인 사원이 조회된다. 트랜잭션이 COMMIT 되기도 ..
개요현재 프로젝트에 인증 & 인가 부분을 맡게 되면서, 요구사항으로 OAuth2.0을 이용한 로그인 기능을 구현하고 JWT 토큰 방식을 접목하게 되었다. Security OAuth2.0 기능이 추가되면 그 기능이 FilterChain 안에서 어떻게 동작하게 되고, 커스텀을 위해 어떤 부분을 어떻게 건드려야 되는지 간단히 알아보았다. OAuth2.0 인증 방법 OAuth2.0은 여러 인증 방법이 있지만, 대게 Authorization Code Grant 방식을 사용한다고 한다.코드 안에서는 여러 일이 일어나지만, Flow는 다음과 같다. Flow 1. 사용자가 어플리케이션에 소셜 로그인 요청 -> 소셜 로그인 페이지로 리다이렉트 Flow 2. 소셜 인증 완료 -> 인증 서버에서 Authorization ..
개요Query DSL에 대한 개념과 기능들을 공부하고 프로젝트에 필터링 검색 기능으로 적용해보던 중, 여러 값에 대한 존재 여부를 조건절로 걸어야 했다. 간단할 줄 알았지만 추가적인 공부가 필요했고, 다행히 Query DSL에서는 해당 이슈 해결을 위한 API를 제공해주고 있었다. 실제로 다른 사이트에서도 많이 봐온 기능이라 이렇게 글로 정리해본다. 요구사항필터링 검색 기능 중 '어떤 모임에 가고 싶으세요' 요구사항을 다음과 같은 경우로 나누어 비교하려 한다단일 태그를 만족하는 모임을 필터링 검색할 수 있다 - 단일 값 존재 여부 확인여러 태그 중 일부 만족하는 모임을 필터링 검색할 수 있다 - 여러 값 존재 여부 확인 2번 요구사항에 대해 추가적으로 설명하자면, 검색 조건이 '외향적인', '친구끼리'..