<aside> 💡 프로젝트를 진행하면서 예상하지 못한 이슈에 대해 기록합니다.

</aside>

notion의 page기능을 활용하여 작성하면 인쇄가 힘들 수 있습니다.

  1. 실제 오프라인에서 해당 내용을 전달하기 위해서는 인쇄가 필요한데 notion에 종속된 기능을 사용하면 인쇄 결과물이 이상하므로 인쇄를 필요로 하거나 다른 문서로 마이그레이션 해야하는 경우 notion의 기능을 사용하지 않고 평면으로 작성하도록 합니다.

k8s image Overwrite

  1. 이전에 테스트를 위해서 v0.1.0 tag 이미지를 만들어서 apply 했습니다.

  2. 테스트 완료 후 Container Registry에 해당 tag를 삭제하여 마무리 했습니다.

  3. 이후 실제 제품을 개발하면서 또 다시 v0.1.0 를 배포하는 상황이 왔습니다.

  4. 새로 개발된 image가 정상적으로 Container Registry에 push 됐습니다.

  5. 해당 image으로 k8s에 배포했는데 문제가 발생했습니다. 새로 push image를 pull 하고 있지 않았습니다.

  6. image build가 잘못된 건가 싶어서 local 환경에서 진행해본 결과 문제가 없었습니다.

  7. 확인 결과 imagePullPolicy: "Always" 를 추가해서 항상 image를 새로 pull 하는 방법으로 해결하였습니다.

  8. 결론적으로 업데이트된 image tag 이지만 k8s 입장에서는 이전과 동일한 image tag 이므로 캐쉬되어 image를 다시 다운받지 않는 것 이였습니다.

  9. 때문에 아무리 업데이트를 하더라도 이전 image가 apply 되었던 것입니다.

    해당 pod을 describe 으로 조회해보면 Image 의 이름은 동일하지만 Image ID 는 다른 것을 확인할 수 있습니다.

nestjs에 src 디렉터리 이외의 파일을 import 하면서 발생한 문제

  1. api-gateway를 배포하면서 알게된 문제로 nestjs server 시작전에 main.ts 에서 앱의 버전을 출력하는 코드가 있습니다.

    Untitled

  2. 문제는 해당 버전을 불러오는 package.json 는 src 디렉터리 외부에 있다는 것 입니다. 아마 nestjs도 src 안에있는 파일만 트랜스파일링이 될 것인데 말이죠

  3. 위의 사진을 보니까 대충 감이오죠? 참고로 src 외부의 파일로 저는 package.json 를 import 했는데 import한 build 결과와 안한 결과를 비교해보면

    1. import를 안한 경우는 src 내부에서 모든 모듈 참조가 이뤄지기 때문에 src라는 디렉터리를 구분하지 않고 빌드 결과를 export 하면 되지만
    2. src이외의 파일을 import 하는 경우 ESModule의 상대경로에 맞게 하이어라키를 구분지어야하므로 src파일들은 src 디렉터리를 만들어서 들어가있는 모습을 확인할 수 있습니다.
  4. 문제는 nestjs hello, world에서 build된 nestjs server를 실행하기 위한 script는 아래와 같이 dist에 main.js 파일이 모두있을 꺼야라고 기대되어 있습니다.

    Untitled

  5. 하지만 위에서 설명했다 싶이 src이외의 파일을 import 하는 순간 해당 규칙을 깨져버립니다.