개요 NGrinder Controller를 실행할 때, 아래와 같은 오류가 발생했다. local IP address인 '218.38.137.27'에 접근할 수 없다고 한다. 모르는 IP라서 찾아보니 218.38.137.*은 SKB에서 제공하는 IP였다. 현재 ISP로 SKB와 SKB의 DNS 서버를 사용하는데 관련이 있다고 생각했다. Caused by: org.ngrinder.common.exception.NGrinderRuntimeException: Can not check available ports because given local IP address '218.38.137.27' is unreachable. Please check the `/etc/hosts` file..
Trouble shooting
문제 상황 Board, Column, Card 엔티티가 각각 1:N, 1:N 관계일 때, Board와 관련된 Column, Card를 모두 조회하려고 했다. (단, Column은 Column의 weight 필드를 기준으로 정렬해서 조회하고, Card는 Card의 weight 필드를 기준으로 정렬해서 조회한다.) 이때, 단순히 조회하면 N+1 문제가 발생해서 Board와 연관된 Column N개, Column과 관련된 Card M개를 조회하면서 N*M번 불필요한 쿼리를 수행하게 된다. 생각 처음엔 한 번에 column과 card를 fetch join 하려고 했었는데, MultipleBagFetchException: cannot simultaneously fetch multiple bags 예외를 만났다. ..
문제 상황 Vuex로 클라이언트의 인증 상태를 관리한다. 메인 페이지로 사용하는 컴포넌트에서 로그인 한 사용자와 로그인 하지 않은 사용자에게 보여주는 컴포넌트를 분리했는데, 페이지를 새로고침 하면 인증 상태가 초기화될 때 잠깐 LoginBefore 컴포넌트가 그려지고, 서버에 인증 상태를 확인하는 요청이 완료되고 나면 LoginAfter 컴포넌트가 그려져서 깜박이게 된다. 해결 방법 컴포넌트가 그려지기 전에 인증 상태를 확인해야 한다. 방법1 컴포넌트 로딩 시점보다 빠르게 인증을 받아내기 브라우저가 새로고침되면 컴포넌트보다 먼저 뷰 라우터의 네비게이션 가드가 실행되므로 이때 인증을 받아낸다. 장점 명확한 타이밍에 인증을 받을 수 있다. 단점 모든 라우팅에 대해서 세션을 체크하기 때문에 불필요한 API 호..