Java에서 SFTP를 통해 서버에서 파일 가져오는 방법

Java 프로젝트에서 작업하고 있고 원격 서버에서 파일을 안전하게 다운로드해야 하는 경우, SFTP(SSH 파일 전송 프로토콜)를 사용하는 것이 가장 좋은 옵션 중 하나입니다. FTPS와 달리 SFTP는 민감한 데이터를 노출하지 않으면서 파일을 전송할 수 있는 안전한 방법을 제공합니다. 이 글에서는 Java의 JSch 라이브러리를 사용하여 서버에서 파일을 가져오는 방법을 안내합니다.

SFTP를 사용하는 이유

주요 장점:

  • 보안: 명령어와 데이터를 암호화하여 민감한 정보가 평문으로 전송되지 않도록 보장합니다.
  • 인증: 사용자/비밀번호 및 인증서 기반 인증을 모두 지원하여 유연성을 제공합니다.
  • SSH 기능: 모든 SSH2 기능을 활용하여 보안성과 신뢰성을 강화합니다.

JSch 시작하기

JSch란?

JSch는 SSH 서버에 연결하고 명령을 실행하거나 파일을 전송할 수 있도록 해주는 인기 있는 Java 라이브러리입니다. 많은 오픈 소스 프로젝트에서 널리 사용되어 개발자들에게 신뢰받는 선택이 되고 있습니다.

JSch 설정

먼저 JSch 라이브러리를 다운로드해야 합니다. JCraft의 공식 웹사이트에서 찾을 수 있습니다. 프로젝트에 라이브러리를 추가한 후 코딩을 진행할 수 있습니다.

SFTP를 통해 파일을 가져오는 단계별 가이드

다음은 Java에서 SFTP를 사용하여 원격 서버에서 파일을 가져오는 기본 구현입니다.

1단계: JSch 초기화 및 연결 구성

JSch jsch = new JSch();
String knownHostsFilename = "/home/username/.ssh/known_hosts";
jsch.setKnownHosts(knownHostsFilename);

Session session = jsch.getSession("remote-username", "remote-host");
  • JSch 초기화: JSch의 인스턴스를 생성합니다.
  • 신뢰할 수 있는 호스트: 키 확인을 위한 신뢰할 수 있는 호스트 파일을 설정합니다.

2단계: 인증

인증에는 대화형 또는 비대화형 두 가지 옵션이 있습니다.

대화형 버전

로그인 자격 증명을 관리하기 위해 UserInfo 인터페이스를 구현할 수 있습니다:

UserInfo ui = new MyUserInfo();
session.setUserInfo(ui);

비대화형 버전

필요한 키가 포함된 신뢰할 수 있는 호스트 파일이 있는 경우 더 간단한 접근 방식입니다:

session.setPassword("remote-password");

3단계: 연결 및 SFTP 채널 열기

session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
  • 세션에 연결하고 SFTP 채널을 설정합니다.

4단계: 파일 가져오기

이제 파일을 가져올 준비가 되었습니다:

sftpChannel.get("remote-file", "local-file");
// 또는 입력 스트림 처리
InputStream in = sftpChannel.get("remote-file");
// 필요에 따라 입력 스트림을 처리합니다

5단계: 정리

SFTP 채널을 종료하고 세션의 연결을 끊어 리소스를 해제하는 것을 잊지 마세요:

sftpChannel.exit();
session.disconnect();

결론

Java에서 SFTP를 사용하여 파일을 가져오는 것은 JSch 라이브러리를 사용할 때 간단합니다. 이 가이드에서 설명한 단계를 따르면 안전한 연결을 설정하고 쉽게 파일을 다운로드할 수 있습니다. 적절한 오류 처리도 중요하므로 코드를 다듬는 과정에서 오류 검사를 구현하는 것을 고려하세요.

이제 Java에서 SFTP를 사용하여 서버에서 파일을 안전하게 가져오는 방법에 대한 지식을 얻게 되었습니다—즐거운 코딩 되세요!