노출되는 이미지가 불편하시겠지만 양해를 구합니다. 노출, 클릭등에 관한 자료로 활용 중입니다.

AWS S3 파일 업로드 연동하기 (with Java)


AWS S3와 연동하기 위해서는 아래 참조의 경우를 살펴보면, 장단점등이 있으며, 이를 보완할 필요가 있다. 

물론, 연동을 위해서는 Java용 AWS SDK가 필요하다.( aws.amazon.com/ko/sdk-for-java ) 



1. SDK를 포함후에 확인된 Dependency


- jackson-annotations-x.x.x.jar, jackson-core-x.x.x.jar, jackson-databind-x.x.x.jar

- joda-time-x.x.x.jar

- http-core-x.x.x.jar

- http-client-x.x.x.jar


실행시에 ClasssNotFoundException이 발생한다면, 해당 Dependency들을 추가 해야 한다.



2. 연동 클래스 만들기


1) 생성자부분


AmazonS3 amazonS3;


AWSCredentials creds = new BasicAWSCredentials(accessKey, secretKey);

amazonS3 = AmazonS3ClientBuild.standard()

.withCredential(creds)

.withRegions(Regions.XXX)

.withForceGlobalBucketAccessEnable(true)

.build();


* withRegions()이 없으면
: SdkClientException이 발생한다.(
Unable to find a region via the region provider chain. Must provide an explicit region in the builder or setup environment to supply a region.)


http://docs.aws.amazon.com/ko_kr/general/latest/gr/rande.html

1) us-east-2 : 미국 동부 오하이오

2) us-east-1 : 미국 동부 버지니아 북부

3) us-west-1 : 미국 서부 캘리포니아 북부

4) us-west-2 : 미국 서부 오레곤

5) ap-south-1 : 아시아 태평양 뭄바이

6) ap-northeast-2 : 아시아 태평양 서울

7) ap-northeast-1 : 아시아 태평양 도쿄

8) ap-southeast-1 : 아시아 태평양 싱가프로

9) ap-southeast-2 : 아시아 태평양 시드니

... eu-central-1, eu-west-1, eu-west-2, sa-east-1, ca-central-1


2) File Upload부분


PutObjectRequest putObjectRequest = new PutObjectRequest(buckeName, fileName, file);


//file permission

putObjectRequest.setCannedAcl(CannedAccessControlList.PublicRead);


// fill upload

PutObjectResult ret = amazonS3.putObject(pubObjectRequest);





3) 소스 예제



참조 1, [Java] Java를 이용해 AWS S3 파일 업로드 하기

http://dwfox.tistory.com/57


- AmazonS3Client는 deprecated된 상태로 변경이 필요하다.



참조2, Amazon S3 Tutorial – The ULTIMATE Guide

https://www.javacodegeeks.com/2017/03/amazon-s3-tutorial.html


- AmazonS3ClientBuilder를 잘 설명하고 있으나, 다소 복잡한 면이 있다.


참조3, Working with AWS Credentials

http://docs.aws.amazon.com/ko_kr/sdk-for-java/v1/developer-guide/credentials.html

- AWSCredentials인터페이스는 BasicAWSCredentials를 AWS access key와 secret key를 사용해서 생성한다. 이떄 환경설정등에서 가져 오는 방법과 명시적으로 지정하는 방법을 알 수 있다.


참조4, Amazon S3 Examples ( using AWS SDK for Java )

http://docs.aws.amazon.com/ko_kr/sdk-for-java/v1/developer-guide/examples-s3.html 


참조5, Amazon S3,  버킷 생성, 

https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/UG/BucketOperations.html 


Amazon S3에 저장한 모든 객체는 버킷에 존재합니다. 디렉토리로 파일 시스템 내 파일을 그룹화하듯 버킷으로 관련 객체를 그룹화할 수 있습니다. 버킷은 액세스 권한 및 버전 관리 상태 등의 속성을 지니며, 사용자는 버킷이 속할 리전을 원하는 대로 설정할 수 있습니다.


참조6, Amazon S3,  폴더 작업

https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/UG/FolderOperations.html

Amazon S3에서 버킷과 객체는 기본 리소스이며 객체가 버킷에 저장됩니다. Amazon S3에서는 일반적인 파일 시스템에서와 같이 계층이 없는 단순한 구조입니다. 하지만 간결한 구성을 위해 Amazon S3 콘솔에서는 객체를 그룹화하는 수단으로 폴더 개념을 지원합니다.


블로그 이미지

StartGuide

I want to share the basic to programming of each category and how to solve the error. This basic instruction can be extended further. And I have been worked in southeast Asia more than 3 years. And I want to have the chance to work another country.

,
노출되는 이미지가 불편하시겠지만 양해를 구합니다. 노출, 클릭등에 관한 자료로 활용 중입니다.


에러 메시지 :


java.lang.IllegalArgumentException: Document base



does not exist or is not a readable directory
    at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142)
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4324)





일반적인 조치 방법 :


- eclipse(이클립스)에서 등록된 프로젝트를 reload를 하면, 대체로 해결이 된다.





여전히 에러가 나는 경우에 추가로 확인할 부분들은... :


- eclipse(이클립스)에서 빌드 에러가 있는지를 살펴 봐라.




- 혹시 eclipse(이클립스) 프로젝트의 속성에서 Web Deployment Assembly가 보이는지 확인을 해 본다.





- 위의 항목이 보이지 않는다면, eclipse(이클립스)에서 빌드를 하지 못하니, 

.project 파일에 아래 항목을 추가하라.


<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>

'Web Tech. > Spring Framework' 카테고리의 다른 글

Java IO Package  (0) 2016.11.15
java.util Collection Framework  (0) 2016.11.14
AES 암호화(encryption)  (0) 2016.10.27
메모리 누수, Memory Leak  (0) 2016.09.27
Spring Boot 소개 (3) - JPA , MySQL  (1) 2016.09.22
블로그 이미지

StartGuide

I want to share the basic to programming of each category and how to solve the error. This basic instruction can be extended further. And I have been worked in southeast Asia more than 3 years. And I want to have the chance to work another country.

,
노출되는 이미지가 불편하시겠지만 양해를 구합니다. 노출, 클릭등에 관한 자료로 활용 중입니다.


Java Spring (MVC) 프로젝트 만들기


기본 준비

- Eclipse (이클립스) Neon ( or Mars, Luna )

- STS(Spring Tool Suite) IDE 3.8  ( from  Eclipse Market )

- Maven Integration for Eclipse

- JDK 1.8 ( or 1.7 ) , Apache Tomcat 8.0 ( or 7.0 )




[2016] Spring MVC Project

예제1) http://learnfromexamples.com/how-to-create-spring-mvc-application-using-spring-tool-suite-within-a-minute/


프로젝트 생성을 위한 메뉴 선택 경로

: New -> Other -> Spring ->

Spring (Legacy) Project ->Spring MVC Project

: 생성후에 Maven -> Update Project 실행 ( 프로젝트 우측 메뉴.. )


결과물 특징

:기본 설정이 MVC를 위한 Controller와 View(jsp)가 생성이 되며, 참고해서 변경을 하면 된다. ( Maven은 기본으로 설정되어 있다. )


pom.xml설정 변경 관련 참고 :http://o7planning.org/en/10129/spring-mvc-tutorial-for-beginners


[2014] Simple Spring Web Maven

예제2)  http://iclass.tistory.com/entry/Simple-Spring-Web-Maven-Example


프로젝트 생성을 위한 메뉴 선택 경로

: New -> Other -> Spring ->

Spring (Legacy) Project ->Simple Projects ( Simple Spring Web Maven )

: 생성후에 Maven -> Update Project 실행 ( 프로젝트 우측 메뉴.. )


결과물 특징

:기본 설정이 MVC를 위한 Controller는 없고 View(jsp)가 생성이 되며, 추가하는 부분이 위의 선택보다 많아서 번거로울수 있다.


[2006] Maven Project , maven-archetype-webapp

예제3) http://websystique.com/springmvc/spring-4-mvc-helloworld-tutorial-full-example/ 

http://diaryofgreen.tistory.com/21

http://jaesu.tistory.com/entry/Maven-web-project-%EB%A7%8C%EB%93%A4%EA%B8%B0


- Maven Integration for Eclipse 플러그인을 미리 설치


프로젝트 생성을 위한 메뉴 선택 경로

: New -> Maven Project -> New Maven Project(Next)

Select an Archetype(원형) : maven-archetype-webapp / 1.0 



Add  Group Id (like a Package name) , Artifact Id (like a Class name )


[https://maven.apache.org/archetypes/maven-archetype-webapp/]


결과물 특징

:기본 생성된 파일에서 제일 먼저 pom.xml를 수정한다. springframework-version, servlet-version, jsp-version등을 수정한다.


복합 예제 , Spring 4 MVC + AngularJS CRUD Example using $http service
http://websystique.com/springmvc/spring-mvc-4-angularjs-example/



* Dependency  : pom.xml



* Spring 4 MVC HelloWorld Tutorial – Annotation/JavaConfig Example

http://websystique.com/springmvc/spring-4-mvc-helloworld-tutorial-annotation-javaconfig-full-example/



[2006] Spring Web MVC Project , XML Free

예제4) http://www.codejava.net/frameworks/spring/bootstrapping-a-spring-web-mvc-application-programmatically

블로그 이미지

StartGuide

I want to share the basic to programming of each category and how to solve the error. This basic instruction can be extended further. And I have been worked in southeast Asia more than 3 years. And I want to have the chance to work another country.

,
노출되는 이미지가 불편하시겠지만 양해를 구합니다. 노출, 클릭등에 관한 자료로 활용 중입니다.



Java 웹크롤링(Web Crawling) 자료 소스 예제



자바를 이용한 웹 크롤러 만들기

해당 예제는 프로젝트 생성에 관한 부분의 내용을 참고하기 좋음


사용하는 라이브러리는

 - commons-logging-1.2.jar

 - httpclient-4.5.2.jar

 - httpcore-4.4.4.jar


http://derveljunit.tistory.com/253



jsoup - 자바를 위한 Beautiful Soup (HTML parser)

해당 예제는 원하는 Element를 추출하는데 참고하기 좋음


자바의 jsoup HTML 파서를 사용


HTML문서를 읽고, DOM객체로 변환후에

selector api를 이용해서 특정 Element에 접근


http://edoli.tistory.com/95



jsoup : Parse a document from a String




HTML 문서을 String으로 읽고, Tag를 select하여 text를 얻어내는 예제


https://jsoup.org/cookbook/input/parse-document-from-string



: jsoup 다운로드



웹 크롤링 적용 사례


 [NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템

http://www.slideshare.net/mrfoundation21/ss-35511996

블로그 이미지

StartGuide

I want to share the basic to programming of each category and how to solve the error. This basic instruction can be extended further. And I have been worked in southeast Asia more than 3 years. And I want to have the chance to work another country.

,
노출되는 이미지가 불편하시겠지만 양해를 구합니다. 노출, 클릭등에 관한 자료로 활용 중입니다.



Web Service Client 만들기 ( 이클립스 )

부제 : SOAP Client over HTTPS




SOAP : Simple Object Access Protocol
HTTPS : secure Hyper Text Transport Protocol 

WSDL : Web Service Definition Language

 


 

임으로 Dynamic Web Project ( 또는 Java Project )프로젝트를 생성 후에 추가하는 방법

 

 


방법 1. 프로젝트에 Web Service Client를 WSDL URL을 통해서 추가


 :  New -> Web Service Client -> Service definition


 

 

위와 같은 방식은 https://blog.outsider.ne.kr/187 에서도 살펴 볼 수 있지만,

WSDL을 URL 형태로 접근해서 받아 오는 경우지만, 에러가 발생하는 경우가 있다. 

이때 발생하는 에러메시지:  (X) The service definition selected is invalid.



에러가 해결 되지를 않을때는 아래 2번 방법을 시도

 


 

방법 2. 프로젝트에 WSDL File 생성하고 내용을 추가


일단 WSDL파일과 필요한 XSD파일도 같이 생성하고 수정한다. 

 


WSDL 파일을 생성후에 브라우저(해당URL)에서 보이는 내용을 복사해서 해당 파일의 내용을 교체 한다.

  

그 다음으로는 WSDL파일을 통해서, Web Services -> Generate Client를 수행한다.

 

 

 

URL 주소 형식 예제 : 

https://api.google.com/GoogleSearch.wsdl ,

http://www.webservicex.com/globalweather.asmx?WSDL

 

 


방법 3. wsimport를 사용해서 wsdl url을 호출하여 생성하는 방법 (아래쪽 참조)






Web Service Client 실행 하기

 

 

1. 테스트 실행


생성시에 테스트단계까지 선택을 하면  TestClient.jsp가 생성이 된다.

아래와 같은 테스트 화면을 볼 수 있다.

 

 

 

Configure the SSLContext with a TrustManager that accepts any cert (see below)
Configure the SSLContext with an appropriate trust store that includes your cert
Add the cert for that site to the default java trust store.



2. 아래와 같은 에러 발생시

 

이때도 HTTPS 연결시에 아래와 같은 에러가 발생하는 경우가 있다.


- javax.net.ssl.SSLHandshakeException

- sun.security.validator.ValidatorException

- PKIX path building failed

-sun.security.provider.certpath.SunCertPathBuilderException

- unable to find valid certification path to requested target Message



원인.  Java client trying to access a server with a self-signed certificate.


http://stackoverflow.com/questions/9210514/unable-to-find-valid-certification-path-to-requested-target-error-even-after-c




해결.


1) Configure the SSLContext with a TrustManager that accepts any cert (see below)


 해당 답변내의 예제 처럼 접근을 모두 허용하는 방법



2) Configure the SSLContext with an appropriate trust store that includes your cert


실행시에 적절한 trust store를 포함하는 방법이 있고,



3) Add the cert for that site to the default java trust store.


keytool을 통해서 자바의 기본 truststore에 추가 하는 방법 (아래쪽에 참조글)


(윈도우 위치 : C:\Program Files\Java\jre1.8.0_73\lib\security\cacerts)

(윈도우는 수정시에 관리자 권한으로 )



http://stackoverflow.com/questions/1828775/how-to-handle-invalid-ssl-certificates-with-apache-httpclient


 


참조 할만한 내용의 사이트들

 


웹서비스 클라이언트 만들기


 

웹서비스란게 있다. 쉽게 말하면 이기종간의 통신을 위한 것이다. SOAP, WSDL, UDDI등을 이용해서 자바사에서 C#으로 만들어진 서비스에 요청을 보내도 응답을 받을 수 있다. 그 이념과 목표는 대단했지만 너무 복잡한 스펙덕분에 빛을 발휘 못하고 요즘은 그나마 지원하는 툴들이 많아져서 괜찮아진것 같지만 REST의 등장으로 인하여 아주 큰 주목을 받지 못하고 있는 듯 하다. 검색해 보면 웹서비스에 대한 많은 글들을 볼수가 있고 크게 뜨진 못했지만 웹서비스는 끝났다라고 말할수는 없는듯 하다. REST가 뜨면서 같이 다시 주목받고 있는 듯한 느낌도....

 

 https://blog.outsider.ne.kr/187


 

How to Create Sample WSDL in Eclipse and Generate Client ( 그림 설명 )

 

 

Have you ever tried creating Simple Java Web Service Definition Language in Eclipse? Well, here are few simple steps to create WSDL in Eclipse environment and Generate/Test Client.

http://crunchify.com/create-sample-wsdl-in-eclipse-and-generate-client/



Create a Java web service client via wsimport tool.


Alternative, you can use “wsimport” tool to parse the published wsdl file,
and generate necessary client files (stub) to access the published web service.

Where is wsimport?
This wsimport tool is bundle with the JDK, you can find it at “JDK_PATH/bin” folder.

Issue “wsimport” command.
> wsimport -keep http://localhost:9999/ws/hello?wsdl





WSImport over SSL with take (dev) certificate



Finally I got a solution, using wrapper class.

I think it makes sense to share the solution. Hope it will save some someone's time for better purposes.


http://stackoverflow.com/questions/29922479/wsimport-over-ssl-with-fake-dev-certificate



자바 기본 trust store에 서버 사설 인증서(공인 CA로부터 발급받지 않은)를 등록


javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target


Are you getting this error? This simply means that the web server or the URL you are
connecting to does not have a valid certificate from an authorized CA. But however,
being a programmer you would want to find out the alternative
way to solve this issue.


Default trusts의 암호는 "changeit"


> 보기(등록된 리스트)


c:\...\jre1.8.0_73>keytool -list -keystore .\lib\security\cacerts



> 등록


c:\...\jre1.8.0_73>keytool -keystore .\lib\security\cacerts -import -alias [등록을 원하는 이름, 주로 서비스 도메인] -file d:\server.cer


* server.cer은 브라우저를 통해서 접속후에  다운로드 가능


http://www.java-samples.com/showtutorial.php?tutorialid=210





블로그 이미지

StartGuide

I want to share the basic to programming of each category and how to solve the error. This basic instruction can be extended further. And I have been worked in southeast Asia more than 3 years. And I want to have the chance to work another country.

,
노출되는 이미지가 불편하시겠지만 양해를 구합니다. 노출, 클릭등에 관한 자료로 활용 중입니다.

 

(1) 소개 - Openfire ( 메신저 서버 ) ?




이것은, 그룹웨어처럼 보유한 회원 정보로 연동되는 메신저를 만들수 있다.

 

1) 기존 회원을 보유한 경우 - 해당 정보를 사용하거나 활용

2) 기본적으로 데스크탑 메신저를 제공

3) 모바일용 메신저를 위한 라이브러리 제공 ( 공개된 오픈 소스 클라이언트를 바로 사용 )

 

4) 전용화(rebrand)를 한다면 필요한 것들은 ...

(1) 클라이언트 rebrand (Naming변경 및 이에 따른 Design 변경 적용)

(2) 오픈형 가입(signup)은 block, 전용 가입 창구 마련

(3) 오픈형 클라이언트의 접근을 제한하기 위한 packet변경

(4) 변경된 Packet과 다르면 차단하는 Filter 모듈 제작

 

 


Openfire란

 



 

크로스 플랫폼(또는 멀티 플래폼)을 지원하며, 실시간으로 협업(RTC)을 하도록 도와주는 서버로, 오픈 소스 아파치 라이센스를 따른다.

 

- 제공 platform : Mac OS X, Windows , Redhat / CentOS, Debian /Ubuntu

 

인스턴스 메시징을 위해서 오픈 프로토콜로 예전에 Jabber라고 부르던 XMPP를 사용하며,

설치와 관리가 쉽고, 견고한 보안과 성능을 제공한다.

 

- 커뮤니티 사이트 ignite realtime : Jive Software의 오픈 소스 실시간 커뮤니케이션 프로젝트의 사용자와 개발자를 위한 사이트



http://www.igniterealtime.org/projects/openfire/index.jsp



 

 

추가 프로젝트

 

 

완성된 데스크톱용 Client로 제공되는 Spark 프로젝트(Java)

직접 Client를 제작할떄 필요한 Java Client Library로 제공되는 Smack프로젝트가 있다.

 

 

관련 프로젝트

 

Tinder : 자바 XMPP 라이브러리, XMPP stanza와 component를 구현하도록 제공

Whack : 쉽게 사용 가능한 자바 XMPP 콤포넌트 라이브러리

 

중단 프로젝트

 

XIFF : Flash XMPP client library

SparkWeb : Web based real-time collaboration client

 


http://www.igniterealtime.org/projects/index.jsp





 

실행화면

 

1. 관리자 콘솔

 

2. 클라이언트 실행 화면

 

 

 

 

 

2. 설치본 설치 가이드 / Installation

 

 

Windows , 윈도우


 

Run the Openfire installer. The application will be installed to C:\Program Files\Openfire by default.


오픈파이어 인스톨러를 실행한다. 어플리케이션은 기본적으로 C:\Program Files\Openfire에

에 설치가 된다.

 

Note: If you are installing Openfire on Windows Vista/Windows 7/Windows Server 2008 or newer Windows version and you have UAC protection enabled, then we suggest to choose other installation folder than Program files (e.g. C:\Openfire).

Otherwise you will have to run Openfire launcher with Run as administrator option, because Openfire is storing its configuration (and the embedded database if used) in the installation folder and UAC protection will cause errors on startup, when running without elevated privileges.

 



Linux/Unix , 리눅스/유닉스



Choose either the RPM or tar.gz build. 


RPM 또는 tar.gz 설치본중에서 선택하라.



If using the RPM, run it using your package manager to install Openfire to /opt/openfire:


    rpm -ivh openfire_X_Y_Z.rpm



If using the .tar.gz, extract the archive to /opt or /usr/bin:


    tar -xzvf openfire_X_Y_Z.tar.gz

    mv openfire /opt

 

Note: the .tar.gz build does not contain a bundled Java runtime (JRE). Therefore, you must have JDK or JRE 1.7.0 or later installed on your system. You can check your java version by typing "java -version" at the command line and (if necessary) upgrade your Java installation by visiting java.com.

 


> Running Openfire in Linux/Unix, - RPM


If you are running on a Red Hat or Red Hat like system (CentOS, Fedora, etc), we recommend using the RPM as it contains some custom handling of the standard Red Hat like environment. Assuming that you have used the RPM, you can start and stop Openfire using the /etc/init.d/openfire script.


# /etc/init.d/openfire


Usage /etc/init.d/openfire {start|stop|restart|status|condrestart|reload}


# /etc/init.d/openfire start



> Starting openfire: - .tar.gz 


If you are running on a different Linux/Unix varient, and/or you have used the .tar.gz 'installer', you can start and stop Openfire using the bin/openfire script in your Openfire installation:


# ./openfire
Usage: ./openfire {start|stop}

# ./openfire start
Starting openfire

 

 

설치 가이드

http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/install-guide.html

 

 


* 구축사례 :


소개 : 농협 정보 시스템 / 공개 SW로 사내 메신저 개발

 

 

 

 

http://www.oss.kr/oss_repository10/535682 





* 기타 설정 설명 자료


: openfire 설치본을 설치후에 관리자 콘솔 설정 내용

 

https://www.javacodegeeks.com/2010/08/openfire-server-installation.html

블로그 이미지

StartGuide

I want to share the basic to programming of each category and how to solve the error. This basic instruction can be extended further. And I have been worked in southeast Asia more than 3 years. And I want to have the chance to work another country.

,