Java & Spring 33

[Spring] Batch 4

스프링 배치 처리 방식 : Chunk - 크고 무거운 작업의 처리 단위- 대용량 처리가 필요할 때 사용 (매월 1일 포인트 지급, 배송 상태를 일괄적으로 변경 ..)- 대용량 처리 도중 실패 시 '현재 청크 단위' 부터 이어서 실행 가능 청크 지향 처리의 동작 : 데이터 읽기 -> 가공 -> 쓰기 데이터 읽기 : ItemReader 함수형 인터페이스데이터 가공 : ItemProcessor 함수형 인터페이스데이터 쓰기 : ItemWriter 함수형 인터페이스 package spring.batch.lowerToupper;import lombok.RequiredArgsConstructor;import org.springframework.batch.core.job.Job;import org.sprin..

Java & Spring/Batch 2026.02.25

[Spring] Batch 2

스프링 배치 처리 방식 : Tasklet - 작고 독립적인 작업의 처리 단위- 단발성 작업이 필요할 때 사용 (파일 관리, 단순 DB 작업, Email, 문자 알림 발송, 쉘 스크립트 실행 ..) @FunctionalInterface : 함수형 인터페이스, 메서드가 하나이다.리턴 타입이 RepeatStatus인 execute 메서드 하나만 가지고 있다. StepContribution : 현재 단계(Step)가 얼마나 진행되었는지 기록하는 객체- ex : 책을 읽은 횟수, 메모를 쓴 횟수, 커피를 제작한 횟수 .. ChunkContext : 작업 수행에 필요한 정보가 담겨있는 객체 (외부 파라미터, 이전 단계 step에서 넘긴 데이터 ..) Tasklet 방식 1 : 람다식으로 RepeatStatus..

Java & Spring/Batch 2026.02.25

[Spring] Batch 1

스프링 배치- 대용량 데이터를 끊기지 않고 안전하고 효율적으로 처리하기 위한 표준화 프레임워크- 자동화할 '업무'를 대상으로 한다. Job- 배치 처리의 가장 큰 단위 Step - Job을 수행할 세부 단계, 실행 단위- 하나의 Job은 여러 Step으로 구성되어 있다. Job Repository- 배치 처리에 필요한 '메타 데이터'를 DB에 저장하고 관리하는 역할- 메타 데이터 : 스프링 배치 실행에 대한 데이터 (Job의 시작 시간, Step의 실행 시간 ..) Job Operator - 스프링 배치 5에서는 Job Launcher라고 불렀다. - 스프링 배치 운영 조작 인터페이스 - 스프링 배치에 대해 작업을 시작, 관리, 운영 등 조작할 수 있다. @SpringBootApplication..

Java & Spring/Batch 2026.02.25

[Spring] ResponseEntity

ResponseEntitySpring Framework에서 제공하는 클래스 HTTP 응답의 전체 구성 요소를 개발자가 직접 제어할 수 있게 도와주는 '봉투' 역할 HTTP 응답의 구성 Status Line, Code: 응답 상태 (200 OK, 404 Not Found, 500 Error 등)Headers: 응답에 대한 메타 데이터 (Content-Type, 인증 정보 등)Body: 실제 전달할 데이터 (JSON, HTML, 텍스트 등) @GetMapping("/history/{roomId}")public ResponseEntity getChatHistory(@PathVariable Long roomId) { List dtos = chatService.getChatHistory(roomId); ..

Java & Spring 2026.02.22

[Spring] 웹소켓/Stomp 7

채팅 프로젝트 ERD 설계- member : chat_participant가 1 : N 연관관계인 이유 : 하나의 회원은 여러 채팅방을 가질 수 있기 때문 => 여러 채팅 방의 채팅 유저가 될 수 있다.- chat_room : isGroupChat 가 true라면 chat_participant가 3명 이상이라는 의미이다.- message_read_status 를 chat_message 테이블에서 정규화 & 1 : N 연관관계인 이유 [정규화]메시지 읽음 여부를 여러 사용자가 독립적으로 관리할 수 있도록 하기 위함모든 메시지에 isRead 컬럼을 두게 되면, 사용자가 많아질수록 이 컬럼을 관리하기 어려워지고, 데이터 중복 발생 가능메시지별로 다수의 참여자가 있어 각 읽음 여부를 개별적으로 다루기 위해 테이..

[Spring] 웹소켓/Stomp 6

https://nippyclouding.tistory.com/51 [Spring] 웹소켓/Stomp 5https://nippyclouding.tistory.com/49 [Spring] 웹소켓/Stomp 4Stomp는 순수 웹소켓과 다르게 각 room (주로 topic이라고 호칭)들을 구분하여 관리할 수 있다. (사용자마다 group화 되어있다)순수 웹소켓도 각 room을nippyclouding.tistory.com위와 이어진다. EventListener - Stomp에서는 순수 웹소켓과 다르게 직접 클라이언트 세션들을 개발자가 관리하지 않는다.- 클라이언트 세션들은 Stomp에서 자동으로 편리하게 관리하고 있다.- 웹소켓을 이용하며 발생한 사건(event)들을 catch하여 기록, 로깅할 수 있도록 돕는..

[Spring] 웹소켓/Stomp 5

https://nippyclouding.tistory.com/49 [Spring] 웹소켓/Stomp 4Stomp는 순수 웹소켓과 다르게 각 room (주로 topic이라고 호칭)들을 구분하여 관리할 수 있다. (사용자마다 group화 되어있다)순수 웹소켓도 각 room을 구분 가능하지만, 직접 모두 구현해주어야 한다.Snippyclouding.tistory.com Stomp Handler 웹소켓 / Stomp 4의 코드는 현재 JWT 토큰 검증을 하고 있지 않다.=> 로그인 여부와 관련없이 채팅 기능을 이용할 수 있다는 것이 문제이다. 현재는 security config 코드에서 "/connect" 요청은 인증에서 제외하고 있다.security filter에서는 http 요청에 대해서만 인증을 검증할 ..

[Servlet] WebSocket

순수 서블릿에서의 웹소켓 동작 폼이다.@ServerEndpoint("/connect")public class SimpleWebSocketServer { @OnOpen public void onOpen(Session session) {} @OnMessage public void onMessage(String message, Session session) {} @OnClose public void onClose(Session session) {}} 실제로 메서드를 채우면 아래와 같다.@ServerEndpoint("/connect")public class SimpleWebSocketServer { // Spring에서의 sessions와 동일하게 메모리에서 관리 pr..

Java & Spring 2026.02.16

[Spring] 웹소켓/Stomp 4

https://nippyclouding.tistory.com/48 [Spring] 웹소켓/Stomp 3https://nippyclouding.tistory.com/46 [Spring] 웹소켓/Stomp 2프로젝트 실습 (아래 강의를 수강하며 공부한 내용을 정리)https://www.inflearn.com/course/%EC%9B%B9%EC%86%8C%EC%BC%93-stomp-%EC%B1%84%ED%8C%85%EC%84%9C%EB%B9%84%EC%8A%A4?cidnippyclouding.tistory.com위와 이어진다. STOMP Stomp는 순수 웹소켓과 다르게 각 room (주로 topic이라고 호칭)들을 구분하여 관리할 수 있다. (사용자마다 group화 되어있다)순수 웹소켓도 각 room을 구..