본문 바로가기
프로그래밍/자바스크립트

프로그래밍 「 자바스크립트 편」서버에 파일을 업로드하는 다양한 방법

by grapedoukan 2023. 6. 25.
728x90

서버에 파일을 업로드하는 방법에는 여러 가지가 있으며 각각 고유한 장점과 단점이 있습니다. 이 기사는 월드 와이드 웹의 가장 기본적인 기능에 사용되는 프로토콜에 대한 간결한 설명입니다

출처 : https://i.ytimg.com/

FTP(파일 전송 프로토콜)

FTP는 클라이언트에서 컴퓨터 네트워크의 서버로 파일을 전송하는 표준 네트워크 프로토콜입니다. 사용이 간편하지만 전송된 데이터에 대한 암호화를 제공하지 않습니다.

const Jsftp = require('jsftp');

const ftp = new Jsftp({
  host: "ftp.example.com",
  port: 21, // defaults to 21
  user: "username", // defaults to "anonymous"
  pass: "password" // defaults to "@anonymous"
});

ftp.put('myfile.txt', '/path/to/myfile.txt', function(hadError) {
  if (!hadError)
    console.log("File transferred successfully!");
});
  • 장점 : FTP는 클라이언트와 서버 간의 파일 전송에 사용되는 표준 네트워크 프로토콜입니다. 대용량 파일과 파일 디렉토리를 지원합니다. 이 프로토콜은 또한 중단된 다운로드를 재개할 수 있습니다.
  • 단점 : FTP는 데이터를 암호화하지 않습니다. 모든 것이 일반 텍스트로 전송되므로 보안 위험이 발생할 수 있습니다. 또한 다른 방법에 비해 속도가 느릴 수 있으며 액세스하려면 클라이언트 소프트웨어가 필요합니다.

SFTP (SSH 파일 전송 프로토콜)

SFTP는 FTP의 보안 버전입니다. SSH를 사용하여 전송되는 데이터를 암호화하여 추가 보안 계층을 추가합니다. 민감한 데이터를 전송하는 데 적합합니다.

const Client = require('ssh2-sftp-client');
const sftp = new Client();

sftp.connect({
  host: 'sftp.example.com',
  port: '22',
  username: 'username',
  password: 'password'
})
.then(() => {
  return sftp.put('myfile.txt', '/remote/path/myfile.txt');
})
.then(() => {
  return sftp.end();
})
.catch(err => {
  console.error(err.message);
});
  • 장점 : SFTP는 FTP와 유사하지만 데이터를 암호화하여 안전한 파일 전송을 제공합니다. 또한 대용량 파일 전송을 지원하고 파일 재개를 허용합니다.
  • 단점: SFTP를 사용하려면 클라이언트가 액세스하고 사용해야 합니다. SSH 키 및 관련된 보안 계층에 익숙하지 않은 경우 설정이 복잡할 수도 있습니다.

HTTP/HTTPS (영문)

HTTP(Hypertext Transfer Protocol) 및 보안 버전 HTTPS는 웹을 통해 데이터를 전송하는 데 사용되는 프로토콜입니다. 일반적으로 API 통신에 사용되지만 파일을 보내는 데에도 사용할 수 있습니다.

const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');

const form = new FormData();
form.append('myfile', fs.createReadStream('myfile.txt'));

axios.post('http://example.com/upload', form, {
  headers: form.getHeaders()
})
.then((response) => {
  console.log(response.data);
})
.catch((error) => {
  console.error(error);
});
  • 장점 : HTTP/S를 사용하면 브라우저 인터페이스를 통해 파일을 업로드할 수 있으므로 매우 쉽게 액세스할 수 있고 사용하기 쉽습니다. HTTPS는 또한 파일 전송을 보호할 수 있는 암호화를 제공합니다.
  • 단점: HTTP/S는 대용량 파일을 전송하도록 설계되지 않았으며 전송하려고 할 때 시간 초과 또는 기타 오류가 발생할 수 있습니다. 또한 기본적으로 파일 재개를 지원하지 않습니다.

SCP (보안 복사 프로토콜)

SCP는 컴퓨터 간에 파일 및 전체 디렉토리 구조를 안전하게 전송하는 방법입니다. SSH와 동일한 보안 및 인증 프로토콜을 사용합니다.

const client = require('scp2');

client.scp('myfile.txt', {
  host: 'server.com',
  username: 'username',
  password: 'password',
  path: '/path/to/directory'
}, function(err) {
  if (err) console.log(err);
  else console.log('File transferred.');
});
  • 장점 : SCP를 사용하면 네트워크를 통해 파일을 안전하게 전송할 수 있습니다. 데이터 전송에 SSH를 사용하며 SSH와 동일한 인증 및 보안을 제공합니다.
  • 단점 : SCP에는 파일 이력서 및 디렉토리 목록과 같은 일부 기능이 없습니다. 초보자도 사용하기가 복잡할 수 있습니다.

재동기화

Rsync는 로컬 또는 네트워크를 통해 파일을 복사하고 동기화하는 데 사용할 수 있는 빠르고 다재다능한 파일 복사 도구입니다. 백업 또는 미러링 데이터를 만드는 데 특히 유용합니다. NodeJ에서 직접 지원하지는 않지만 child_process 사용하여 rsync 명령을 실행할 수 있습니다.

const { exec } = require('child_process');

exec('rsync -avz myfile.txt username@server.com:/path/to/directory', (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.error(`stderr: ${stderr}`);
});
  • 장점 : Rsync는 원본 파일과 대상의 기존 파일 간의 차이만 전송하여 컴퓨터 간에 파일을 전송하고 동기화하는 매우 효율적인 방법입니다. 서버에 파일을 업로드하는 데 사용할 수 있으며 특히 백업에 유용합니다.
  • 단점 : Rsync는 특히 명령줄에 익숙하지 않은 사용자의 경우 올바르게 설정하고 사용하기가 복잡할 수 있습니다. 또한 원본 컴퓨터와 대상 컴퓨터 모두에 rsync를 설치해야 합니다.

클라우드 스토리지 서비스(Google Drive, AWS S3 등)

이러한 서비스는 서버에 데이터를 저장하고 검색할 수 있도록 다양한 회사에서 제공하는 서비스입니다. 파일 업로드를 위한 인터페이스와 API를 제공하는 경우가 많으며 버전 관리, 공유 및 액세스 제어와 같은 추가 기능을 제공할 수 있습니다. AWS S3를 사용하는 예를 들어 보겠습니다

const AWS = require('aws-sdk');
const fs = require('fs');
const s3 = new AWS.S3();

const fileStream = fs.createReadStream('myfile.txt');

const params = {
  Bucket: 'mybucket',
  Key: 'mykey',
  Body: fileStream
};

s3.upload(params, function(err, data) {
  console.log(err, data);
});
  • 장점 : 이러한 서비스는 종종 파일 업로드를 위한 사용자 친화적인 인터페이스를 제공합니다. 또한 파일 버전 관리, 공유 및 액세스 제어와 같은 기능을 제공할 수 있습니다. 이러한 서비스는 매우 큰 파일을 처리할 수 있습니다.
  • 단점: 이러한 서비스에는 특히 더 많은 양의 데이터에 대한 저장 및 전송과 관련된 비용이 있는 경우가 많습니다. 데이터가 타사 서버에 저장되므로 개인 정보 보호 문제도 있을 수 있습니다.

파일을 업로드하는 재미를 느끼되 안전하고 보호 기능을😜 사용하는 것을 잊지 마십시오.

 
728x90