PDJJ14 WIKI : Linux 에서 주기적 FTP 전송 프로그램 구현 내용 및 설치 방법

1. 작성 배경
  • KARI 와 지리원 간은 연구망으로 네트워크 연결이 되어 있음
  • 지리원의 연구망 설치 컴퓨터는 리눅스 OS 를 사용한다고 함
    • 수집/활용시스템은 윈도우 OS 를 사용함
  • 지리원에서 KARI 로 데이터를 주기적으로 전송해줘야 하는데 프로토콜은 FTP 를 사용해야 함
  • 따라서 리눅스 OS 환경에서 주기적으로 특정 폴더에 존재하는 데이터를 FTP 를 통해 KARI 로 전송해야 하는 프로그램 개발이 필요했음




2. 프로그램 구현 내용


19. 언어 선정

  • Windows 와 Linux 에서 코드의 변경 없이 크로스 컴파일이 가능한 언어 선정 필요
  • 후보 언어들 중, 개발 편의성이 높고 플랫폼 설치가 용이한 Google 의 GO 선정

20. GO 설치 방법

21. 프로그램 설명

  • Json 설정 파일에 ftp 서버 접속 정보 및 수행 주기 설정

    • ftpConfig.json
      {
      	"serverAddr": "192.168.1.1",					// FTP Server 접속 주소
      	"port": 21,										// FTP Server 접속 포트
      	"id": "ftpTest",								// FTP Server 접속 계정 ID
      	"pw": "ftpTest",								// FTP Server 접속 계정 Password
      	"remote": "/home/temp",							// 파일을 전송할 폴더
      	"sourceDir": "./",								// (현재 사용하지 않음) 전송 대상 폴더
      	"fileFilter": "*.icp",							// 전송 대상 파일 필터
      	"renameDir": "transferred/",					// 전송 완료한 파일을 이동시킬 폴더 (폴더 경로는 반드시 존재해야 함)
      	"logFileNameWithoutExtension": "Log/log_",		// 전송 로그 경로 및 파일 접두어 (폴더 경로는 반드시 존재해야 함)
      	"intervalInSec": 60	// 전송 시도 주기 (sec)
      }
  • 프로그램은 정해진 주기마다 Source Dir 에 있는 전송 대상 파일들을 정해진 FTP Server 의 특정 폴더로 전송시킴
  • 전송을 성공한 파일은 설정된 전송 완료 폴더로 이동시킴
  • 전송 결과를 로그에 기록

    • 로그 예시
      2019-12-04 16:26:31.4749999 +0900 KST m=+0.110702701>>> Successfully Opened ./ftpConfig.json
      2019-12-04 16:26:31.4769952 +0900 KST m=+0.112698001>>> {pdjj14.synology.me 21 ftpTest ftpTest /home/temp ./ *.icp transferred\ Log\log_ 30}
      2019-12-04 16:27:01.9834079 +0900 KST m=+30.619110701>>> FTP Uploading is started.
      2019-12-04 16:27:03.3517478 +0900 KST m=+31.987450601>>> Succeeded to upload file: x - 복사본 - 복사본.icp <nil>
      2019-12-04 16:27:03.4444996 +0900 KST m=+32.080202401>>> Succeeded to move file: <source: x - 복사본 - 복사본.icp>, <target: transferred\x - 복사본 - 복사본.icp> <nil>
      2019-12-04 16:27:03.5013483 +0900 KST m=+32.137051101>>> Succeeded to upload file: x - 복사본.icp <nil>
      2019-12-04 16:27:03.5023453 +0900 KST m=+32.138048101>>> Succeeded to move file: <source: x - 복사본.icp>, <target: transferred\x - 복사본.icp> <nil>
      2019-12-04 16:27:03.5382517 +0900 KST m=+32.173954501>>> Succeeded to upload file: x.icp <nil>
      2019-12-04 16:27:03.5392468 +0900 KST m=+32.174949601>>> Succeeded to move file: <source: x.icp>, <target: transferred\x.icp> <nil>
      2019-12-04 16:27:03.5402451 +0900 KST m=+32.175947901>>> FTP Uploading is terminated.
  • 프로그램 코드

22. offline 에서 프로그램 구동 가능하도록 설정하는 법

  • 아래 파일을 복사하고 특정 공간에 압축해제
    • go_linux.tar
    • 파일이 존재하는 폴더에 압축해제
      • tar -xvf go_linux.tar
    • 특정 폴더에 압축해제
      • tar -C (경로) -xvf go_linux.tar
  • 압축해제한 폴더 경로를 포함하여 PATH 설정

    • export PATH=(압축해제 대상 폴더 경로)/go/bin:$PATH
      
      
      echo $PATH 	//경로 추가된 것 확인
  • 실행 코드 복사 (FTPTransferGolang 폴더 복사)
  • 빌드 및 실행

    • go build ./FtpTransfer.go
      
      
      ./FtpTransfer

23. 복사 관련 이슈

  • Linux 장비에 바로 접근이 가능하면 USB 를 이용하여 파일 복사 수행
  • Windows 장비에서 Linux 장비로 원격 연결을 해야 할 경우 WinSCP 를 이용하여 파일 복사



3. Test 결과


24. Windows 환경

  • Windows 10 환경에서 코드 개발
  • Linux FTP Server 를 대상으로 파일 전송 테스트 수행 및 성공

25. Linux 환경

25.5. 개인 Synology 서버

  • Windows 10 환경에서 개발된 코드를 그대로 복사해서 다시 컴파일
  • Linux FTP Server 를 대상으로 파일 전송 테스트 수행 및 성공

25.6. 회사 Linux 서버

  • 이태경 팀장에게 Linux 서버의 접속 계정 할당 받음
    • 192.168.30.74 / jjhan / eng2~
  • Windows 10 환경에서 개발된 코드를 그대로 복사해서 다시 컴파일
  • Linux FTP Server 를 대상으로 파일 전송 테스트 수행 및 성공


Attachments:

FtpTransferGolang.zip (application/zip)
FtpTransferGolang.tar (application/x-tar)
go_linux.tar (application/x-tar)
WinSCP-5.15.7-Setup.exe (application/octet-stream)