IT개념

[IT개념] FTP(File Transfer Protocol)

JDonly 2024. 7. 30. 08:45

FTP(File Transfer Protocol)는 네트워크를 통해 파일을 전송하는 데 사용되는 표준 프로토콜입니다.

FTP는 클라이언트-서버 모델을 기반으로 작동하며, 파일을 서버와 클라이언트 간에 전송하거나 서버에서 서버로 직접 전송할 수 있습니다.

개념

  • 프로토콜: 통신 규칙과 절차를 정의하는 표준
  • 클라이언트-서버 모델: 클라이언트가 요청을 보내고 서버가 응답을 제공하는 구조
  • FTP 서버: 파일을 저장하고 클라이언트의 요청에 따라 파일을 제공하는 시스템
  • FTP 클라이언트: FTP 서버에 접속하여 파일을 업로드하거나 다운로드하는 프로그램

특징

  1. 전송 방식:
    • ASCII 모드: 텍스트 파일 전송에 적합
    • Binary 모드: 바이너리 파일(예: 이미지, 실행 파일) 전송에 적합
  2. 포트: 기본적으로 21번 포트를 사용하여 제어 연결을 설정하며, 데이터 전송을 위한 포트는 동적으로 할당됩니다.
  3. 인증: 사용자 이름과 비밀번호를 통해 인증. 익명 FTP를 지원하여 인증 없이 접근할 수 있는 경우도 있음.
  4. 연결 방식:
    • Active Mode: 클라이언트가 데이터 포트를 열고 서버가 해당 포트에 접속
    • Passive Mode: 서버가 데이터 포트를 열고 클라이언트가 해당 포트에 접속

예시

  1. 파일 다운로드: 웹사이트에서 FTP 서버를 통해 소프트웨어를 다운로드.
  2. 파일 업로드: 개발자가 서버에 소스 코드를 업로드하거나 웹사이트의 파일을 업데이트.

방법

  1. FTP 클라이언트 사용:
    • GUI 기반의 FTP 클라이언트(예: FileZilla, WinSCP)
    • 명령줄 기반의 FTP 클라이언트
  2. 프로그래밍을 통한 FTP 접근:
    • Java, C# 등의 프로그래밍 언어로 FTP 서버와의 통신 구현

소스코드 예제

Java에서 FTP 사용 예제:

import org.apache.commons.net.ftp.FTPClient;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class FtpExample {

    public static void main(String[] args) {
        FTPClient ftpClient = new FTPClient();
        
        try {
            ftpClient.connect("ftp.example.com");
            ftpClient.login("username", "password");
            ftpClient.enterLocalPassiveMode();
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

            // 파일 다운로드
            String remoteFile = "/path/to/remote/file.txt";
            String localFile = "D:/Downloads/file.txt";
            try (InputStream inputStream = ftpClient.retrieveFileStream(remoteFile);
                 FileOutputStream outputStream = new FileOutputStream(localFile)) {
                byte[] buffer = new byte[4096];
                int bytesRead;
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, bytesRead);
                }
                ftpClient.completePendingCommand();
            }
            
            // 로그아웃 및 연결 종료
            ftpClient.logout();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (ftpClient.isConnected()) {
                    ftpClient.disconnect();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

 
C#에서 FTP 사용 예제:

using System;
using System.IO;
using System.Net;

class Program
{
    static void Main()
    {
        string ftpServer = "ftp://ftp.example.com";
        string username = "username";
        string password = "password";
        string remoteFile = "/path/to/remote/file.txt";
        string localFile = @"D:\Downloads\file.txt";

        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(ftpServer + remoteFile));
        request.Method = WebRequestMethods.Ftp.DownloadFile;
        request.Credentials = new NetworkCredential(username, password);
        request.UseBinary = true;

        using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
        using (Stream responseStream = response.GetResponseStream())
        using (FileStream fileStream = new FileStream(localFile, FileMode.Create))
        {
            responseStream.CopyTo(fileStream);
        }

        Console.WriteLine("Download Complete");
    }
}

 
Java는 Apache Commons Net 라이브러리를 사용하고, C#은 System.Net 네임스페이스의 클래스를 사용하여 FTP 작업을 수행합니다.