| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 코딩테스트
- database
- Spring
- 그리디
- 읽기쉬운코드
- 스프링
- 자바
- 개발
- Java
- Baekjoon
- 클린코드
- JPA
- cleancode
- API
- spring boot
- 알고리즘
- 코드
- 그리디알고리즘
- 데이터베이스
- 코딩
- 프레임워크
- Elasticsearch
- 개발자
- framework
- 애자일기법
- 애자일프로그래밍
- 엘라스틱서치
- kotlin
- ES
- 백준
- Today
- Total
목록분류 전체보기 (194)
튼튼발자 개발 성장기🏋️
AWS MSK(Amazon Managed Streaming for Apache Kafka)는 이름에서 알 수 있듯이 Apache Kafka를 AWS에서 완전관리형(Managed Service)으로 제공하는 서비스다. 이 MSK를 RabbitMQ, AWS SQS, AWS Kinesis, Apache Kafka 플랫폼들과 비교하여 벤치마킹을 해본다.메시지 큐와 메시지 스트리밍간단 설명유형플랫폼요약이벤트 스트리밍Apache Kafka, AWS MSK, AWS Kinesis불변의 분산 커밋 로그 기반. 고처리량, 데이터 재처리 가능, 다중 컨슈머 지원.메시지 큐AWS SQS메시지를 저장하고 소비 후 삭제. 높은 확장성, 서버리스 운영, 메시지 순서 보장 선택적.메시지 브로커RabbitMQExchange와 Bin..
조직이 빠르게 변화하고 오랜시간동안 구성원이 계속해서 바뀌며 빌딩해야하는 프로젝트에서는 초기 프로젝트 설계 의도를 잃어버리기 쉽습니다. 실제로 현업에서 DDD 설계 프로젝트가 변형되어 나중에는 여러 도메인이 강결합을 가지는 어처구니 없는 구조가 되어가는 것을 본 적이 있습니다. 이를 방지하려면 아키텍처를 설계하고 설계된 아키텍처가 변형되지 않도록 꽉! 잡아주는 틀이 있으면 좋을것 같다는 생각이 들었습니다. 이처럼 헥사고날이든 삼계층이든 어떠한 아키텍처 구조를 가진 프로젝트가 빌드 될때마다 정해진 규율 안에서 아키텍처의 변동이 있으면 빌드가 되지 않도록 하고, 의도치 않게, 혹은 신규 입사자의 실수로 아키텍처에 변형이 왔을 때 빠르게 캐치하여 수정할 수 있으면서 프로젝트의 신뢰도를 높이고 코드리뷰는 비즈니..
Butler: AI 기반 통합 워크플로우 관리 시스템 구축기목차1. 개요1.1. 왜 사용해야하는가?2. 설계2.1. 백엔드 설계2.2. 프론트엔드 설계2.3. MCP 설계2.4. 인프라 설계2.5. CI/CD 설계1. 개요Butler는 Google Drive, Redmine, GitLab 세 가지 외부 서비스를 하나의 자연어 인터페이스로 통합한 AI 기반 질의응답 및 업무 대행 시스템입니다. 사용자는 "구글드라이브에서 A팀의 2025년 3분기 회식 정보를 찾아줘", "레드마인에서 나에게 할당된 일감을 리스트업해줘", "이 파일을 레드마인 이슈 #1234에 첨부해줘"와 같은 자연어 명령을 통해 여러 플랫폼의 데이터를 검색하고, 파일을 업로드하며, 커밋 히스토리를 조회할 수 있습니다. https://gith..
이전에는 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..
