분류 전체보기
-
카프카 운영 - Partition Reassign개발자 라이프/카프카 2020. 1. 14. 20:52
들어가며 카프카의 파티션(partition)은 실제로 메세지에 대한 발행과 소비를 담당합니다. 그렇기 때문에 파티션의 수, 브로커 내의 파티션 위치, 파티션 복제 계수 등 파티션에 관련된 설정은 카프카 운영에 있어 가장 중요한 요소입니다. 이번 글은 브로커 내에 분포되어 있는 파티션들의 설정을 변경하는 파티션 재설정(partition reassign)하는 방법에 대해 다뤄봅니다. 들어가기에 앞서 주의사항이 있습니다. 파티션의 재설정은 컨슈머 리밸런싱 등 카프카 내부의 많은 작업을 유발합니다. 그렇기 때문에 정상적인 운영 중에는 재설정을 추천하지 않습니다. Partition Reassign 파티션 재설정에는 파티션의 브로커 위치와 복제 계수를 변경할 수 있습니다. 본 글에서는 브로커 위치를 변경해보는 것을..
-
카프카 운영 - Preferred Replica Election개발자 라이프/카프카 2020. 1. 14. 20:21
들어가며 브로커의 장애는 카프카 운영에서 발생하는 가장 흔한 장애입니다. 이번 글은 브로커 장애로 발생할 수 있는 복제 파티션의 역할 변경과 Preferred Replica Election 방법에 대해 설명합니다. Preferred Replica Election Leader & Follower 토픽은 파티션 단위로 나눠지고, 파티션은 복제 계수(replication factor)에 따라 복제 파티션을 구성합니다. 복제 파티션들은 하나의 Leader(리더)와 그 외의 Follower(팔로워) 형태로 역할을 나눠 구성합니다. 리더 파티션은 복제된 파티션 중 유일하게 메세지 쓰기와 읽기 작업을 담당하여 수행하며, 팔로워들은 리더가 쓰기 작업을 완료한 메세지들을 복제(replication)합니다. 혹시 모를 장..
-
[Kafka 101] 컨슈머 그룹 리밸런싱 (Consumer Group Rebalance)개발자 라이프/카프카 2020. 1. 14. 20:11
들어가며 카프카를 운영하다 보면 여러 상황을 맞이하게 됩니다. 특히 성능 향상을 위해 특정 토픽의 파티션 수를 증가하거나 혹은 컨슈머 그룹에 컨슈머를 추가하는 경우가 있습니다. 하지만 운영 중인 카프카에 위와 같은 작업을 아무런 인정사정없이(?) 실시하면 일시적인 메시지 처리 불가 등 예상치 못한 상황을 맞이할 수 있습니다. 이와 관련된 것이 리밸런싱(Rebalance, Rebalancing)입니다. 본 글에서는 리밸런싱에 대해 알아보고, 어떤 상황에서 발생하는 지 알아봅니다. 그리고 나아가 관련한 유의점에 대해 설명합니다. Consumer Group Rebalance 1. 리밸런싱이란? 컨슈머 그룹 내의 컨슈머들은 자신들이 읽는 파티션의 소유권을 공유합니다. 즉, 하나의 컨슈머 그룹에서 컨슈머 A가 담..
-
2019년 회고개발자 라이프 2020. 1. 14. 18:02
들어가며 2019년을 마무리하는 시점입니다. 올해의 저는 무엇을 했고, 얼마나 성장했는지 조그맣게 회고를 남깁니다. 2019년 회고 첫 입사 올해 초에 첫 직장에 입사하여 곧 1년을 바라보고 있습니다. SI 프로젝트를 2개 참여하면서 나름 개발에 대한 역량도 길렀다고 생각합니다. 그 과정 중에서 몇가지 느꼈던 것을 짧게 정리하자면, 어쩌면 TDD는 SI 프로젝트에 적합하지 않을 수도 있겠다. DDD start는 개발 역량의 기초를 다듬는 데에 최고인 책이다. 커뮤니케이션은 정말 한 끝 차이다. 항상 공식 채널로 하자. 금요일 날 배포는 자멸 행위다. 등이 있었습니다. 물론 회사 생활을 하면서 개발 뿐만 아니라 나름의 비지니스 매너도 배우게 되었습니다. 다른 팀원분께 이슈를 공유하거나, 혹은 공유 받는 방..
-
삽질기 - Could not write JSON: failed to lazily initialize a collection of role개발자 라이프 2019. 8. 11. 20:12
삽질의 여정 이번 삽질의 여정은 다음과 같다. 에러 발생 - 지연 로딩 삽질 (1) 디버깅 - PersistentBag 삽질 (2) 로그 찍기 - 지연 로딩 꼼수 삽질의 종착지 - OSIV(Open Session In View) 마무리 이번 글에서는 지연 로딩에 관한 삽질기지만, 지연 로딩을 자세하게 다루지는 않겠다. 에러 발생 - 지연 로딩 서비스의 Restful API를 개발하고 있었다. Schedule 엔티티의 정보를 수정을 API로, 응답 값으로 수정된 Schedule를 내려줘야했다. MVC 패턴으로 개발하고 있었기에 다음과 같은 순서로 로직이 처리됐다. 컨트롤러 단에서 요청을 받는다. 컨트롤러가 서비스 단으로 파라미터를 전달한다. 서비스가 수정 로직을 처리한다. 서비스가 수정된 Schedule ..
-
마이크로서비스 따라하기 2탄 밋업 후기개발자 라이프 2019. 7. 23. 23:09
MSA가 이토록 비즈니스 중심적일 줄이야. 이전까지의 경험한 MSA 설계 MSA 방식으로 두 번째 프로젝트를 진행하고 있다. 이번 두번째 프로젝트는 이미 설계된 방식으로 서비스들이 구성되어 개발되고 있지만, 첫번째는 선임급들이 모여 직접 서비스들을 나누고 개발했었다. 서비스를 나누는 작업은 기획된 화면 설계서를 분석하여 요구사항을 파악하고, 어떻게 나누면 좋을까 여러 회의를 통해 진행했다. 별다른 방법론 없이, MSA의 가장 기본 원칙인 데이터 중심으로 나누는 것이 끝이었다. 나눠진 서비스들은 큰 무리없이 개발로 이뤄졌다. 다만, 충분한 시간을 들이고 분석하지 못한 탓인지, 아니면 부족한 기억력 때문인지 지속적인 컴을 통해 보정하고 수정하며 개발을 진행했다. 특별한 요구사항이 없는 데도 요구사항 분..
-
Attribute Converter 적용 후기개발자 라이프 2019. 7. 21. 22:30
도메인의 자유를 위하여! Attirubute Converter는 무엇인가? 후기를 먼저 남기기 전에 Attribute Converter가 무엇인지 간단히 알아보자. Attribute Converter는 JPA 2.1부터 적용되었으며, 이름 그대로 DB와 엔티티 객체 사이에서 컬럼(속성)을 변환시켜주는 녀석이다. 인터페이스 형태로 제공이 되기 때문에 별도의 클래스로 구현해서 변환에 적용해야 한다. 구현이 필요한 메서드 명이 다음처럼 매우 직관적이기 때문에 이해하기도 쉽고 부담이 크지 않다. 다음 인터페이스를 구현하고, Entity 속성에 @Converter(*. class)만 명시해주면 된다. // Entity 속성 타입과 DB 컬럼의 타입을 파라미터로 받는다. public interface Attribu..
-
SOA와 MSA의 차이점개발자 라이프 2018. 11. 19. 11:36
SOA와 MSA를 간단히 알아보고 가장 큰 차이점을 살펴보자 1. SOA와 MSA란?SOA는 서비스 지향 설계 방식(Service Oriented Architecture)이다. SOA는 서비스 단위로 개발을 하고, 개발된 서비스들을 공유함으로써 재가용성을 늘리고 유연성을 확보하는 것을 목표로 한다. MSA는 마이크로 서비스 설계 방식(Micro Service Archtecture)이다.MSA 또한 아주 작은 단위의 서비스로 소프트웨어를 구성함으로써 민첩하고 유연한 설계를 할 수 있도록한다. 2. 그렇다면 둘의 차이점은?가장 큰 차이점은 재가용성이다.SOA는 서비스를 개발하고, 이를 최대한 재가용한다. 예를 들면, A 팀과 그 옆의 B 팀이 있을 때, A에서 개발한 서비스 a를 B에서도 그대로 사용하는 것..