[주간아티클] 21.06.28 ~ 21.07.04

피누·2021년 7월 4일
1
post-thumbnail

해당 컨텐츠는 주간동안 읽은 아티클 중 일부를 정리한 내용입니다.

Article

Synchronising transactions between database and Kafka producer

이종 트랜잭션 간의 동기화 관련 내용이다. 해당 글에서 아웃박스 패턴에 대해 인상 깊었다. 아웃박스 패턴은 DB 테이블을 메시지 큐로 활용하고, 해당 테이블을 폴링을 하던 디비지움과 같은 툴을 사용하든 메뉴얼하게 transaction log를 사용하여 생성을 추적하고 이벤트를 발행하는 패턴이다. 카사에서 해당 패턴을 통해 블록체인과 통신했던 경험이 떠오르면서 지금 회사는 이 부분을 어떻게 처리하고 있는지 궁금해졌다.

그 외에도 좋은 답변들이 많으니 읽어보면 좋은 글이다.

아웃박스 패턴에 대한 자세한 내용은 마이크로 서비스 패턴이라는 책에 잘 설명되어 있다.

DTO는 어느레이어까지 사용하는 것이 맞을까

서비스에 파라미터로 DTO, Entity중 어떤 것이 적절한가에 대한 내용이다. 관점에 따라, 사람에 따라 생각하기 나름인 거 같다.

필자의 생각은 컨트롤러에서 사용되는 DTO를 프레젠테이션 레이어로 본다면 서비스 레이어가 DTO에 의존하는 것은 의존관계가 어색해보인다. 그렇다고 JPA 엔티티를 컨트롤러 레이어에 노출하게 되면 컨트롤러에서는 영속성 레이어에 접근 할 수 있게되는게 이것 역시 좋지 않아 보인다.

SDK를 포함하는 멀티모듈 구조에서는 프레젠테이션 레이어의 DTO만 노출하기 위해 의존성 최상위에 DTO가 위치되는 경우도 있다.

본디 엔티티라는 것은 도메인 영역의 순수한 객체를 의미하는데 JPA 생태계에서는 ORM Mapper를 엔티티로 사용하는 경우가 많다. 도메인 영역의 엔티티와 분리하고자 한다면 중복코드가 발생하는 반면 도메인 영역은 DB 구조에서 자유로워지는 이점이 있다.

즉 도메인 객체들의 협력관계나 구성이 변경된다하더라도 DB 마이그레이션에서 자유로워 질수 있다. 반대로 디비 최적화를 위한 테이블 구조 변경에서 역시 도메인 객체들은 자유롭다.

사설이 길어졌는데, 결론은 정해진 답은 없다. 상황에 맞게 적절하게 트레이드 오프하고 팀원들간의 컨벤션을 만들어 지키면 그뿐이다.

Spring data jpa - class based projection with custom query

실무에서 대량의 데이터를 조회하고 삽입하는 배치잡을 다룰 일이 생겼다. spring data jpa는 일반적으로 엔티티의 모든 값을 다 조회해오기 때문에 커버링 인덱스등 최적화에서 불리한 점이 있다. 이를 해결하기 위한 대안 중 하나가 jpa projection이다. 해당 글 답변에서는 @Query에서 Class Base Projection에 대한 내용을 다루고 있다.

Book

데이터 중심 애플리케이션 설계 - 8장 분산 시스템의 골칫 거리

분산환경이 단일노드에 비해 어려운 이유에 대해 설명하고 있다. 분산환경에서는 항상 비결정적 부분 실패가 발생할 수 있고 네트워크를 통해 메시지를 주고 받기 때문에 신뢰성 없는 도구로 신뢰성 있는 시스템을 만들어야 한다.

책에서는 신뢰성 없는 네트워크와 시계에 대해 중점적으로 서술하고 있는데, 필자는 네트워크에 대해서는 많은 고민을 하는 반면 시계에 대한 고민은 한 적이 없어 이 부분이 인상 깊었다. 노드의 프로세스들은 GC, 디스크 스왑, IO 등으로 인해 언제든지 멈출 수 있다. 이 멈춤동안 외부의 시계는 흘러가므로 시간에 의존한 로직들은 문제가 발생 할 수 있다. 대표적인 예가 최종 승리쓰기가 항상 마지막 연산으로 덮어쓰임을 보장하지 않는다는 것이다.

도메인 주도 설계 - 15장 디스틸레이션

도메인의 정수인 코어 분리에 대한 내용을 다루고 있는 장이다. 책이 전반적으로 장황하고 설명이 과도하게 친절하다고 느껴지는데 이 장은 더욱 그렇게 느껴졌다. 필자가 느끼기에 15장의 핵심은 코어 도메인의 사이즈를 가능한 작게 유지하고 비전 선언문을 통해 코어에 대한 1페이지 분량의 문서를 유지하라이다.

profile
어려운 문제를 함께 풀어가는 것을 좋아합니다.

0개의 댓글