Confluent Schema Reference 관련 문제
·
트러블슈팅
문제기존 Protobuf 포맷으로 정의된 스키마(Version 1)에 새로운 inner message를 생성하여 스키마 버전(Version 2) 업을 하는 경우 이전 버전 스키마가 새로 생성한 inner message 를 참조하지 못하여 스키마 업그레이드를 하지 못하는 문제가 발생. 해결스키마에 inner message를 생성하는 방식이 아닌 별도의 schema를 생성하여 수정할 스키마에서 이를 참조하는 방식으로 해결 + Terraform Provider로 Confluent Schema Reference 적용 시 발생한 문제A스키마에서 B스키마를 참조할 경우 참조할 스키마(B)가 먼저 생성이 되어 있어야 한다. "A" 스키마에서 새로운 메시지인 "B" 스키마를 참조하려고 할 때, "B" 스키마 생성과, ..
[Java] List.of()와 Arrays.asList() 차이
·
Java
문제List에 데이터를 추가할 때, null값 그 자체를 추가해야 하는데 NPE 에러가 발생했다.List.of() 메서드를 이용해 List를 만들어주었는데 List.of() 메서드는 null 요소를 허용하지 않기 때문에 발생한 문제였다. 해결해결은 간단히 List.of() 메서드 대신 Arrays.asList() 메서드를 사용하는것으로 변경하여 문제를 해결 할 수 있었는데, 이 둘의 차이가 무엇인지 알아보자. List.of() vs Arrays.asList()List.of()우선 List.of() 메서드는 자바9 버전 이후에 도입된 메서드로 파라미터로 전달받은 값들을 불변 리스트로 만드는 역할을 한다. 그리고 요소 하나하나 null인지 Objects.requireNonNull()메서드로 검사를 한다. 그..
정규화(Normalization)란?
·
Database
정규화(Normalization)정규화: 데이터의 중복과 삽입, 갱신, 삭제 시 발생할 수 있는 이상 현상(insert, update, deletion anomaly)을 최소화하기 위해 일련의 정규화(Normal Forms, NF)에 따라 관계형 데이터베이스를 구성하는 과정이다.NF: 정규화되기 위해 준수해야 하는 몇 가지 rule 정규화 과정 : 1NF -> 2NF -> 3NF -> BCNF보통 실무에서는 3NF 혹은 BCNF 까지 만족하면 정규화되었다고 말한다. (최소 정규화 단계) 왜 정규화를 해야 할까?정규화를 하는 궁극적인 목표는 데이터의 중복을 줄이고 데이터의 무결성과 일관성을 유지하기 위해서이다. 비정규화된 데이터베이스 테이블 (고객 정보와 주문 정보를 하나의 테이블에 저장)    ID   ..
MVCC(Multi-Version Concurrency Control) 개념
·
Database
MVCC(Multi Version Concurrency Cotnrol)란?개념MVCC(Multi-Version Concurrency Control)은 데이터베이스에서 동시성을 제어하는 방법 중 하나로, 다수의 사용자가 동시에 데이터베이스를 사용할 때 트랜잭션 간의 격리 수준을 유지하여 동시성을 제어한다. MVCC의 가장 큰 목적은 Lock을 사용하지 않고 일관된 읽기를 제공하는 것이다. 동작 원리MVCC는 데이터의 버전(snapshot)을 관리함으로써 동시성을 관리한다.-> MVCC에서 Multi version인 이유가 하나의 데이터에 대해 여러 개의 버전이 동시에 관리된다는 의미이다.예를 들어, 두  트랜잭션의 read-write 간 데이터를 읽는(read) 시점에 해당 데이터의 스냅샷을 유지하고 다른..
Connection을 미리 생성하는 이유
·
Database
Spring Boot을 사용하면 Connection pool에 미리 Connection을 생성하는데, 미리 생성하는 이유로 DB와 connection을 맺는 비용이 크기 때문에 애플리케이션 시작 시 미리  pool에 생성해 두어 필요할 때마다 꺼내 사용한다고 알고 있다. DB와 애플리케이션이 Connection을 맺는데 비용이 큰 이유가 뭘까?우리는 애플리케이션과 DB가 통신하는 방법을 알아야 한다.기본적으로 애플리케이션과 DB 서버와 통신을 하는 방법은 TCP/IP를 통해 통신을 하게 된다.TCP/IP는 신뢰성이 높은 통신 방법으로 신뢰성을 보장하기 위해 3-way handshake 과정을 통해 연결을 하고 연결을 종료할 때는 4-way handshake 과정을 통해 연결을 종료하게 된다. https:..
[E-commerce] 트랜잭셔널 아웃박스 패턴을 활용한 이벤트 기반 주문 처리 시스템 설계 및 구현(With Kafka)
·
성장이야기/TIL
현재 서비스의 트랜잭션 범위에 대한 이해상품 주문 결제 트랜잭션Tx -> 사용자 조회 -> 장바구니 조회 -> 주문 및 주문 아이템 생성 -> 재고 차감 -> 결제 -> 주문 정보 전송 -> commit현재 트랜잭션 범위의 문제점긴 트랜잭션 : 하나의 트랜잭션에서 주문, 결제 같이 여러 작업을 처리하게 될 경우 트랜잭션의 작업 시간이 길어져, 다른 트랜잭션에서 커넥션이 필요할 때 대기시간이 길어져 사용성이 떨어진다.-> 트랜잭션의 사용시간이 길어 생기는 문제전체 롤백 문제 : 주문 정보를 외부 데이터 플랫폼에 전송 도중 오류로 인해 전송에 실패하면 이전 작업(주문 생성, 재고 차감, 결제)들이 모두 롤백된다. 상품 주문 시 핵심적인 비즈니스 로직이 부가적인 주문 정보 전송 로직에 의해 롤백되고 있기 때문..