본문 바로가기

전체 글

(34)
[성능 개선] Batch 작업을 최적화해보자 Spring Batch1. Spring Batch를 사용한 이유?매주마다 집안일을 가장 많이 한 멤버를 선정하는 요구사항이 있다.매주 월요일 새벽시간이 되면 일괄적으로 방을 돌면서 방마다 멤버들의 1주 동안의 집안일 횟수를 조회해서 가장 많이 일을 많이 한 멤버를 선정하도록 했다. 많은 데이터를 일괄적으로 처리하기 위해 spring batch를 사용했고 특정 주기마다 자동으로 실행시키기위해 quartz라는 scheduler를 사용했다. 2. Spring Batch란?대용량 데이터 처리를 위한 spring framework로 주기적이거나 반복적인 작업을 효과적으로 처리하기 위한 기능을 제공한다. 다음과 같은 기능을 제공한다.- transaction - retry- skip 3. Spring Batch 용..
[문제 해결] spring cloud starter aws 라이브러리 의존할 때 발생하는 에러를 알아보자 문제prod가 아닌 환경에서 서버 실행 시 다음과 같은 에러가 발생했다.에러 메시지를 보면 metadata를 가져오는데 실패했다는 내용이다. 원인디버깅을 통해 원인을 하나씩 살펴봤다.기본적으로 설정된 http://169.254.169.254로 요청을 보내서 metadata를 가져온다.해당 서버는 EC2 내에서만 접근가능하다. 서버로 요청을 보내기 전에 metadata를 비활성화하는 설정이 있으면 예외를 발생시키고 없으면 헤더에 token을 추가한다. 서버로 요청을 보내서 응답을 가져온다.해당 서버는 EC2 내에서만 접근가능하기 때문에 당연 요청이 실패한다. 해결불필요한 요청으로 인해 시간이 소요되기 때문에 metadata를 비활성화하는 설정을 통해 통신을 스킵한다.vm option으로 -Dcom.am..
[성능 개선] 유니온 쿼리를 개선해보자 버전springboot 2.4.9mysql 8.0.35ngrinder 3.5.8 배경공지와 투표는 별개의 도메인이지만한 화면에서 최근 날짜 순으로 공지와 투표를 같이 보여줘야 하는 요구사항이 있었다. 이때 공지와 투표를 시간순으로 정렬해야 하고데이터 형식을 하나로 맞춰서 보여줘야 한다는 점에서 쿼리에서 union을 사용했다. 하지만 데이터가 늘어나는 상황에서 2개의 테이블을 합치는 작업은 시간이 많이 걸리고이는 사용자의 불편함으로 이어지게 된다.  성능 개선 방법 1 : Union에서 Union All로 변경union은 테이블을 합치면서 중복제거 작업을 하는데 이를 위해 임시테이블을 만든다.union all을 사용하면 이런 작업을 스킵할 수 있다. 아래는 쿼리를 추출하고explain 명령어를 통해 opt..