본문 바로가기
개발 - Coding/Infra

클라우드 네이티브를 위한 쿠버네티스 실전 프로젝트 p.92 오류 해결

by dev_jinyeong 2023. 3. 3.

https://github.com/dybooksIT/k8s-aws-book

 

GitHub - dybooksIT/k8s-aws-book: 동양북스 <AWS를 이용한 쿠버네티스 애플리케이션 배포> 저장소

동양북스 <AWS를 이용한 쿠버네티스 애플리케이션 배포> 저장소. Contribute to dybooksIT/k8s-aws-book development by creating an account on GitHub.

github.com

p.92 전까지 잘 따라오셨다면 백엔드 애플리케이션 배포에는 성공하셨을겁니다.

그 후에 프론트엔드 애플리케이션을 빌드하고 배포해야 하는데, 빌드하는 데 많은 시행착오를 겪어서 이를 해결할 수 있게 해결 과정을 공유하고자 합니다.

 

실패 원인

  1. Python version
  2. node.js version

먼저 의존하고 있는 Python 버전이 중요한데요.

Python 버전이 중요한 이유는, npm을 실행할 때 node-gyp에서 문제가 생길 수 있기 때문입니다.

https://www.npmjs.com/package/node-gyp

 

node-gyp

Node.js native addon build tool. Latest version: 9.3.1, last published: 2 months ago. Start using node-gyp in your project by running `npm i node-gyp`. There are 1347 other projects in the npm registry using node-gyp.

www.npmjs.com

node-gyp은 node.js에서 필요한 의존성을 설치할 수 있도록 해 주는 크로스플랫폼 cli 툴입니다.

제 환경은 Apple M1 Pro, macOS ventura Version 13.2.1 (22D68)입니다.

node-gyp에서 macOS 요구사항을 보면 다음과 같습니다.

  • Python v3.7, v3.8, v3.9, or v3.10
  • XCode Command Line Tools which will install clang, clang++, and make.
    • Install the XCode Command Line Tools standalone by running xcode-select --install. -- OR --
    • Alternatively, if you already have the full Xcode installed, you can install the Command Line Tools under the menu Xcode -> Open Developer Tool -> More Developer Tools....

제 경우에는 Apple Sillicon 지원과 동시에 높은 버전에서 많은 속도 향상이 있다는 이유로 항상 Python 최신 버전을 사용하고 있습니다.

그래서 Python 3.11을 사용중이었는데, node-gyp에서는 3.10까지만 호환성을 보장하기 때문에 오류가 발생했습니다.

추가로 XCode Command Line Tools도 있는데, 이 부분은 터미널에서 xcode-select --install을 입력하거나 Xcode를 아예 설치하면 의존성 문제가 해결됩니다.

참고로 xcode-select --install을 입력하면 더 이상 지원하지 않고 GUI 환경의 setting에서 눌러서 업데이트 할 수 있다는 문구가 출력되는데 제 경우에도 setting에서 눌러서 업데이트하고 있습니다.

 

다음으로 문제가 생길 수 있는 부분은 node.js 버전입니다.

저는 node.js를 잘 사용하지 않아서 brew로 설치해놓고 따로 여러 버전을 설치하지 않고 있었습니다.

이 경우에는 brew update 등 업데이트를 시킬 경우 node.js가 항상 최신 버전으로 설치되게 됩니다.

그러나 이 책은 2021년에 쓰였기 때문에 최신 노드로 빌드할 경우 많은 취약점이 있을 뿐만 아니라 아예 빌드에 실패하기도 합니다.

빌드가 실패하는 주요 원인은 제 경우에는 nuxt와 vue.js였습니다.

https://nuxtjs.org

 

The Intuitive Vue Framework

Build your next Vue.js application with confidence using Nuxt. An open source framework making web development simple and powerful.

nuxtjs.org

https://vuejs.org

 

Vue.js - The Progressive JavaScript Framework | Vue.js

Versatile A rich, incrementally adoptable ecosystem that scales between a library and a full-featured framework.

vuejs.org

예제에서 제공하는 package.js 파일을 보면 다음과 같은데요.

제 경우에는 npm install을 실행하면 nuxt와 vue.js 의존성을 설치하지 못해서 빌드할 때 오류가 났습니다.

{
  "name": "frontend-app",
  "version": "1.0.0",
  "description": "Frontend sample application",
  "author": "Sample App Developer",
  "private": true,
  "scripts": {
    "test": "jest",
    "dev": "nuxt",
    "build": "nuxt build",
    "start": "nuxt start",
    "generate": "nuxt generate"
  },
  "dependencies": {
    "@nuxtjs/axios": "^5.13.1",
    "@nuxtjs/vuetify": "1.11.0",
    "nuxt": "^2.16.2",
    "vuex-persistedstate": "^2.7.1"
  },
  "devDependencies": {
    "@vue/test-utils": "^1.0.0-beta.32",
    "babel-core": "7.0.0-bridge.0",
    "babel-jest": "^25.1.0",
    "jest": "^25.1.0",
    "nodemon": "^2.0.2",
    "stylus": "^0.54.7",
    "stylus-loader": "^3.0.2",
    "vue-jest": "^3.0.5"
  }
}

여기서 주의할 점은, 책에서는 node.js 14.16.0로 빌드했지만 현재 기준(2023-03-03) 실제로는 14.18.0으로 빌드해야 빌드할 수 있다는 점입니다.

당연하게도 가능한 최신 버전을 사용해야 보안 취약점으로부터 안전할 수 있으므로 여기서는 빌드하고 예제로만 사용한 뒤 넘어가는 것이 좋다고 판단됩니다.

 

이 문제 해결에 하루 정도 소모하게 되어 컨테이너를 정진하는 데 시간을 소모하게 되어 너무 아쉬웠습니다.

다른 분들은 프론트엔드 빌드에 시간 쓰지 않고 컨테이너에 집중할 수 있으면 좋을 것 같습니다.

다들 개발 커리어에 컨테이너의 가호가 함께하길 빌겠습니다.

 

좋은 하루 되세요!