FTP(File Transfer Protocol)는 파일을 네트워크를 통해 전송하기 위한 표준 프로토콜입니다. 최근 'Java로 구축하는 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 클라이언트를 활용한 파일 업로드 및 다운로드 구현 방법에 대해 더 자세히 알아보고 싶으시다면, 아래 글을 참고하세요.
'IT 개발 이야기 > Java' 카테고리의 다른 글
Java로 구축하는 FTP 클라이언트: 파일 업로드 및 다운로드 최적화 (1) | 2023.12.07 |
---|---|
Java 17로 업데이트: 금융권에서 고려해야 할 사항과 코드 수정 가이드 (0) | 2023.04.28 |
Java 설치 및 환경 변수 설정 가이드 (0) | 2023.04.14 |
[Java] Gson Library - API 사용법( GsonBuilder 옵션 정보 ) (0) | 2023.03.06 |
Gson 라이브러리 활용: Java와 JSON 간 데이터 변환 방법 (0) | 2023.03.03 |
[Java] 자바 문자열 공백 제거 및 Null 체크 - JDK 버전 별 사용 예제 (0) | 2023.03.02 |
[Java] RSA 공개키 암호화/복호화 예시( RSA 비대칭키 암호화 ) (0) | 2023.02.23 |
[Java] AES-256 암호화 시 java.security.InvalidKeyException: Illegal key size 에러 원인 및 해결 방법 (0) | 2023.02.14 |
댓글