프로젝트 진행중 백앤드 서버 구축 단계에서 오류가 발생하였다.
서버를 크게 폴더 3개를 만들어 node 서버, python fastapi 서버 , json 서버를 각각 8000,3000, 5000 서버로 띄우기로 설계하였다
|-- /node-backend # Node.js 백엔드 서버의 루트 디렉토리
| |-- /node_modules # Node.js 모듈
| |-- /public # 정적 파일(HTML, CSS, 클라이언트 JavaScript)
| | |-- index.html # 메인 프론트엔드 페이지
| | |-- css
| | | |-- mystyle.css # 스타일 시트
| | |-- js
| | | |-- script.js # 프론트엔드 스크립트
| |-- /routes # API 엔드포인트 정의
| | |-- main.js # 메인 API 스크립트
| |-- app.js # Node.js 애플리케이션 엔트리 포인트
|-- /fastapi-server # FastAPI 서버의 루트 디렉토리
| |-- /app # FastAPI 앱 디렉토리
| | |-- init.py
| | |-- main.py # FastAPI 애플리케이션 엔트리 포인트
| |-- requirements.txt # 필요한 Python 패키지 목록
|-- /json-server # JSON 서버의 루트 디렉토리
| |-- db.json
다음과 같이 파일을 만들어 세개의 서버를 동시에 실행시키는 shell script를 작성하여 ./start.sh 명령어를 이용해 실행시킬 것이다.
하지만 ..!!
start.sh파일
#!/bin/bash
# JSON Server 실행 (포트 5000)
cd json-server && json-server --watch db.json --host 192.168.1.74 --port 5000 &
# Node.js 애플리케이션 실행 (포트 8000)
cd ../node-app && node index.js &
# FastAPI 애플리케이션 실행 (포트 3000)
cd ../python && uvicorn app:app --host 192.168.1.74 --port 3000 --reload &
다음과 같이 작성후 shell을 실행 시켰지만,

다음과 같이 상대 폴더로 작성해논 경로를 찾지 못해 폴더가 안열려서 실행이 안되는 문제가 발생하였다.
해결책은 크게 2개가 있다.
sleep 을 걸어주기
start.sh파일
#!/bin/bash
# JSON Server 실행 (포트 5000)
cd json-server && json-server --watch db.json --host 192.168.1.74 --port 5000 &
sleep 2s
# Node.js 애플리케이션 실행 (포트 8000)
cd ../node-app && node index.js &
sleep 2s
# FastAPI 애플리케이션 실행 (포트 3000)
cd ../python && uvicorn app:app --host 192.168.1.74 --port 3000 --reload &
sleep 2s
절대경로로 바꿔 작성하기
start.sh파일
#!/bin/bash
# 스크립트가 있는 디렉토리의 절대 경로를 저장
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
# JSON Server 실행 (포트 5000)
cd "$SCRIPT_DIR/json-server" && json-server --watch db.json --host 192.168.1.74 --port 5000 &
# Node.js 애플리케이션 실행 (포트 8000)
cd "$SCRIPT_DIR/node-app" && node index.js &
# FastAPI 애플리케이션 실행 (포트 3000)
cd "$SCRIPT_DIR/python" && uvicorn app:app --host 192.168.1.74 --port 3000 --reload &
다음과 같은 방법으로 코드를 고쳐 서버 3개가 shell 파일 하나로 정상적으로 작동 되는것을 확인했다.

stop.sh 파일
#!/bin/bash
# JSON Server 프로세스 종료
pkill -f "json-server"
# Node.js 애플리케이션 프로세스 종료
pkill -f "node index.js"
# FastAPI 애플리케이션 프로세스 종료
pkill -f "uvicorn app:app"
다음 코드는 실행시킨 3개의 서버를 한번에 죽이는 코드로 작성하였다.
./stop.sh 명령어를 실행시키면 3개의 서버가 죽는것을 확인할 수 잇다.

profile