[SpringBoot] Redis 적용 시 @Indexed 사용 문제점
·
Framework/SpringBoot
🩸 문제redis에 refresh token을 저장 중 → idx가 붙은 것과, value이름과 함께 토큰 값이 여러 개가 한번에 나오고 있다. redis:filed:value 형태가 옳게 나오는 걸까?    🩺 원인 value를 이용해 검색할 수 있는 @Indexed를 이용하면 인덱스 처리가 된다.@Getter@RedisHash(value = "refresh_token", timeToLive = 86400)public class RefreshToken { @Id private String userId; @Indexed private String token; public RefreshToken(String userId, String token) { this.userId = userId; this...
[SpringBoot] 테스트 코드 작성 시 Mock과 Spy, 그리고 BCryptPasswordEncoder의 encode
·
Framework/SpringBoot
첫번째 이슈: BCryptPasswordEncoder 동작  1. 문제Mock으로 BCryptPasswordEncoder 를 주입 받아 proxy로 생성돼 비밀번호가 제대로 저장되지 않는 문제 발생비밀번호가 인코딩되어 저장되지 않고, 비밀번호 검증도 하지 못해 예외가 발생하고 있다.  2. 원인 @Mock private BCryptPasswordEncoder passwordEncoder; 테스트 주체는 UserService니 BCryptPasswordEncoder는 Mock으로 지정하였다.그로 인해 matches()와 encode()가 동작하지 않았고, password를 제대로 검증하지 못하고 있었다.  3. 해결 방안 given - willReturn 이용given(passwordEncoder.matc..
[SpringBoot] Cache 값을 저장하지 못하던 문제 해결 및 @Cacheable과 @CachePut 차이
·
Framework/SpringBoot
부트캠프 과제 中 트러블슈팅 과정 작성  🛠️ 트러블 슈팅0. 배경사장이 어떤 가게를 소유하고 있는지 한번에 처리하기 위한 로직을 빼기 위해 고민했다.Filter, Inteceptor 등 방법을 생각했지만, 다 포기하고 말았다. 사장이 소유하고 있는 가게를 확인하기 위해서는 결국 DB에 접근해야 하는데, 구현 로직이 아닌 완전 밖에 있는 filter나 interceptor에서 repository접근이 옳지 않아 보였다. 결국 공통으로 처리하는 걸 포기해야 하나 싶을 때 'Cache를 사용하라'는 조언을 들었다.   1. 문제가게가 생성될 때 userId를 key로 캐시에 저장하고, 그 캐시는 List형태로 만들고 싶었다.하지만 가장 첫단추인 캐시 저장부터 문제가 생겼다. 가게 생성 메서드 안에 있는 캐..
[SpringBoot] access token과 refresh token을 만들어 postman으로 테스트하기 (1)
·
Framework/SpringBoot
내배캠 4ch 개인 과제 수행 중 lv5에 해당하는 "스스로 문제 정의"를 진행하며 작성한 글    🔒 Access Token접근을 위해서 사용하는 access token정보가 저장되어 노출되지 않도록 로컬 변수에 저장하여 보호해야 한다.백엔드가 Authorization헤더에 저장하면 프론트에서 로컬 변수에 저장한다.  🔑 Refresh Token토큰을 재발급받기 위해 사용하는 refresh tokenaccess token이 만료되었을 때 재발급을 받을 수 있게 하며, access token과 refresh token을 비교한다.cookie에 저장해 외부로 노출될 위험이 있기 때문에 아무 정보도 담지 않는다.  🔐 재발급 방법access token & refresh token 만료 → 재발급 (로그..
[SpringBoot] AOP를 이용해 Log를 남겨보자 -로깅
·
Framework/SpringBoot
🔍 AOP: Aspect-Oriented Programming관점 지향 프로그래밍 → [ 핵심 기능 | 공통 기능 ] 으로 나눈 뒤, 핵심 기능에서 공통 기능을 불러와 적용하는 방법.비즈니스 로직이 핵심 기능이라면 인증이나 로깅은 부가 기능에 속한다. 공통 기능을 분리해서 사용하는 것에는 Filter나 Interceptor와 같은 기능도 포함이지만, 이 기능들은 각각 실행되는 시점이 다르며, 시점에 따라 순서도 다르다. Filter - Interceptor - AOP - Interceptor - Filter 순으로 실행된다. (요청에서 응답까지)  그 중 AOP를 활용해서 요청과 응답에 대한 정보를 남기는 것을 선택했다.  1. Advice부가 기능을 정의한 코드핵심 기능을 담고 있는 Target에 제..