분류 전체보기
-
실전 카프카 개발부터 운영까지 2isAlreadyRead 2025. 1. 5. 16:22
카프카 주요 구성요소1. 카프카(또는 카프카 클러스터)2. 브로커 카프카가 설치된 서버 또는 노드3. 프로듀서 카프카로 메세지를 보내는 역할을 하는 클라이언트4. 컨슈머 카프카에서 메세지를 꺼내가는 역할을 하는 클라이언트 컨슈머는 특정 컨슈머 그룹에 속하며, 같은 그룹에 속한 컨슈머들은 토픽의 파티션을 분산 처리함 기본적으로 컨슈머는 스티키 파티셔닝(Sticky Partitioning)을 사용. 이는 특정 컨슈머가 특정 파티션에 붙어서 계속해서 데이터를 처리하는 방식으로, 데이터 지역성을 높여 캐시 히트율을 증가시키고 전반적인 처리 성능을 향상시킴.5. 토픽 메시지를 저장하는 장소6. 파티션 병렬 처리 및 고성능을 위해 하나의 토픽을 여러개로 나눔 ..
-
실전 카프카 개발부터 운영까지isAlreadyRead 2025. 1. 5. 04:34
프로젝트에 카프카를 적용해야하여 카프카를 학습하는 중이다.강의와 서적 모두 학습 중인데 서적은 요약이 필요할 것 같아 대략적인 내용과 필요한 부분을 기록해 두려 한다.다만 카프카 버전이 현재와 많이 차이나므로 대략적으로 참고만 하는 식으로 진행할 것이며,사용 중단된 기능(Deprecated)에 대해서는 기록하지 않거나, 현재와의 차이점을 기록할 것이다. 1장. 카프카 개요기업의 카프카 도입 사례와 카프카의 장점 아파치 카프카와 인플루언트 카프카의 차이 -> 아파치 카프카는 자동차의 엔진이라면 인플루언트 카프카는 각종 편의기능(네비게이션, 조향장치 등)이 모두 탑재된 완성된 자동차 Apache Kafka와 Confluent Kafka의 주요 차이점기능Apache KafkaConfluent Kafk..
-
동시성이 터졌다.스파르타 심화/MSA 개인프로젝트 2024. 12. 14. 16:10
Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.sparta.msa_exam.order.entity.Order#2] 아주 멋진 에러가 터졌다.another transaction 바로 동시성 문제 바로 낙관적 락을 걸어주었다.jpa: properties: hibernate: use_version_always: true 엔티티엔@Version 추가 Detached entity with generated id '2' has an uninitialized version value 'null': com.sparta.msa_exam.orde..
-
프로젝트 시작 - 대략적인 구상스파르타 심화/MSA 개인프로젝트 2024. 11. 30. 18:17
문서로 제공된 요구사항 외에 내가 어떻게 구현해야할지에 대해 며칠을 고민했다. 거의 3일을 어떻게 해야할지에 대해 고민만 한 것 같다. 먼저 DB에 대한 고민 DB 분리 스키마 vs 테이블MSA 환경에서 데이터베이스를 어떻게 할 지 고민 도커컴포즈로 mysql과 레디스를 묶어 사용하려 했다. 이 경우 레디스는 key-space를 도메인 별로 나누면 된다. 하지만 mysql은 각 도메인마다 독립적like-it-too.tistory.com어떻게 해야할지에 대해 고민했던 것 같다. 깃허브 레포 관리에 대한 고민 마이크로서비스 깃허브 관리방식MSA 프로젝트를 하며 깃허브 레포지토리를 어떻게 관리해야할지많은 고민이 생겨 이것저것 알아보았다. 깃허브 관리 방식에는 3가지를 찾을 수 있었다. 1. 모노레포 (M..
-
매우 화나는 깃 - 하위 모듈 push rejected 해결?오늘/Error 2024. 11. 29. 20:39
결과 스포 프로젝트 전체 삭제 후 다시 만듦 하면 안되는 행동 목록 1. 모듈 remote 금지처음엔 main -> 이곳이 비어있어서 remote해줬는데 절대 이러면 안된다. 루트디렉토리만 push가 되고 하위 모듈들은 푸시를 거절당하게 된다. 나처럼 이런 실수를 저질렀다면 위와 같이 해당 디렉토리로 이동해 명령어를 실행하면된다.인텔리제이 파워쉘 명령어이기 때문에 본인의 설정에 맞춰 진행하면 된다.아무것도 안뜨면 성공한 것이다. Get 하기 귀찮으면 폴더에서 .git 파일을 찾아보면 된다. 그 다음으로 진행한 해결방식들 대체 왜..rebase로 양쪽을 맞춰보기도 했지만 결과는 같았다.여전히 커밋만 되고 깃허브에 푸시는 안되는 상태 git status로 상태를 보니 order와..
-
DB 분리 스키마 vs 테이블프로그래밍/MSA 2024. 11. 28. 16:53
MSA 환경에서 데이터베이스를 어떻게 할 지 고민 도커컴포즈로 mysql과 레디스를 묶어 사용하려 했다. 이 경우 레디스는 key-space를 도메인 별로 나누면 된다. 하지만 mysql은 각 도메인마다 독립적인 데이터베이스를 가져야하는데 어떻게 구현해야하나 고민이 되었다. 방식은 두가지가 있다. 1. 각 도메인이 다른 스키마를 사용2. 같은 스키마를 공유하되, 도메인 별로 테이블을 분리 1. 각 도메인이 다른 스키마를 사용Order는 order_db, Product는 product_db, Auth는 auth_db 로 스키마를 분리할 수 있다. 이 경우 각 도메인은 url이 분리되어 각자 독립적인 db를 보유한 것처럼 사용할 수 있다.jdbc:mysql://mysql:3306/product_db..
-
마이크로서비스 깃허브 관리방식프로그래밍/MSA 2024. 11. 28. 02:18
MSA 프로젝트를 하며 깃허브 레포지토리를 어떻게 관리해야할지많은 고민이 생겨 이것저것 알아보았다. 깃허브 관리 방식에는 3가지를 찾을 수 있었다. 1. 모노레포 (Monorepo)2. 서브모듈 (Submodule)3. 다중 레포지토리 (Multi-repo) 각 방식에 대해 간략히 설명해보자면 1. 모노레포 (Monorepo)모노레포란 하나의 깃 레포지토리에서 여러 프로젝트 또는 서비스를 통합 관리하는 방식모든 서비스와 코드를 하나의 레포지토리에서 관리하는 것이 특징 장점1. CICD 파이프라인 설정과 코드 공유가 쉽다.2. 서비스 간 의존성 문제를 해결하기 쉽다.3. 같은 레포지토리에서 작업하므로 변경사항 추적이 쉬우며, 협업이 쉽다.4. 관련된 모든 변경사항을 한번의 커밋으로 관리할 수 있기 때문에 ..
-
Commit Count 확장 - 로그(TIL) 카운트 EventListener ErrordevRace 2024. 11. 26. 18:46
커밋카운트 로직을 바탕으로 알고리즘 카운트, 로그(TIL) 카운트 를 만들었다. @EventListener @Async public void handleLogSubmitEvent(LogSubmitEvent event) { logCountService.updateLogCountOnSubmit(event.getUserId()); }} 이 곳에는 비동기를 적용하여 사용자가 제출한 이후 카운트를 따로 처리하게 함으로써 제출 이후 바로 다른 작업을 할 수 있도록 하였다. 테스트코드를 작성하여 간단히 로그 제출 -> 제출하며 카운트 이벤트 호출 로직으로 구성하였다. 하지만 테스트에서 문제가 발생하였고, 비동기가 제대로 적용되지 않은것이라 생각해 Awaitility.aw..