프로젝트/BLUE DELIVERY
-
(성능테스트) 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 을 사용한 트랜잭션 분리에 관련된 내용을 해보겠습니다. 알림 서비스의 특징 알림 서비스를 구현하기 앞서서 알림 서비스에 필요한 내용을 정리해보겠습니다. 구현 목표 알림을..
-
확장성을 고려하여 객체지향적으로 영업시간 구현하기프로젝트/BLUE DELIVERY 2021. 7. 29. 23:35
blue-delivery 프로젝트를 진행하면서 주로 '확장 가능한 코드'를 작성하기 위한 고민들을 하였습니다. 하나는 영업시간을 구현하면서 했던 고민이고, 하나는 전체적인 구조에 대한 고민입니다. 이번 글에서는 확장성있게 영업시간을 구현하기 위한 고민을 정리해보았습니다. 입력받은 영업시간 정책을 어떻게 구분하고, 각 요일로 변환할까? (실제론 UI가 없지만) 대략 아래와 같이 입력받는다고 가정합니다. 주말 포함이라면 한가지 케이스의 오픈/마감 시간을 입력받아야 하고, 주말 별도라면 평일, 토요일, 일요일 총 3가지 케이스를 입력받아야 합니다. 그리고 어떤 정책(주말 포함or별도)이냐에 따라 적절한 요일로 변환해서 데이터베이스에 저장해야 합니다. (예를 들어, 위의 그림처럼 평일, 토요일, 일요일을 입력받..
-
주소 DB 로딩 (+ 반복되는 쿼리를 스크립트로 한번에 생성)프로젝트/BLUE DELIVERY 2021. 7. 11. 17:35
목적 프로젝트를 진행하면서 주소DB를 활용할 일이 있었는데, 이 과정에서 하드코딩(?)의 어려움과 팀원이 같은 환경을 구성하는데 어려움을 겪을 수도 있다는 점이 문제점으로 다가왔습니다. 그래서 이 문제를 해결한 과정을 공유하기 위해 작성하였습니다. 개요 배달어플 프로젝트를 진행하다가 주소 정보가 필요해졌습니다. 유저가 카테고리를 선택하면 지정한 주소로 배달이 가능한 가게들을 보여줘야 합니다. 그런데 String 타입으로 주소를 저장하면 같은 이름의 구나 동이 존재하면 구분이 불가능하며 띄어쓰기 하나로 다른 주소가 될수 도 있습니다. 검색해본 결과 이미 여기서 주소관련 데이터베이스를 제공하고 있었습니다. 우선 저에게 필요한 것은 다음과 같습니다. 배달가능지역을 표시하기 위해 '동' 단위의 주소를 구별할 수..
-
카테고리에 캐시를 적용한 경험프로젝트/BLUE DELIVERY 2021. 7. 11. 13:28
배달의민족 서버를 클론하는 프로젝트에서 카테고리를 구현하던 중 ENUM을 통해 카테고리를 관리할지, DB에 저장하여 관리할지 고민했던 적이 있었습니다. 대략 다음의 순서로 정리했습니다. 캐시 적용 전 모습 문제점 캐싱이 적합한가? 캐시 종류 Scale-out 확장시 캐싱 데이터의 정합성 문제 로컬캐시 Eventual Consistency 캐시 적용 전 모습 (ENUM) 기존에 카테고리는 아래와 같이 enum 클래스로 관리하였습니다. public enum Category { KOREAN(1L), CHINESE(2L), JAPANESE(3L), CHICKEN(4L), PIZZA(5L), FAST_FOOD(6L); .... } enum을 관리할 경우 장점과 단점을 생각해보면 장점으로는 자바 코드만 보고 어떤 ..