Skip to content
This page has been auto-translated and may contain errors.View in English

AI 엔지니어링 입문 과정을 로컬에서 실행하기

이 페이지를 사용하여 추출한 Gift Genie 프로젝트를 컴퓨터에서 실행합니다. 현재 과정에는 두 가지 형태의 프로젝트가 있습니다. 브라우저 전용 Vite 앱과 백엔드 마이그레이션 이후의 Express와 Vite 앱입니다. 보유한 형태를 파악한 후 아래의 설정을 따릅니다.

먼저 필요한 것

지원되는 Node.js LTS 버전을 설치합니다. Node 24를 권장합니다. Node 22.12 이상은 과정의 후반부 프로젝트에서 사용하는 Vite 버전도 지원합니다.

Node와 npm이 사용 가능한지 확인합니다:

bash
$ node --version
v24.18.0
$ npm --version
11.18.0

npm은 Node에 포함되어 있습니다. 어느 명령이든 "command not found"라고 표시되면 계속하기 전에 Node 설치를 완료합니다.

Juno먼저 필요한 것 npm을 포함한 Node.js의 LTS 버전을 설치하면 한 번의 다운로드로 두 도구를 모두 얻을 수 있습니다. 두 버전 명령이 모두 숫자를 출력하면 컴퓨터는 준비된 것입니다.
Juno먼저 필요한 것 Node 24 또는 Node 22.12 이상을 설치합니다. 이것은 과정 후반의 Vite 7 프로젝트에서 기대하는 런타임을 모두 다루므로 한 번 설정하고 더 이상 생각하지 않아도 됩니다.
Juno먼저 필요한 것 후반 프로젝트는 Vite 7.3을 사용하며, Node 20.19 또는 Node 22.12 이상이 필요합니다. 최소 요구 사항을 충족하는 가장 오래된 릴리스보다는 현재 지원되는 LTS를 설치합니다. 이런 방식으로 선택한 버전에서 시작된 런타임 버그를 너무 많이 추적했습니다.

추출한 프로젝트 파악하기

package.json이 포함된 추출한 폴더로 이동합니다:

bash
$ cd path-to-your-downloaded-project

이 페이지의 모든 명령은 해당 폴더에서 실행됩니다.

그런 다음 보유한 프로젝트의 형태를 확인합니다. 브라우저 전용 버전은 index.htmlvite.config.js를 가지고 있으며, start 스크립트는 서버 파일을 실행하지 않습니다. Express와 Vite 버전은 server.jsvite.config.js를 모두 가지고 있으며, start 스크립트는 이들을 함께 실행합니다.

Juno추출한 프로젝트 파악하기 섹션을 선택하기 전에 한 가지를 확인합니다. start 스크립트가 server.js 파일을 실행하면 백엔드 섹션을 따릅니다. 실행하지 않으면 브라우저 전용 버전입니다. 이 확인을 건너뛰었기 때문에 한 번은 잘못된 설명에 오후를 낭비했습니다!
Juno추출한 프로젝트 파악하기package.json을 열고 start 스크립트를 읽습니다. 실제로 무엇이 실행되는지 알려줍니다. Vite 전용 강의와 후반의 Express와 Vite 앱은 아래에서 다른 설명을 사용하므로 시작하기 전에 어느 형태인지 결정합니다. 그렇지 않으면 잘못된 섹션을 따르게 되고 다시 시작해야 합니다.
Juno추출한 프로젝트 파악하기 추출한 스크립트나 lockfile이 여기의 예제와 다르면 파일을 따릅니다. 어떤 프로세스가 시작되는지, 어떤 install 명령이 적용되는지를 결정하며, lockfile을 내 기억보다 더 신뢰하는 법을 배웠습니다.

환경 변수 추가하기

Scrimba는 계정 설정에서 세 개의 환경 변수를 제공합니다. 컴퓨터는 해당 설정에 액세스할 수 없으므로 package.json 옆에 .env 파일을 만듭니다:

dotenv
AI_URL=https://your-provider.example/v1
AI_KEY=your-key-here
AI_MODEL=your-model-id

과정에서 사용한 값을 복사합니다. URL과 모델은 키와 동일한 제공자에 속해야 합니다.

Git을 사용하기 전에 package.json 옆에 .gitignore 파일을 만들고 다음을 추가합니다:

txt
.env
node_modules/

Git 핸드북은 왜 이 두 줄이 모든 프로젝트에 속해야 하는지 파일 무시하기 및 좋은 습관에서 설명합니다.

API 키를 절대 커밋하지 마세요

.env 파일에는 유효한 자격증명이 포함되어 있습니다. 업로드하거나 소스 코드에 붙여넣거나 Git에 커밋하지 마세요. 키가 노출된 경우 제공자에서 폐기하고 새 키를 만듭니다.

.env를 변경한 후 프로젝트를 다시 시작합니다. 올바른 실행 명령은 ZIP이 온 과정 부분에 따라 다릅니다.

Juno환경 변수 추가하기.envpackage.json 바로 옆에 만들고 세 개의 Scrimba 값을 복사합니다. 이것은 Scrimba가 계정 설정에 보관했던 것과 같은 값이며, 이제 자신의 컴퓨터에 저장된 것입니다. 해당 파일을 Git 외부에 보관합니다. 키 노출은 제가 초기에 저질렀던 실수이므로 여러분은 하지 않아도 됩니다.
Juno환경 변수 추가하기 과정은 AI_URL, AI_KEY, AI_MODEL을 한 세트로 읽으므로 한 클라이언트가 다른 OpenAI 호환 제공자를 가리킬 수 있습니다. 이 중 하나를 변경하고 다시 시작합니다. 그렇지 않으면 실행 중인 프로세스는 이전 값을 유지합니다.
Juno환경 변수 추가하기 브라우저 전용 프로젝트는 Vite config에서 .env를 로드하고 빌드 시간에 값을 클라이언트 번들에 쓰입니다. 현재 백엔드 다운로드는 Node가 같은 파일을 로드하기 전에 하나의 package 스크립트 변경이 필요하며, 아래에서 다룹니다. 아무것도 자동으로 로드하지 않으며, 이 사실을 모든 새로운 머신에서 다시 발견합니다.

브라우저 전용 Gift Genie 실행하기

백엔드 마이그레이션 이전의 Gift Genie 강의는 index.htmlvite.config.js를 가지고 있지만 start 스크립트에서 활성화된 server.js는 없습니다. 프로젝트를 설치하고 시작합니다:

bash
$ npm install
$ npm start

Vite는 다음과 같은 로컬 주소를 출력합니다:

text
  VITE ready

  Local: http://localhost:5173/

터미널에 출력된 정확한 Local URL을 엽니다. 포트 5173이 사용 중이면 Vite는 일반적으로 다른 포트를 선택하고 해당 주소를 출력합니다. Vite를 Ctrl+C로 중지합니다.

이 버전은 키를 브라우저에 노출합니다

이 강의는 의도적으로 프론트엔드 JavaScript에서 AI 제공자를 호출합니다. Vite는 AI_KEY를 브라우저 번들에 복사하므로 페이지를 여는 사람은 누구나 브라우저의 개발자 도구에서 키를 읽을 수 있습니다. 로컬 학습을 위해 임시의 제한된 키를 사용합니다. 이 버전을 배포하거나 네트워크에서 공유하지 마세요. 과정 후반의 백엔드 마이그레이션이 빌드해야 할 보안 아키텍처입니다.

Juno브라우저 전용 Gift Genie 실행하기npm install을 실행한 후 npm start를 실행하고 기억하는 것이 아니라 Vite가 출력한 정확한 Local URL을 엽니다. Ctrl+C로 중지합니다. 이 습관을 배우는 데 생각보다 오래 걸렸습니다.
Juno브라우저 전용 Gift Genie 실행하기 폴더에 사용되지 않는 서버 파일이 있더라도 이 프로젝트는 Vite 전용입니다. start 스크립트는 실제로 실행되는 것을 결정하므로 파일 목록을 신뢰하기 전에 이를 읽습니다.
Juno브라우저 전용 Gift Genie 실행하기 다운로드한 Vite config는 define을 사용하여 빌드 시간에 process.env.AI_KEY, AI_URL, AI_MODEL을 치환하므로 키는 페이지를 로드하는 모든 브라우저에 전송됩니다. 제한된 일회용 키를 사용하고 이미 공개되었으므로 그렇게 취급합니다.

백엔드와 함께 Gift Genie 실행하기

백엔드 마이그레이션 이후 강의는 server.jsvite.config.js를 모두 가지고 있습니다. start 스크립트는 Express와 Vite를 함께 실행합니다. 현재 다운로드는 자동으로 .env를 Express 프로세스에 로드하지 않으므로 시작하기 전에 package.json에서 이 한 가지를 변경합니다.

server 스크립트를 찾습니다:

json
"server": "node --watch server.js"

다음과 같이 변경합니다:

json
"server": "node --env-file=.env --watch server.js"

배포 과정 프로젝트도 서버를 위해 같은 --env-file 변경이 필요합니다.

백엔드 포트를 .env에 추가합니다:

dotenv
AI_URL=https://your-provider.example/v1
AI_KEY=your-key-here
AI_MODEL=your-model-id
PORT=3001

그런 다음 두 프로세스를 설치하고 시작합니다:

bash
$ npm install
$ npm start

포트 3001에 대한 Express 메시지와 Vite Local URL(일반적으로 포트 5173)이 표시됩니다. Vite URL을 엽니다. 포트 3001을 애플리케이션 페이지로 열지 마세요. 브라우저는 /api 요청을 Vite로 보내고 Vite는 이를 Express로 프록시합니다. API 키는 서버 프로세스에 유지됩니다.

Ctrl+C로 두 프로세스를 모두 중지합니다.

백엔드를 포트 3001에 유지하세요

다운로드한 Express 서버는 PORT를 읽지만 Vite 프록시는 http://localhost:3001을 직접 가리킵니다. 다른 프로세스에 해당 포트가 필요하지 않으면 PORT=3001을 유지합니다. 변경하면 vite.config.js의 프록시 대상도 같은 포트로 변경하고 프로젝트를 다시 시작합니다.

Juno백엔드와 함께 Gift Genie 실행하기PORT=3001을 유지하고 npm installnpm start를 실행한 후 포트 3001이 아니라 Vite URL을 엽니다. 한 번의 Ctrl+C로 앱의 두 부분을 모두 중지합니다. 처음 봤을 때는 마법 같았습니다.
Juno백엔드와 함께 Gift Genie 실행하기 한 명령이 포트 3001에서 Express를 시작하고 인쇄된 프론트엔드 포트에서 Vite를 시작합니다. Vite URL을 엽니다. 이것은 상대 /api 요청을 Express로 전달하며, 이것이 키가 서버 측에 유지되는 방식입니다.
Juno백엔드와 함께 Gift Genie 실행하기start 스크립트는 concurrently 패키지를 사용하여 Node와 Vite를 한 명령으로 실행합니다. 추가된 --env-file=.env 플래그는 Express 프로세스에만 자격증명을 로드하는 반면, Vite config는 고정된 개발 프록시 대상을 소유합니다. 이것은 손으로 두 터미널을 시작하는 것보다 깔끔하며, 저는 여전히 오래된 습관에서 그렇게 하고 있습니다.

문제 해결

Missing AI_KEY, 401 응답 또는 인증 오류: 세 변수 이름의 철자를 모두 확인하고, 키가 활성화되어 있는지 확인하고, 프로젝트를 다시 시작합니다. 다른 제공자의 키, URL, 모델은 한 세트로 작동하지 않습니다.

모델을 찾을 수 없거나 제공자가 요청을 거부합니다: 모델 ID를 정확하게 복사합니다. Responses API 도구, 모델이 요청 중에 호출할 수 있는 기본 제공 헬퍼를 포함한 일부 과정 기능은 모든 OpenAI 호환 제공자에서 지원되지 않으며, 이들 제공자가 제공하는 모든 모델에서도 지원되지 않습니다.

npm start가 패키지 또는 명령이 누락되었다고 합니다: 터미널이 package.json이 포함된 폴더에 있는지 확인한 후 npm install을 다시 실행합니다. 다운로드에 다른 패키지 관리자용 lockfile이 포함되어 있으면 두 번째 lockfile을 생성하는 대신 그 lockfile을 따릅니다.

페이지가 열리지만 /api 요청이 실패합니다: 이것은 백엔드 버전에 적용됩니다. Express와 Vite가 모두 여전히 같은 터미널에서 실행 중인지 확인합니다. Express가 포트 3001에 있고 vite.config.js의 프록시 대상도 3001을 말하는지 확인합니다.

EADDRINUSE가 포트 3001을 언급합니다: 다른 프로세스가 백엔드 포트를 사용 중입니다. 해당 프로세스를 중지하거나 .envPORT와 Vite 프록시 대상을 모두 사용 가능한 같은 포트로 변경합니다.

Vite가 5174 또는 다른 프론트엔드 포트를 사용합니다: 5173이 사용 중일 때 정상입니다. Vite가 인쇄한 Local URL을 엽니다. Express 포트를 변경할 필요가 없습니다.

Juno문제 해결 터미널이 package.json이 있는 폴더에 있는지, .env가 세 개의 AI 값을 모두 보유하는지, 그리고 편집 후 다시 시작했는지 확인합니다. 백엔드 버전의 경우 두 프로세스를 모두 실행 중으로 유지합니다. 초기에 본 거의 모든 오류는 이 세 가지 중 하나에서 비롯되었습니다.
Juno문제 해결 환경 오류를 프로세스 오류와 분리합니다. 401은 제공자 구성을 가리킵니다. 실패한 /api 요청은 일반적으로 Express가 중지되었거나 프록시 포트가 일치하지 않음을 의미합니다. 먼저 범주를 파악하면 특정 오류가 명확해집니다.
Juno문제 해결 명령을 변경하기 전에 다운로드한 package.json을 읽습니다. start 스크립트는 Vite가 혼자 실행되는지 Express 옆에 실행되는지를 말하며, lockfile은 이 다운로드가 npm을 기대함을 나타냅니다. 이를 읽는 데 5초가 걸리며 한 시간을 소비할 디버깅 세션을 방지합니다.