회사 보안 정책으로 인해서 여러 가지 보안 SW를 설치하고 사용합니다. 그 중 잘 만든 것도 있고, 쓰레기 같은 프로그램도 있습니다. 쓰레기 류 중의 하나가 V3죠. 

 

NPM과 Gradle을 CI를 돌리거나, NPM Install을 하게 되면, 대량의 파일 복사를 하게 됩니다. 특히 NPM은 Directory나 파일의 Link를 Rename 해 놓은 후, 나중에 영구 삭제하는 과정을 거치는 걸로 보입니다. 

 

문제는 NPM이 파일을 처리하고 나서 바로 Rename에 들어가게 되는데, NPM이 처리한 파일을 V3가 붙잡고 있습니다. 그래서 rename하는 과정에 예외가 발생합니다. 아주 거지 같죠. 

 

회사 직원들이 Jenkins가 자꾸 실패가 뜬다는 말에 살펴 보니, 또 V3가 문제인 것 같습니다. 


WRITTEN BY
HanDDol
여행이란 건 말이지. 첫 걸음을 내딜 때는 모든 게 낯설고.. 그리고 점점 더 낯선 세상에 익숙해지면서 세상의 모든 곳이 고향처럼 느껴진다. 고향으로 돌아오는 여행의 마지막 걸음에는 나의 고향이 더 이상 익숙한 곳이 아닌 낯선 곳임을 알게 된다.

,

Lezyne의 펌프를 2개 가지고 있다. 하나는 CNC Floor Drive, 다른 하나는 Micro Floor Drive다. 가격은 Lezyne이 표방하는 바대로 더럽게 비싸다. 

 

어쨌든 더럽게 비싼 이 펌프 2개는 다 고장 상태였다. CNC Floor Drive는 펌프를 아무리 펌프질해도 에어가 나오지 않고, Micro Floor Drive는 Presta 노즐을 오픈 안 한 상태로 눌러줬더니 ABS 버튼 자리가 그냥 터져 버린다. 그리고 펌프 게이지도 제대로 동작하지 않고. 

 

찾아보니 펌프질 안 되는 건 O Ring 문제로 고질적이고, ABS 버튼 터진 거야 그렇다 치고.. 

 

근데 말 그대로 더럽게 잘 만든 펌프라며... 일반인이 펌프를 사용해도 일년에 몇 번 사용할까? 내 생각에 한 30번 사용하고 O Ring이 날아간 거다. 뭔 고급 펌프가 30번 펌프질 하면 소모품 교체냐? 더 짜증 나는 건 한국 판매처는 문의해도 답변도 없다. 그래서 그냥 공구상에서 널려 있는 하나에 50원짜리 O Ring 사서 교체 했다. 아주 잘 돌아가네.. ㅎㅎ

ABS 버튼도 세게 누른 것도 아닌 데 버튼의 고정 나사가 날아갔다. 그냥 공기압에 터져 버린거다. 

 

고급 브랜드를 가장한 싸구려 품질 수준이다. 다음부터는 이쪽 제품은 안 사는 걸로 마음을 굳혔다. 


WRITTEN BY
HanDDol
여행이란 건 말이지. 첫 걸음을 내딜 때는 모든 게 낯설고.. 그리고 점점 더 낯선 세상에 익숙해지면서 세상의 모든 곳이 고향처럼 느껴진다. 고향으로 돌아오는 여행의 마지막 걸음에는 나의 고향이 더 이상 익숙한 곳이 아닌 낯선 곳임을 알게 된다.

,

UI 표시가 제대로 되지 않아서 문제점을 찾다보니 객체가 이유없이 생성, 파괴를 반복한다. 

문제는 해당 객체가 State를 유지하고 있다는 거다. Stateless하면 문제 없을 텐데 상태가 있다 보니 재생성되면 UI 요소가 사라져 버린다. 내가 짠 부분이 아니라 수정하진 않는다. 

 

<ng-container *ngFor="let server of servers$|async;">
  .... something ..... 
</ng-container>

문제가 되는 부분을 보니 ngFor와 NgRx Store가 같이 쓰인다. 두 가지가 복합되서 문제가 발생했다. 

1. NgRx Store에서 State를 가져오는데, 그 때마다 Object Reference가 변경된다. 

2. ngFor는 자기 하부의 DOM을 Object Reference에 의거해서 관리한다. 

두 가지가 조합되면 ngFor는 자기 하부의 모든 DOM을 싹 날리고 재생성하는 일을 반복한다. 

 

그래서 아래와 같이 변경한다. 이렇게 하면 ngFor는 trackBy에 의거해서 자신의 하부의 DOM을 생성한다. 

<ng-container *ngFor="let server of servers$|async; trackBy: trackByGuid">
  .... something ..... 
</ng-container>



  public trackByGuid(index: number, server: Server) {
    return server.guid;
  }

 


WRITTEN BY
HanDDol
여행이란 건 말이지. 첫 걸음을 내딜 때는 모든 게 낯설고.. 그리고 점점 더 낯선 세상에 익숙해지면서 세상의 모든 곳이 고향처럼 느껴진다. 고향으로 돌아오는 여행의 마지막 걸음에는 나의 고향이 더 이상 익숙한 곳이 아닌 낯선 곳임을 알게 된다.

,