FTP (Apache Commons Net ) 삽질 기록

FTP (Apache Commons Net ) 삽질 기록

이번에도 예전 프로젝트를 배포하면서 발생한 문제에 대한 기록이다.

정민상 / CloudProject · GitLab
GitLab Community Edition

https://cloud.bmserver.org/CloudProject/index

해당 프로젝트는 클라우드 스토리지를 구현한 프로젝트로

비슷한 느낌으로는 네이버 클라우드, Dropbox, GoogleDrive 와 비슷한 서비스를 생각해 볼 수 있다.

SpringBoot 기반으로 구성을했고 기존 집에서 사용하던 Nas 를 연동하여 사용자가 업로드 하는 파일을 Nas 에 저장하여 관리하는 방식으로 구성하였다.

이때 SpringBoot 에서 Nas 에 접속하기 위해 사용한 라이브러리가 Apache Commons Net 이다.

문제는 적당히 프로젝트 마무리 하고 기억속에 묻어두다 배포관련 Jenkins 공부/실습 으로 해당 프로젝트를 배포할 때 발생하였다.

분명 로컬에서는(Window) 정상작동하는데 이상하게 배포 환경(리눅스 계열)에서 작동하면 Apache Commons Net 을 통한 FTP 관련 파일 조회 가 정상적으로 이루어지지 않는 문제가 발생하였다.


스프링 부트에서 FTP에 연결 할 때

public void connect() {
		ftpClient = new FTPClient();

		ftpClient.configure(config);

		ftpClient.setControlEncoding("utf-8");

		ftpClient.setDefaultPort(port);

		try {
			serverCk(host, port);
			ftpClient.login(user, password);
			ftpClient.enterLocalPassiveMode();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

ftpClient.enterLocalPassiveMode 를 추가해 줌으로 써 해당 문제는 해결되었다.

FTP 에 연결할때 두가지 방식이 있다는것을 알았다.

특징 액티브 모드 (Active Mode) 패시브 모드 (Passive Mode)
데이터 연결 주체 서버 클라이언트
포트 서버: 20번 포트 사용, 클라이언트: 임의의 포트 사용 서버: 임의의 포트 사용, 클라이언트: 임의의 포트 사용
방화벽/NAT 문제 클라이언트가 외부에서 들어오는 연결을 수용해야 하므로 방화벽/NAT 문제 발생 가능 클라이언트가 외부 연결을 시도하므로 방화벽/NAT 문제 회피 가능
안정성 클라이언트가 네트워크 보호장치 없이 외부 연결을 허용해야 하는 경우 문제가 발생할 수 있음 클라이언트가 네트워크 보호장치 뒤에 있을 때 안정적으로 동작