본문 바로가기

2020/028

2. 커버링 인덱스 (WHERE + ORDER BY / GROUP BY + ORDER BY ) 지난 시간에 이어 이번엔 ORDER BY에 대해 알아보겠습니다. 2-1. WHERE + ORDER BY 일반적으로 ORDER BY 의 인덱스 사용 방식은 GROUP BY와 유사합니다만, 한가지 차이점이 있습니다. 바로 정렬 기준입니다. MySQL에서는 인덱스 생성시 컬럼 마다 asc/desc 를 정할수 있는것 처럼 보입니다. (젯브레인사의 DataGrip으로 인덱스 생성시 가능한 것처럼 보입니다만… 안됩니다.) 하지만 8.0 이전 버전까지는 지원하지 않습니다. 8.0 이전 버전까지는 문법만 지원되고 실제로 Desc 인덱스가 지원되는 것은 아닙니다. 단지 Ascending index 으로 만들어진 인덱스를 앞에서부터 읽을 것인지 (Forward index scan), 뒤에서부터 읽을 것인지 (Backwar.. 2020. 2. 29.
AWS ElasticBeanstalk (빈스톡) 삭제 실패시 처리 방안 AWS ElasticBeanstalk 삭제시 아래와 같은 메세지와 함께 삭제가 실패할때가 있습니다 ERROR Stack deletion failed: The following resource(s) failed to delete: [AWSEBLoadBalnaceSecurityGroup] ERROR Deleting security group named failed reason resource has a dependent object 보통 위와 같이 AWSEBLoadBalnaceSecurityGroup, AWSEBSecurityGroup 등이 삭제가 안되어 Beanstalk 환경 삭제가 실패하게 되는데요. Beanstalk에서 사용하고 있는 Security Group을 Beanstalk 환경에서 수정 하지 않.. 2020. 2. 26.
Dto 클래스에서 MultiValueMap로 쉽게 타입 변환하기 모든 코드는 Github에 있습니다 1. 문제 상황 RestTemplate의 exchange 메소드를 이용해 HTTP.GET 호출을 할때면 매번 불편한게 있습니다. 바로 Query string 처리인데요. Request Body로 데이터를 전달하는 HTTP.POST의 경우에는 아래와 같이 간단하게 Dto 인스턴스 그대로 데이터를 전달할 수 있습니다. XssRequestDto2 requestBody = new XssRequestDto2("content", expected); HttpEntity entity = new HttpEntity(requestBody, headers); // Dto 인스턴스를 그대로 HttpEntity 생성자로 주입 (Request Body로 등록된다) ResponseEntity r.. 2020. 2. 23.
Querydsl 에서 Group by 최적화하기 (feat. MySQL) 1. MySQL에선 Group by를 하면 정렬도 수행된다고? 일반적으로 MySQL 에서 Group By를 실행하면 file sort가 필수로 들어갑니다. 별도의 Order by가 쿼리에 포함되지 않았음에도 file sort가 발생하는 것이죠. Group by 실행시 해당 컬럼들을 기준으로 정렬이 되니 좋아보일수 있겠지만, 의도치 않게 성능 저하가 발생하는 이유가 되기도 합니다. 물론 인덱스에 있는 컬럼들로 Group by를 한다면 큰 문제가 되지 않습니다. 인덱스로 인해서 이미 컬럼들이 정렬된 상태이기 때문입니다. 정렬이 필요 없는 Group by 된 결과가 필요한 경우엔 굳이 정렬할 필요가 없겠죠? 이 문제를 해결하는 방법이 바로 order by null 입니다. 아래와 같이 order by null.. 2020. 2. 21.
1. 커버링 인덱스 (기본 지식 / WHERE / GROUP BY) 일반적으로 인덱스를 설계한다고하면 WHERE절에 대한 인덱스 설계를 이야기하지만 사실 WHERE뿐만 아니라 쿼리 전체에 대해 인덱스 설계가 필요합니다. 인덱스의 전반적인 내용은 이전 포스팅을 참고하시면 좋습니다. 인덱스는 데이터를 효율적으로 찾는 방법이지만, MySQL의 경우 인덱스안에 포함된 데이터를 사용할 수 있으므로 이를 잘 활용한다면 실제 데이터까지 접근할 필요가 전혀 없습니다. 이처럼 쿼리를 충족시키는 데 필요한 모든 데이터를 갖고 있는 인덱스를 커버링 인덱스 (Covering Index 혹은 Covered Index) 라고합니다. 좀 더 쉽게 말씀드리면 SELECT, WHERE, ORDER BY, GROUP BY 등에 사용되는 모든 컬럼이 인덱스의 구성요소인 경우를 얘기합니다. 1-1. 커버링.. 2020. 2. 16.
젠킨스 변경된 Slack Integration Token 등록하기 젠킨스 Slack Notification 플러그인이 버전업 되면서 더이상 Integration Token을 Job Config에서 바로 설정할 수 없게 되었습니다. 기존 플러그인을 사용한다면 문제 없지만, 최근에 젠킨스를 설치하면 플러그인 역시 최신 버전으로 받게되니 참고하시면 될것 같습니다. 기존의 Github ssh 연동과 동일한 방식으로 진행합니다. 좌측 사이드의 Credentials -> System로 차례로 이동합니다.Grlobal credentials를 클릭합니다화면 좌측에 있는 Add Credentials를 클릭해 Credentials 등록 화면으로 이동합니다.Kind 항목에서 Secret text를 선택하고 아래와 같이 항목을 등록합니다. Secret: 기존에 사용하시던 Slack Inte.. 2020. 2. 15.