본문 바로가기
IT 개발 이야기/Java

Java FTP 기본 사용법: 필수 FTP 명령어와 실무 적용 가이드

by 개발자 Aiden 2023. 12. 7.
반응형

FTP(File Transfer Protocol)는 파일을 네트워크를 통해 전송하기 위한 표준 프로토콜입니다. 최근 'Java로 구축하는 FTP 클라이언트: 파일 업로드 및 다운로드 최적화'라는 글을 통해 자바를 이용한 FTP 클라이언트 구현에 집중하며 파일 업로드 및 다운로드 기능에 중점을 두었고, 이번 글에서는 FTP 클라이언트에서 사용할 수 있는 추가적인 명령어와 그 활용법에 대해 자세히 알아보려 합니다.

일반적으로는 파일명과 절대경로를 직접 지정하여 업로드 및 다운로드를 수행하지만, 실무에서는 다양한 상황에서 유연하게 대처할 수 있는 추가적인 FTP 명령어가 필요합니다. 이 글에서는 그중에서도 자주 사용되는 주요 FTP 명령어들을 선별하여, 그 사용법과 코드 예시를 공유하고자 합니다. 이를 통해 개발자들은 FTP 클라이언트를 더 효율적으로 활용하고, 다양한 작업 시나리오에서 유연하게 대응할 수 있게 될 것입니다.

FTP 기본 사용법 및 필수 FTP 명령어


자주 사용되는 FTP 명령어와 그 활용법

FTP 클라이언트에서 활용되는 명령어들을 여러 카테고리로 나누어 각 명령어의 활용법을 알아봅니다.

○ 연결 및 인증 관리

1. connect (서버 연결) : FTP 서버에 연결을 시작합니다.

FTPClient ftpClient = new FTPClient();
ftpClient.connect("serverAddress"); // 서버 주소만으로 연결, 기본 포트 사용
// ftpClient.connect("serverAddress", customPort); // 사용자 지정 포트로 연결하는 경우

※ 기본 포트(21)를 사용할 경우 서버 주소만 지정하면 됩니다.

2. login (로그인) : 서버에 로그인을 시도합니다. 사용자 이름과 비밀번호가 필요합니다.

ftpClient.login("username", "password"); // 로그인 정보


3. disconnect (연결 종료) : FTP 세션을 종료하고 네트워크 자원을 해제합니다.

ftpClient.disconnect(); // 연결 종료

 


○ 경로 및 디렉토리 관리

1. cd (Change Directory) : 서버 내에서 현재 작업 디렉토리를 변경합니다.

ftpClient.changeWorkingDirectory("/new/directory"); // 새 디렉토리로 변경


2. pwd (Print Working Directory) : 서버의 현재 작업 디렉토리를 출력합니다.

String workingDir = ftpClient.printWorkingDirectory(); // 현재 디렉토리 확인


3. mkdir (Make Directory)
 : 새로운 디렉토리를 생성합니다.

ftpClient.makeDirectory("/new/directory"); // 새 디렉토리 생성


4. rmdir (Remove Directory)
 : 디렉토리를 삭제합니다.

ftpClient.removeDirectory("/old/directory"); // 디렉토리 삭제

 


○ 파일 관리

1. ls (List) : 현재 디렉토리의 파일 목록을 조회합니다.

Arrays.stream(ftpClient.listFiles()).forEach(file -> {
    System.out.println("File Type: " + (file.isDirectory() ? "디렉토리" : "파일"));
    System.out.println("File Name: " + file.getName());    
    System.out.println("File Size: " + file.getSize() + " bytes");
});


2. delete (파일 삭제) : 서버에서 파일을 삭제합니다.

ftpClient.deleteFile("/old/file.txt"); // 파일 삭제


3. rename (파일 이름 변경) : 서버 내의 파일 이름을 변경합니다.

ftpClient.rename("/old/file.txt", "/new/file.txt"); // 파일 이름 변경


4. retrieveFile (개별 파일 다운로드) : 서버에서 선택된 파일을 로컬로 다운로드합니다.

boolean success = ftpClient.retrieveFile("/remoteFilePath/file.txt", new FileOutputStream("/localFilePath/file.txt"));
if (success) {
    System.out.println("파일 다운로드 성공");
}

// 여러 파일 다운로드 코드 예시
Arrays.stream(ftpClient.listFiles()).forEach(file -> {
    String remoteFile = file.getName();
    try (FileOutputStream fos = new FileOutputStream(localFilePath + remoteFile)) {
        if (ftpClient.retrieveFile(remoteFile, fos)) {
            System.out.println(remoteFile + " 다운로드 성공");
        }
    } catch (IOException ex) {
        System.out.println(remoteFile + " 다운로드 실패: " + ex.getMessage());
    }
});


5. storeFile (개별 파일 업로드) : 로컬에서 선택된 파일을 서버로 업로드합니다.

boolean success = ftpClient.storeFile("/remoteFilePath/file.txt", new FileInputStream("/localFilePath/file.txt"));
if (success) {
    System.out.println("파일 업로드 성공");
}

// 여러 파일 업로드 코드 예시
Arrays.stream(localFilesList).forEach(localFile -> {
    String localFilePath = localFile.getAbsolutePath(); // 로컬 파일의 절대 경로
    try (FileInputStream fis = new FileInputStream(localFilePath)) {
        if (ftpClient.storeFile("/remoteFilePath/" + localFile.getName(), fis)) {
            System.out.println(localFile.getName() + " 업로드 성공");
        }
    } catch (IOException ex) {
        System.out.println(localFile.getName() + " 업로드 실패: " + ex.getMessage());
    }
});

 


전송 모드 설정

1. binary (바이너리 모드) : 모든 유형의 파일을 그대로 전송합니다. 데이터의 변경 없이 정확한 복사본을 보장합니다.

ftpClient.setFileType(FTP.BINARY_FILE_TYPE);


2. ascii (아스키 모드) : 텍스트 파일을 전송할 때 사용합니다. 텍스트 데이터의 줄 바꿈 문자를 대상 시스템에 맞게 조정합니다.

ftpClient.setFileType(FTP.ASCII_FILE_TYPE);


3. 인코딩 설정
 : 서버와 클라이언트 간의 문자 인코딩을 설정하여, 텍스트 데이터의 정확한 전송을 보장합니다.

ftpClient.setControlEncoding("UTF-8");

 


로그 및 디버깅

FTP 클라이언트에서 발생하는 모든 명령어와 응답을 로깅하는 것은 디버깅과 문제 해결에 매우 유용합니다.

1. addProtocolCommandListener :  FTP 클라이언트와 서버 간의 모든 통신 명령어와 응답을 로그로 기록합니다.

ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true));

※ 여기서 true는 로그인 과정에서의 민감한 정보를 로그에 표시하지 않도록 하는 역할을 합니다.

 


이 글에서는 FTP 클라이언트의 기본 명령어, 경로 및 파일 관리, 전송 모드 설정, 그리고 로그 및 디버깅 방법에 대해 살펴보았습니다. 이러한 명령어들은 FTP 클라이언트를 효과적으로 사용하는 데 필수적입니다. 추가로 실제 FTP 클라이언트를 활용한 파일 업로드 및 다운로드 구현 방법에 대해 더 자세히 알아보고 싶으시다면, 아래 글을 참고하세요.

 

Java로 구축하는 FTP 클라이언트: 파일 업로드 및 다운로드 최적화

FTP는 인터넷을 통한 파일 전송을 위한 필수적인 네트워크 프로토콜입니다. 이 프로토콜은 사용자가 서버에 파일을 업로드하거나 다운로드할 수 있게 해주는 기능을 제공합니다. FTP 클라이언트

aday7.tistory.com

반응형

댓글


loading