Flyway는 개발영역에서만 사용

이용전략

  • 개발(로컬)에는 V1__, V2__, V3__ 으로 자유롭게 업데이트 한다.

  • commit & push 전(공개 전): 하나의 파일로 통합하여 정리한 후 정상동작을 확인하고 푸시한다.

  • 스테이지, 운영 단계에 스키마 변경에는 Flyway를 사용하지 않는다.

    • 스키마 변경 전에는 DB 상태 모니터링 하면서 장인정신으로 한땀한땀 반영한다.

    • DB 락 여부 확인, 속도 저하 등을 확인하며 진행

    • 운영데이터가 많이 누적된 경우에 처리속도가 느려 락이 걸리는 등의 상황이 발생할 수 있다.

추가사항

  • H2 인-메모리 디비는 프로토타이핑 용으로 사용한다.

  • H2에서 사용하는 쿼리가 실제 운영단계에 반영되었을 때 문제발생 가능성이 높다.

  • cleanOnValidationError: 검증 중에 에러가 발생하면 자동으로 클린 처리를 함. ← 위험!!

cleanOnValidationError

Whether to automatically call clean or not when a validation error occurs.

This is exclusively intended as a convenience for development. Even tough we strongly recommend not to change migration scripts once they have been checked into SCM and run, this provides a way of dealing with this case in a smooth manner. The database will be wiped clean automatically, ensuring that the next migration will bring you back to the state checked into SCM.

Warning ! Do not enable in production !


해외 기업의 웹서비스를 이용하는 기능을 개발하고 있다. 이 과정에서 낯설은 wsdl 생성과정 및 SOAP 사용방법을 정리해보고자 한다.

wsimport 는 JAX-WS 에 적합한 산출물을 생성하는 도구다. wsdl(Web Services Description Language) 을 불러와 그 파일을 기준으로 자바 코드를 생성한다.

사용방법

사용방법은 간단하다(물론 옵션은 여러가지가 있다. 상황에 따라 적절한 옵션을 추가하자).

$ wsimport {wsdl-url}

선택사항

$ wsimport
wsimport
Missing WSDL_URI
Usage: wsimport [options] <WSDL_URI>
where [options] include:
-b <path> specify jaxws/jaxb binding files or additional schemas
(Each <path> must have its own -b)
-B<jaxbOption> Pass this option to JAXB schema compiler
-catalog <file> specify catalog file to resolve external entity references
supports TR9401, XCatalog, and OASIS XML Catalog format.
-classpath <path> specify where to find user class files and wsimport extensions
-cp <path> specify where to find user class files and wsimport extensions
-d <directory> specify where to place generated output files
-encoding <encoding> specify character encoding used by source files
-extension allow vendor extensions - functionality not specified
by the specification. Use of extensions may
result in applications that are not portable or
may not interoperate with other implementations
-help display help
-httpproxy:<proxy> set a HTTP proxy. Format is [user[:password]@]proxyHost:proxyPort
(port defaults to 8080)
-J<javacOption> pass this option to javac
-keep keep generated files
-p <pkg> specifies the target package
-quiet suppress wsimport output
-s <directory> specify where to place generated source files
-target <version> generate code as per the given JAXWS spec version
Defaults to 2.2, Accepted values are 2.0, 2.1 and 2.2
e.g. 2.0 will generate compliant code for JAXWS 2.0 spec
-verbose output messages about what the compiler is doing
-version print version information
-fullversion print full version information
-wsdllocation <location> @WebServiceClient.wsdlLocation value
-clientjar <jarfile> creates the jar file of the generated artifacts along with the
WSDL metadata required for invoking the web service.
-generateJWS generate stubbed JWS implementation file
-implDestDir <directory> specify where to generate JWS implementation file
-implServiceName <name> local portion of service name for generated JWS implementation
-implPortName <name> local portion of port name for generated JWS implementation
Extensions:
-XadditionalHeaders map headers not bound to request or response message to
Java method parameters
-Xauthfile file to carry authorization information in the format
http://username:password@example.org/stock?wsdl
-Xdebug print debug information
-Xno-addressing-databinding enable binding of W3C EndpointReferenceType to Java
-Xnocompile do not compile generated Java files
-XdisableAuthenticator disable Authenticator used by JAX-WS RI,
-Xauthfile option will be ignored if set
-XdisableSSLHostnameVerification disable the SSL Hostname verification while fetching
wsdls
Examples:
wsimport stock.wsdl -b stock.xml -b stock.xjb
wsimport -d generated http://example.org/stock?wsdl

실습

http://www.webservicex.com/globalweather.asmx?WSDL 을 기준으로 테스트를 해보자.

$ wsimport -verbose -keep -extension http://www.webservicex.com/globalweather.asmx\?WSDL

라고 실행하면

parsing WSDL...
[WARNING] SOAP port "GlobalWeatherSoap12": uses a non-standard SOAP 1.2 binding.
line 199 of http://www.webservicex.com/globalweather.asmx?WSDL
[WARNING] Port "GlobalWeatherHttpGet" is not a SOAP port, it has no soap:address
line 202 of http://www.webservicex.com/globalweather.asmx?WSDL
[WARNING] port "GlobalWeatherHttpGet": not a standard SOAP port. The generated artifacts may not work with JAX-WS runtime.
line 202 of http://www.webservicex.com/globalweather.asmx?WSDL
[WARNING] Port "GlobalWeatherHttpPost" is not a SOAP port, it has no soap:address
line 205 of http://www.webservicex.com/globalweather.asmx?WSDL
[WARNING] port "GlobalWeatherHttpPost": not a standard SOAP port. The generated artifacts may not work with JAX-WS runtime.
line 205 of http://www.webservicex.com/globalweather.asmx?WSDL
Generating code...
net/webservicex/GetCitiesByCountry.java
net/webservicex/GetCitiesByCountryResponse.java
net/webservicex/GetWeather.java
net/webservicex/GetWeatherResponse.java
net/webservicex/GlobalWeather.java
net/webservicex/GlobalWeatherHttpGet.java
net/webservicex/GlobalWeatherHttpPost.java
net/webservicex/GlobalWeatherSoap.java
net/webservicex/ObjectFactory.java
net/webservicex/package-info.java
Compiling code...
javac -d /private/tmp/test-ws/. -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/lib/tools.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/classes -Xbootclasspath/p:/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/jre/lib/rt.jar /private/tmp/test-ws/./net/webservicex/GetCitiesByCountry.java /private/tmp/test-ws/./net/webservicex/GetCitiesByCountryResponse.java /private/tmp/test-ws/./net/webservicex/GetWeather.java /private/tmp/test-ws/./net/webservicex/GetWeatherResponse.java /private/tmp/test-ws/./net/webservicex/GlobalWeather.java /private/tmp/test-ws/./net/webservicex/GlobalWeatherHttpGet.java /private/tmp/test-ws/./net/webservicex/GlobalWeatherHttpPost.java /private/tmp/test-ws/./net/webservicex/GlobalWeatherSoap.java /private/tmp/test-ws/./net/webservicex/ObjectFactory.java /private/tmp/test-ws/./net/webservicex/package-info.java

처럼 실행되어 있는 것을 볼 수 있을 것이다. 대상으로 하는 wsdl 파일을 내려받은 후에 이파일을 기준으로 자바코드를 생성하는 과정을 확인할 수 있다. 그리고 내려받은 자바코드를 컴파일하는 것까지 처리해준다.

생성된 디렉토리의 구조는 다음과 같다.

.
├── globalweather.asmx?WSDL
└── net
    └── webservicex
        ├── GetCitiesByCountry.class
        ├── GetCitiesByCountry.java
        ├── GetCitiesByCountryResponse.class
        ├── GetCitiesByCountryResponse.java
        ├── GetWeather.class
        ├── GetWeather.java
        ├── GetWeatherResponse.class
        ├── GetWeatherResponse.java
        ├── GlobalWeather.class
        ├── GlobalWeather.java
        ├── GlobalWeatherHttpGet.class
        ├── GlobalWeatherHttpGet.java
        ├── GlobalWeatherHttpPost.class
        ├── GlobalWeatherHttpPost.java
        ├── GlobalWeatherSoap.class
        ├── GlobalWeatherSoap.java
        ├── ObjectFactory.class
        ├── ObjectFactory.java
        ├── package-info.class
        └── package-info.java


주변 개발자들이 ZSH(http://www.zsh.org/) 으로 많이 넘어갔다.

이직하는 팀에서도 ZSH 를 사용하자는 이야기에 오늘 설치를 진행한다.

1. ZSH 설치

1.1. 우분투

$ sudo apt install zsh

1.2. 맥Mac

$ brew install zsh

2. oh-my-zsh 설치

2.1. curl

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

2.2. wget

sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

3. zsh 사용하도록 정의

chsh -s /bin/zsh

4. 재시작


그후 터미널에서 사용하는 명령어의 선택항목을 탐색시 탭<tab> 키를 누르면 선택항목들을 볼 수 있다.

명령어 입력 후 '-' 를 입력하면 해당 명령어로 실행한 이력도 확인가능하다.


'Tools' 카테고리의 다른 글

[log] 싱크패드 울트라나브(블루투스)  (3) 2018.10.25
[atom] asciidoc-preview 한글처리  (0) 2015.10.29

최근에 나는 프론트쪽을 거의 다루지 않았다. 백엔드쪽에서 프론트에 필요한 API만 만들어서 추가하는 쪽으로 활용했었다. 그래서 툴에 별로 관심을 두지 않아서 Aptna를 이용했었다. 그런데, 운영체제를 자주 밀어버리는 편(우분투를 사용하다보니 이게 일상이다)이라 설치가 가벼운 녀석을 찾았다. 그러다가 우연히 Brackets를 발견했다. 데비안 계열의 운영체제까지 지원한다. 오우.

- 공식사이트: http://brackets.io/

- Github: https://github.com/adobe/brackets

Adobe에서 내놓은 웹플랫폼 개발툴IDE Brackets([])를 소개한다.

모양은 이렇다.

모습도 깔끔하다. node를 기반으로 해서 동작하는 녀석으로 보인다.

현재 36번째 릴리즈버전이 출시되었고, 지속적으로 출시가 될 것으로 보인다. 쓸만한 플러그인들도 많이 제공한다. 


한글화도 잘 되어 있다.

JCO에서 발표했던 REST API에 대한 백엔드를 직접 활용하는 예제를 작성하고 있는 중이다.

실시간 미리보기 기능(현재는 크롬chrome 브라우저에 대해서만 지원)도 지원(Ctrl + Alt + P(review))한다. 코드를 수정 후에 저장하면 바로 브라우저에 갱신신호가 가면서 다시 읽는 것으로 보인다. 아마... 크롬 내부의 API겠지?

태그에서 지정한 class에 대한 CSS 파일도 바로호출이 가능하며,

선택된 class에 적용대상을 미리보기로 호출된 브라우저에 표시도 해준다.

사용자 폴더에 설정파일인 brackets.json 을 수정하여 환경을 설정할 수 있다(지만 귀찮다). 나름 중요한 탭형식과 사이즈 조정은 편집기 오른쪽 하단에 입력하여 설정할 수 있다. 기본은 '스페이스, 크기 4'로 설정되어 있는데, 프론트 쪽에서는 '스페이스 크기 2'를 선호하기에 바꿔봤다. 그러면 brackets.json에 설정내용이 추가된다.


ㅡ_-); 이때 이야기했던 28일되면 VM 인스턴스 내릴거에요.

라고 한 이야기가 거짓말이 되었다. 두둥. AngularJS 공부도 할겸해서 예제를 만들고 있다. 코드만 보여줘서는 의미가 많이 약해질 것이라는 개인적인 욕심이 어울어져 이런 일을 벌이게 되었다. 흠… 지금 예제가 돌고 있는 서버에 CI를 설치해둘까 하는 생각이 들었는데… 문득, OpenShift에서 Jenkins 기어만들고 거기서 빌드하도록 만들면 되겠구나…!! 하는 생각이 든다. ㅎㅎ 돈이 굳었다. ㅡ_-);;

OpenShift에 대해서는 아래내용을 참고하세요.

2014/02/28 - [Java/Tools] - 무료로 쓸만한 통합된 개발환경 시스템 OpenShift(By redhat)를 소개합니다.

프로젝트는… ihoneymon@github.com/rocking-the-rest-api-view를 참고하기 바란다. Yeoman을 활용해서 웹애플리케이션을 초기생성했다.

Yeoman으로 AngularJS 프로젝트 구성하기(http://www.hans.or.kr/2014/02/yeoman-angularjs.html)

위의 내용을 이용해서 초기화를 하고 작업 진행중이다.


깃헙github에서 내놓을 Atom editor(https://atom.io/)이 정식 출시되기 전까지는 쓸만한 녀석으로 보인다.

Atom editor 소개(http://blog.outsider.ne.kr/1035)

Atom editor가 정식 출시가 되면(리눅스도 지원한다면) 바로 옮겨가지 않을까? ㅡ_-)?

ihoneymon@ihoneymon-desktop:/workspace/git-repositories/never-ending-study$ git push origin develop

ssh_exchange_identification: Connection closed by remote host

fatal: Could not read from remote repository.


참고 페이지 : https://github.com/nodester/nodester/issues/346


git pull --rebase

후 git pull origin develop 정상동작

+ Recent posts