nayoungCommand and Query Responsibility Segregation (CQRS) patternAPI Composition을 적용해 클라이언트와 백엔드 서비스의 강한 결합, 클라이언트가 느낄 복잡함 등 여러 문제를 해결했다. 하지만 요청마다 발생하는 인-메모리 조인 등 새로운 문제가 발생했고 이는 CQRS 패턴으로 해결하려고 한다.Jul 22Jul 22
nayoungAPI Composition PatternMSA 환경에서 Spring Cloud Gateway를 추가해 라우팅, 필터 그리고 서킷브레이커로 이상을 감지하고 있었다.Jul 21Jul 21
nayoungTransactional Outbox Pattern으로 선형성 보장하기주문을 처리하는 기능에서 RDBMS, Kafka 간 속도 차이로 주문을 생성하지 못하는 이슈가 발생했으며 KStream-KTable Join으로 DB 접근을 최소화시켜 이슈를 해결했다. 하지만 이슈를 해결하기 위해 사용한 기술은 또 다른 문제를…Apr 23Apr 23
nayoung단일 서버에서 동시성 제어하기synchronized 키워드, AtomicInteger 타입, Explicit Lock 등 여러 방법으로 동시성을 제어할 수 있다. 하지만 이 글에 작성한 방법은 모두 단일 서버에서만 가능한 방법이다.Apr 19Apr 19
nayoungSpring Cloud Gateway — Circuit Breaker, Time LimiterMSA 환경에서 특정 서버의 장애가 다른 서버로 전파될 수 있는데 이는 CircuitBreaker를 사용해 해결할 수 있다.Apr 4Apr 4
nayoungSpring Cloud Gateway + Eureka외부에 노출되는 여러 엔드포인트를 중앙 집중식으로 관리하기 위해 Gateway를 사용했다. pre-필터로 요청 경로를 rewrite하고, 랜덤 포트 사용으로 서비스의 uri가 계속 변경되는 것을 eureka로 해결했다.Mar 25Mar 25
nayoungMySQL InnoDB 락 테스트 (트랜잭션 격리 수준별 비교)Repeatable Read, Read-Committed 격리 수준에서 InnoDB 락이 어떻게 작동하는지 테스트했다.Mar 19Mar 19
nayoungNon-unique index와 Next Key Lockwhere절에 작성한 column이 index인지, 맞다면 unique한지 등 여러 상황에 따라 DB에 Lock이 걸리는 범위가 달라진다. 잘못 사용하면 테이블 전체가 Lock에 걸려 다른 요청에도 영향을 미칠 수 있다.Mar 19Mar 19
nayoungConsistent Hashing + XMemcached 테스트 코드DB 커넥션을 추가로 확보하기 위해 Sharding을 적용해보기로 했다. 물론 샤딩도 단점이 존재한다.Mar 18Mar 18