브라우저 notify
새 데이터 들어왔다
무전기
단방향: 서버에서 클라이언트로 보내는 무전기
사용전에는 계속해서 클라이언트 측에서 서버로 확인을 보내야했다.
SSE는 단일 연결을 통해 전이중 통신 채널을 제공하지만 설정 및 유지 관리가 더 복잡할 수 있는 WebSocket에 비해 사용 및 구현이 더 간단하다는 특징이 있다.
OSIV(Open Session In View):
영속성 컨텍스트를 뷰까지 열어두는 기능
SSE와 궁합이 안좋다
1. 기본적으로 켜져있으니 끄면 됨.
2. OSIV를 켜되 일부 요청에 대해서만 끈다.
상호작용이 필요한가?
-> 예 => 일반 웹 앱
-> 아니오 => 배치(일괄처리) 앱
회원가입
일반 or 배치
배치 : 주에 한번씩 업데이트
주에 한번씩 광고 메일을 발송
배치( 단위가 큰, 실행시간이 조금 더 걸리는)
아무리 올바른 요청이더라도 서버와 db요청에 시간이 오래 걸리면 타임아웃이 생긴다.
이럴때 배치를 사용하면 편하다.
GET /member/join - 회원 가입
GET /batch/member/sendWebZineToAllMember 시간이 오래 걸리는 작업
스프링 배치


설정
spring:
batch:
job:
name: ${job.name:NONE}
job.name이 들어오면 job.name 없으면 NONE
initialize-shcema : true
배치에 쓰이는 전용 db같은 것.

springframework.boot에 적힌 version 을 직접 고치면 버전이 변경된다.
빌드된 버전 확인:

다운로드 받을 플러그인들:

배치 예시코드
@Configuration
@RequiredArgsConstructor
public class HelloWorldConfig {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Bean
public Job helloWorldJob(Step helloWorldStep1) {
return jobBuilderFactory.get("helloWorldJob").start(helloWorldStep1).build();
}
@Bean
public Step helloWorldStep1(Tasklet helloWorldTasklet) {
return stepBuilderFactory.get("helloWorldStep1").tasklet(helloWorldTasklet)
.build();
}
@Bean
public Tasklet helloWorldTasklet() {
return (stepContribution, chunkContext) -> {
System.out.println("Hello World!");
return RepeatStatus.FINISHED;
};
}
//job: 여러가지의 stab들로 구성
}
배치는 이미 성공한 명령에 대해서 다시 명령하지 않는다.
실패한 명령이나 새로운 명령에 대해서는 실행한다.