프로젝트
-
Spring Batch 프로젝트 생성하기 - Spring Boot 3.1프로젝트/스프링 배치 튜토리얼 2023. 10. 9. 00:01
개요 Spring Boot가 3.0이 출시되면서 Batch도 조금 바뀌게 되어 프로젝트를 생성 및 간단한 실행을 수행해보고자 합니다. Gradle Dependencies dependencies { implementation("org.springframework.boot:spring-boot-starter-batch") runtimeOnly("org.postgresql:postgresql:42.3.5") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.springframework.batch:spring-batch-test") implementation(project(":core")) ..
-
공식문서로 알아보는 Redis persistence프로젝트/redis 2023. 9. 5. 00:01
개요 Redis는 In-memory 시스템으로 동작하지만 disk에 영구저장하는 기능도 지원합니다. 어떤 방식으로 저장하는지에 대해 Redis 공식문서를 기반으로 Redis Persistence에 대해 알아보고자 합니다. Redis는 어떻게 데이터를 disk에 저장할까? Persistence란 SSD와 같은 내구성 있는 스토리지에 데이터를 기록하는 것을 의미합니다. Redis는 이에 대해 다양한 방법론을 제시합니다. Redis DataBase(RDB) : 지정된 간격으로 데이터 집합의 특정 시점 스냅숏을 저장합니다. Append Only File(AOF) : 모든 write operation을 기록하고, 서버 시작 시 원래 데이터세트를 재구성할 수 있습니다. No Persistence : 지속성을 완전히..
-
코틀린(kotlin) - 문자열계산기프로젝트/Kotlin + TDD 2023. 9. 3. 00:01
개요 사내스터디를 통해 문자열계산기를 각자 만들어보고 코드리뷰하는 시간을 가졌습니다. 이때 구현했던 코드와 고민들을 공유해보고자 합니다. 코드는 github 저장소에서 보실 수 있습니다. https://github.com/Junuu/kotlin-racingcar/tree/junuu 요구사항정리 - Readme.md 기능구현에 대해 요구사항을 정리하고 단계별로 구현해 나갔습니다. 초기에 덧셈, 뺄셈까지는 코드의 구조를 잡느라 시간이 오래 걸렸지만 이후에는 금방금방 구현이 가능했습니다. Calculator Object object Calculator { fun runCalculator(input: String?): Int { val elementStorage = CalculatorInputClassifier..
-
공식문서로 알아보는 Redis Transaction프로젝트/redis 2023. 8. 30. 00:01
개요 redis에서 multi, exec, discard, watch 등의 command를 공부하다 보니 redis transaction이란 개념이 존재한다는 것을 알게 되었습니다. NoSQL은 트랜잭션이 없다고 알고 있었는데, 트랜잭션에 대한 니즈가 생기면서 RDBMS보다 약한 수준으로 지원한다고 합니다. Redis 공식문서를 기반으로 redis transaction에 대해 알아보고자 합니다. Redis Transaction이란? redis의 명령 중 MULTI, EXEC, DISCARD, WATCH를 활용하여 트랜잭션을 사용할 수 있습니다. Redis 2.2 버전 이상부터는 Redis의 트랜잭션은 2가지를 보장해 줍니다. 모든 명령이 serialized 되어 순차적으로 실행됩니다, 다른 클라이언트가 ..
-
kafka 주키퍼가 필수가 아니다?프로젝트/kafka 2023. 8. 22. 00:01
개요 kafka를 docker로 구성해서 사용하다 보면 zookeeper도 같이 구성해서 사용하곤 했습니다. 하지만 zookeeper는 필수가 아니라는 이야기를 듣고 궁금하여 공부해보려 합니다. Zookeeper란 무엇인가? 쿠버네티스, 카프카 등의 분산 시스템에서는 분산된 시스템끼리 정보를 공유하기 위해 코디네이션 시스템이 필요하고 대표적인 오픈 소스로 Apache Zookeeper가 존재합니다. 공식문서에서는 고성능 코디네이션 시스템으로 소개하며, 이름, 설정 관리, 동기화, 그룹 관리, 리더 선출 등을 수행해 준다고 설명합니다. Kafka에서 Zookeeper가 필요없어졌다 Apache Kafka 2.8.0에 출시되면서 Apache Zookeeper의 의존성이 모두 제거되었습니다. Zookeeper..
-
kafka는 어떻게 고가용성을 유지할까?프로젝트/kafka 2023. 8. 21. 00:01
개요 kafka는 고가용성, 내결함성이 보장된다고 합니다. 고가용성 및 내결함성이란 시스템의 일부 구성 요소가 작동하지 않더라도 계속 작동할 수 있는 기능을 말합니다. 그러면 Kafka는 어떻게 고가용성을 유지할 수 있을까요? 핵심키워드인 kafka replication factor, leader & follower, ISR를 통해 알아보고자 합니다. Kafka replication factor kafka에서는 replication 수를 임의로 지정하여 topic을 만들 수 있습니다. replication-factor 옵션을 통해서 설정할 수 있습니다. replication-factor가 1일 때 topic1 그리고 topic2의 replication factor가 1인 경우입니다. broker1에만 저..
-
Kafka 파티션 증가/감소프로젝트/kafka 2023. 8. 12. 00:01
개요 Kafka의 파티션은 증가시킬 순 있지만 감소할 수 없기 때문에 주의 깊게 증가시켜야 한다는 이야기를 듣게 되었습니다. Kafka의 파티션은 왜 감소시킬 수 없는지 알아보고자 합니다. 그리고 파티션을 증가하면 어떤일이 일어나는지 알아보고자 합니다. Kafka Producer Load Balancing 클라이언트는 메시지를 어느 파티션에 게시할지 제어할 수 있습니다. 이때 로드밸런싱을 구현하여 무작위로 수행하거나, 시맨틱 파티셔닝 함수를 통해 수행될 수 있습니다. 시맨틱 파티셔닝이란 사용자가 키를 지정하는 경우 DefaultPartioner가 키에 대한 해시를 처리합니다. 반대로 사용자가 키를 지정하지 않은 경우에는 라운드로빈 스타일로 파티션을 사용하게 됩니다. key가 없으면 round robin ..
-
Kafka Consumer 성능 올리기프로젝트/kafka 2023. 8. 11. 00:01
개요 Kafka와 같은 Message Queue의 장점 중 하나로는 중간다리에 트래픽을 저장해 놓을 수 있기 때문에 서버가 필요한 만큼만 처리할 수 있습니다. 만약 Producer가 메시지를 생산해 내는 양에 비해 Consumer가 메시지를 처리하는 양이 너무 느린 경우는 어떻게 처리할 수 있을까요? 간단하게 Consumer의 개수를 그냥 늘리면 안 될까요? Producer는 10개의 메시지 발생, Consumer는 5초에 한 개씩 처리하는 구조 만들기 producer는 메시지를 한번 보낼 때 10번 보내기 @Component class KafkaProducer( private val kafkaTemplate: KafkaTemplate ) { fun send(topic: String) { repeat(1..