전체 글
-
카프카 producer - 확실한 도착 보장을 위한 옵션 설정Web, Server, Cloud 2023. 7. 22. 08:09
확실한 도착 보장을 위한 옵션 delivery.timeout.ms ≥ request.timeout.ms + linger.ms Kafka에서 delivery.timeout.ms는 프로듀서가 메시지를 브로커에 성공적으로 전달하는 데까지 기다리는 최대 시간을 설정하는 속성이다. 반면에 request.timeout.ms는 프로듀서가 브로커로부터 응답을 기다리는 최대 시간을 설정하는 속성이다. linger.ms는 프로듀서가 메시지를 배치로 모아서 보내는 데 사용되는 시간이다. 메세지가 전달될 때 까지 기다리는 최대 시간 (delivery.timeout.ms) 을 응답을 기다리는 최대 시간 (request.timeout.ms) 과 새로운 메세지를 보내기 위해 배치로 메세지를 모으는 최대 시간 (linger.ms) ..
-
spring cloud function 에 대해서Java, Kotlin, Spring 2023. 5. 16. 17:21
https://cloud.spring.io/spring-cloud-function/reference/html/ Spring Cloud Function 은 AWS, Azure, GCP 와 같은 클라우드 서비스에서 제공하는 서버리스 Function 기능을 쉽게 활용할 수 있도록 지원하기 위하여 추가된 모듈이다. 놀라운 점은 1. Spring container 에 등록된 bean 을 바로 endpoint 로 노출시킨다는 점과 2. 모든 bean 이 아닌 Functional Interface 를 구현한 bean 만 그 대상이 된다는 점이었다. CoC(Convention Over Configuration) 를 활용하여 사용하기에 간단하고, 기능 집약적인 코드를 손쉽게 구현하도록 하여 생산성을 높이는 관행은 소프트..
-
GraalVM 메모리 관리 간단 정리Java, Kotlin, Spring 2023. 4. 7. 16:03
Heap 메모리 GraalVM에서는 전체 메모리 중 일부를 Heap 메모리로 사용한다. Heap 메모리는 객체 인스턴스를 저장하기 위한 공간이고, Young Generation과 Old Generation이라는 두 개의 영역이 있다. Young Generation은 새로운 객체가 생성되는 공간이며, Old Generation은 Young Generation에서 살아남은 객체가 이동하는 공간이다. Heap 메모리는 가비지 컬렉션이 발생하는 공간이기도 하다. Native 메모리 GraalVM에서는 Native 메모리를 사용한다. Native 메모리는 JVM 바깥에서 할당되는 메모리 공간으로, C/C++ 등의 네이티브 코드에서 사용된다. Code Cache GraalVM에서는 Code Cache라는 공간을 사..
-
Spring 6, Springboot 3.0 새로운 기능Java, Kotlin, Spring 2023. 4. 7. 14:36
Spring 6에서 새롭게 도입된 기능 1.1. Reactive Database Access Spring 6에서는 새로운 Reactive Database Access 기능이 도입되었다. 이를 이용하면 반응형 웹 어플리케이션을 개발할 때 Reactive Programming의 이점을 최대한 활용할 수 있다. Reactive Database Access는 Reactive Streams를 기반으로 하며, R2DBC, MongoDB Reactive Driver, Cassandra Reactive Driver 등의 Reactive Database Driver를 지원한다. 1.2. WebFlux Test Client Spring 6에서는 WebFlux Test Client가 도입되었다. 이를 이용하면 WebFlux..
-
Spring 6 Http InterfaceJava, Kotlin, Spring 2023. 4. 7. 14:12
Spring 6에서 도입된 Http Interface는 Java 인터페이스를 사용하여 HTTP 서비스를 정의하고 HTTP 요청을 위한 어노테이션된 메서드를 사용하는 기능이다. https://docs.spring.io/spring-framework/docs/6.0.7/reference/html/integration.html#rest-http-interface 공식문서에 소개된 예제를 바탕으로 아래 글을 작성하였다. 이 기능을 사용하면 해당 인터페이스를 구현하는 프록시를 생성하여 요청을 수행할 수 있다. 이는 HTTP 원격 액세스를 간편하게 할 수 있으며 종종 기본 HTTP 클라이언트를 사용하는 세부 정보를 감싸는 퍼사드(facade)가 필요한 경우에도 도움이 된다. 아래 예제코드에서는 Github API에..
-
거품 정렬 (Bubble Sort)Algorithms/정렬 2022. 8. 23. 09:41
정의 거품 정렬은 1번째와 2번째, 2번째와 3번째, 3번째와 4번째, ... 와 같이 인접한 두 원소를 비교하여 정렬한다. 인접한 두 원소끼리 반복적으로 비교하는 모습이 마치 '거품'과 같다고 하여 거품 정렬이라고 이름이 붙여졌다. 1회전을 수행하고 나면 가장 큰 자료가 맨 뒤로 이동하므로, 2회전에서는 맨 끝에 있는 자료는 정렬에서 제외할 수 있다. 마찬가지로 2회전을 수행하고 나면 끝에서 두번째 자료까지는 정렬에서 제외된다. 설명 [5, 4, 3, 2, 1] 위 배열을 오름차순 정렬해보자. 1번째와 2번째를 비교한 후, 2번째 원소가 더 작을 경우 1번째 원소와 교체해 준다. [4, 5, 3, 2, 1] 이번에는 2번째와 3번째를 비교하여 교체해주자. [4, 3, 5, 2, 1] 같은 방식으로 마지..
-
삽입 정렬 (Insertion Sort)Algorithms/정렬 2022. 8. 22. 09:20
정의 2번째 원소부터 시작해서 그 앞의 원소들과 비교하여 삽입할 위치를 지정한 후, 원소를 뒤로 옮기고 지정된 자리에 값을 삽입하는 정렬 알고리즘이다. 선택 정렬 이 원소가 들어갈 자리를 정해두고 해당 자리에 들어올 원소를 찾는 정렬인 것과는 반대로, 삽입 정렬은 원소가 들어갈 자리를 정해두지 않고, 값을 먼저 결정한 다음 해당 값이 들어갈 자리를 앞에서 부터 찾는 알고리즘이다. 즉, 삽입 정렬에서 '삽입'은 값을 특정 자리에 삽입한다는 의미이고, 값이 들어갈 자리를 찾는 알고리즘이라고 생각하면 된다. 설명 [5, 4, 3, 2, 1] 위 배열을 오름차순 정렬해보자. 2번째 원소인 4부터 시작하여 앞 원소들과 대소 비교를 진행한다. 5는 4보다 큰 값이므로 2번째 자리의 원소를 5로 바꿔준다. [5, 5..
-
선택 정렬 (Selection Sort)Algorithms/정렬 2022. 8. 21. 16:14
정의 자리를 정해두고 해당 자리에 들어올 값을 선택하는 알고리즘이다. 선택 정렬의 '선택'은 들어올 값을 선택하는 것이라고 생각하자. 설명 [5, 4, 3, 2, 1] 위 배열을 오름차순 정렬해보자. 자리를 순회하며 해당 자리에 올 값을 찾아 넣는다. 값을 찾는 방법은 해당 자리에 위치해있던 값과 나머지 모든 값을 비교한다. 1. 첫번째 자리에 올 값 선택 오름차순 정렬이니, 첫번째 자리에는 1이 와야한다. 5를 제외한 나머지 모든 수 [4, 3, 2, 1] 을 순회하여 가장 작은 값인 1을 찾아 5와 바꾼다. [1, 4, 3, 2, 5] 2. 두번째 자리에 올 값 선택 두번째 자리에는 두번째로 큰 값인 2가 와야한다. 1과 4를 제외한 나머지 모든 수 [3, 2, 5] 을 순회하여 가장 작은 값이 2를..
-
백준 9663. N-Queen 문제Algorithms/ACM_ICPC 2022. 8. 21. 15:18
알고리즘 모든 경우를 전부 시도해 보아야 한다. 단, Queen을 놓을 수 없는 위치라고 판단되면 중지하고 다음 경우의 수를 시도해볼 수 있다. -> 백트래킹 접근방법 모든 경우의 수를 전부 확인해야 하는 문제이다 2차원 배열이 아닌 1차원 배열로 문제를 풀어내 구현의 난이도를 낮출 수 있다. 4x4 N-Queen 보드에 (0, 0), (1, 3), (2, 1), (3, 2) 위치에 Queen 을 놓는다고 할 때, 1차원 배열로 다음과 같이 표현 가능하다. 1차원 배열 : [0, 3, 1, 2] => 행은 index, 열은 값으로 표현 코드 import java.io.*; import java.util.*; public class Main { private static int N; private stat..
-
백준 10845번. 큐Algorithms/ACM_ICPC 2022. 8. 19. 14:42
문제 설명 자료구조 큐를 구현하는 문제이다. 접근 방법 - int[] 로 데이터를 저장하도록 구현하였다. - lastIndex 변수를 이용하여 값이 저장된 마지막 index를 추척하도록 구현하였다. 코드 import java.io.*; import java.util.*; public class Main10845 { private static int size; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); size = Integer.parseInt(br.readLine()); Queue queue = new Queue(..
-
Spring Data 분석하기 - 1편 소개Java, Kotlin, Spring 2022. 8. 11. 04:48
Spring Data https://spring.io/projects/spring-data 기본 데이터 저장소의 특수 특성을 유지하면서 데이터 액세스를 위한 친숙하고 일관된 Spring 기반 프로그래밍 모델 제공 서버 애플리케이션은 데이터저장소에 접근하여 데이터를 가져오는 일과, 가져온 데이터를 처리하는 일을 가장 많이 하게 된다. 가장 많이 하는 일에 코드 상 통일성과 규칙이 없다면 애플리케이션은 관리하기가 매우 힘들어진다. 스프링 데이터는 이 두가지 일에 통일성과 규칙을 부여해준다. 서버 애플리케이션이 일을 처리하는 방식을 살펴보면 다음과 같이 요약할 수 있을 것 같다. Client로부터 요청을 받음 -> 데이터저장소로부터 데이터를 가져오기 -> 데이터를 가공하기 -> Client에 응답을 보냄 스프..
-
엘라스틱서치 update by query 성능 최적화Elasticsearch 2022. 7. 21. 17:44
환경 현재 Elasticsearch의 환경은 다음과 같다. Coordinates node : 2대 Data node : 14대 준비된 index의 조건은 다음과 같다. shard 개수 : 14개 replica 개수 : 1개 총 문서 개수 : 약 6억 8천만개 쿼리 조건 약 6억 8천만개의 전체 문서를 대상으로 4,400만건의 문서를 update by query로 업데이트 하려고 한다. 이 검증을 통하여 위와 같은 처리가 운영 환경에서 사용 가능할 지 판단해 보는 것이 목표였다. 일단 문서를 업데이트 하는 데에 얼마나 시간이 소요되는지 확인하는 것이 중요했다. 첫번째 시도 : 일단 요청해보기 테스트를 위해서 다음과 같은 Kotlin API 함수를 정의했다. @PostMapping("/api/test/upd..
-
Spring data mongodb multiple database config 설정하기Java, Kotlin, Spring 2022. 6. 24. 14:33
Spring data mongodb 기본 구성 일반적으로 Spring data 프로젝트는 단일 데이터베이스로의 연결을 지원한다. Spring data의 데이터베이스 접근 추상화 영역인 Repository는 단일 database 접근 Client를 사용하도록 구성되어 있다. Repsitory interface BookRepository : MongoRepository Entity @Document("book") class BookEntity(@Id val id: String) 사용 방법 @Controller class Controller(private val bookRepository: BookRepository) { @GetMapping("/books") fun getBooks() = bookReposi..
-
git ssh key 설정etc 2022. 6. 23. 12:52
github 또는 bitbucket에서 사용할 git ssh 설정을 해보자. 먼저 계정에 대한 ssh key를 생성하자 $ ssh-keygen -t rsa -b 4096 -C "원격 저장소 계정" 위 명령어를 입력하면 이런 메세지가 나온다. public/private rsa key 쌍을 만들겠다는 말이고, 해당 key 정보를 저장할 파일을 입력해달라고 한다. 이미 id_rsa 라는 이름으로 사용 중인 키가 있기에 이름을 다르게 지정해주었다. 그러면 이렇게 Enter passphrase 라는 메세지가 나오는데, 이 부분은 해당 id_rsa_test 키를 실행하기 위한 비밀번호이다. 그래서 비밀번호를 입력하게 되면, 해당 키 파일을 사용할 때마다 비밀번호를 입력해주어야 한다. 보안을 위해서는 추천할만하지만,..
-
OSI 7 Layers vs TCP/IPWeb, Server, Cloud 2022. 6. 23. 10:52
OSI 7 Layers OSI 7 Layer는 네트워크 표준 모델이다. OSI 7 Layers를 알면 데이터가 네트워크를 통해 어떠한 절차로 전송되는지 이해할 수 있다. 현재는 이론적으로 남아있고, 실제로 구현되는 예는 없다고 한다. OSI 7 Layer는 네트워크 및 장비 개발과 통신을 이해하는 목적으로 사용되고, 실질적인 통신은 OSI 7 Layer 중 일부를 사용하는 TCP/IP 프로토콜을 사용한다. 1계층 : Physical Layer 데이터를 전기 신호로 바꾸어주는 계층 데이터 전송 단위 : 비트(bit) 프로토콜 : RS-232, RS-449 등 케이블 장비 : 허브, 리피터 2계층 : Datalink Layer 네트워크 계층 패킷 데이터를 물리적 매체에 실어 보내기 위한 계층 데이터 전송 단..
-
URI vs URLWeb, Server, Cloud 2022. 6. 21. 09:52
URI (Uniform Resource Identifier) URI는 통합 자원 식별자(Uniform Resource Identifier, URI)라고 번역된다. 인터넷에 있는 자원을 나타내는 고유한 주소이다. URL은 무엇일까? URL (Uniform Resource Locator) URL은 통합 자원 지시자(Uniform Resource Locator, URL) 정도로 번역할 수 있겠는데, 이 것보다는 URL이라는 명칭이 외래어로 이미 널리 사용되고 있다. 결국 두 가지는 Identifier이냐 Locator이냐의 차이점이라고 하는데, 잘 이해하고 보아도 두 가지를 언어적으로 구분지으려는 것은 욕심이고, 별 의미도 없다. 그림으로 구분지어 보자. 그림을 이해하고 나면 언어적으로도 이해된다. 위 그림만..
-
브라우저에 주소를 적으면 일어나는 일Web, Server, Cloud 2022. 6. 20. 14:01
기본적인 내용 Local cache를 검색해서 매핑된 ip가 있는지 찾는다. hosts 파일을 검색해서 매핑된 ip가 있는지 찾는다. DNS Hierarchy* 를 검색해서 매핑된 ip가 있는지 찾는다. 1, 2, 3 과정 중 하나로 domain name에 매핑된 ip를 획득한다. 해당 ip로 TCP 연결을 맺는다. TCP 연결 하에서 HTTP request를 보낸다. HTTP response를 받는다. * 참고 : DNS Hierarchy GSLB GSLB (Global Server Load Balance) Load Balance라는 이름과는 조금 다르게, GSLB는 일반적으로 생각하는 로드밸런싱과는 차이가 있다. GSLB는 전통적인 DNS와 같이 동작하며 추가적으로 health check와 activ..
-
Spring Bean 스코프Java, Kotlin, Spring 2022. 6. 19. 17:25
Bean 의 스코프 Singleton 하나의 Bean 정의에 대해서 Spring IOC Container 내에 단 하나의 객체만 존재한다. Prototype 하나의 Bean 정의에 대해서 다수의 객체가 존재할 수 있다. Request 하나의 Bean 정의에 대해서 하나의 HTTP request의 생명주기 안에 단 하나의 객체만 존재한다. 즉, 각각의 HTTP request는 자신만의 객체를 가진다. Web-aware Spring ApplicationContext 안에서만 유효하다. Session 하나의 Bean 정의에 대해서 하나의 HTTP Session의 생명주기 안에 단 하나의 객체만 존재한다. Web-aware Spring ApplicationContext 안에서만 유효하다. Global sessi..
-
ubuntu 20.4 mongodb 설치Web, Server, Cloud 2022. 6. 17. 19:31
ubuntu 20.4 버전에 mongodb 특정 버전을 설치해야 할 일이 있다. mongodb 4.2 버전을 설치하고자 한다. 더보기 💡 MongoDB 4.2 Community Edition supports the following 64-bit Ubuntu LTS (long-term support) releases on x86_64 architecture: 18.04 (“Bionic”) LTS 16.04 (”Xenial”) LTS 공식 문서에는 MongoDB 4.2 커뮤니티 에디션은 ubuntu 18.04 LTS, ubuntu 16.04 를 지원한다고 써있긴 하지만, ubuntu 20.4 버전도 설치는 되었다. 이후 별다른 문제가 없을 지는.. 확신이 들지 않는다. 테스트 용도로 사용할 것이기에, 일단 ..
-
gcloud 브라우저 없이 로그인 하기Web, Server, Cloud 2022. 6. 17. 12:20
ubuntu 에서 browser 없이 gcloud 로그인 하기 ubuntu 서버에서 브라우저 실행 없이 gcloud 로 로그인을 하기 위한 절차를 알아보자. 공식문서는 이 곳이다. 만약 브라우저가 실행 가능한 환경이라면 아래 명령어를 실행하면 된다. $ gcloud auth login // 혹은 $ gcloud auth login 그러나 브라우저를 실행할 수 없는 ubuntu 서버에 ssh 로 연결한 환경의 경우에는 특이한 방식을 사용해야 한다. 개인적으로 방법 자체가 낯설어서 이해하기 위해 시간이 좀 걸렸다. 브라우저를 실행할 수 없는 환경에서 --no-browser 옵션으로 로그인을 시도한다. $ gcloud auth login --no-browser 그러면 다음과 같은 안내 메세지를 콘솔에 출력해준..
-
Java 8 주요 업그레이드 사항Java, Kotlin, Spring 2022. 5. 25. 09:27
Java 8 람다식 (Lambda expressions) 람다식은 자바에서 함수를 일급 객체로 활용하기 위해 새로 추가된 표현식이다. 기존에는 함수를 다른 함수의 매개변수로 전달하기 위해서는 익명 클래스가 필요했다. Comparator byWeight = new Comparator() { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } } 람다식은 불필요한 익명 클래스를 없에고 간단한 함수 표현식으로 함수의 일급 객체화를 가능하게 해준다. Comparator byWeight = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()..
-
JVM 메모리 구조Java, Kotlin, Spring 2022. 5. 20. 09:47
JVM 구조 Java 애플리케이션이 JVM 위에서 어떻게 동작하는지 알아보자. 첫번째 과정은 컴파일 Java 소스코드는 먼저 컴파일되어야 한다. 만약 기본적인 Java 애플리케이션을 구현했다면 코드를 실행하기 위해서 먼저 컴파일 과정을 거쳐야 한다. $ javac application.java 컴파일이 완료되면 application.class 라는 파일이 생성된다. .class 확장자를 가진 파일은 Byte Code 파일로 컴퓨터가 해석할 수 있는 기계어에서 조금 더 추상화된 언어 파일이라고 생각하면 된다. 바이트코드 위키 클래스 로더가 하는 일 컴파일이 완료된 .class 파일은 JVM 위에 존재하는 클래스 로더로 전달된다. 클래스 로더는 .class 파일을 해석하여 프로그램 내 선언된 자료구조들을 메..
-
@SpringBootApplication 어노테이션Java, Kotlin, Spring 2022. 5. 20. 08:48
@SpringBootApplication SpringBoot 프로젝트를 시작하면 @SpringBootApplication 어노테이션이 기본으로 설정되어 있다. @Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters={@ComponentScan.Filter(type=CUSTOM,classes=TypeExcludeFilter.class),}) public @interface SpringBootApplication @SpringBootApplication 은 그 안에 @EnableAutoConfigur..
-
Java Compile 과정Java, Kotlin, Spring 2022. 5. 7. 09:57
JVM (Java Virtual Machine) 자바는 JVM(Java Virtual Machine) 위에서 동작하기 때문에, OS 에 비종속적이다. JVM 은 자바에 대해서 모른다. 컴파일된 바이트 코드 파일을 해석하는 능력을 가지고 있을 뿐 이다. 따라서, JVM 이 해석할 수 있는 형태의 바이트 코드를 JVM 에 제공한다면, 꼭 자바가 아니더라도 JVM 을 사용할 수 있다. Kotlin 이 대표적이다. Java Compile 과정 자바언어로 소스코드 (.java) 를 작성한다. Java Compiler 가 자바 소스파일을 컴파일 한다. 이 때 JVM 이 해석할 수 있는 형태의 파일인 바이트 코드 파일 (.class) 이 생성된다. 바이트 코드의 각 명령어는 1 바이트 크기의 Opcode 와 추가 피..
-
깊이우선탐색(DFS, Depth First Search)Algorithms/그래프 2022. 4. 21. 10:05
개요 깊이우선탐색은 대표적인 그래프 탐색 알고리즘이다. 위와 같은 그래프를 탐색하고자 한다. 간선으로 연결된 노드를 더 이상 간선이 연결되지 않을 때 까지 탐색하는 방법을 깊이 우선 탐색이라 한다. 간선으로 연결된 모든 노드를 우선으로 탐색하고, 더 이상 해당 노드에 연결된 간선이 없을 경우 하위 노드에서 같은 방식으로 연결된 모든 노드를 탐색하는 것을 너비 우선 탐색이라고 한다. 너비 우선 탐색은 다음 글에서 살펴보기로 하고, 이번 글에서는 DFS 에 대해 자세히 알아보자. DFS (Depth First Search) 1.1 설명 1번 노드에서 시작한다. 연결된 간선이 있으니, 2번 노드부터 탐색한다. 2번 노드로 이동했다. 간선으로 연결된 3번 노드로 이동한다. 3번 노드로 이동했다. 간선으로 연결된..
-
Transaction 이란?Database/MySQL 2022. 1. 12. 09:37
Transaction 이란? trans·ac·tion 1. 거래, 매매 2. 처리 (과정) 사전적 의미로 거래나 매매, 그리고 처리(과정) 라는 의미로 풀이되는데, 컴퓨터공학에서 표현하는 의미로는 처리(과정) 이 적합한 듯 하다. 컴퓨터공학에서 Transaction 이란, 하나로 묶은 DB 작업의 단위이다. 하나로 묶는 범위는 작업자가 임의대로 지정할 수 있다. 영화 예매를 처리하는 과정을 생각해보자. 1. 현재 상영관의 빈 자리 목록을 요청한다. 2. 좌석을 선택하여 결제한다. 3. 빈 자리 목록에 예매에 성공한 자리가 노출되지 않는다. 위 과정은 각각 DB에 서로 다른 요청을 보낸다. 1번은 빈 자리 목록을 불러오는 `SELECT` 요청을 진행할 것이고, 2번과 3번은 결제 및 예매 내역에 대한 `I..
-
Testcontainers 재사용 설정하기Java, Kotlin, Spring 2022. 1. 12. 08:36
Testcontainers는 도커를 이용하여 테스트 환경을 분리해주는 라이브러리이다. 테스트 수행 시 DB 등의 외부 환경은 운영 환경과 다르게 구축해야 할 필요가 있는데, 보통은 로컬 PC 에 테스트 전용 DB 를 만들어서 사용해왔다. RDB 까지는 이렇게 독립적인 환경에서 테스트를 한다고 하더라도, Redis 나 Elasticsearch 와 같은 데이터저장소들은 개발에 참여하는 개개인이 모두 로컬 환경을 설정하는 것은 쉬운 일이 아니다. 이럴 때 도커는 매우 적절한 선택이 될 수 있고, Testcontainers 는 그 도커의 설정도 필요없게끔 Convention 이 설정되어 있기 때문에 사용하기에 매우 편리하다. 설치 junit 4 junit 5 ← 버전 별로 설치 방법이 다르다. // kotlin..
-
엘라스틱서치 - Ubuntu 서버에 데이터 노드 추가하기Elasticsearch 2022. 1. 12. 08:32
Ubuntu 서버 장비에 엘라스틱서치 데이터 노드를 추가해보자. 데이터 노드는 이미 운용되고 있는 마스터 노드 서버가 있을 때, 마스터 노드를 데이터 저장 용도로 사용하지 않도록 하여 인덱스 생성, 저장 등의 운용 환경과 데이터 저장 환경을 분리하고자 할 때 추가한다. Ubuntu 서버 장비 준비 Cloud service 등을 이용하여 Ubuntu 환경의 서버 장비를 준비한다. ES 설치 준비된 서버 환경에 엘라스틱서치를 설치한다. 마스터 노드가 이미 준비되어 있는 상황이기 때문에, 기존 마스터 노드로 운용하고 있는 ES와 동일한 스펙으로 준비한다. 기존의 마스터 노드는 엘라스틱서치 6.4 버전으로 운용되고 있다. 설치 링크는 여기 Elasticsearch PGP Key 가져오기 엘라스틱서치에서 제공하는..
-
스프링 배치 완벽가이드 2/e - 2장 스프링 배치Java, Kotlin, Spring 2022. 1. 12. 08:30
배치 아키텍처 애플리케이션 레이어 개발자가 개발한 코드를 나타냄 대부분 코어 레이어와 상호 작용 함 코어 레이어 배치 영역을 구성하는 실제적인 여러 컴포넌트로 이뤄짐 인프라스트럭처 레이어 ItemReader, ItemWriter 제공 재시작과 관련된 문제를 해결할 수 있는 클래스와 인터페이스 제공 잡과 스텝 스텝 스텝은 스프링 배치에서 가장 일반적으로 상태를 보여주는 단위 각 스텝은 잡을 구성하는 독립된 작업의 단위 스텝은 Tasklet 기반 스텝과 Chunk 기반의 스텝이라는 두 가지 유형이 있음 스텝을 분리함으로써 얻는 기능 유연성 재사용이 가능하게 구성할 수 있도록하는 여러 빌더 클래스를 제공함 유지 보수성 각 스텝은 이전, 다음 스텝과 독립적이므로 다른 스텝에 영향을 미치지 않음 단위 테스트, 디..
-
스프링 배치 완벽가이드 2/e - 1장 배치와 스프링Java, Kotlin, Spring 2022. 1. 12. 08:25
왜 자바로 배치를 처리하는가? 유지 보수성 배치 처리 코드는 일반적으로 다른 애플리케이션 코드보다 수명이 훨씬 김 스프링 배치는 트랜잭션 및 커밋 횟수와 같은 것들을 애플리케이션에 제공함 유연성 OS에 종속되지 않는 JVM의 유연성 시스템 간 코드를 공유할 수 있는 능력 POJO로 업무 로직을 구현하면, 해당 로직을 웹 애플리케이션이나 배치 처리에서 모두 사용할 수 있음 확장성 병렬 처리 지원 트랜잭션 커밋 건수와 롤백 건수 등 배치 처리에 필요한 기능을 제공하여, 애플리케이션 확장성에 도움을 줌 개발 리소스 스프링 프레임워크를 사용하는 풍부한 인적자원 지원 스프링 프레임워크의 방대한 커뮤니티 (Github, Stackoverflow 등) 비용 오픈소스 프레임워크로 반복적인 라이선스 비용 불필요함 스프링..