nayoung@ElementCollection, @CollectionTable로 연관관계 제거하기ERD 설계 시 중요하게 생각하는 부분 중 하나는 불필요한 관계는 최대한 끊고 가는 것이다. 설계 중 ‘@ManyToMany 관계를 어떻게 설계할 것인가’에 대한 많은 의견이 오갔는데 내 생각은 다음과 같다.3d ago3d ago
nayoungDMZ 영역의 API Gateway와 내부 Microservices 분리상품 조회 API를 개발하면서 ‘내부망에 위치한 마이크로서비스가 DMZ 영역에 배치된 API 게이트웨이를 역으로 호출해도 되는가?’ 에 대한 의문이 생겼다. 결론부터 말하면 마이크로서비스가 API 게이트웨이를 역으로 호출하는 것은 권장되지 않는다.Sep 1Sep 1
nayoungLost Update, Write Skew and Phantom Test여러 테스트를 하며 이제 Write Skew와 Phantom의 차이를 구분할 줄 아는 것 같다. Lost Update, Write Skew 그리고 Phantom 이상 현상에는 다음과 같이 대처하고 있다.Aug 25Aug 25
nayoung@Transactional(readOnly = true) 왜 추가하는가 (feat. MVCC로 데이터 일관성 유지)트랜잭션을 걸지 않아도 내부에서 read-only 트랜잭션이 동작하므로 단순 조회에는 트랜잭션을 추가하지 않고 개발했었다. 코드 리뷰 때 @Transactional(readOnly = true) 를 추가하신 분 덕분에 오랜만에 궁금증이 생겼다…Aug 23Aug 23
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