개발자 라이프
-
로컬에 주키퍼, 카프카 설치하기 (Standalone)개발자 라이프/카프카 2020. 1. 14. 21:04
들어가며 이번 글은 주키퍼와 카프카를 로컬에 설치하는 방법에 대해 알아봅니다. 로컬에 설치하기 때문에 주키퍼와 카프카 모두 standalone 방식으로 구성합니다. 로컬에서 개발 환경을 구성하고 싶으신 분들은 참고하시면 되겠습니다. :) 또한 설치하는 주키퍼와 카프카의 설정은 최소 설정입니다. 혹여나 커스텀한 설정이 필요하신 분은 설정 파일을 별도로 수정하시면 됩니다. 기본적인 것들 Java 기존 설치 확인 javac -version OpenJdk 설치 sudo yum install java-1.8.0-openjdk-devel.x86_64 -y 정상 설치 확인 javac -version wget 기존 설치 확인 yum list installed | grep wget 설치 sudo yum install w..
-
카프카 운영 - 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..