Kubernetes

[Docker]비디오 스트리밍 마이크로서비스

운덩하는 개발자 2023. 6. 6.
반응형

비디오 스트리밍 코드:

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"가 표시될 수 있다.
반응형

댓글