본문 바로가기

분류 전체보기183

[Mysql] INNER JOIN + ORDER BY 에서 filesort 제거해보기 Mysql 에서 INNER JOIN + Order By 를 하게 될때, Slow 쿼리가 발생될수 있으니까 실행 계획을 확인해보고 사용해야 한다. 아래의 테이블이 있다고 가정해 보자. Category 와 Product 테이블이 있다고 가정을 하고, 1:N 관계를 갖고 있다. Product 테이블에는 category_id 컬럼이 인덱스로 잡혀 있다. (FK 아님) Product 테이블과 category 를 조인하고 product 테이블의 PK 로 정렬해서 조회를 해보자. select * from `product` p, `category` c where p.category_id = c.id order by p.id desc limit 1000; 테스트 데이터를 category 10건 + product + 10.. 2020. 12. 11.
Reactive Streams 이해하고 구현해보기 Reactive Streams 란? reactive-streams.org 에서는 다음과 같이 정의하고 있다. Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. 대충 해석하면 "논블로킹(Non-blocking) 백프레셔(back pressure)를 이용한 비동기 데이터 처리의 표준이다" Reactive Streams API Reactive Streams 는 뭔가 복잡할것 같지만, 실제로 아주 간단한 API 들의 조합으로 구성되어 있다. public interface Publisher { public void subscribe(Subscr.. 2020. 11. 25.
commit 메시지에 자동으로 branch명 추가해보기 Git 으로 버전관리 하다 보면 많은 feature 브랜치를 생성하게 되는데, pr 후 머지를 한다던지, 릴리즈를 하게 되면 해당 브랜치를 보통 삭제를 하게 된다. 삭제하고 나면 나중에 커밋 메시지로 어느 브랜치인지 알수 없고, 한눈에 들어오지 않기 때문에 커밋 메시지에 자동으로 브랜치명을 추가하는 방법을 알아보도록 하자. 아무 repository 나 접근해서 cd .git/hooks 해보면 다음과 같다. .sample 확장자로 되어 있는 파일이 있는데, 이것들이 Git 에서 지원하는 Hook 입니다. 커밋 메시지에 자동으로 브랜치명을 추가할 것이니까 prepare-commit-msg 파일을 만들어야 한다. (.sample 확장자를 제거해 주면 된다.) 1. prepare-commit-msg 파일을 아래.. 2020. 11. 4.
Webflux Functional Endpoints 시작하기 Webflux 는 아래 처럼 두개의 프로그래밍 모델을 지원하는데, 이번글에서는 Functional 방식을 알아보도록 하자 Functional routing and handling Annotation-based reactive components 1. RouterFunction RouterFunction 은 기존 개발자에게 익숙한 @RequestMapping 어노테이션과 동일한 역활을 한다. 하지만 가장 큰 차이점은 RouterFunction 은 동작까지 정의한다라는 것이다. @RequiredArgsConstructor @Configuration public class Router { private final PersonHandler handler; @Bean public RouterFunction per.. 2020. 9. 30.