@Bean public PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); }PasswordEncoder 빈 주입return new BCryptPasswordEncoder(); -> return PasswordEncoderFactories.createDelegatingPasswordEncoder();으로 변경하였다.Password Storage :: Spring SecuritySpring Security’s PasswordEncoder interface is used to perform a one-way transformation of a password to let the..
JwtAuthenticationFilter 라고UsernamePasswordAuthenticationFilter.class 이전에//로그인전 UserPasswordAuthenticationFilter 를 통해 인증을 받도록 설정 .addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);항상 해당 필터를 거치도록 설정을 하였다.초기@Slf4j public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter { @Autowired private PasswordEncoder passwordEncoder; /** * authenti..
package org.example.알고리즘.행렬의덧셈; import java.util.Arrays; /**/ class Solution { public static void main(String[] args) { Solution solution = new Solution(); System.out.println(Arrays.deepToString(solution.solution(new int[][]{{1, 2}, {2, 3}}, new int[][]{{3, 4}, {5, 6}}))); } public int[][] solution(int[][] arr1, int[][] arr2) { ArrayClass arrayClass1 = new ArrayClass(arr1); ArrayClass arrayClass..
Swagger UI 와 Spring RestDocs 의 장 단점의 비교Swagger UI 의 장점직관적인 UI스웨거는 API 에 대한 요청과 응답 등을 시각적으로 표현하여 사용자가 쉽게 이해할 수 있습니다실시간 테스트API 엔드포인트에 대한 실시간 테스트를 제공합니다.Swagger UI 의 단점어노테이션 수동 기입 기반 API어노테이션 등을 수기로 기입하여 문서를 생성하기에, 코드와 문서간의 불일치가 발생할 수 있다.유지 보수의 문제성API 변경시마다 스웨거 어노테이션을 수정해야한다.복잡코드가 진짜~ 너무 더럽다어노테이션때문에 불필요하게 컨트롤러단과 DTO 단에서 피로함이 가중된다.Spring Rest Docs 의 장점정확성테스트 코드를 기반으로 문서를 생성하기에 코드와 문서간 일관성 유지가 가능하다가볍..
@WebMvcTest 어노테이션스프링 부트에서 제공하는 어노테이션컨트롤러 테스트에 필요한 구성만 로드하여 빠른 테스트가 가능하도록 한다.테스트 대상 컨트롤러 클래스를 지정가능@WebMvcTest(YourController.class) public class YourControllerTest { // ... }MockMvc 스프링 MVC 테스트 지원 핵심 클래스컨트롤러 메서드 호출하고 HTTP 요청/ 응답을 검증가능@Autowired 를 통해 MockMvc 인스턴스 주입@Autowired private MockMvc mockMvc;예시// when + then mockMvc .perform(MockMvcRequestBuilders .get(BASE_URL + "/{userId}/carts", anyStri..
더티 리드 (Dirty Read)트랙잭션 A 가 아직 커밋되지 않은 변경을 만든 경우,트랜잭션 B 가 해당 변경을 읽는 현상@Transactional(isolation = Isolation.READ_UNCOMMITTED) public void dirtyReadSimulation() { User user = userRepository.findById(1L).orElseThrow(); user.setBalance(user.getBalance() - 100); // 이 지점에서 다른 트랜잭션에서 사용자의 잔액을 읽을 수 있으며 더티 리드가 발생할 수 있습니다. }반복 불가능 리드 (Non-repeatable Read)트랜잭션 A가 같은 레코드를 두 번 읽고그 사이에 트랜잭션 B 가 해당 레코드를 변경하고 커밋..