API (10) 썸네일형 리스트형 스프링 스케줄러와 배치 #2 - Spring Batch 개인 학습 용 포스팅 # 스케줄러만으로도 약속된 로직을 실행시킬 수 있는데 굳이 배치를 사용하는 이유 ? 대용량 데이터 처리에 최적화데이터를 청크 단위로 처리하거나 병렬 실행, 재시작, 실패 처리 같은 시나리오를 통한 로직 구현 가능세밀한 트랜잭션로직 실행 시, 실패한 지점부터 다시 시작할 수 있도록 설계 가능리더-프로세서-라이터 구조로 데이터 소스에서 읽고, 가공하고, 저장하는 역할과 구조가 분리되어 있어서 유지보수 및 확장성 용이 ✅ Scheduler + Transaction 의 한계@Scheduled 메서드 내에서 트랜잭션을 걸면 전체 로직이 하나의 트랜잭션으로 처리 → 간단한 작업에는 지장이 없지만, 복잡한 작업이나 다량의 데이터 처리시 문제가 될 수 있음.전체 롤백의 위험 → 데이터 .. 스프링 스케줄러와 배치 #1 - Spring Scheduler(@Scheduled), TaskScheduler 스케줄러란?특정 작업을 예약된 시점에 수행 가능하도록 스프링 프레임워크에서 제공하는 기능사옹 예 ) 예약 알림, 이메일 전송, 피드 알림 등등 - 프로젝트 설정 - 스케줄러 사용 시 옵션 정리fixedRate이전 작업 시작 시점 기준, 주기적으로 실행fixedRate = 5000작업 시작 후 5초마다 실행fixedDelay이전 작업 종료 시점 기준, 주기적으로 실행fixedDelay = 5000작업 종료 후 5초 뒤 실행initialDelay작업 시작 전 대기 시간 설정fixedRate = 5000, initialDelay = 1000010초 대기 후 5초마다 실행cronCron 표현식을 사용해 일정 예약cron = "0 0/5 * * * *"매 5분마다 실행zone타임존 설정 (기본은 시스템 타임존 .. Spring AOP 설명(Annotaion, Class) 및 예제 어노테이션 먼저 정리1. @Before설명: 지정된 포인트컷 이전에 실행되는 어드바이스2. @After설명: 지정된 포인트컷 후에 실행되는 어드바이스 메소드 실행 여부와 관계없이 항상 실행3. @AfterReturning설명: 지정된 포인트컷의 메소드가 정상적으로 실행된 후에 실행되는 어드바이스 메소드가 예외 없이 정상적으로 종료되었을 때만 실행4. @AfterThrowing설명: 지정된 포인트컷의 메소드가 예외를 던졌을 때 실행5. @Around설명: 지정된 포인트컷 전후로 실행되며, 메소드의 실행을 제어 @Before와 @After를 합친 효과를 제공 ProceedingJoinPoint를 이용하여 메소드 실행을 직접 제어 가능6. @Pointcut설명: 어드바이스가 적용될 포인트컷 표현식을 정의하는 .. #2 TEST CODE 작성 : Todo API 단위테스트, 통합테스트 https://letsdodev.tistory.com/211에서 작업했던 Todo API 에서 단위테스트, 통합테스트를 진행한다. #1 TEST CODE 작성 : Todo API 만들기※ 테스트 코드 작성 이전, 테스트 코드 작성에 필요한 Todo API 작성해서 기록한 게시물※ 테스트 코드는 다음 게시물에 작성 예정[프로젝트 생성]- 스프링 이니셜라이저 사용spring-boot : 3.4.0 verjaletsdodev.tistory.com @WebMvcTest vs @SpringBootTest@WebMvcTest:컨트롤러만 로드하고, 그 외의 빈(서비스, 리포지토리 등)은 로드하지 않음빈 로딩 범위: 컨트롤러만 로드, 서비스나 리포지토리와 같은 다른 빈은 자동 로드되지 않음주로 웹 계층 테스트에 사.. #1 TEST CODE 작성 : Todo API 만들기 ※ 테스트 코드 작성 이전, 테스트 코드 작성에 필요한 Todo API 작성해서 기록한 게시물※ 테스트 코드는 다음 게시물에 작성 예정[프로젝트 생성]- 스프링 이니셜라이저 사용spring-boot : 3.4.0 verjava(jdk) : 21 (lombok 추가하지 않았고 소스로 직접 작성하여 사용) [패키지 구조][프로젝트 소스 및 환경 설정]- build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.4.0' id 'io.spring.dependency-management' version '1.1.6'}group = 'com.testcode'version = '0.0.1-SNAPSHOT'java { toolchain { .. [spring webSocket - 스프링 웹소켓] : 간이 채팅방 구현 구조 채팅방 입장 시 웹소켓 connect~웹소켓 연결 성공 시, 종료 시 프론트 웹소켓 이벤트 핸들러로 채팅방 입·퇴장 메시지 해당 채팅방 유저들에게 message send채팅방 최초 입장 시 REST API 로 해당 채팅방 대화기록 모두 불러와서 화면에 뿌려줌채팅 참여자들이 메시지 보내면 [프론트 message send -> 백 webSocketHandler 데이터 처리]로 DB에 데이터 적재 및 해당 사용자들에세 session message send #1 스프링 이니셜라이저로 프로젝트 생성- 채팅방 같이 DB 적재가 자주 일어나야 하는 API 의 경우 NOSQL DB를 사용해야 하지만 - 나는 WebSocket 을 사용하며 개발을 진행한다는 것에 중점을 두어 그냥 MYSQL 을 사용하기로 하였다.. WebSocketHandler - 오버라이드 메소드, override method 정리 import org.springframework.web.socket.*;import org.springframework.web.socket.handler.TextWebSocketHandler;public class CustomWebSocketHandler extends TextWebSocketHandler { // WebSocket 연결이 성립되었을 때 호출되는 메서드 @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { // 새로운 WebSocket 연결이 성립되었을 때 실행되는 로직을 여기에 작성 System.out.println("웹소켓 연결됨:.. 메일 API : 이메일 보내기 API - (구글, 스프링부트) # 1 스프링 이니셜라이저를 통한 세팅앱 비밀번호가 프로젝트 내 smtp 설정에서 password로 사용될 것이다.※발급 시에만 보여지기 때문에 따로 메모장에 별도로 저장해두자 ※ # 2 build gradleplugins { id 'java' id 'org.springframework.boot' version '3.3.0' id 'io.spring.dependency-management' version '1.1.5'}group = 'com.static'version = '0.0.1-SNAPSHOT'java { sourceCompatibility = '21'}configurations { compileOnly { extendsFrom annotationProcessor }}repositories {.. 이전 1 2 다음