Notice
Recent Posts
Recent Comments
Link
05-05 08:13
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

<<개발일지>>

파일 이동 시 http(s) vs (s)ftp 본문

전송프로토콜

파일 이동 시 http(s) vs (s)ftp

개발하는지호 2024. 8. 15. 17:47

오늘 일 때문에 타 개발자들의 이야기를 들으면서 생겼던 의문이 있었다.

 

결론부터 말하자면, 이것과는 다른 내용의 주제였지만 얼핏 생각이 났다.

 

실제 개발자들의 이야기는 

 

파일을 업로드 후, 파싱을 하기 위해서 백 서버에 요청을 보내고 응답을 받는다 ~ 이런 얘기 였다.

 

나는 여기서 파일 업로드 하는 부분이 어떻게 하고 있는지 궁금했다.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>File Upload Example</title>
</head>
<body>
    <h1>Upload a File</h1>
    <input type="file" id="fileInput">
    <script>
        document.getElementById('fileInput').addEventListener('change', function(event) {
            const file = event.target.files[0];
            const reader = new FileReader();
            reader.onload = function(e) {
                console.log('File content:', e.target.result);
            };
            reader.readAsText(file);  // 텍스트 파일의 내용을 읽음
        });
    </script>
</body>
</html>

 

그 과정은 생각해보면 간단하다.

 

위의 코드 처럼 <input type='file' id='fileInput"/> 를 활용해서 업로드를 해주면 된다.

 

js는 이에 반응해서 작동하면 되는 것이고, 정말 간단한 문제이다.

 

 

만약 파일의 데이터를 가져와서 정제하고 입력칸에 표기 하고 싶다면

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Display Data Example</title>
</head>
<body>
    <h1 id="title">Welcome to My Page</h1>
    <p id="description">This is a description.</p>
    <div id="output"></div>

    <!-- 자바스크립트 파일 또는 코드 삽입 -->
    <script>
        // 자바스크립트 데이터를 정의합니다.
        const data = {
            title: "Hello, World!",
            description: "This is a dynamically updated description.",
            content: "Here is some dynamic content that will be displayed in the output div."
        };

        // 데이터를 HTML 요소에 표시합니다.
        document.getElementById('title').textContent = data.title;
        document.getElementById('description').textContent = data.description;
        document.getElementById('output').textContent = data.content;
    </script>
</body>
</html>

 

 

이러한 원리를 활용하면 되는 것이다.

 

이 과정에서 브라우저는 http(s) 로 post 요청을 보내서 서버로 파일을 전송하는 것이다.

 

결과적으로 개발자들이 말하는 내용은 이쪽에 관련된 내용이었지만 나는 다른 부분에 관심이 생겼다.

 

바로 http와 ftp의 차이는 뭔가 ??

 

우선은

1. HTTP/HTTPS

  • 사용 방식: 클라이언트는 브라우저나 다른 애플리케이션을 통해 서버에 파일을 업로드합니다. 이 과정에서 주로 HTTP POST 요청을 사용합니다.
  • 데이터 전송: HTTP는 기본적으로 비보안 프로토콜이며, HTTPS는 SSL/TLS를 통해 보안이 강화된 버전입니다.
  • 일반적인 사용 예: 웹 애플리케이션에서 파일을 업로드할 때 사용됩니다. 예를 들어, 웹사이트에서 사진을 업로드하거나 문서를 제출할 때 사용됩니다.

2. SFTP (SSH File Transfer Protocol)

  • 사용 방식: SFTP는 SSH(Secure Shell) 프로토콜을 기반으로 한 파일 전송 프로토콜로, 클라이언트와 서버 간의 파일 전송을 보안적으로 수행할 수 있습니다.
  • 데이터 전송: SSH를 통해 암호화된 채널을 사용하여 데이터를 전송하므로, 파일 전송 과정에서 보안이 보장됩니다.
  • 일반적인 사용 예: 서버 간의 파일 전송, 원격 서버에 파일 업로드/다운로드, 또는 시스템 관리자가 안전하게 파일을 전송할 때 주로 사용됩니다.

요약

  • HTTP/HTTPS는 주로 웹 애플리케이션에서 파일을 업로드 및 데이터 전송하는 데 사용되며, 일반적인 웹 트래픽에 많이 사용됩니다.
  • SFTP는 보안이 중요한 환경에서 서버 간 파일 전송이나 시스템 관리를 위해 사용됩니다.

따라서, 목적에 따라 HTTP/HTTPS 또는 SFTP를 선택하여 사용할 수 있습니다. 웹 애플리케이션에서 사용자들이 파일을 업로드하는 경우라면 주로 HTTP/HTTPS를 사용하고, 보안이 중요한 파일 전송의 경우 SFTP를 사용하는 것이 일반적입니다.

 

이는 챗 gpt를 활용해서 가져온 정보이다.

 

위의 글을 보았을 때 

http(s) 는 웹을 사용할 때 주로 전송하는 프로토콜이고, (s)ftp 같은 경우는 서버간 파일을 전송할 때 사용하는 프로토콜로 해석이 된다.

 

결국은

이 둘은 상황에 따라 맞는 걸로 사용하면 되는 것이다.

 

그러면 상황에서 각각 사용이 될까?

 

1. FTP: 지속적인 연결과 대용량 파일 전송에 적합

 

지속적인 연결: FTP는 제어 채널을 통해 연결 상태를 유지하며, 여러 파일을 연속적으로 전송하거나 파일을 관리할 때 유리합니다. 이 지속적인 연결 상태를 통해 파일 목록을 가져오거나, 디렉토리 탐색, 다중 파일 전송 등의 작업을 수행할 수 있습니다.

대용량 파일 전송: FTP는 대용량 파일이나 대량의 파일을 전송할 때 효율적입니다. 서버 간의 데이터 백업, 파일 서버와의 대량 파일 전송 작업 등에서 FTP가 자주 사용됩니다.

파일 서버 관리: 파일의 업로드, 다운로드, 삭제, 권한 설정 등 파일 서버의 관리 작업을 지속적인 세션 내에서 수행할 수 있습니다.

 

2. HTTP: 웹 기반 통신과 다양한 리소스 전송에 적합

 

비상태적 연결: HTTP는 각 요청이 독립적이며, 상태를 유지하지 않는 비상태적인 프로토콜입니다. 이는 웹 페이지 로드, API 호출, 소규모 파일 전송 등의 작업에 적합합니다. 한 번의 요청-응답이 완료되면 연결이 끊어지므로, 다중 사용자의 요청을 효율적으로 처리할 수 있습니다.

다양한 리소스 전송: HTTP는 단순한 파일 전송뿐 아니라, HTML, CSS, JavaScript, 이미지, 비디오 등 다양한 웹 리소스를 전송하는 데 최적화되어 있습니다. 웹 애플리케이션에서 파일을 업로드하거나 다운로드하는 것도 HTTP를 통해 쉽게 처리할 수 있습니다.

광범위한 사용 사례: HTTP는 웹 애플리케이션과 API 통신의 표준 프로토콜로, 대부분의 웹 기반 서비스에서 필수적입니다. 클라이언트-서버 모델에서 광범위하게 사용되며, RESTful API, 웹페이지 로딩, JSON/XML 데이터 전송 등 다양한 사용 사례에 적합합니다.

 

결론

 

FTP대용량 파일 전송, 파일 서버 관리, 지속적인 연결이 필요한 작업에 적합하며, 파일 전송 작업을 주로 다루는 환경에서 유리합니다.

HTTP웹 애플리케이션, 다양한 리소스 전송, 다수의 사용자 요청을 효율적으로 처리하는 작업에 적합하며, 특히 웹 기반 서비스에서 필수적입니다.

 

따라서, 대규모 파일 전송 작업이나 파일 서버 관리가 주된 목적이라면 FTP를 사용하는 것이 좋고, 웹 애플리케이션을 위한 다양한 리소스 전송다중 사용자 환경에서 효율적으로 동작하는 프로토콜이 필요하다면 HTTP를 사용하는 것이 더 적합합니다.

 

이렇게 정리할 수가 있다.

 

그렇다면 성능적인 부분은 단점이 있지 않을까?

 

여기서 각각 몇가지의 단점은 있지만 대표적으로 단점이 되는 부분만을 살펴 본다면,

 

(S)FTP의 단점

1. 지속적인 연결 유지로 인한 리소스 소비

  • CPU 및 메모리 사용량: FTP는 제어 채널과 데이터 채널을 통해 지속적인 연결을 유지합니다. 이는 서버와 클라이언트 간의 연결 상태를 유지하기 위해 일정한 양의 CPU와 메모리를 사용하게 만듭니다. 각 연결이 활성화된 상태로 유지되므로, 다수의 클라이언트가 동시에 연결되어 있을 경우 서버의 리소스 소비가 크게 증가할 수 있습니다.
  • 연결 관리: 서버는 각 클라이언트와의 연결 상태를 추적하고 관리해야 하므로, 다수의 연결이 활성화된 경우 관리 오버헤드가 발생합니다. 이는 특히 고용량의 데이터를 전송할 때 CPU에 부담을 줄 수 있습니다.

HTTP(S)의 단점

1. 비상태적 프로토콜

 

HTTP의 비상태성: HTTP는 비상태적(stateless) 프로토콜로, 각 요청이 독립적으로 처리됩니다. 이 비상태성은 웹 페이지를 빠르게 요청하고 응답받는 데는 유리하지만, 대규모 파일을 전송할 때는 연결을 유지하지 않기 때문에 비효율적일 수 있습니다.

연결 유지의 어려움: 대규모 파일 전송에는 지속적인 연결 유지가 필요할 수 있는데, HTTP는 기본적으로 요청-응답 후 연결을 끊습니다. 대규모 파일 전송 중 연결이 끊어지면, 재시작하거나 부분적으로 전송하는 것이 복잡할 수 있습니다.

 

 

결과적으로 상황에 따라 각 프로토콜을 적절하게 사용하면 되는 것이다.

 

 


정말 파면 팔 수록 배울 것이 많다 ㅎㅎ.

 

하지만, 이해의 깊이가 더 해질 수록 IT를 바라보는 안목은 엄청 변화하고 있다.

 

한 번에 내 것은 되기 힘들 것이다. 꾸준히 내 것으로 될 수 있도록 공부를 이어나가자.