FTP(File Transfer Protocol)는 네트워크를 통해 파일을 전송하는 데 사용되는 표준 프로토콜입니다.
FTP는 클라이언트-서버 모델을 기반으로 작동하며, 파일을 서버와 클라이언트 간에 전송하거나 서버에서 서버로 직접 전송할 수 있습니다.
개념
- 프로토콜: 통신 규칙과 절차를 정의하는 표준
- 클라이언트-서버 모델: 클라이언트가 요청을 보내고 서버가 응답을 제공하는 구조
- FTP 서버: 파일을 저장하고 클라이언트의 요청에 따라 파일을 제공하는 시스템
- FTP 클라이언트: FTP 서버에 접속하여 파일을 업로드하거나 다운로드하는 프로그램
특징
- 전송 방식:
- ASCII 모드: 텍스트 파일 전송에 적합
- Binary 모드: 바이너리 파일(예: 이미지, 실행 파일) 전송에 적합
- 포트: 기본적으로 21번 포트를 사용하여 제어 연결을 설정하며, 데이터 전송을 위한 포트는 동적으로 할당됩니다.
- 인증: 사용자 이름과 비밀번호를 통해 인증. 익명 FTP를 지원하여 인증 없이 접근할 수 있는 경우도 있음.
- 연결 방식:
- Active Mode: 클라이언트가 데이터 포트를 열고 서버가 해당 포트에 접속
- Passive Mode: 서버가 데이터 포트를 열고 클라이언트가 해당 포트에 접속
예시
- 파일 다운로드: 웹사이트에서 FTP 서버를 통해 소프트웨어를 다운로드.
- 파일 업로드: 개발자가 서버에 소스 코드를 업로드하거나 웹사이트의 파일을 업데이트.
방법
- FTP 클라이언트 사용:
- GUI 기반의 FTP 클라이언트(예: FileZilla, WinSCP)
- 명령줄 기반의 FTP 클라이언트
- 프로그래밍을 통한 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 작업을 수행합니다.
'IT개념' 카테고리의 다른 글
[IT개념] SDK(Software Development Kit), JDK(Java Development Kit) (0) | 2024.07.31 |
---|---|
[IT개념] CI/CD (0) | 2024.07.30 |
[IT개념] 플루터(Flutter) (0) | 2024.07.23 |
[IT개념] App router(앱라우터) (0) | 2024.07.22 |
[IT개념] SFDC(Salesforce.com) (0) | 2024.07.21 |