JSON 포맷으로 데이터를 주고 받는 서버나 클라이언트 혹은 앱을 개발하다 보면, 보내고 받은 데이터의 포맷이 맞는지 그리고 받은 데이터를 디버깅하기 위해서 포맷팅을 해서 가독성있게 바꾸는 작업을 빈번하게 하게 됩니다.. 이 때, 프로그램상에서 로그나 콘솔에 포맷팅을 해서 가독성있게 보여줄 수 있겠지만, 여간 불편한게 아니죠..
보통, 웹 서버를 통해서 JSON 데이터를 받게되면, 스트림으로 주~욱 받게 됩니다.. 그러면, byte[]로 받아서 String으로 변환을 해서 포맷팅을 하든, 아파치 HTTPClient같은 넘을 사용해서 결과로 String을 받아오든지 합니다..
결국, 다시 한번 String을 포맷팅을 해야 가독성이 생기게 됩니다.. 그래서, 받은 String 데이터를 Validate와 Formatting을 해주는 사이트를 찾아서 받은 String 데이터를 넣어서 포맷팅된 JSON으로 보게 되네요..
그래서, 유용한 사이트를 몇개 정리해 봅니다..
1. http://www.freeformatter.com/
지원하는 Formatter와 Validator는 아래와 같이 매우 다양합니다.. 매우 다양한 포맷을 지원하기 때문에 개발하면서 매우 유용한 사이트가 될 것 같습니다..
- JSON Formatter & Validator :
- HTML Formatter & Validator :
- XML Formatter :
- SQL Formatter :
- String Escaper :
- Url Encoder / Url Decoder :
- Base 64 Encoder / Base 64 Decoder :
- JavaScript Minifier - Online YUI Compressor for JavaScript :
- CSS Minifier - Online YUI Compressor for CSS :
- Message Digest :
2. http://jsonlint.com/
JSON Formatter와 Validator로 가장 유명할 것으로 생각이 드는 사이트 입니다.. 3. http://jsonformat.com/
JSON Formatter와 Validator를 지원하고 있고, 추가적으로 HTML Formatter도 지원하고 있네요..
eclipse에서 xml, 기본 에디터로 다루기 참 불편하죠..
그래서, xml이나 다른 포맷들을 지원하는 editor가 별도로 존재하구요.. ^^
xml을 다루기 위해서 사용하는 에디터로 eclipse에서 plug-in해서 사용할 수 있는 넘으로 Rinzo XML Editor를 추천합니다. element action, validation, autocompletion, xpath view 기능등을 지원하는데 아주 좋네요.. ^^
자바로 프로젝트를 하다보면, 몇개의 라이브러리는 기본적으로 사용을 합니다.
좀 큰 프로젝트를 하다보면, 적게는 10개이상의 라이브러리를 사용할 텐데요.. 빌드를 하면서 의존 라이브러리를 일일히 manifest 파일에 기입을 해 주기는 매우 불편한 일이 되겠죠..
하지만, lib 폴더의 jar파일을 동적으로 로딩해서 jar로 배포할 때 넣어주면, 위 불편함이 순식간에 가시겠죵??ㅋㅋ
웹에 데이타를 전송해 주기 위해서, 데이타를 캐시하고 있는 서버에서 데이타를 json 포맷으로 가지고 있습니다.
라이브러리는 google-gson을 사용합니다.. json simple이나 jacson json processor에 비해서 속도는 뒤 떨어지지만, library의 사용성(?), 편리함(?) 때문에 사용을 하고 있습니다.. 데이타 저장을 위해서 json 포맷이다 보니, character set에 따라 크기, 즉 메모리나 데이타의 전송량이 달라지기 때문에, utf-8로 인코딩을 하고 byte[]의 길이를 체크해 보니.. 사이즈가 똑 같네요.. ^^;;
흠.. 소스 뒤져보니, utf-8로 인코딩을 하네요.. ㅋㅋ
ROME is an set of open source Java tools for parsing, generating and publishing RSS and Atom feeds.
The core ROME library depends only on the JDOM XML parser and supports parsing, generating
and converting all of the popular RSS and Atom formats including RSS 0.90, RSS 0.91 Netscape,
RSS 0.91 Userland, RSS 0.92, RSS 0.93, RSS 0.94, RSS 1.0, RSS 2.0, Atom 0.3, and Atom 1.0.
You can parse to an RSS object model, an Atom object model or an abstract SyndFeed model
that can model either family of formats.
헐.. 여태껏 이걸 모르고 있었네요.. ^^;;
저는 여태.. 클래스의 toString()를 Overriding 하면서, 일일이 손으로 아래와 같은 작업을 진행했습니다.
1. @Override 붙이기
2. 클래스의 property 값을 toString() 안에 기술하기..
지금은 eclipse editor에서 source->Generate toString()..를 통해서 위 과정이 쉽게 자동화 되네요.
eclipse를 사용하면서, 조금만 주의깊게 사용했으면, 개발 생산성이 20%증가했었을 텐데요..
아마도, Generate Getter/Setter에 너무 감명을 받아서 다른 건 눈에 안 들어온 거 같기도 하구요..
오..
지금 회사에서 인턴을 통해서 개발하려고 했던 테스팅 프레임웍의 형태를 플러그인으로 구현을 해 놨네요.. HTTP4e Rest Client
아래는 HTTP4e 웹 사이트에 있는 내용입니다.
좋네요. ^^
About
Eclipse HTTP Client (HTTP4e) is an Eclipse plugin for making HTTP and
RESTful calls. Build with user experience in mind, it simplifies the
developer/QA job of testing Web Services, REST, JSON and HTTP. It is a useful
tool for your daily job of HTTP header tampering and hacking.
Features:
Making/Replaying an HTTP call directly from Eclipse IDE
Visual Editors for HTTP headers, parameters and body
Tabbed browsing (allowing replaying different RESTful, HTTP calls on
separate tabs)
History support (persisting your valuable REST calls)
One-click HTTP code generation to Java, PHP, C#, Flex/ActionScript,
Cocoa/Objective-C, Ruby, Python and Visual Basic
One-click JMeter script generation
Import and export HTTP4e replay script
Export HTTP sessions as HTML report
Import raw HTTP packets and Firefox’s Live HTTP headers
rest 기반의 웹 서비스를 쉽게 만들기 위한 framework 도입을 위해서 대충 알아보니, 아래와 같은 framework들이 존재하네요.. 흠, 몰 써야 할까요?? 모르겠넹.. ^^;;
* Restlet is a lightweight REST framework for Java
* Jersey is the open source (under dual CDDL+GPL license), production quality, JAX-RS (JSR 311) Reference Implementation for building RESTful Web services. But, it is also more than the Reference Implementation. Jersey provides an API so that developers may extend Jersey to suite their needs.
* JAX-RS: CXF has an implementation of JAX-RS 1.0 (JSR-311): Java API for RESTful Web Services. This provides a more standard way to build RESTful services in JAVA.
* JBoss RESTEasy is a JBoss project that provides various frameworks to help you build RESTful Web Services and RESTful Java applications. It strives to be standards based wherever possible, but to also innovate when appropriate.
코드를 개발하고 테스트를 하기 위해서 보통 xUnit 시리즈의 프레임웍을 많이 이용하고 있습니다..
추가로 테스트를 완료하고, 테스트한 범위가 개발한 코드의 몇 %를 했는지에 대한 척도도 매우 중요하겠지요..
Test Coverage 혹은 Code Coverage 라고 일컫는데요..
자바에서 Code를 테스트한 후에, 테스트한 범위(Coverage)에 대한 리포팅을 해주는 툴이 바로 Coverage Tool 인데요..
아래는 2개의 Coverage Tool에 대한 소개입니다.
EclEmma is a free Java code coverage tool for Eclipse, available under the Eclipse Public License.
EclEmma는 eclipse에서 plug-in 해서 버튼 실행으로도 쉽게 사용할 수 있고, JaCoCo Library를 다운로드 받아서 Ant로 리포팅(http://www.eclemma.org/jacoco/trunk/doc/ant.html)을 받을 수 있네요.. 라이브러리 보다는 어플리케이션에서 쉽게 사용하고 바이너리를 내보낼때 좋을듯 하네요..
Cobertura is a free Java tool that calculates the percentage of code accessed by tests. It can be used to identify which parts of your Java program are lacking test coverage. It is based on jcoverage.
CI를 지원하는 툴에 대해서 살펴보니, 오픈소스 그리고 상용으로 팔고 있는 툴이 상당히 많이 존재하더군요...
대표적으로 ThoughtWorks의 CruiseControl과 Hudson은 익히 많이 알려져 있는듯 하지만, 다른 툴들은 자세한 정보가 없어서 다른 툴도 고민을 해 봐야 하나 하고 있던차에..
ThoughtWorks의 위키에서 CI Feature Matrix 페이지를 봤습니다.. 오~~ 최고... ^^
아래는 CI툴에 대한 정리된 비교 분석 내용입니다.
MS에서 제공하는 JDBC Type 4 드라이버인 sqljdbc4.jar를 통해서 DB에 연결하기 위한 내용입니다.
아래는 mssql 2008의 db에 접근하기 위한 connection url string 입니다..
MS의 jdbc사용에 대한 내용은 http://msdn.microsoft.com/en-us/library/ms378526.aspx 에서 참고하시면 됩니다. 그리고, 아래의 4147포트는 SqlServer Configuration Manager를 통해서 TCP/IP 프로토콜에 할당된
포드입니다.
아융..
DB 연결하기 위해서 Connection Url 세팅하는게 은근히 짜증나네요.. ^^;;
아래는 mssql 2008의 db에 접근하기 위한 connection url string 입니다..
그리고, 아래의 4147포트는 SqlServer Configuration Manager를 통해서 TCP/IP 프로토콜에 할당된 포드입니다.
위의 내용을 통해서, 프로젝트의 의존성 있는 바이너리들을 쉽게 관리(?) 할 수 있을듯 합니다.
개발팀에서 적용하기에는 좀 귀찮은 작업일듯 하나, 개발팀의 모임인 개발실 급의 규모에서는 적용할 만한 기술인거 같네요..
참고로, Ivy 프로젝트의 설치는 아래와 같습니다.
1. 다운로드
2. ivy-2.1.0.jar를 ${ant.home}/lib에 카피를 합니다.
3. eclipse에서 window --> preference --> ant --> runtime --> classpath의 ant home entries에서 add external jars 버튼을 통해서 ivy-2.1.0.jar를 잡아주면 됩니다.
java <-> c#
- Jni4net : http://jni4net.sourceforge.net/ , bridge between Java and .NET (interprocess, fast, object oriented, open-source), 라이선스: opensource, GPL tools and LGPL runtime
using net.sf.jni4net;
public class Program
{
private static void Main()
{
Bridge.CreateJVM(new BridgeSetup());
java.lang.System.@out.println("Greetings from C# to Java world!");
}
}
public class Program {
public static void main(String[] args) throws IOException {
Bridge.init();
system.Console.WriteLine("Greetings from Java to .NET world!");
}
}
The ThoughtWorks Anthology 라는 책의 11 챕터의 빌드 아케텍트인 줄리안 심슨님의 내용은, build.xml 즉, ant 파일이 refactoring에 대한 내용입니다. 그 중에서, <macrodef> 태그를 이용한 build.xml 파일의 리펙토링 예제가 나오는데, 유용할것 같아서 개인적으로 사용하고 있는 dist target에 대해서 리펙토링을 적용해 봤습니다.
위 예제처럼, 리펙토링된 내용을 살펴보면, <macrodef>태그를 통해서 기능에 대한 내용을 작게 쪼개서 빼고(<macrodef>) , 사용하는 <target>에서는 필요한 각 기능을 호출하는 템플릿 메쏘드(?)처럼 기술하게 됩니다. 어디서 많이 본 느낌인데.. 위는 기능을 작게 나눠서 메쏘드로 뽑는 extract method 리렉토링 기법과 동일하네요.. 역시 대가들에게서 많은 내용을 배우게 되는것 같습니다. ^^