Posted by 솔라리스™

댓글을 달아 주세요

Spring 프레임워크 왜 사용하나? ( Spring 프레임워크를 사용하는 이유 )


첫번째는 Spring 프레임워크가 테스트하기 쉬운 구조로 코드를 개발하는 것이 가능하도록 지원한다는 것이다. Spring 프레임워크가 기본적으로 제공하고 있는 AbstractTransactionalSpringContextTests, AbstractTransactionalDataSourceSpringContextTests 클래스 때문만이 아니라 Spring 프레임워크의 핵심 기능인 Dependency Injection은 개발자들이 원하건 원하지 않건 테스트하기 쉬운 구조로 코딩하는 것이 가능하도록 지원하게 된다. 처음에는 단위테스트 코드를 작성하지 않더라도 추후에 단위 테스트 코드를 작성할 때 그 위력을 느낄 수 있다. Spring 프레임워크가 지원하는 Setter Injection은 디자인 패턴의 Strategy Pattern을 근간으로 하고 있기 때문에 이 같은 효과를 가져올 수 있다. 개발 경력이 많은 자바 개발자라 할지라도 테스트 용이한 소스 코드를 구현하는 것이 생각만큼 쉽지 않다. 그러나 Spring 프레임워크를 이용할 경우 이 같은 효과를 자연스럽게 얻을 수 있게 된다. 초보 개발자라 할지라도 Spring 프레임워크 기반으로 개발하게 될 경우 처음에는 그 가치를 느끼지 못하겠지만 개발 경험이 쌓이면서 그 가치를 이해하게 되면서 점점 더 테스트 용이한 코드를 만들어 낼 수 있도록 유도한다는 측면에서 큰 점수를 주고 싶다.


두번째는 인스턴스의 생성과 클래그간의 의존관계에 대한 고민을 덜어주고 있다는 측면이다. 인스턴스의 생성에 대한 측면이 더 강하다고 생각된다. 지금까지 많은 자바 개발자들은 인스턴스를 Singleton으로 생성할지 Non Singleton으로 생성할지에 대한 고민을 거의 하지 않은 것이 사실이다. 개인적으로 인스턴스의 생성과 의존관계에 기본이 잘 되어 있는 애플리케이션의 경우 유지보수와 확장성이 좋다고 생각한다. 그러나 개발자들이 이 같은 효과를 얻기 위해서는 디자인 패턴까지 이해한 상황에서 설계가 진행되어야 한다. 그러나 국내 현실에서 이 같은 부분까지 고민하면서 개발하기란 쉽지 않은 것이 사실이다. Spring 프레임워크는 개발자가 의도하지 않더라도 인스턴스의 생성에서부터 의존관계를 관리하는 것이 가능하도록 지원해준다. 인스턴스의 생성에서는 Singleton 인스턴스 생성을 위한 static을 사용하지 않아도 됨으로 좀 더 OOP적인 개발이 가능하도록 유도한다. 또한 인터페이스의 사용을 유도함으로서 각 클래스, 컴포넌트간의 의존관계를 줄여주는 효과를 얻을 수 있다. 이 같은 모든 효과는 애플리케이션의 개발을 완료한 다음 유지보수업무를 진행할 때 큰 효과를 볼 수 있다. 물론 애플리케이션을 개발하는 도중에도 무수히 많은 유지보수성(기능의 변경) 업무가 발생하기 때문에 애플리케이션을 개발하는 도중에도 큰 효과를 얻을 수 있게 된다.


위 두가지 이유로 Spring 프레임워크를 사용해야 한다는 것은 당위성이 너무 약하게 생각될 것이다. 나는 단지 Spring 프레임워크가 가지는 잇점들 중 핵심적이라고 생각되는 두가지에 대하여 다루고 있을 뿐이다. 그러나 이 두가지가 애플리케이션 개발에 있어서는 상당히 중요한 부분이라고 생각된다. 이 두가지 요소를 제대로 구현하지 못한 소스코드들은 유지보수하기 힘들뿐만아니라 테스트하기 힘든 상황이 발생할 것이다. 테스트하기 힘든 코드는 점점 더 개발자들이 테스트하지 않도록 만들어버린다. 모든 것에 있어서 기본이 가장 중요하듯이 애플리케이션 개발에 있어서도 기본이 제대로 서 있을 때 품질 좋은 소스코드를 만들어 낼 수 있지 않을까 생각한다.


물론 위와 같은 잇점은 Spring 프레임워크를 제대로 사용할 때 더 큰 효과를 얻을 수 있지만, Spring 프레임워크의 일부 기능을 사용하더라도 얻을 수 있는 장점들이 많다. Spring 프레임워크를 애플리케이션 개발의 어느 측면에서 활용할지는 Spring 프레임워크를 사용하는 개발자의 몫이라고 생각한다. Spring 프레임워크의 기능 중 여러분의 프로젝트에 적용하면 좋은 것으로 기대되는 기능이 있다면 적극적으로 활용하기 바란다. 물론 프로젝트에 적용하기 전 검증하는 절차는 반드시 필요할 것이다. 남들이 사용하니까 무조건 사용하는 식의 접근방법은 바람직하지 못할 것이다.


Spring 프레임워크는 위 두가지 이외에도 무수히 많은 잇점을 가지고 있다. 물론 단점 또한 가지고 있다. 최근에는 너무 방대해진 API로 인해 나 또한 싫어질려고 하는 것이 사실이다. 그러나 Spring 프레임워크가 가지고 있는 핵심 사상에 있어서 후한 점수를 주지 않을 수 없다. 하나의 프레임워크가 모든 요구사항을 만족시킬 수는 없다. 그러므로 Spring 프레임워크가 모든 요구사항을 충족시켜주기를 바라기 보다는 자신의 현재 요구사항과 가장 적합한 프레임워크와 기술을 선택하는 것이 좋을 것이다. 다른 사람이 사용하니까 나도 사용한다는 식으로 접근한 다음 욕하기 보다는 사용하기 전에 철저하게 검토해보는 자세가 더 중요할 것이다.


기술이나 프레임워크를 비판할 때도 해당 기술이나 프레임워크를 제대로 사용해본 다음에 비판하는 자세가 더 좋지 않을까 생각한다. 모든 기술과 프레임워크에는 장,단점이 있음에도 불구하고 맹목적으로 비판하는 자세보다는 좀 더 발전적인 방향을 위해서 비판하는 자세가 좋아보인다. 최근 온라인상에 무차별적인 비판만을 가하는 모습을 많이 보면서 한편으로는 씁쓸함이 느껴진다. 중용의 자세를 가질 때가 아닐까?


http://javajigi.net/pages/viewpage.action?pageId=8880226


스프링이 사랑한 디자인 패턴1 - 템플릿 메소드 패턴

http://expert0226.tistory.com/230


스프링이 사랑한 디자인 패턴2 - 팩토리 메소드 패턴

http://expert0226.tistory.com/233


스프링이 사랑한 디자인 패턴3 -프록시 패턴

http://expert0226.tistory.com/234

Posted by 솔라리스™

댓글을 달아 주세요


c:\apacheGroup\apache-maven-3.0.4\bin>

mvn install:install-file -Dfile=gcm-server.jar -DgroupId=com.google.android.gcm -DartifactId=gcm-server -Dversion=1.0.2 -Dpackaging=jar -DgeneratePom=true

mvn install:install-file -Dfile=JavaPNS_2.2.jar -DgroupId=javapns -DartifactId=javapns -Dversion=2.2 -Dpackaging=jar -DgeneratePom=true


[pom.xml]

<dependency>

    <groupId>com.google.android.gcm</groupId>

    <artifactId>gcm-server</artifactId>

    <version>1.0.2</version>

</dependency>  


 <dependency>

    <groupId>javapns</groupId>

    <artifactId>javapns</artifactId>

    <version>2.2</version>

</dependency>  

Posted by 솔라리스™

댓글을 달아 주세요

HTML 5 JS

HTML 5 JS

HTML 5 Web Apps: Meet and exceed the data visualization needs of your end-users and bring information to life on the web with the HTML 5 JS Widgets that ship as part of DXTREME. HTML 5 Charts, Gauges and RangeSelector along with a full range of multi-purpose widgets such as buttons, lookups, lists and tabs are included in the DXTREME Subscription.

http://demos.devexpress.com/DXTREME/Visualization/#index

ChartJS >> $299 ( per developer )

jqPlot

leftcharts

jqPlot is a plotting and charting plugin for the jQuery Javascript framework. jqPlot produces beautiful line, bar and pie charts with many features

http://www.jqplot.com/

GPL License & MIT License 



Highcharts

Highcharts is a charting library written in pure HTML5/JavaScript, offering intuitive, interactive charts to your web site or web application. Highcharts currently supports line, spline, area, areaspline, column, bar, pie, scatter, angular gauges, arearange, areasplinerange, columnrange, bubble, box plot, error bars, funnel, waterfall and polar chart types.


http://www.highcharts.com/



참조 : http://www.splashnology.com/article/15-awesome-free-javascript-charts/325/

Posted by 솔라리스™

댓글을 달아 주세요

EditableGrid, make your HTML tables editable

EditableGrid is an open source JavaScript library aimed at turning tables into fully editable components. Its API is focused on simplicity : only a few lines of code are necessary to get your first editable grid up and running.

Originally, EditableGrid was a component developed for T:metrack, our über timesheet and invoicing tool. Thereafter, we decided to factorize it into an external library. We think that this tool can be useful in other web projects. This is why we chose to publish it under a free license. We use Open Source software everyday and we wanted to offer our small contribution. If you use EditableGrid, feel free to tell us. The best motivation is to know that our work is used and appreciated. 

Sigma Ajax Grid


Written in pure javascript, Sigma grid is an open source AJAX data grid for displaying and inline editing data in a scrollable and sortable table. It is very powerful yet  easy to use &  integrate with php, asp.net, jsp and RoR.

Animated Sortable Data Table jQuery plugin - jTPS

jTPS is a datatable jQuery plugin that offers pagination, animated scrolling through pages and intelligent natural sorting capability. The development version is currently 15KB

tablesorter


tablesorter is a jQuery plugin for turning a standard HTML table with THEAD and TBODY tags into a sortable table without page refreshes. tablesorter can successfully parse and sort many types of data including linked data in a cell. It has many useful features including:

Multi-column sorting
Parsers for sorting text, URIs, integers, currency, floats, IP addresses, dates (ISO, long and short formats), time. Add your own easily Support secondary "hidden" sorting (e.g., maintain alphabetical sort when sorting on other criteria)
Extensibility via widget system
Cross-browser: IE 6.0+, FF 2+, Safari 2.0+, Opera 9.0+
Small code size

MyTableGrid 

MyTableGrid is a JavaScript based DataGrid control built on the Prototype library. It allows you to display your data in a simple and flexible way.


http://www.hotscripts.com/blog/15-javascript-data-grids-enhance-html-tables/ )

Posted by 솔라리스™

댓글을 달아 주세요

A set of assertion methods useful for writing tests. Only failed assertions are recorded. These methods can be used directly: Assert.assertEquals(...), however, they read better if they are referenced through static import:

 import static org.junit.Assert.*;

    ...

    assertEquals(...);

 

assertArrayEquals(byte[] expecteds, byte[] actuals) 

 : Asserts that two byte arrays are equal.

assertArrayEquals(char[] expecteds, char[] actuals) 

 : Asserts that two char arrays are equal.

assertArrayEquals(int[] expecteds, int[] actuals) 

 : Asserts that two int arrays are equal.

assertArrayEquals(long[] expecteds, long[] actuals) 

 : Asserts that two long arrays are equal.

assertArrayEquals(java.lang.Object[] expecteds, java.lang.Object[] actuals) 

 : Asserts that two object arrays are equal.

assertArrayEquals(short[] expecteds, short[] actuals) 

 : Asserts that two short arrays are equal.

assertArrayEquals(java.lang.String message, byte[] expecteds, byte[] actuals) 

 : Asserts that two byte arrays are equal.

assertArrayEquals(java.lang.String message, char[] expecteds, char[] actuals) 

 : Asserts that two char arrays are equal.

assertArrayEquals(java.lang.String message, int[] expecteds, int[] actuals) 

 : Asserts that two int arrays are equal.

assertArrayEquals(java.lang.String message, long[] expecteds, long[] actuals) 

 : Asserts that two long arrays are equal.

assertArrayEquals(java.lang.String message, java.lang.Object[] expecteds, java.lang.Object[] actuals) 

 : Asserts that two object arrays are equal.

assertArrayEquals(java.lang.String message, short[] expecteds, short[] actuals) 

 : Asserts that two short arrays are equal.

assertEquals(double expected, double actual) 

 : Deprecated. Use assertEquals(double expected, double actual, double epsilon) instead

assertEquals(double expected, double actual, double delta) 

 : Asserts that two doubles or floats are equal to within a positive delta.

assertEquals(long expected, long actual) 

 : Asserts that two longs are equal.

assertEquals(java.lang.Object[] expecteds, java.lang.Object[] actuals) 

 : Deprecated. use assertArrayEquals

assertEquals(java.lang.Object expected, java.lang.Object actual) 

 : Asserts that two objects are equal.

assertEquals(java.lang.String message, double expected, double actual) 

 : Deprecated. Use assertEquals(String message, double expected, double actual, double epsilon) instead

assertEquals(java.lang.String message, double expected, double actual, double delta) 

 : Asserts that two doubles or floats are equal to within a positive delta.

assertEquals(java.lang.String message, long expected, long actual) 

 : Asserts that two longs are equal.

assertEquals(java.lang.String message, java.lang.Object[] expecteds, java.lang.Object[] actuals) 

 : Deprecated. use assertArrayEquals

assertEquals(java.lang.String message, java.lang.Object expected, java.lang.Object actual) 

 : Asserts that two objects are equal.

assertFalse(boolean condition) 

 : Asserts that a condition is false.

assertFalse(java.lang.String message, boolean condition) 

 : Asserts that a condition is false.

assertNotNull(java.lang.Object object) 

 : Asserts that an object isn't null.

assertNotNull(java.lang.String message, java.lang.Object object) 

 : Asserts that an object isn't null.

assertNotSame(java.lang.Object unexpected, java.lang.Object actual) 

 : Asserts that two objects do not refer to the same object.

assertNotSame(java.lang.String message, java.lang.Object unexpected, java.lang.Object actual) 

 : Asserts that two objects do not refer to the same object.

assertNull(java.lang.Object object) 

 : Asserts that an object is null.

assertNull(java.lang.String message, java.lang.Object object) 

 : Asserts that an object is null.

assertSame(java.lang.Object expected, java.lang.Object actual) 

 : Asserts that two objects refer to the same object.

assertSame(java.lang.String message, java.lang.Object expected, java.lang.Object actual) 

 : Asserts that two objects refer to the same object.

assertThat(java.lang.String reason, T actual, org.hamcrest.Matcher<T> matcher) 

 : Asserts that actual satisfies the condition specified by matcher.

assertThat(T actual, org.hamcrest.Matcher<T> matcher) 

 : Asserts that actual satisfies the condition specified by matcher.

assertTrue(boolean condition) 

 : Asserts that a condition is true.

assertTrue(java.lang.String message, boolean condition) 

 : Asserts that a condition is true.

fail() 

 : Fails a test with no message.

fail(java.lang.String message) 

 : Fails a test with the given message.


http://junit.sourceforge.net/javadoc/org/junit/Assert.html


Posted by 솔라리스™

댓글을 달아 주세요


form2js.js


jquery.toObject.js


js2form.js




  


   Test
   
   
   
   
   
   


Gender:
Bool checkbox
Give us your five friends' names and emails
Fieldset test
Fieldset
Custom callback test:
test test test
보내기

Posted by 솔라리스™

댓글을 달아 주세요