본문 바로가기

내가 잊어버리기 싫어서 적는 개발 지식

(4)
[Spring + Kafka] 대용량 스트림 메시지 구독 설계 수많은 스트림 데이터를 안정적으로 구독하기 위한 시스템 설계 방법은 정말 다양하다.이 글에서는 대용량 결제 데이터 스트림을 처리하기 위해 우리가 설계를 했는지 서술하겠당  Listener vs Consumer Kafka를 사용하기 위해 다음 라이브러리를 사용했다.https://mvnrepository.com/artifact/org.springframework.kafka/spring-kafka 해당 라이브러리는 @KafkaListener 라는 강력한 어노테이션을 지원해준다. 일반적으로 Spring 환경에서 Kafka 토픽을 구독하기 위해선 두 가지 방법을 떠올릴 수 있다. 1. @KafkaListener 사용2. 주기적인 스케쥴링을 통한 Consumer.poll 사용 @KafkaListener가 제공해주는..
[Spring Batch] Job Instance 추가시, 데드락 문제 해결 최근 배치 관련 작업을 위해 Spring Batch를 통해 개발하고 있는데 예상치 못한 오류를 맞이했다. com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction : PreparedStatementCallback; SQL [INSERT INTO BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) VALUES (?, ?, ?, ?) ]; Deadlock found when trying to get lock; try restarting transaction in class..
[MySQL] DB 재시작과 auto_increment의 관계성 우리 팀은 수 많은 데이터베이스 서비스중 MySQL을 사용한다. 현재 개발하고 있는 서비스에서 사용하고 있는 DB는 꽤 오래전에 구축되었는데, MySQL 5.7 버전을 사용한다. 개발하면서 MySQL 5.7 버전에서는 쓸 수 없는 기능들로 많이 고생했기 때문에 최근 8.0 버전으로 업그레이드를 진행했다. 개발대역에서 자체적으로 5.7에서 8버전으로의 업그레이드를 진행했었는데, 서비스 상의 큰 이슈도 없었고 업그레이드 하는 시간도 많은 시간을 요구하지 않았기에 QA 대역에서 그대로 진행했다. 그런데 문제가 생겼다. AUTO_INCREMENT 의 COUNTER AUTO_INCREMENT(이하 AI)는 테이블의 pk 컬럼에 적용했을 때 꽤 편리한 속성이다. 데이터베이스 엔진이 자체적으로 PK를 카운팅하며 in..
[Spring JPA] 한 트랜잭션 내부에서의 외부 API 콜과 엮인 영속성 문제 이 카테고리를 만든 이유 이 카테고리에서 첫 글인 만큼 카테고리의 이유는 여기에 한번만 적겠다. 회사에서 개발하면서 모르는 지식들을 지피티형이나 구글링을 통해 서칭하는데, 가끔 [어 이거 옛날에 한번 검색했던 기억이 나는데?]라는 생각과 함께 나의 수준에 탄식을 하는 일이 있었다. 그래서 올해부터는 머리를 탁 치고 깨달았던 개발 관련 지식을 이 카테고리에 정리할 계획이다. 회고 말고는 쓸 주제도 명확하게 정하기 힘들었는데 다행이다. 사실 올해 마지막 글이 될 수도 있음 한 트랜잭션 내부에서의 외부 API 콜 데이터 베이스를 이용해 데이터를 가공하고 서빙하는 서비스를 개발함에 있어서 트랜잭션 관리는 아주 중요한 영역이다. 성능 이슈는 그렇다 쳐도 데이터 정합성을 해치는 상황이 발생하면 안되기 때문이다. 회..