728x90

개발자로서 많이 마주치는 상황 중 하나는 자바 특정폴더 파일을 읽어와서 다운로드 기능을 많이 마주칩니다.

저 또한 이러한 요청사항을 받아서 하다가 정리하면 좋을 것 같아서 해당 기능을 설명하려고 이 글을 쓰려고 합니다.

 

파일 경로에 있는 폴더에 있는 전체 파일을 갖고 와서 단순하게 파일 이름을 출력하는 알고리즘입니다.

 

 

 

******************************************************************************************************************************

String fileName = "";

 

/*파일 경로에 있는 파일 가져오기*/

File rw = new File(filePath);

 

/*파일 경로에 있는 파일 리스트 fileList[] 에 넣기*/

File []fileList = rw.listfiles();

 

/*fileList에 있는거 for 문 돌려서 출력*/

for(File file : fileList) {

      if(file.isFile()) {

         fileName = file.getName();

         System.out.println("fileName : " + fileName);

      }

}

******************************************************************************************************************************

 

이러한 구조로 파일 목록을 가져와서 API로 특정폴더에 쌓여있는 파일을 가져오거나 하는 작업들을 합니다.

반응형
728x90

자바(JAVA)란 무엇인가?

자바는 선마이크로시스템즈라는 회사에서 최초 발표한 객체지향 프로그래밍 언어입니다.

티오베 프로그래밍 순위에 따르면 아직도 자바는 2위에 랭크하며 건재함을 가지고 있는 언어입니다.

자바 순위

자바 공식사이트에서는 아래 사진과 같이 자바 기술과 필요한 이유에 대해서 정리합니다.

JAVA 기술

자바의 특징은 무엇인가?

1. 객체지향언어

자바는 객체지향 언어로 하나하나의 재료들을 가지고 객체를 만들고 그 객체들을 모으고 연결하여 객체지향 프로그래밍(OOP) 개념으로 프로그램을 완성할 수 있게 합니다.

객체지향의 특징으로는 캡슐화, 상속 성 다형성을 지원합니다.

 

 

2. 이식성

어떠한 환경에서도 이식성이 뛰어나 프로그램 실행이 가능합니다.

예를 들어 자바 프로그램을 Window OS에서 실행하던 프로그램을 리눅스에서 실행해도 정상적으로 작동합니다.

즉 자바 실행환경(JRE)만 설치가 되어 있으면 어떠한 운영체제에서도 실행 가능합니다.

 

3. 메모리 자동관리(Garbage Collector)

다른 언어는 메모리를 사용하게 되면 해제를 시켜주는 명령어를 실행시켜주어야 메모리에 과부하가 걸리지 않는다.

하지만 자바는 메모리에 직접 접근할 수 없으므로 해제 명령어를 사용할 수 없습니다.

그렇다면 자바는 어떻게 메모리를 관리할 것 인지에 대해 의문이 생기실겁니다.

그렇게 나타난 것이 Garbage Collector 줄여서 GC라고 부릅니다. GC를 실행하여 메모리 사용을 마친 것들을 찾아 자바에서 메모리를 해제를 시켜줍니다.

그러므로 따로 메모리에 대해서 신경 쓰지 않고 관리를 안 해도 되어서 다른 언어보다 편리하게 사용하실 수 있습니다.

 

4. 함수적 스타일 코딩 지원

JAVA 8 함수적 프로그래밍이 가능한 람다식을 지원합니다.

 

람다식 장점

  • 코드를 간결하게 작성
  • 개발자의 의도가 명확해져 가독성이 향상
  • 함수를 따로 구현 없이 처리 가능

5. 멀티스레드 빠르게 구현

하나의 프로그램이 동시에 여러 작업을 처리해야 하는 경우, 병렬 처리가 가능한 멀티스레드를 구현해야 합니다.

자바는 멀티쓰레드 구현에 필요한 API를 제공해주어 멀티쓰레드를 빠르게 구현이 가능합니다.

 

6. 동적 로딩 지원

 

프로그램을 실행할 때 필요할 때마다 동적으로 메모리를 생성하고 필요 없는 메모리를 자동으로 해제시킵니다.

그러므로 큰 프로그램도 작은 메모리에서 실행이 가능합니다.

 

 

자바란 무엇이며 자바의 특징은 무엇인지에 대해서 정리를 해보았습니다.

코딩을 하면서 중요한 것은 제일 기초가 튼튼해야 한다고 생각합니다.

자바를 시작하시는 분들 또는 아직 자바를 정확히 모르셨던 분들은 자바에 대해서 정확하게 알고 가시길 바랍니다.

반응형
728x90

최근에는 비대면 문화가 만연해지면서 파일을 전송할 일이 많아서 우리의 개발자들은 파일 전송 코딩을 많이 하게 됩니다.

파일 전송은 편리한 여러 라이브러리가 많이 사용됩니다.

그중 하나인 REST API로 보낼 수 있는 OKHTTPClient를 소개해 드리고자 합니다.

 

OKHttp 라이브러리는 REST API, HTTP 통신을 간편하게 구현할 수 있는 JAVA 라이브러리입니다.

"Square"라는 회사에서 만든 것으로 간편하게 파라미터만 세팅해주면 파일 전송할 수 있는 괜찮은 라이브러리입니다.

 

파일 전송(OK파일 전송 (OKHttpClient REST API) 예제

자 다음은 OKHttp 라이브러리로 만든 파일 전송의 간단한 예제입니다.

 

api접속하기 위한 변수들

위에 사진에 대한 설명입니다.

 

FILENAME : 파일 이름

APIURL     : 접속할 API URL

FILEPATH  : 내가 가져올 파일 경로

APIKEY     : API URL에 접속하기 위한 API key(고객에게 받은 key)

 

파일 가져오기

csvfile 변수에 위에 지정한 filePath와 fileName으로 내가 보낼 파일을 가져옵니다.

 

OkHttpClient 객체 생성

그리고 파일을 보내기 위해서는 꼭 필요한 OKHTTPClient의 파일 전송 객체를 만듭니다.

 

아래 사진들은 Request.Builder를 이용하여

전송방식 put 이용하여 만든 Request 객체 예시입니다.

 

Rest API put 예시

위에 예시를 설명드리면,

addHeader를 메서드로 header 정보를 포함해야 됩니다.

그러므로 우리가 위에 지정한 apiKey를 넣어줍니다. 그 이외에 다른 Header정보가 필요하다면 넣어주시면 됩니다.

url 메서드는 당연히 접속할 URL apiURl을 넣어줍니다.

 

RestUrl 중 put 전송방식을 통해 파일을 보냅니다.

RequestBody 객체 create 메서드를 통해 csvFile을 넣어줍니다.

첫 번째 매개변수에는 MediaType Class에 parse메서드에서 파일 형식을 보내고, 두 번째 매개변수에서는 내가 보낼 파일을 넣어줍니다. 저는 csvfile을 보내야 하기 때문에 csvfile을 넣어주고 build메서드를 통해 Request 객체를 생성했습니다.

 

이후, 위에서 생성된 OKHttpClient 객체를 통해 execute 메서드를 사용하면 전송을 실행하게 됩니다.

정말 단순하게 파라미터만 넘겨도 파일이 전송이 되는 OKHttp 라이브러리는 직접 사용해보니 편하고 좋더라고요.

혹시 파일을 전송할 일이 있으신 분들은 사용하시면 좋을 것 같습니다~

 

수고하세요~!

반응형
728x90

자바로 FTP 파일 전송(File Upload)

FTP tool(파일질라 등)로 우리들은 많은 파일들을 업로드를 해보았을 것 입니다.

하지만 저는 FTP를 통해 업로드를 많이 했지만 실제로 자바로 구현해본적은 많지 않았기에 공부를 위해 한 번 해보기로 결심했습니다.

 

저는 NAS장비가 있어 연결했고, 다른분들은 다른 것으로 연결하셔도 됩니다.

 

Commons Net API

Apache 에서 제공하는 API로 다양한 프로토콜에 대한 지원을 할 수 있는 구조를 갖고 있습니다.

 

FTP 업로드 코드에서 핵심이 되는 클래스는 org.apache.commons.net.ftp.FTPClient 입니다.

FTP 프로토콜 처리를 서버 연결, 로그인, 파일 목록, 송수신 등의 기능을 제공합니다.

 

아래부터는 파일 업로드 예제로 코딩을 시작하도록 하겠습니다.

 

 

코딩 시작

1. POM.XML 추가

2. FTP import

 

3. FTPclient를 생성

 

* ftp Client common-net api로 생성

 

4. 호스트 연결 & 응답코드 체크

 

  * ftp.connect로 연결 후 응답코드 체크

5. 서버 응답코드 정상인지 확인

 

  * FTPReply.isPositiveCompletion을 통해 응답코드로 정상인지 확인

  * 정상이 아니면 disConnect

 

 

 6. showServerReply 함수 생성

server응답 확인 하는 함수

7. 로그인 후 폴더 생성 및 작업디렉터리 변경

 

  * 폴더 생성을 위해서 date로 현재 날짜와 시간을 날짜를 받음.

  * ftp.login(유저아이디, 비번) 으로 로그인

  * showServerReply 함수로 서버 응답 로그 확인

  * ftp.changeWorkingDirectory로 작업디렉터리로 변경

7. 파일 저장

 

  * Active Mode -> PassvieMode로 변경

             FTP의 active Mode, Passive Mode
  
                  Active Mode : Server가 client의 해당 포트 접속해 데이터를 보내줌.
                  Passive Mode : Server에서 클라이언트에 port 전달 , 그 Port로 server는 보내줌.

                                      방화벽, 네트워크 구조 신경쓸 필요 없음. 

    이러한 이유로 방화벽 및 네트워크 구조에 신경 안쓰기 위해 Passive Mode로 변경

    

  * FTP.setFileType FTP.BINARY_FILE_TYPE으로 변경

  * storeFile 함수로 파일 저장

  * 업로드 성공 로그 남기기

 

전체코드

결론

apache 에서 제공하는 commons-net FTPClient 클래스를 통해 FTP를 구현해봤습니다.

commons-net API는 FTP 이외에도 SMTP, Telnet 등 다양한 프로토콜을 처리를 할 수 있다고 합니다.

이 API를 사용해서 다양한 기능 등을 빠르게 개발할 수 있을 것 입니다.

반응형

+ Recent posts