프롬프트 AI&OpenAPI&공공데이터를 활용한 웹앱개발자 양성 과정 86일차

서명원·2024년 4월 17일

1. SSE

  • 브라우저 notify

  • 새 데이터 들어왔다

  • 무전기

단방향: 서버에서 클라이언트로 보내는 무전기

사용전에는 계속해서 클라이언트 측에서 서버로 확인을 보내야했다.

SSE는 단일 연결을 통해 전이중 통신 채널을 제공하지만 설정 및 유지 관리가 더 복잡할 수 있는 WebSocket에 비해 사용 및 구현이 더 간단하다는 특징이 있다.

OSIV(Open Session In View):
영속성 컨텍스트를 뷰까지 열어두는 기능

SSE와 궁합이 안좋다
1. 기본적으로 켜져있으니 끄면 됨.
2. OSIV를 켜되 일부 요청에 대해서만 끈다.

상호작용이 필요한가?
-> 예 => 일반 웹 앱
-> 아니오 => 배치(일괄처리) 앱

회원가입

  • 일반 or 배치

    배치 : 주에 한번씩 업데이트
    주에 한번씩 광고 메일을 발송

배치( 단위가 큰, 실행시간이 조금 더 걸리는)

아무리 올바른 요청이더라도 서버와 db요청에 시간이 오래 걸리면 타임아웃이 생긴다.
이럴때 배치를 사용하면 편하다.
GET /member/join - 회원 가입
GET /batch/member/sendWebZineToAllMember 시간이 오래 걸리는 작업

  • TIMEOUT

스프링 배치

2. 배치 프로젝트

설정

spring:
  batch:
    job:
      name: ${job.name:NONE}

job.name이 들어오면 job.name 없으면 NONE

initialize-shcema : true
배치에 쓰이는 전용 db같은 것.

3. 스프링 부트 다운그레이드 방법


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들로 구성
}

배치는 이미 성공한 명령에 대해서 다시 명령하지 않는다.
실패한 명령이나 새로운 명령에 대해서는 실행한다.

profile
백엔드 취업을 꿈꾸는 일본어 전공자

0개의 댓글