webIgnorePatterns + FilterChain을 등록할 때 주의할 점을 알아보자. ✅ 문제 상황 // 필터 빈 등록 @Component class JwtAuthenticationFilter extends OncePerRequestFilter { } // 필터 등록 .addFilterBefore(jwtAuthenticatio...
Docker 명령어 정리
도커를 사용하면서 자주 사용하는 명령어를 정리해보았습니다. ✅ 도커 명령어 정리 📌 도커 컨테이너 실행 docker run -d -p 8080:8080 --name container_name image_name -d: 백그라운드 실행 -p: 포트 매핑 --name: 컨테이너 이름 image_name: 이미지 이름 con...
Component + MockBean 사용시 주의사항
개발하던 중 갑자기 특정 도메인의 모든 테스트 코드가 불통이 됐다 (Service + Controller 계층) 실제 서버를 실행하고 API을 호출하면 정상적으로 응답이 되는데 테스트코드를 돌릴때만 에러가 발생했다…. 디버깅하고 확인해보니 @Component + @MockBean 사용시 발생하는 문제였다… 원인 분석과 해결 과정을 정리 ...
Mockito 프레임워크 정리
Mockito를 사용하면 테스트를 진행할 때, 외부 의존성을 가진 객체를 Mocking하여 테스트를 진행할 수 있다. 이번 포스팅에서는 Mockito를 사용하여 테스트를 진행하는 방법을 정리해보겠다. ✅ Mocking이란? Mocking은 테스트를 진행할 때, 외부 의존성을 가진 객체를 Mocking하여 테스트를 진행하는 방법이다. 실게...
MySQL 실수로 날린 데이터 복구하기
실수로 날린 데이터를 바이너리 로그를 활용하여 복구하는 방법에 대해 알아보겠습니다. 참고로 아래 예제는 한개의 바이너리 로그 파일 안에 모든 쿼리가(insert, truncate) 다 들어있다는 가정하에 진행됩니다. Drop, Turncate, Delete, Update 등 데이터에 변화를 줄 수 있는 쿼리는 꼭!! 트랜잭션 을 걸고 실행하길 바랍니다...
동서싱 이슈 해결 방법
해당 글은 재고시스템으로 알아보는 동시성 이슈 해결 방법 강의를 정리한 글입니다. 정리 코드: 깃허브 링크 개발 환경 Java 17 Spring boot 3.2.3 redis docker mysql jpa lombok ✅ 동시성 이슈란? 동시에 여러 개의 스레드, 프로세스 또는 작업이 공유된 자원에 접근하...
Graceful Shutdown 동작 과정
Spring Boot Application에서 Controller가 요청을 처리하고 응답이 되지 않았는데 종료요청이 오면 어떻게 될까요? Client는 응답을 받지 못하고 timeout이 발생합니다. 해당 상황을 예방하기 위하여 Graceful Shutdown에 대해 알아보겠습니다. ✅ Graceful Shutdown이란? Grace...
JPA N+1 발생 원인 및 해결방법
JPA를 사용한다면 한번쯤은 마주쳤던, 또는 들어 봤던 문제입니다. 바로 N+1 문제인데요. 원인과 해결방법을 알아보겠습니다. N + 1 문제란? JPA에서 연관 관계가 설정된 엔티티 사이에서 한 엔티티를 조회하였을 때 조회된 엔티티의 개수(N개)만큼 연관된 엔티티를 조회하기 위해추가적인 쿼리가 발생하는 (+1) 문제를 의미합니다. 지연...
Transaction 롤백 동작 및 시나리오 정리
Unchecked Exception 발생 시에는 롤백 되지만, Checked Exception 발생 시에는 롤백되지 않는건 유명한 정보이다. 하지만 예외를 catch 했을때 어떤식으로 처리가 되는지는 햇갈려서 케이스별로 정리해 보려고 한다. 스프링에서 지원해주는 전파속성은 위와 같이 많이 존재하지만 실제로 자주 사용하는 REQUIRED, RE...
Java HashMap 동작 방식
Java HashMap은 어떻게 동작하는가? 이번 글에서는 Java 7, Java 8에서 HashMap이 어떻게 구현되어 있는지 알아보겠습니다. Java에서는 HashTable을 구현할 때 어떻게 충돌 가능성을 줄이고 성능을 향상시키려 했는지에 대해 중점을 두어 정리해보겠습니다. HashMap과 HashTable public class ...