분류 전체보기
-
Cloudwatch 의 로그를 이용해 매트릭 수집하기 (Filter)개발/Monitoring 2022. 10. 8. 02:20
개요 유저에게 문자등 메세지를 전송하기 위해 벤더사의 에이전트 프로그램을 사용하게 되는데, 이 에이전트의 단위시간당 처리 속도를 알고 싶은 니즈가 생겼다. 처리 속도를 측정하기 위해선 메트릭을 수집해야하지만, 특정 벤더사가 제공하는 프로그램이기 때문에 직접 코드를 수정하거나 할 수 없다. 그래서 메트릭 수집을 하는 코드를 심는 대신, 이 에이전트가 남기는 로그를 활용하여 매트릭을 수집하기로 하였다. Cloudwatch는 Filter를 통해 특정 로그를 매트릭으로 수집하는 기능을 제공한다. 이 Filter 사용 방법을 정리한다. 실습 연습용으로.. 어떤 요청이 종료된 개수를 수집하고 싶다고 가정한다. 요청이 종료되면 'Finished ~~~' 이런 로그를 남기는데, 해당 로그를 이용해 메트릭을 수집할 것이..
-
KafkaAvroSerializer/Deserializer 를 이용하는 테스트개발/Spring 2022. 6. 1. 23:44
아래 글을 참고해서 거의 동일한 내용이지만, 코드를 열어보면서 더 대충 정리한 글입니다. https://medium.com/@igorvlahek1/no-need-for-schema-registry-in-your-spring-kafka-tests-a5b81468a0e1 개요 Kafka 에 데이터를 전송할 때 바이트 배열로 변환해줄 Serializer 가 필요하다. Json, Avro, Thrift 등등이 있는데, 현재 Avro 를 사용하고 있다. 테스트를 작성해야하는데, 최대한 간단하고 멱등성있는 테스트를 작성하고 싶었다. 인메모리 기반의 EmbeddedKafka가 있기 때문에 테스트컨테이너는 사용하지 않으려고 했다 Schema-Registry 까지 굳이 테스트할 생각은 없었다. (카프카로 전송하는 과정만..
-
Schema-validation: missing table [name] 에러개발/JPA & Hibernate 2022. 3. 31. 03:43
결론부터 보기 현재 MySQL 5.7, MariaDB JDBC Driver 그리고 Spring Data JPA (Hibernate 5.67) 을 사용하고 있다. Spring Data JPA 를 사용하다보면 hibernate ddl-auto 라는 옵션을 사용할 수 있다. 옵션에는 validate, create, create-drop, update, none 등이 있다. 그리고 현재 validate 옵션을 사용 중이다. validate : 서버를 기동할 때 JPA Entity 클래스와 DB 스키마를 비교하여 [테이블, 컬럼, id generator] 가 유효한지 검사하는 옵션이다. 문제 현상 분명 테이블이 있는데, 테이블이 없다고 한다. validate 옵션을 설정해놓아서 서버를 기동하니 schema val..
-
스프링 배치 Processor의 Filtering개발/Spring 2021. 12. 27. 02:31
스프링 배치의 필터링 최근 아래와 같은 물음을 받은 적이 있다. 스프링 배치에서 만약 10000건을 읽어왔을 때, 업데이트 대상은 100건 정도임에도 불구하고 10000건의 업데이트를 치게되냐? 내 대답 : 100건에 대한 업데이트만 발생한다. 왜냐하면 스프링배치의 Processor가 null을 리턴하면 해당 item은 writer 로 가지 않는다. 라고 말했었다. 사실 내 눈으로 확인한 적이 없었다. 그래서 말하고도 약간 자신이 없었다. 분명히 그렇게 알고는 있는데.. 코드로 확인한 적이 없어 찜찜했다. 다음부턴 확실하게 알고 얘기할 수 있도록 한번 내부동작을 간단히 살펴보았다. 시작! step이 시작되면 아래와 같이 진행된다. ChunkOrientedTasklet chunkProcessor.proce..
-
(성능테스트) Hikari pool connection 데드락 해결프로젝트/BLUE DELIVERY 2021. 8. 23. 18:22
안녕하세요. 최근 진행중인 프로젝트에서 최근 주문 API를 구현하고, JMeter를 이용해 부하 테스트를 진행한 적이 있습니다. 적은 트래픽에서는 문제가 없었는데, 부하를 일으키니 Hikari pool connection timeout 발생으로 요청을 처리하지 못하는 문제를 겪은 적이 있습니다. 이번 글에서는 이 문제를 발견하고 원인을 찾은 후 해결하는 과정까지를 정리해보려고 합니다. 문제점 주문 API를 구현하고 간단하게 테스트 해보았을 때는 아무 문제가 없었습니다. 그러나 JMeter를 이용해 부하테스트를 진행하면 대부분의 요청이 실패하는 문제가 생겼습니다. 임시 조치 콘솔창에 찍힌 에러 로그를 확인하니, HikariPool 에서 connection을 얻을 수 없다고 합니다. hikari pool 의..
-
스프링 이벤트 에러에 독립적으로 만들기 (트랜잭션 분리. @TransactionalEventListener, @Transactional)프로젝트/BLUE DELIVERY 2021. 8. 22. 17:43
안녕하세요. 제가 프로젝트에서 '주문 후 가게에 알림'을 구현하는 과정에서 고민했던 내용을 정리해보려는데, 내용이 길어질거같아 나눠서 올리려고 합니다. 주로 하게된 고민은 다음과 같습니다. 주문이 발생하야 알림이 발생할 수 있는데, 하나의 요청안에서 '주문'과 '알림'을 어떻게 독립적으로 처리할 수 있을지에 대한 고민 어떻게하면 에러가 발생해도 이벤트 메세지를 유실시키지 않고 한번 이상 유저에게 전달하는 것을 보장할 수 있을지 이번 글에서는 알림 서비스 개요와 @TransactionalEventListener, @Transactional 을 사용한 트랜잭션 분리에 관련된 내용을 해보겠습니다. 알림 서비스의 특징 알림 서비스를 구현하기 앞서서 알림 서비스에 필요한 내용을 정리해보겠습니다. 구현 목표 알림을..
-
@Modifying 옵션 알아보기 (flush, clear)개발/JPA & Hibernate 2021. 8. 14. 01:28
JPA Spring Data 에서 벌크성 update, delete를 할 땐, @Modifying 애노테이션을 이용해야 합니다.. @Modifying 에는 flushAutomatically, clearAutomatically 라는 두 가지 옵션이 있는데, 이에 대한 내용을 간단하게 정리해보겠습니다. @Modifying 옵션 살펴보기 flushAutomatically 해당 쿼리를 실행했을 때, flush()를 발생시킵니다. 요건 뒤에서 알아보겠습니다. 지금 결론만 간단하게 말하자면, true든 false든 항상 true 처럼 동작되므로 무시해도 됌. (hibernate 설정 때문) clearAutomatically 중요한건 이 옵션입니다. // 영속성 컨텍스트에만 존재 Team save = teamRepo..
-
확장성을 고려하여 객체지향적으로 영업시간 구현하기프로젝트/BLUE DELIVERY 2021. 7. 29. 23:35
blue-delivery 프로젝트를 진행하면서 주로 '확장 가능한 코드'를 작성하기 위한 고민들을 하였습니다. 하나는 영업시간을 구현하면서 했던 고민이고, 하나는 전체적인 구조에 대한 고민입니다. 이번 글에서는 확장성있게 영업시간을 구현하기 위한 고민을 정리해보았습니다. 입력받은 영업시간 정책을 어떻게 구분하고, 각 요일로 변환할까? (실제론 UI가 없지만) 대략 아래와 같이 입력받는다고 가정합니다. 주말 포함이라면 한가지 케이스의 오픈/마감 시간을 입력받아야 하고, 주말 별도라면 평일, 토요일, 일요일 총 3가지 케이스를 입력받아야 합니다. 그리고 어떤 정책(주말 포함or별도)이냐에 따라 적절한 요일로 변환해서 데이터베이스에 저장해야 합니다. (예를 들어, 위의 그림처럼 평일, 토요일, 일요일을 입력받..