분류 전체보기
-
EDA에서 이벤트 소실없이 순서를 보장하는 아키텍처 (feat. 우아콘)카테고리 없음 2023. 12. 25. 22:37
우아콘2023에 나온 Kafka를 이용한 이벤트 기반 아키텍처 구축 세션을 보고 글을 쓴다. ( 밑에 링크 있음 ) 내 생각도 조금씩은 담아서 작성해보고, 예제도 간단하게 만들 예정이니 완성되면 링크 남겨두겠다. https://github.com/yanglet/PlayGround/tree/main/outbox 여기서 최종적인 아키텍처는 트랜잭셔널 아웃 박스 패턴과 Debezium 을 이용하기 때문에 간단하게 알아보겠다. 트랜잭셔널 아웃 박스 패턴 ( Transactional OutBox Pattern ) ? 트랜잭셔널 아웃 박스 패턴이란 이벤트 기반 아키텍처(EDA)에서 서비스간 통신을 한 트랜잭션으로 가져가기 위한 방법으로 이벤트를 발행하는 서비스의 DB를 활용하여 트랜잭션을 묶는 방법이다. 코드로 보..
-
헥사고날 아키텍처 겉핥기, 예제 코드Backend 2023. 12. 13. 10:01
헥사고날 아키텍처 (Hexagonal Architecture) 란? 헥사고날 아키텍처는 비즈니스가 독립적일 수 있도록 하는 아키텍처이다. 내부에서 외부로 나가는 의존성없애고 테스트를 용이하게한다. 도메인 코드가 바깥으로 하는 어떠한 의존성도 없어야한다. 내가 생각하는 장점 테스트코드 짜기가 좋다. ( 의존성을 덜어냈으므로 ) 유스케이스가 잘 보여 원하는 코드를 찾기 쉽다. 병렬로 작업이 가능하다. ( 도메인 쪽에서는 충돌이 날 수 있긴할 것 같다.. ) 계층 구조의 단점을 꽤나 보완한다. ( 계층 생략, 유스케이스 숨김, 병렬 작업 어려움, 테스트코드 짜기 힘듦, DB주도 설계 유도 등 ) 내가 생각하는 단점 제대로 구현하기가 너무 어렵다. 유스케이스별로 구분하기에 클래스가 많이 생긴다. 처음 접하게 되..
-
Cache Stempede 알아보기Backend 2023. 10. 28. 00:48
Cache Stempede ? 캐시 만료 시점에 많은 요청이 동시에 올 경우 DB 에 부하를 주는 현상을 말한다. 당연하지만 Hot Key 에서 주로 발생한다. ex) Redis Cache 사용중에 TTL 로 인해 만료된 데이터에 1000건의 요청이 동시에 온다면 RDB 에 1000건의 READ 가 발생하고 그 이후 Redis 에 1000건의 WRITE 가 발생하게 된다. 간단하게 여러 해결 방법 소개 1. 한 개의 요청만 처리할 수 있도록 한다. -> 디바운스, Lock 등으로 DB 요청이 한 번만 갈 수 있도록 해준다. * 단점 : 처리되는 한 개의 요청 외의 요청들의 레이턴시가 증가하면서 일시적인 병목이 생길 수 있다. 2. 키를 더 상세하게 나누기 -> 키 전략을 더 상세하게 가져가면서 부하를 줄..
-
템플릿 콜백 패턴으로 redisson 분산락 구현하기 (feat. Trailing Lambdas)Backend/Kotlin 2023. 9. 18. 21:04
분산 락은 대부분 redisson pub/sub 을 이용해 구현한다. ( 인프라가 갖춰져 있다면 ) 여기서는 분산 락에 대해 설명하지않고 넘어가겠다. 분산 락을 구현하는 코드를 살펴보자 나는 이 코드를 보고 바로 AOP 나 전략 패턴이 떠올랐다. 그래서 처음에 AOP 로 구현해 보려고 어노테이션으로 키 값을 파싱 하는 법 이런 걸 찾아보다가 마켓컬리에서 이미 글을 써놓은 것을 보았다. 역시 내가 떠올렸다면 누구든 떠올렸겠지 .. https://helloworld.kurly.com/blog/distributed-redisson-lock/ 풀필먼트 입고 서비스팀에서 분산락을 사용하는 방법 - Spring Redisson 어노테이션 기반으로 분산락을 사용하는 방법에 대해 소개합니다. helloworld.kur..
-
Kafka Consumer Group 알아보기Backend/Kafka 2023. 9. 10. 00:37
Consumer Group ? Consumer 이 묶여있는 그룹을 의미한다. Consumer Group 의 특징 - Consumer Group 별로 offset 을 관리한다. * offset 이란 파티션 내에서 데이터의 위치를 표시하는 유니크한 숫자이다. 내부 토픽을 통해 관리한다. - Consumer Group 은 동일 그룹내의 Consumer 가 문제가 생길 시 동일 그룹의 다른 Consumer 가 역할을 대신 수행할 수 있다. 이를 리밸런싱이라고 한다. ( Consumer Group 별로 offset 을 관리하므로 가능 ) - Consumer Group 의 Consumer 수는 Topic 의 Partition 수를 넘지 못한다. Partition 의 개수 >= Consumer Group 내의 Con..
-
JVM 개념 정리Backend 2023. 8. 20. 00:47
JVM 개념을 정리해보고자 한다. 1. JVM ? JVM (Java Virtual Machine) 이란 자바를 OS 에 독립적으로 실행할 수 있는 환경을 제공하는 소프트웨어이다. JVM 은 JRE (Java Runtime Environment) 에 포함되어 있다. JRE -> JVM + Library JDK -> JRE + Development Kit 2. 실행과정 1 - 자바 파일 (.java) 이 자바 컴파일러(javac) 에 의해 바이트 코드 (.class) 로 변환된다. 2 - Class Loader 가 변환된 바이트코드들을 로드하고 Runtime Data Area (JVM 메모리) 에 적재된다. 3 - Execution Engine 에 의해 Runtime Data Area 에 적재된 바이트 코드..
-
실무에서 겪은 QueryDSL NPE, Cross Join, EntityNotFoundException 이슈카테고리 없음 2023. 8. 8. 21:16
실무에서 QueryDSL 을 사용하다 만난 이슈들을 소개하려한다. 1. NPE ( NullPointerException ) 첫번째로 NPE 인데, 이건 정말 골치가 아팠었다. 상품에 대한 조회 쿼리를 짜고 있었는데, 뜬금없이 NPE 가 계속 터지길래 개발이라서 데이터가 좀 이상한가? Dto 가 이상한가? 뭐 이것저것 고민하면서 해봤는데 계속 떠서 구글링을 좀 해봤다. 그랬더니 객체 그래프가 4개 이상 넘어갈 경우에 NPE 가 터질 수 있다는 것이었다.. 그래서 객체 그래프가 4개 넘어가지 않도록 처리했더니 해결됐다. 신기해 .. ! 2. Cross Join 두번째로 Cross Join 인데, 로컬에서 개발하다 콘솔에 찍히는 쿼리를 봤는데 join 이긴한데 위에 cross 라고 적혀있어서 이건 뭐지? 싶어..
-
Aurora Mysql DB 블루 그린 배포로 인한 데비지움 커넥터 이슈카테고리 없음 2023. 7. 29. 22:21
회사에서 있던 이슈를 간단하게 소개하려한다. DB 팀에서 블루 그린 배포를 처음 시도하여 업그레이드를 진행했는데, DB 팀에서 모니터링 중 binlog_io_cache_hit_ratio 수치가 오르지 않는다고 하여 우리 팀에서 확인 했더니 CDC 토픽에 메세지가 쌓이지 않고 있었다. DB 블루 그린 배포를 하면서 불가피하게 server id 가 변경되어 커넥터의 server id 와 달라 동작하지 못한 것이었다. 그래서 server id 를 바꾸고 새로운 binlog 파일부터 읽어올 수 있도록 하여 해결했다.