일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- API
- 스프링
- Elasticsearch
- framework
- 애자일프로그래밍
- kotlin
- 코딩
- JPA
- 읽기쉬운코드
- Java
- 자바
- 애자일기법
- ES
- 프레임워크
- 알고리즘
- 코딩테스트
- 그리디
- 개발자
- cleancode
- Baekjoon
- 백준
- 클린코드
- spring boot
- database
- 코드
- 개발
- 그리디알고리즘
- 엘라스틱서치
- Spring
- 데이터베이스
- Today
- Total
목록분류 전체보기 (191)
튼튼발자 개발 성장기🏋️

이전에는 CDC 기반 Kafka를 통한 데이터 동기화의 동작 원리를 알아보았다.이번에는 Kafka와 Kafka connect를 Dockerizing해보겠다. 들어가기에 앞서 source connector에 사용될 사용자는 아래와 같은 권한이 필요하다.grant select, reload, replication client, replication slave on *.* to '{username}'@'%'; 아래 docker-compose.yaml 파일 내용을 살펴보자services: kafdrop: image: obsidiandynamics/kafdrop:latest container_name: kafdrop restart: "always" ports: - "9000:900..

1. Debezium MySQL Source Connector란?Debezium은 데이터베이스의 변경 이벤트를 감지하고 이를 Kafka에 발행해주는 CDC 플랫폼인데, MySQL Source Connector는 binlog를 기반으로 작동하여 INSERT, UPDATE, DELETE 이벤트를 실시간으로 처리한다.2. binlog란?MySQL의 binlog(binary log)는 데이터 변경 사항을 이진 포맷으로 기록한 로그파일이다. binlog은 주로 MySQL replication에서 사용된다. 쉽게 말하면 binlog는 데이터가 변경되는 모든 이벤트를 가지고 있기때문에 replication 혹은 데이터 복구 등에 사용될 수 있다.3. Debezium의 동작 원리MySQL에 replication cli..
자바 가변 컬렉션을 코틀린 컬렉션으로 리팩토링하는 이유프로그래밍 언어는 진화를 거듭하면서 성능보다 안정성, 생산성을 우선하는 방향으로 변화해 왔다. 특히 자바에서 코틀린으로의 전환은 개발자들에게 익숙한 문법 위에서 더 안전하고 직관적인 코드 작성을 가능하게 해준다. 그 중심에는 바로 코틀린 컬렉션이 있다.Kotlin Collections은 Java Collections interface에서 상태를 바꾸는 메서드를 제거하고 kotlin.collections package 안에서 많은 Mutable Collections interface로 공개되어있다. 여기에 가변 컬렉션 인터페이스로도 확장하기도했다.편리하지만 문제 투성이 자바 가변 컬렉션자바의 컬렉션 프레임워크는 초기까지만 해도 혁신적이었다. Mutabl..
Kotlin은 불변 객체를 선호하고 데이터를 표현하는 객체를 다른 유형의 객체보다 더 선호한다.- 맵의 키나 집합 원소로 불변 객체를 넣을 수 있다.- 불변 객체의 불변 컬렉션에 대해 이터레이션하는 경우 원소가 달라질지 염려할 필요가 없다.- 초기 상태를 깊은 복사하지 않고도 다양한 시나리오를 시도할 수 있다.- 여러 스레드에서 불변 객체를 안전하게 공유할 수 있다.이러한 이유로 코틀린에서는 [값]이라고 하는 것을 사용할 수 있다.아래 예제를 통해 쉽게 알아보자. public class UserPreferences { private String greeting; private Locale locale; private Currency currency; public UserPrefere..

일반적으로 Swagger는 실질적인 로직에 침투적으로써 코드가 지저분해지며 문서의 신뢰성이 저하되는 등 단점이 너무나도 많다. 하지만 Spring Restdocs는 테스트 코드로부터 문서화 하기 때문에 swagger의 단점을 보완하며 정적 문서 형태로 풍부하게 작성할 수 있는 등 swagger보다 더 널리 사용된다.kopring에서 Spring restdocs의 장점만을 이끌어내면서 swagger까지 함께 사용할 수 있는 방법을 알아본다.Hint: Spring restdocs와 swagger는 모두 Springdoc OpenAPI를 통해 사용된다. 1. build.gradle.kts 작성가장 먼저 OpenAPI를 사용하기 위한 기틀을 마련해보자. 플러그인과 종속성 및 Task 설정부터 시작한다.impor..

사이드 프로젝트를 진행하던 중 ssl 인증서 갱신 자동화를 고민하고 정리해두기 때문에모든 내용은 사이드 프로젝트에 초점을 맞춘다. 1. letsencrypt 인증서 발급sudo certbot certonly --manual --preferred-challenges dns -d "{도메인}" 가장 먼저 os에 알맞게 certbot 설치가 선행되어야한다.인증서를 발급받는 여러가지 방법 중 위 방법으로 발급했다. letsencrypt 인증서는 /etc/letsencrypt 디렉토리에서 관리된다. ll /etc/letsencrypt/live/{도메인} 위 command로부터 cert.pem, chain.pem, fullchain.pem, privkey.pem 4가지의 pem파일이 생성된다. 하지만 궁극적인 ..
자바에서 코틀린으로 포팅하면서 고려해야할 리팰토링 중 [Optional]부문에 대해서 설명한다.백문이 불여일견이라고 직접 실습을 통해 차근차근 설명하겠다. public class Legs { public static Optional findLongestLegOver( List legs, Duration duration ) { Leg result = null; for (Leg leg : legs) { if (isLongerThan(leg, duration)) if (result == null || isLongerThan(leg, result.getPlannedDura..
자바에서 코틀린으로 포팅하면서 고려해야할 리팰토링 중 [클래스]부문에 대해서 설명한다.백문이 불여일견이라고 직접 실습을 통해 차근차근 설명하겠다. 아래 Java class [EmailAddress] 클래스를 Kotlin class로 포팅해보자.public class EmailAddress { private final String localPart; private final String domain; public static EmailAddress parse(String value) { var atIndex = value.lastIndexOf('@'); if (atIndex 코틀린 클래스는 주 생성자 안에서 프로퍼티를 선언하기 때문에 자바보다 간결하다. 파라미..