반응형
비디오 스트리밍 코드:
const express = require("express");
const fs = require("fs"); //내장된 fs 라이브러리를 사용해 Node.js에서 파일 시스템 API를 쓸 수 있다.
const path = require("path");
const app = express();
const port = 3000;
//
// Registers a HTTP GET route for video streaming.
// 비디오 스트리밍을 위한 REST API인 HTTP 경로를 정의한다.
app.get("/video", (req, res) => {
// 브라우저에 전송 할 스트리밍 비디오의 경로
const videoPath = path.join("./videos", "SampleVideo_1280x720_1mb.mp4");
fs.stat(videoPath, (err, stats) => { // 비디오 파일 크기를 가져온다. 웹 브라우저에 전송할 HTTP 헤더에 인코드 한다.
// 에러 처리
if (err) {
console.error("An error occurred ");
res.sendStatus(500);
return;
}
//
// 콘텐츠 길이와 마임타입을 포함하는 읍답 헤더를 브라우저에 전송
//
res.writeHead(200, {
"Content-Length": stats.size,
"Content-Type": "video/mp4",
});
// 브라우저에 비디오를 스트리밍 한다.
fs.createReadStream(videoPath).pipe(res);
});
});
//
// Starts the HTTP server.
//
app.listen(port, () => {
console.log(`Microservice listening on port ${port}, point your browser at http://localhost:3000/video`);
});
도커파일 :
#새로운 이미지를 만들기 위한 기본 이미지를 설정. 즉 기존의 이미지를 바탕으로 새로운 이미지를 생성하도록 한다
FROM node:12.18.1-alpine
# 이미지 디렉터리를 설정. 다른 결로는 이 위치의 상대 경로이다
WORKDIR /usr/src/app
#Node.js의 package.json 파일을 이미지에 목사
COPY package*.json ./
#운영 환경 종속성만 npm을 사용하여 설치
#Run명령어 : 변경사항 반영, 종속성 설치, 여러 설정 작업을 수행하는 이미지를 생성하는 과정에서 이미지 안의 소프트웨어를 실행할 수 있다.
RUN npm install --only=production
#마이크로서비스의 소스 코드를 복사
COPY ./src ./src
#샘플 비디오를 복사
COPY ./videos ./videos
#'npm start'형태로 마이크로 서비스를 시작한다
CMD npm start
의존성 설치 :
프로젝트에 필요한 종속성이 있는 경우 해당 명령어로 필요한 모듈 설치
npm install
스트리밍 비디오 마이크로서비스 실행 :
node.js 실행
node index.js
다음과 같은 에러가 나온다.
예상되는 문제
- 파일 경로 : const videoPath = path.join("./videos", "SampleVideo_1280x720_1mb.mp4");에서 사용하는 파일 경로가 대소문자가 틀린게 있는지, 오타가 있는가 찾아본 결과 오타는 없다.
- 파일 권한 : 파일을 못 찾거나 읽을 수 있는 권한이 없는가?
- 파일 크기 : 'fs.stat()' 메서드로 비디오 파일의 크기를 가져온다. 파일이 매우 큰 경우, 서버에서 파일을 전송하는 동안 시간이 오래 걸려 "Internal Server Error"가 발생할 수 있다.
- 기타 오류: 코드에서 추가적인 오류가 발생 가능성. 예를 들어, console.error("An error occurred "); 줄에서 오류 메시지를 출력하고 있지만, 이후에 오류 처리 로직이 없어 서버에서 오류가 발생하면 "Internal Server Error"가 표시될 수 있다.
반응형
'Kubernetes' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 구성 & Pod 과정 (0) | 2023.12.07 |
---|---|
[Kubernetes] 쿠버네티스 클러스터 생성 (0) | 2023.11.26 |
[Docker] SpringBoot jar - 도커 이미지 생성 (2) | 2023.06.05 |
[Container] 컨테이너 오케스트레이션 (Container Orchestration) (0) | 2023.06.04 |
[컨테이너 인프라 환경 구축을 위한] 쿠버네티스/도커 (0) | 2023.04.05 |
댓글