전체 글

Kotlin & Java

[Gradle] Gradle dependency (그래들 종속성 선언)

[Gradle] Gradle dependency (그래들 종속성 선언) Dependency configuration Gradle 프로젝트에 선언된 의존성들은 특정한 Scope 에 적용 되어진다. 예를 들어 일부 의존성은 런타임에서, 다른 의존성은 컴파일에서 사용 된다. 설정에 대한 옵션들은 여기서 확인 가능하다. https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.Configuration.html Dependency configuration inheritance and composition 각 설정들은 다른 설정으로부터 상속 구조를 가질 수 있는 구성이다. 상속 구조는 Java plugin에서 많이 사용되고 대표적인 예시는 implementatio..

IT 기술/CDC

[CDC] MySQL Debezium Change Data Capture 따라해보기 - 3

[CDC] MySQL Debezium Change Data Capture 따라해보기 - 3 아래 레포에서 데모 구현한 샘플 확인할 수 있다. https://github.com/sanggi-wjg/spring-cdc-debezium-demo GitHub - sanggi-wjg/spring-cdc-debezium-demo Contribute to sanggi-wjg/spring-cdc-debezium-demo development by creating an account on GitHub. github.com Spring boot 설정 build.gradle.kts import com.github.imflog.schema.registry.Subject import org.jetbrains.kotlin.gra..

IT 기술

[Jetbrains] Intellij 인텔리제이 Live Template 사용 방법

[Intellij] 자동 작성 Live Template 사용 방법 생성하려는 이름과 코드를 아래에서 인텔리제이 세팅 설정 코드에서 tdd 입력 후 tddk 엔터 입력하면 아래 코드처럼 설정된 코드가 자동 작성 된다. [DataGrip] Query 자동 작성 Live Template 사용 방법 생성하려는 이름과 쿼리를 아래에서 세팅에서 설정하고 SQL에서 사용할 수 있도록 체크박스 클릭하여 활성화 사용 방법 설정한 이름을 쿼리 콘솔 화면에서 타이핑 하고 엔터 하면 작성한 템플릿이 자동으로 작성 되고 원하는 내용을 추가 작성.

Database/MySQL

[MySQL] Table lock 조회 쿼리

[MySQL] Table lock 조회 쿼리 SHOW OPEN TABLES WHERE In_use > 0; # MySQL 8.0 SELECT r.trx_id waiting_trx_id, r.trx_mysql_thread_id waiting_thread, r.trx_query waiting_query, b.trx_id blocking_trx_id, b.trx_mysql_thread_id blocking_thread, b.trx_query blocking_query FROM performance_schema.data_lock_waits w INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_engine_transaction_id INNER..

IT 기술/CDC

[CDC] MySQL Debezium Change Data Capture 따라해보기 - 2

[CDC] MySQL Debezium Change Data Capture 따라해보기 - 2 MySQL Master INSERT 실행 마스터 디비에 데모 테이블과 로우를 생성한다. CREATE TABLE user ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, email VARCHAR(124) NOT NULL, password VARCHAR(256) NOT NULL, nickname VARCHAR(124) NULL, user_status VARCHAR(32) DEFAULT 'ACTIVE' ); INSERT INTO user (email, password, nickname, user_status) VALUES ('user@dev.com', 'hashed_password', ..

IT 기술/CDC

[CDC] MySQL Debezium Change Data Capture 따라해보기 - 1

[CDC] MySQL Debezium Change Data Capture 따라해보기 io.apicurio.registry.utils.converter.AvroConverter를 사용해서 설정을 하고 싶었는데 잘 안되서 혹시 아신다면 댓글 부탁 드립니다. 실제 데모 구현한 프로젝트 레포 입니다. https://github.com/sanggi-wjg/spring-cdc-debezium-demo GitHub - sanggi-wjg/spring-cdc-debezium-demo Contribute to sanggi-wjg/spring-cdc-debezium-demo development by creating an account on GitHub. github.com Docker-compose.yaml versio..

IT 기술/CDC

[CDC] Change Data Capture 개념

[CDC] Change Data Capture 데이터베이스에서 변경 데이터 캡처(change data capture, CDC)는 변경된 데이터를 사용하여 동작을 취할 수 있도록 데이터를 결정하고 추적하기 위해 사용되는 여러 소프트웨어 디자인 패턴들의 모임이다. https://ko.wikipedia.org/wiki/%EB%B3%80%EA%B2%BD_%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%BA%A1%EC%B2%98 CDC란 CDC(Change Data Capture)는 데이터베이스 안에서 일어나는 모든 변화를 감지하고, 이를 각각의 이벤트로 기록하며 이를 이벤트 스트림으로 전달합니다. 이렇게 수집된 이벤트들은 분석, 운영적인 목적으로 활용하거나 다른 데이터베이스로 전송하는 등 다양한 용도로..

Kotlin & Java/Spring

Pessimistic Locking in JPA

Pessimistic Locking in JPA PESSIMISTIC_READ allows us to obtain a shared lock and prevent the data from being updated or deleted. PESSIMISTIC_WRITE allows us to obtain an exclusive lock and prevent the data from being read, updated or deleted. PESSIMISTIC_FORCE_INCREMENT works like PESSIMISTIC_WRITE, and it additionally increments a version attribute of a versioned entity. PESSIMISTIC_READ Whene..

IT 기술

[AI] stable-code-3b 기본적인 사용 가이드 (AI coding)

[AI] stable-code-3b 기본적인 사용 가이드 (AI coding) https://huggingface.co/stabilityai/stable-code-3b stabilityai/stable-code-3b · Hugging Face 🔥 🦄 YANGSongsong/StableCodeDemo huggingface.co 아래 링크로 colab 접속해서 기본 가이드 작성 해보자 https://colab.research.google.com/?hl=ko Google Colaboratory colab.research.google.com 의존 패키지 설치 !pip install -q transformers accelerate sentencepiece Load 모델 import psutil from trans..

Database/MySQL

[MySQL] GROUP BY Optimization

[MySQL] GROUP BY Optimization MySQL은 GROUP BY 사용 시 대개는 전체 대상 테이블을 스캔한 후 새로운 임시 테이블을 만든 후 사용을 하도록 되어 있다. 하지만 인덱스 접근이 가능하다면 임시 테이블 생성을 피할 수 있다. GROUP BY에 가장 중요한 인덱스 사용 조건은 컬럼들이 호출한 쿼리 순서대로 저장하고 있는지 이다. 인덱스 사용에 성공한다면, 두가지의 방법이 있다. Loose Index Scan: 모든 범위 조건과 함께 그룹화하는 방법. Tight Index Scan: 범위 스캔 후 결과를 그룹화하는 방법. Loose Index Scan 테이블 t1(컬럼 a, b, c, d, e)이 인덱스로 (a, b, c) 를 가지고 있다고 가정해 보겠다. 인덱스 사용 가능 GR..

IT 기술/Git

[Git] .gitignore 적용이 안되는 경우

[Git] .gitignore 적용이 안되는 경우 git rm -rf --cached . git add .

Database/MySQL

[MySQL] ORDER BY Optimization

MySQL ORDER BY Optimization MySQL Order by 사용시 인덱스를 사용 조건에 충족하다면 인덱스를 이용해서 정렬을 하겠지만 인덱스를 사용할 수 없는 경우에는 filesort를 사용을 한다. ORDER BY 인덱스 사용 충족 조건 Order by는 꼭 인덱스와 매치가 안되더라도 인덱스를 사용할 수도 있다. 각설하고 실제 예시를 통해 알아보자. SELECT * FROM t1 ORDER BY col_a, col_b; 테이블 t1에 복합 인덱스로 index (col_a, col_b) 가 생성되어 있다고 가정을 하자. MySQL의 Optimizer는 실행시 인덱스를 읽는게 효율적이라고 생각 한다면 인덱스를 사용할 것이고 그것을 통해서 추가적인 정렬하는 자원을 방지 할 수도 있다. SEL..

IT 기술

[통계] 정규화(Normalization)와 표준화(Standardization)

정규화 Normalization 정규화는 통계학에서 여러가지의 의미를 가지고 있으며 주로 서로 다른 척도를 가진 것들에 대해서 공통의 척도를 갖도록 조정 하는 것으로 사용 된다. 보통 평균화 이전에 사용하며 교육 평가 점수를 정규화 하는 경우 분포를 정규분포로 맞추기 위해서 사용을 한다. 날짜 주식 A 주식 B 2010-01-01 10,000 10,000 2011-01-01 9,000 50,000 2012-01-01 11,000 100,000 2013-01-01 15,000 150,000 주식 A 종목과 주식 B 종목의 데이터 셋을 가지고 있다고 가정해보자. 각 주식 종목들의 범위는 [9000~15000], [10000~150000] 을 알 수 있다. 주식 A 종목에 비해서 주식 B 종목의 범위가 휠씬 ..

IT 기술/Docker

[Docker] 도커 사용하지 않는 볼륨, 이미지 삭제하는 방법

[Docker] 도커 사용하지 않는 볼륨 삭제하는 방법 docker volume rm $(docker volume ls -qf dangling=true) [Docker] 도커 사용하지 않는 이미지 삭제하는 방법 docker image prune -a

Kotlin & Java

Intellij에서 Kotlin을 Java로 변환 확인 하는 방법

Intellij에서 Kotlin을 Java 변환 확인 하는 방법, 인텔리제이에서 코틀린을 자바 변환 확인 하는 방법 코틀린 컴파일 자바로 Decompile Kotlin class Person(val name: String) { val isKim: Boolean get() = name.startsWith("김") val maskingName: String get() = name[0] + (1 until name.length).joinToString("") { "*" } } Java public final class Person { @NotNull private final String name; public final boolean isKim() { return StringsKt.startsWith$defa..

IT 기술/Kafka

[Kafka] 카프카 컨슈머

카프카 컨슈머 Kafka Consumer는 사용자가 제어하며 poll 메소드를 호출하여 카프카 브로커에서 데이터를 가져올 수 있다. 일반적으로 Consumer의 group.id와 가져올 topic을 지정한다. 같은 group.id를 사용하는 Consumer를 묶어서 Consumer Group이라고 한다. // KafkaConsumer ... set properties of consumer val consumer = consumerFactory(props).createConsumer() consumer.subscribe(listOf("topic-name")) while (true) { val records = consumer.poll(Duration.ofMillis(100)) records.forEach ..

IT 기술/Kafka

[Kafka] 카프카 프로듀서

카프카 프로듀서 프로듀서는 카프카 프로듀서 API를 포함하여 구성된 애플리케이션을 마라혀 브로커에 특정 토픽의 파티션에 메시지를 전달하는 역할을 합니다. 프로듀서가 전달하는 메시지의 구조는 다음과 같습니다. Topic (토픽) Partition (특정 파티션 위치) Timestamp (생성 시간) Header (헤더) Key (키) Value (값) 카프카 서버에 메시지를 전송하는 책임을 가지고 있으며 데이터를 전송하기 위한 전략을 가지고 있다. 재시도는 어떻게 할 것 인지 데이터 전송 시 Compression은 어떻게 할 것 인지 데이터 전송 시 Serializer는 어떤것을 사용할 것인지 어떤 Partition으로 데이터 전송을 할 것인지 Compression (압축) 메시지 압축 옵션을 사용하였다면..

IT 기술/Kafka

[Kafka] 카프카 메시지 브로커

카프카 구조 Zookeeper (주키퍼) 분산 코디네이션 서비스를 제공하는 오픈소스 프로젝트로 직접 어플리케이션 작업을 조율하는 것을 쉽게 개발할 수 있도록 도와주는 도구이다. API를 이용해 동기화나 마스터 선출 등의 작업을 쉽게 구현할 수 있게 해준다. Broker (브로커) Kafka 서버를 의미하며 한개의 Cluster 내에 여러개의 Kafka 서버를 실행시킬 수 있다. Topic (토픽) 메시지가 생산되고 소비되는 주체 Partition (파티션) 하나의 토픽내에서 토픽의 메시지가 분산되어서 각자 저장되는 단위 (위 카프카 아키텍쳐대로면 한개의 토픽에서 3개의 파티션으로 저장 관리되고 있다.) 파티션은 내부가 Queue로 구성이 되어있어서 순서를 보장하지만, Partition끼리의 순서를 보장하..

IT 기술/Kafka

[Kafka] 카프카 에러 핸들링 패턴

Pattern 1: Stop on error (에러시 중지) 모든 이벤트들이 순서 보장과 함께 에러 없이 처리 되어야 하는 경우에 사용함. (예를 들어, CDC) 처리 도중 에러가 발생한다면 어플리케이션은 중단되며 수동 개입이 필수적이다. Source 토픽의 이벤트는 다른 경로를 사용하지 않는다. Pattern 2: Dead letter queue (실패 대기열 큐) 일반적인 시나리오로 메인 스트림이 계속되는 동안 어플리케이션에서 처리가 불가하다면 Error 토픽으로 향하도록 함. 이 방식에서는 재시도를 위한 프로세스를 요구하거나 지원하지 않는다. 즉, 이벤트는 성공적으로 처리되거나 Error 토픽이다. 일반적인 상황에서 어플리케이션은 Source 토픽의 각 이벤트를 처리하고 Target 토픽으로 생성한..

IT 기술/Git

Jetbrains IDE용 Git 팁

Push 하지 안았고 Commit만 한 상태에서 변경 사항이 있다면 Undo Commit을 활용 다시 Changes 리스트로 복구할 수 있다. 또한, Commit 메시지 수정이 필요하다면 다음처럼 수정을 할 수도 있다.

상쾌한기분
상쾌한기분