λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

파일 이동 μ‹œ http(s) vs (s)ftp

μ‹œνλ¦¬ν‹°μ§€ν˜Έ 2024. 8. 15.

였늘 일 λ•Œλ¬Έμ— 타 κ°œλ°œμžλ“€μ˜ 이야기λ₯Ό λ“€μœΌλ©΄μ„œ μƒκ²Όλ˜ 의문이 μžˆμ—ˆλ‹€.

 

κ²°λ‘ λΆ€ν„° λ§ν•˜μžλ©΄, μ΄κ²ƒκ³ΌλŠ” λ‹€λ₯Έ λ‚΄μš©μ˜ μ£Όμ œμ˜€μ§€λ§Œ 얼핏 생각이 났닀.

 

μ‹€μ œ κ°œλ°œμžλ“€μ˜ μ΄μ•ΌκΈ°λŠ” 

 

νŒŒμΌμ„ μ—…λ‘œλ“œ ν›„, νŒŒμ‹±μ„ ν•˜κΈ° μœ„ν•΄μ„œ λ°± μ„œλ²„μ— μš”μ²­μ„ 보내고 응닡을 λ°›λŠ”λ‹€ ~ 이런 μ–˜κΈ° μ˜€λ‹€.

 

λ‚˜λŠ” μ—¬κΈ°μ„œ 파일 μ—…λ‘œλ“œ ν•˜λŠ” 뢀뢄이 μ–΄λ–»κ²Œ ν•˜κ³  μžˆλŠ”μ§€ κΆκΈˆν–ˆλ‹€.

 

<!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λ₯Ό λ°”λΌλ³΄λŠ” μ•ˆλͺ©μ€ μ—„μ²­ λ³€ν™”ν•˜κ³  μžˆλ‹€.

 

ν•œ λ²ˆμ— λ‚΄ 것은 되기 νž˜λ“€ 것이닀. κΎΈμ€€νžˆ λ‚΄ κ²ƒμœΌλ‘œ 될 수 μžˆλ„λ‘ 곡뢀λ₯Ό μ΄μ–΄λ‚˜κ°€μž.

λŒ“κΈ€