전체 글
  • incrementer() 사용 이유를 알아보자. Job 생성 package com.project.springbatch._20_incrementer; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration..

    Read more
  • 람다 안에서 로컬 변수 접근 자바 메서드 안에서 무명 내부 클래스를 정의할때 그 메서드의 로컬 변수를 무명 내부 클래스에서 사용할 수 있다. 람다 안에서도 같은 일을 할 수 있다. 람다 안에서도 동일하게 적용할 수 있다. 람다를 함수 안에서 정의하면 함수의 파라미터뿐 아니라 람다 정의의 앞에 선언된 로컬 변수까지 람다에서 모두 사용할 수 있다. forEach문 예제 fun printMessagesWithPrefix(messages: Collection, prefix: String) { messages.forEach { println("$prefix $it") // 람다 내부에서 함수의 "prefix" 변수 사용 } } 호출 fun main() { val errors = listOf("403 Forbidd..

    Read more
  • 멱등성 여러번 연산을 수행하더라도 동일한 결과를 나타내는 것을 뜻한다. 멱등성 프로듀서는 동일한 데이터를 여러번 전송하더라도 카프카 클러스터에 단 한번만 저장됨을 의미한다. 기본 프로듀서의 동작 방식은 적어도 한번 전달(at least once delivery)을 지원한다. 적어도 한번 전달이란, 프로듀서가 클러스터에 데이터를 전송하여 저장할 때 적어도 한번 이상 데이터를 적재할 수 있고 데이터가 유실되지 않음을 뜻한다. 두번 이상 적재되어 중복이 발생할 가능성은 있다. 멱등성 프로듀서 멱등성 프로듀서는 기본 프로듀서와 달리 데이터를 브로커로 전달할때 프로듀서 PID(Producer unique ID)와 시퀀스 넘버(sequence number)를 함께 전달한다. 그러면 브로커는 프로듀서의 PID와 시퀀..

    Read more
  • 문제 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 풀이코드 import java.util.Arrays; import java.util.Scanner; /** * @Date 2022/05/29 * @URL https://www.acmicpc.net/problem/1541 */ public class A1541_잃어버린_괄호 { static String param; public static void main(String[] args) { ..

    Read more
  • preventRestart() 1) 선언하지 않는 경우 - true @Bean public Job preventRestartJob() { return this.jobBuilderFactory.get("preventRestartJob") /* step start */ .start(preventRestartStep1()) .next(preventRestartStep2()) .build(); } 2) 선언하는 경우 - false @Bean public Job preventRestartJob() { return this.jobBuilderFactory.get("preventRestartJob") /* step start */ .start(preventRestartStep1()) .next(preventResta..

    Read more
  • acks 옵션 카프카 프로듀서의 acks옵션은 0, 1, all(또는 -1) 값을 가질 수 있다. 이에 대해서 우리는 이전 포스팅에서 간단히 살펴봤었다. https://devfunny.tistory.com/747 [아파치 카프카 어플리케이션 프로그래밍] 5. 프로듀서의 중요 개념과 옵션값 프로듀서 프로듀서는 카프카 브로커로 데이터를 전송할때 내부적으로 파티셔녀, 배치 생성 단계를 거친다. 전송하고자 하는 데이터는 ProducerRecord 인스턴스를 생성하여 설정한다. 필수 파라미터 devfunny.tistory.com value 설명 0 default 프로듀서가 전송한 즉시 브로커에 데이터 저장 여부와 상관 없이 성공으로 판단한다. 1 리더 파티션에 데이터가 저장되면 전송 성공으로 판단한다. -1 or..

    Read more
  • 람다식 코드 블록을 함수 인자로 넘기기 함수형 프로그래밍에서는 클래스를 선언하고 그 클래스의 인스턴스를 함수에 넘기는 대신, 함수를 직접 다른 함수에 전달할 수 있다. 람다 식을 사용하면 코드가 더욱 더 간결해진다. 람다 식을 사용하면 함수를 선언할 필요가 없고 코드 블록을 직접 함수의 인자로 전달할 수 있다. 함수에 인자로 넘기면서 바로 람다를 정의하는 경우가 대부분이다. 코틀린의 람다식은 항상 중괄호로 둘러싸여있다. 인자 목록 주변에 괄호가 없다는 사실을 꼭 기억하라. 화살표(->)가 인자 목록과 람다 본문을 구분해준다. 1) 람다식을 변수에 저장해보자. fun main() { // 람다식을 변수에도 저장할 수 있다. val sum = { x: Int, y: Int -> x + y } println(..

    Read more
  • 문제 https://www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 풀이코드 (시간초과) import java.util.*; import java.util.stream.IntStream; import java.util.stream.Stream; /** * @Date 2022/05/28 * @URL https://www.acmicpc.net/problem/17298 */ public class A17298_오큰수 { static int N; static int[] arr..

    Read more
  • 1. Chrome 확장 프로그램 설치 https://chrome.google.com/webstore/detail/%EB%B0%B1%EC%A4%80%ED%97%88%EB%B8%8Cbaekjoonhub/ccammcjdkpgjmcpijpahlehmapgmphmk?hl=en&authuser=0 백준허브(BaekjoonHub) Automatically integrate your BOJ submissions to GitHub chrome.google.com 2. [Add to Chrome] 버튼 클릭 3. [확장 프로그램 추가] 버튼 클릭 4. 크롬 우측에 확장프로그램 아이콘 선택 5. 고정 6. 5번 고정 이후, 크롬 우측 상단에 확장프로그램 옆에 백준허브 아이콘 선택 7. 뜨는 팝업에 [Authenticate]..

    Read more
  • Object 키워드 코틀린에서는 object 키워드를 다양한 상황에서 사용하지만, 모든 경우 클래스를 정의하면서 동시에 인스턴스(객체)를 생성한다는 공통점이 있다. object 키워드를 사용하는 여러 상황을 살펴보자. 상황 설명 객체 선언 (object declaration) 싱글턴을 정의하는 방법 중 하나다. 동반 객체 (companion object) 인스턴스 메서드는 아니지만 어떤 클래스와 관련있는 메서드와 팩토리 메서드를 담을때 쓰인다. 동반 객체 메서드에 접근할때는 동반 객체가 포함된 클래스의 이름을 사용할 수 있다. 객체 식은 자바의 무명 내부 클래스 대신 쓰인다. 객체 선언 (object declaration) 1) 객체 선언 : 싱글턴을 쉽게 만들기 코틀린은 객체 선언 기능을 통해 싱글턴(..

    Read more
  • ISR (In-Sync-Replicas) 리더 파티션과 팔로워 파티션이 모두 싱크가 된 상태를 뜻한다. 복제 개수가 2인 토픽을 가정해보자. 리터 파티션 1개와 팔로워 파티션 1개가 존재할 것이다. 리더 파티션에 0부터 3의 오프셋이 있다고 가정할때, 팔로워 파티션에 동기화가 완료되려면 0부터 3까지 오프셋이 존재해야한다. 동기화가 완료됐다는 의미는 리더 파티션의 모든 데이터가 팔로워 파티션에 복제된 상태를 말하기 때문이다. 리더 파티션과 팔로워 파티션이 동기화된 상태에서는 리더 또는 팔로워 파티션이 위치하는 브로커에 장애가 발생하더라도 데이터를 안전하게 사용할 수 있다. 팔로워 파티션이 리더 파티션으로부터 데이터를 복제하는 데에 시간이 걸린다. 프로듀서가 특정 파티션에 데이터를 저장하는 작업은 리더 파..

    Read more
  • Validator 생성 CustomJobParametersValidator.java import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.JobParametersInvalidException; import org.springframework.batch.core.JobParametersValidator; public class CustomJobParametersValidator implements JobParametersValidator { @Override public void validate(JobParameters jobParameters) throws JobParametersInvalidEx..

    Read more
  • Job 생성 import lombok.RequiredArgsConstructor; import org.springframework.batch.core.*; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.batch.core.scope.context.ChunkContext; import or..

    Read more
  • 토픽 정리 정책(cleanup.policy) 토픽의 데이터는 시간 또는 용량에 따라 삭제 규칙을 적용할 수 있다. 또한 삭제를 원치 않는다면 카프카 클러스터가 살아있는한 토픽의 데이터를 삭제하지 않도록 설정할 수 있다. 데이터가 삭제되지 않고 남아있으면 추후에 데이터가 필요할때 오프셋을 지정해서 일주일, 한달 이상 지난 데이터를 다시 가져올 수 있다. 데이터를 더는 사용하지 않을 경우에는 cleanup.policy 옵션을 사용해서 데이터를 삭제할 수 있다. 옵션은 2가지다. 1) delete : 데이터의 완전 삭제 2) compact : 동일한 메시지 키의 가장 오래된 데이터를 삭제 토픽 삭제 정책(delete policy) 토픽을 운영하면 일반적으로 대부분의 토픽의 cleanup.policy를 dele..

    Read more
  • Job 생성 이전에 배웠었던 기본 Job import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.b..

    Read more
  • Copyright 2024. GRAVITY all rights reserved