Spring(17)
-
멀티테넌시 스키마 분리 전략
MSA 구조 설계 중 사용자 DB 관리에 사용된 방식으로 하나의 소프트웨어 인스턴스가 여러 사용자 그룹 또는 테넌트를 지원하도록 설계된 아키텍처입니다. 쉽게 말해 여러 사용자가 동일한 소프트웨어와 인프라를 공유하면서도 서로의 데이터나 설정을 간섭받지 않고 독립적으로 서비스를 이용할 수 있는 구조입니다. 다수의 이용자들을 하나의 애플리케이션 서비스를 제공하고 사용자별 데이터를 노출되지 않도록 완전 분리함. 아키텍처 전체 흐름클라이언트 요청 수신필터/인터셉터에서 헤더에서 테넌트 식별자 추출(GateWay 서버에서 request에 추가되어 전달됨)Spring JPA 호출 시DynamicDataSourceRouter가 TenantContext로부터 lookup key(테넌트 ID) 결정기존에 생성된 Dat..
2025.06.28 -
SSR 기반 Spring Server 모니터링 생성기 (Prometheus, Grafana, Spring Security)
모니터링 서버 자체를 구축하는 방법은 크게 어렵지 않았지만 그 과정에서 서버에 적용된 Security에 대해 다시 공부해보는 계기가 되었습니다. 총 두가지 방법으로 모니터링 페이지를 구축하였습니다.Spring Security의 별도 SecurityFilterChain 생성 + 모니터링 전용 Id와 role을 생성Spring Security의 별도 SecurityFilterChain 생성 + 도커 내부망 통신Spring Security의 별도 SecurityFilterChain 생성 + 모니터링 전용 Id와 role을 생성 필터 체인의 적용 순서기존 SecurityFilterChain이 먼저 선언되어 있으면, 기존 로그인 방식(LoginForm)을 사용하지 않는 문제가 발생합니다.이를 해결하기 위해 별도..
2025.03.27 -
Jpa Save vs SaveAll 성능 차이 체감해보기
프로젝트를 진행하면서 JPA의 save와 saveAll 메서드를 사용해 데이터를 저장하게 됩니다. 일반적으로 100개 미만의 데이터를 저장할 때는 두 메서드 간의 성능 차이를 크게 느끼지 못할 수 있습니다. 그러나 대량의 데이터를 저장할 때는 두 메서드의 성능 차이가 매우 크다는 점을 확인할 수 있었습니다. 이번 글에서는 이 차이에 대해 살펴보고 각각의 사용 시 주의해야 할 점을 정리해 보겠습니다. Save vs SaveAll 차이점 save와 saveAll의 가장 큰 차이는 트랜잭션의 생성 방식과 처리 방식에 있습니다.동작 방식: 데이터를 하나씩 저장하며, 호출될 때마다 별도의 트랜잭션을 생성하여 처리합니다.특징: N개의 데이터를 저장할 경우 N번의 트랜잭션이 생성됩니다.동작 방식: 한 번의 트랜잭션 ..
2025.01.11 -
[트러블 슈팅 - 중복 API 요청] API 멱등성 (feat: redis) 해결 완료
이번 문제는 API 요청이 중복 클릭과 네트워크 지연으로 동일한 요청을 반복하는 문제가 발생하는 일이 생겨 이를 해결하는 과정을 작성할 예정입니다. 멱등성이란 멱등성은 동일한 연산을 여러 번 수행해도 결과가 달라지지 않는 성질을 말한다. 이는 클라이언트에서 같은 요청을 여러 번 보내거나 네트워크 지연으로 인한 오류로 인한 중복 요청이 오더라도 서버는 상태가 변하지 않게 유지하도록 보장하는 것을 말한다. 멱등성이 보장되지 않는다면 어떻게 될까? 멱등성이 보장되지 않는 요청의 종류에는 무엇이 있을까? 서버 리소스 조회 혹은 대체하는 GET, PUT의 경우 여러번 요청해도 멱등성이 보장된다. 불가피하게 같은 요청이 발생하더라도 데이터 변경이 없기 때문이다. 문제가 생길 거 같은 DELETE의 경우에도 데이터..
2024.09.11 -
[MockMvc - SpringTest] Spring Security Login Test
Spring Boot Security를 이용하여 로그인 테스트를 실행 방법을 알아보자. 기본 세팅 - gradle testImplementation 'org.springframework.security:spring-security-test' Test를 하기 위해서는 security-test 라이브러리를 추가해줘야 한다. 기본적으로 Mockmvc 가상 웹 환경에서 진행하는데 해당 과정의 동작 처리에 필요하다(CSRF 토큰, 인증, 인가등등..) 테스트 코드 작성 방법 @Slf4j@SpringBootTest@TestPropertySource(locations = "classpath:application-api.properties")@ActiveProfiles("test")@Transactional@Auto..
2024.08.25 -
[트러블 슈팅 - Spring Test] 의존성 주입 실패 (test yml 파일 안 읽힘)
문제 사항 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'messageController' defined in file [~~~\controller\MessageController.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'messageService': Injection of autowired dependencies failedCaused by: org.springframework.beans.factory.BeanCreationExcep..
2024.08.25