본문 바로가기

SpringBoot6

Spring Scheduler로 탈퇴 회원 데이터 정리 자동화하기 오늘은 Spring Scheduler를 활용해서 탈퇴 회원의 개인정보를 자동으로 삭제하는 배치 작업을 구현했다.개인정보보호법에 따르면 탈퇴한 회원의 정보는 일정 기간 후 삭제해야 하는데,이걸 수동으로 하기엔 너무 번거롭고 실수할 여지도 많아서 자동화가 필요했다.📋 구현 요구사항항목 내용작업 내용탈퇴 회원 개인정보 자동 삭제삭제 기준탈퇴일로부터 7일 경과삭제 방식use_yn 컬럼을 false로 변경 (물리삭제)실행 주기매일 새벽 2시사용 기술Spring Scheduler (@Scheduled)💻 코드 구현1. 스케줄러 활성화@SpringBootApplication@EnableScheduling // 스케줄링 기능 활성화public class Application { public static vo.. 2025. 11. 11.
Spring Boot 멀티 데이터소스: MySQL과 Oracle 동시에 연결하기 회사에서 레거시 시스템 마이그레이션 프로젝트를 맡게 됐다.기존 Oracle DB는 유지하면서 새로운 기능은 MySQL로 구축해야 하는 상황...처음엔 "이거 어떻게 하지?" 싶었는데, 막상 해보니까 Spring Boot에서 멀티 데이터소스 설정이 생각보다 깔끔하게 정리됐다.오늘은 삽질했던 경험을 바탕으로 Spring Boot에서 MySQL과 Oracle을 동시에 연결하는 방법을 정리해보려고 한다.왜 멀티 데이터소스가 필요할까?실무에서 멀티 데이터소스를 사용하는 경우는 생각보다 많다:레거시 시스템 연동: 기존 Oracle DB를 유지하면서 신규 서비스는 MySQL로 구축MSA 전환 과정: 모놀리틱에서 MSA로 전환하는 과도기에 여러 DB 참조읽기/쓰기 분리: Master/Slave 구조로 성능 최적화멀티테.. 2025. 10. 10.
Spring Boot 성능 최적화 최근 프로젝트에서 API 응답 속도가 느려지는 문제를 겪으면서 성능 최적화를 본격적으로 진행했다. 적용해본 방법들과 결과를 정리해둔다.## 1. Redis 캐싱으로 응답 시간 40% 단축가장 효과가 좋았던 건 Redis 캐싱이었다. 상품 상세 정보 같이 자주 조회되지만 변경은 드문 데이터에 `@Cacheable`을 적용했다.@Cacheable(value = "products", key = "#productId")public ProductDto getProductDetail(Long productId) { return productRepository.findById(productId) .map(this::convertToDto) .orElseThrow(() -> new Pro.. 2025. 10. 3.
IntelliJ에서 Spring Boot VM Options 설정하기 스프링부트 개발하면서 IntelliJ에서 VM Options 설정하는 방법을 정리했다.VM Options란?JVM(Java Virtual Machine)에 전달되는 시스템 프로퍼티나 환경변수를 설정하는 방법이다.쉽게 말해서 코드에 박기 곤란한 설정값들을 실행할 때 주입해주는 거다.IntelliJ에서 VM Options 설정하는 방법1. Run Configuration 열기상단 메뉴바에서 Run > Edit Configurations 클릭또는 실행 버튼 옆 드롭다운에서 Edit Configurations 선택2. 실행옵션추가 -> VM Options 입력VM Options 필드에 -D 옵션으로 시작하는 프로퍼티들을 입력각 옵션은 줄바꿈 또는 공백으로 구분3. 설정 예시와 용도AWS SES 설정 (이메일 발.. 2025. 7. 22.
Java Exception 처리 전략과 커스텀 예외 설계 1. Exception 처리 기본 전략Checked vs Unchecked Exception 선택 기준Checked Exception: 복구 가능한 예외 (파일 없음, 네트워크 연결 실패)Unchecked Exception: 프로그래밍 오류 (NPE, IllegalArgument)실무 권장: 대부분 RuntimeException 상속 사용Exception 처리 레벨 구분// Controller 레벨: HTTP 상태코드 변환// Service 레벨: 비즈니스 로직 예외 처리// Repository 레벨: 데이터 접근 예외 변환2. 커스텀 예외 설계 원칙예외 계층 구조 설계// 최상위 비즈니스 예외public abstract class BusinessException extends RuntimeExcepti.. 2025. 6. 8.
단위 테스트(Unit Test) vs 통합 테스트(Integration Test) 차이점 정리 단위 테스트란?가장 작은 단위의 코드를 테스트보통 하나의 메서드나 클래스를 테스트외부 의존성을 Mock으로 대체빠르고 독립적TDD의 기본통합 테스트란?여러 컴포넌트가 함께 동작하는지 테스트실제 DB, API 등 외부 시스템과 연동단위 테스트보다 느림실제 환경과 비슷한 조건에서 테스트주요 차이점구분 단위 테스트 통합 테스트범위개별 메서드/클래스여러 컴포넌트속도빠름느림외부 의존성Mock 사용실제 시스템 사용격리성완전 격리부분 격리복잡도단순복잡Java 단위 테스트 예제테스트 대상 클래스public class Calculator { public int add(int a, int b) { return a + b; } public int divide(int a, int b) { .. 2025. 5. 28.