관련 사이트 : http://simple.sourceforge.net/home.php


자바를 위한 XML 직렬화처리 및 설정을 해주는 높은 성능의 프레임워크다.

- Simple framework with powerful capabilities

- Can handle cycles in the object graph

- It requires absolutely no configuration

- Extremely rapid development with XML

- Converts to and from human editable XML

- Contains an XML templating system


위의 특징을 가지고 있는 프레임워크다. 자세한 내용은 사이트에 가서 확인하기 바란다.

아래 튜토리얼을 확인하기 바란다.

tutorial : http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php



간단한 예제코드

1. 먼저 Simple framework를 다운로드 받는다.

< Example.java >

  
package javastudy.simplexml;

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root
public class Example {
    
    @Element
    private String text;
    
    @Attribute
    private int index;

    public Example() {
        super();
    }

    public Example(String text, int index) {
        super();
        this.text = text;
        this.index = index;
    }

    public String getText() {
        return text;
    }

    public int getIndex() {
        return index;
    }
    
}

<SimpleXmlTest.java> 테스트 코드

  
package javastudy.simplexml;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import java.io.File;

import org.junit.Test;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

/**
 * simple Xml serialization 프레임워크를 이용하여 객체를 XML로 변환처리 테스트
 * @author 허니몬
 * 
 * 고려사항 : 
 *  1. Java 객체를 우선 정의해줘야한다.
 */
public class SimpleXmlTest {

    /**
     * Example 클래스의 구조를 example.xml으로 변환하여 xml파일을 생성한다.
     * 이때, 객체 안에 담겨있는 데이터는 @Attribute @Element 애노테이션에 
     * 의해 xml의 attribute와 element로 정의된다. 
     */
    @Test
    public void simpleObjectToXmlTest() {
        Serializer serializer = new Persister();
        Example example = new Example("Example message", 123);
        File result = new File("example.xml");
        
        try {
            serializer.write(example, result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    @Test
    public void simpleXmlToObjectTest() {
        Serializer serializer = new Persister();
        File source = new File("example.xml");
        
        Example example = null;
        try {
            example = serializer.read(Example.class, source);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        assertThat(example.getText(), is("Example message"));
        assertThat(example.getIndex(), is(123));
    }
}


<example.xml> 위의 코드에서 생성된 xml

  

   Example message


의 형태를 띄게 된다. 그 이외의 상세한 내용에 대해서는...

차근차근 해보도록 하자. 요즘 머리에 주입되는 정보들을 처리하느라 힘들다.




사용용도 : 객체(Java source)를 뼈대로 해서 xml파일을 생성하려고 할 때 사용할 수 있을 것이며,

이렇게 생성된 XML에 담긴 정보를 객체에 주입할여 인스턴스를 생성할 수 있을 것이다.


  이전에 코드에 임포트한 패키지들을 정리하는 실장님을 보면서 

  '왜 임포트된 패키지를 .* 으로 정리하는건가요?' 

라고 물었다가 답을 들었던 기억이 흐릿해질 때쯤, 이 책을 읽다보니 나오기에 그 기록을 남긴다.

도메인주도설계소프트웨어의복잡성을다루는지혜
카테고리 컴퓨터/IT > 네트워크/보안
지은이 에릭 에반스 (위키북스, 2011년)
상세보기

자바에서는 의존성에 해당하는 임포트 구문(import)을 반드시 개별 클래스에 선언해야 한다. 모델링하는 사람들은 아마 패키지를 다른 패키지에 대한 의존성으로 생각하겠지만, 자바에서는 꼭 그렇지만도 않다.
널리 통용되는 코딩 관례에서는 개별 클래스에 대해 임포트 구문을 작성할 것을 권장하므로 코드는 아래와 같이 작성할 것이다.

import packageB.ClassB1;
import packageB.ClassB2;
import packageB.ClassB3;
import packageC.ClassC1;
import packageC.ClassC2;
import packageC.ClassC3;
...
아쉽게도 자바에서는 개별 클래스에다 임포트할 수밖에 없지만 적어도 한 번에 전체 패키지를 임포트할 수는 있다. 이렇게 하면 패키지명을 일제히 변경하는 노력도 줄어들면서 패키지가 대단히 응집력 있는 단위라는 의도가 반영되기도 한다.

import packageB.*;
import packageC.*;


사실 이 기법은 두 가지 척도(패키지에 의존하는 클래스)를 혼용한다는 것을 의미하지만 앞서 나온 클래스 목록을 나열한 것 이상, 즉 특정 Module에 대한 의존성이 만들어진다는 의도를 전해주기도 한다.


Racing Stars
Racing Stars by Andrew Stawarz 저작자 표시변경 금지


자바에서는 패키지단위로 클래스를 작성하고 관리하지만, 이것을 실제로 모듈화하여 관리하지는 않는다. 서로다른 모듈이라 하더라도, 사용할 때에는 실제적으로 내부적인 동일한 경로의 선상에 놓이게 된다. 이때문에 이클립스를 비롯한 IDE 에서는 관례적으로 임포트되는 클래스의 패키지 경로를 명시하는 형태로 나타난다. 

실제로 임포트 되는 것은 패키지내에 클래스들이겠지만, 

import pacakges.*;

문을 통해서 해당하는 패키지가 응집력있게 사용되는 것이라는 설명을 명시화할 수가 있다.


Method chaining - Wikipidea : http://en.wikipedia.org/wiki/Method_chaining

자바 7에 추가될뻔한 기능이었다고 한다. ^^; 자바의 빈클래스에 막 길들어지기 시작한 내게는 조금 낯선 형태랄까?
setter 메소드에서 클래스(this)를 리턴해주는 형태니까...

Chaining.java
public class DateChaining {

    private String year;
    private String month;
    private String day;
    
    public String getMonth() {
        return month;
    }

    public DateChaining setMonth(String month) {
        this.month = month;
        return this;
    }

    public String getDay() {
        return day;
    }

    public DateChaining setDay(String day) {
        this.day = day;
        return this;
    }

    public String getYear() {
        return year;
    }

    public DateChaining setYear(String year) {
        this.year = year;
        return this;
    }

    @Override
    public String toString() {
        return "DateChaining [year=" + year + ", month=" + month + ", day="
                + day + "]";
    }

}

ChainingTest.java
package test;

import main.DateChaining;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

import org.junit.Test;

public class ChainingTest {
    
    @Test
    public void 체이닝_테스트() {
        //given
        DateChaining chain = new DateChaining();
        //when
        chain.setYear("2011").setMonth("07").setDay("17");
        //then
        assertThat(chain.getYear(), is("2011"));
        assertThat(chain.getMonth(), is("07"));
        assertThat(chain.getDay(), is("17"));
    }
    
    @Test
    public void 순서흐트러진_체이닝_테스트() {
        //given
        DateChaining chain = new DateChaining();
        //when
        chain.setMonth("07").setDay("17").setYear("2011");
        //then
        assertThat(chain.getYear(), is("2011"));
        assertThat(chain.getMonth(), is("07"));
        assertThat(chain.getDay(), is("17"));
    }
    
    @Test
    public void 중복된_필드에대한_세트선언시() {
      //given
        DateChaining chain = new DateChaining();
        //when
        //
        chain.setYear("2011").setMonth("07").setDay("17").setYear("2012");
        //then
        assertNotSame(chain.getYear(), is("2011"));
        assertThat(chain.getMonth(), is("07"));
        assertThat(chain.getDay(), is("17"));
    }
}
이렇게 쓰는 것에 낯설기는 하지만... 익숙하게 사용했을때 어떤 장점이 있는지 확인해보고 익혀두는 것도 나쁘지 않겠다.

발표자 : 채수원

테스트주도개발TDD실천법과도구
카테고리 미분류
지은이 채수원 (한빛미디어, 2010년)
상세보기
• 주제 : Play Framework 를 이용한 빠른 개발과 MongoDB를 이용한 실습

Play Framework :
• 목적 : 웹 서비스를 개발하는 방식에 대해 되짚어보고 '생산성' 이라는 측면에 대해서 생각해본다.
• 목표 : MongoDB와 Play framwork 의 컨셉을 이해한다.
∘ 특징적인 기능들을 간략히 살펴본다.
∘ 짧은 시간
• Live Coding(발표자가 발표현장에서 직접 소스코드를 작성하면서, 청중의 몰입을 유도하는 효과를 가져온다. 실수를 하면 웃을 수 있는 여유가 필요하다.)


No pain, No Gains!
• 생산성에 대환 포커스(Ruby on Rails)
• 토비의 스프링3 : 흉기로도 쓸 수 있는 자바 스프링 프레임워크 참고서적!!
토비의스프링3
카테고리 컴퓨터/IT > 프로그래밍/언어 > 프로그래밍일반
지은이 이일민 (에이콘출판, 2010년)
상세보기

• Java Web Frmeworks를 만든 사람들은 Java 개발자가 만들었지, Web Developer가 만든 것이 아니다.
• Productivity focus by Java : Play Framework
• GWT, Rails, Grails, Play!
• Play Framework 가 인기를 끄는 이유?
∘ Ready for REST
∘ Java Full Stack, 수많은 자바 OpenSource 프로젝트들을 포함하고 있음
∘ Pure Java
• 백번듣는 것보다 한번 보는 게 낫지.
∘ clonetwit
∘ play run clonetwit/
∘ Eclipse 로 프로젝트 import
∘ dev
∘ play eclipsify clontwit
∘ MVC
∘ Routing 처리 :  Rest 스타일의 URL 을 지정할 수가 있다. routes
• 개발에서 다른 사람의 방식을 보는 경우는 많지 않다.
• 생각해 볼 문제들
∘ 장점과 단점?
∘ 성능은 상대적이다?
‣ 자바가 1일때, RoR은 5, Play는 4
‣ 서비스의 성격에 따라서 고민
• One Possible Solution
∘ 복잡성을 가지지 않는 SQL
∘ NoSQL : SQL 을 안쓰고도 DB를 사용하자.
∘ MongoDB를 사용하는 것에 대한 이야기
‣ MongoDB가 타겟으로 삼고 있는 것
‣ 배우기 쉽고 쓰기 쉽고
‣ No SQL
‣ JavaScript
‣ JSON을 닮았음
‣ Replecation이 쉽다??
• 실행방법
∘ 압축을 푼다
∘ mongod
∘ 실행 끝
• MongoDB : Transaction 기능이 없다.
• 생산성에 대한 이야기
• NoSQL
∘ 장점과 단점
‣ 장점 : 쓰기 쉽다.
‣ 단점 : 조인이 안됨, 분야가 특정적이다.

Scap Folding 기능?


- 우리가 종종 우리에게 적합한 기술이 아니라, 우리가 쓰고 싶은 기술을 사용하기 위해 욕심(Desire)을 부린다. '욕심' 자체는 '악'이 아니지만, 타인을 희생하면서까지 그 욕심을 채우려 할 때 우리는 그것을 '탐욕' 이라고 부른다. 탐욕보다는 배려.




  많은 것을 보여주려는 욕심 때문에 시간을 조금 초과하시면서도 많이 아쉬워하셨던 발표였다.
  발표하시는 걸 들을 때마다 느끼는 거지만, 적절하게 던지는 농담과 돌발상황에 유연하게 대처하는 모습에서 연륜(!?)을 느끼게 하는 개발자다.
  지난 KSUG 발표회에서 강연을 듣고 난 이후부터 종종 뵙고 있는데, 그 때마다 새로운 무엇인가를 시도하는 '도전정신'으로 무장한 '여유로움'을 풍기는 개발자다.
  이 강연을 들은 주변의 개발자들이, Play Framework에 대한 관심을 가지기 시작했다. 거기에 나도 포함?
허니몬의 참가 트랙 및 현장 스케치
2011/06/20 - [Tech Trend(기술동향)] - [JCO] 2번째 Track : 도메인주도 개발(DDD)
2011/06/20 - [Tech Trend(기술동향)] - [JCO] 3번째 Track : Realtime Web application with Java
2011/06/20 - [Tech Trend(기술동향)] - [JCO] 4번째 Track : Framework Enginering
2011/06/20 - [Tech Trend(기술동향)] - [JCO] 5번째 Track : MongoDB with Play!

  지난 6월 19일, 삼성동 COEX에서 11번째 한국자바개발자컨퍼런스(http://kjdc.org/) 열렸습니다. KT가 주관사로 참여하고, 행사주관을 위한 이벤트기업과 계약하면서 행사진행이 이전의 컨퍼런스에 비해서 매끄러워졌다고 이야기들을 하시더군요. ^^

  원래는 MS에서 팝콘부스를 마련하여 맥주와 팝콘을 제공하려고 했었는데, COEX측에서 이를 거부하면서 팝콘돌이가 기운이 빠져있는지 계단에 널부러져 있습니다. 팝콘돌이가 열심히 돌아다니면서 개발자들과 어울려보려고 했지만, 우리나라 개발자들의 특성 중 하나인 '조용하고 내성적임'으로 인해 호응이 없자 기운빠져하는 모습이 역력했습니다.

  우리나라 개발자들도 잘 놀면 참 좋을텐데 말이죠. ^^;

  참고로, 저는 잘 못 놉니다. >ㅅ<);;;;

  계단 한구석에 앉아 넷북을 꺼내들고 뚜닥거리고 있는 사이에, 저와 비슷하게 도착한 이들이 들어가지 못하고, 행사장 입구에 있는 계단에 앉아서 트랙이 끝나기를 기다리고 있습니다. 가끔 해외 컨퍼런스에 참여한 개발자들이 보내오는 미국이나 해외컨퍼런스의 모습을 보면, 개발자들이 삼삼오오 모여 편안한 의자나 바닥에 앉아서 개발에 대한 이런저런 이야기를 나누면서 맥주한잔 하는 모습이 정말 부러웠는데, 그런 분위기를 연출할 기회가 잠시 주워졌었습니다. 하지만, 고품격(?) 전시회장인 코엑스에서는 행사관람객들이 아무곳에나 널부러져있는 것을 용납하지 않는 시설구조를 갖추고 있습니다. ㅡ_-); 어디 쪼구려앉아 있으면 시설물과의 부조화에 의한 위화감이 참 대단합니다.

이번 컨퍼런스는 크게 3개 주제로 진행이 되었습니다. 자바, 클라우드 컴퓨팅, 실습 의 주제로 7곳에서 50분씩 5개, 총 35개의 발표가 진행이 되었습니다. 오픈소스인 NoSQL에 속하는 MongoDB 쪽에 대한 많은 관심이 있었습니다. 아마도 클라우드 컴퓨팅, SNS의 대용량 데이터 처리에 대한 다양한 사례들이 나오면서 큰 유행을 일으키는 중이고, 앞으로도 NoSQL DB를 바탕으로 하는 다양한 서비스들이 출시될 것입니다.

  1500여 명의 개발자들이 참여한 이번 컨퍼런스는 제법 사람들로 북적였습니다. ^^; 저 사람들과 얼굴을 익히고 알게된다면 얼마나 좋을까요? 저에게는 살짝 무리일지도 모르겠습니다. 3개월동안 얼굴을 안보면, 얼굴과 이름을 까먹는 캐쉬메모리 기억력의 소유자거든요.... 헙...

한빛미디어에서 저자사인회를 주최하였습니다. 책을 구매하거나 가져온 책에 사인을 받으면 고급의 머그컵을 사은품으로 주는 사인회였습니다. 다만 아쉬운 점이라면, 한빛미디어가 행사장 안쪽에 부스를 개설하면서, 사인회도 구석에 마련되어 쉽게 발견할 수 없었다는 겁니다.  아는 분들이 모여 있어서 찾아가보니 저자분들의 사인회가 진행되고 있었습니다. 이렇게 구석에 마련된 사인회를 보고'헐~'하고 한탄이 절로 나오더군요.

  이왕 사인회를 할거면, 행사장을 향해서 자리를 잡았으면 더 많은 사람들이 찾아오고 저자분들도 많은 독자들과 만날 기회가 있었을텐데...


아마, 이날 코엑스에서 검은 백팩을 메고서 조용한 성격을 가졌을 것으로 보이는 사람들을 보셨다면,
99.99% 개발자였을 겁니다.


  많은 개발자들과 '우리나라 개발자' 들에 대한 이야기를 나누다보면 공통적으로 나오는 이야기가 있다.
'우리나라 개발자들은 조용하고 즐길 줄을 모른다.'
  오늘 JCO에서는 이례적으로 여성 아이돌그룹 '달샤벳'의 공연이 있었다.
http://yfrog.com/6fkhxz
  일반 대학 축제나 공연에서였다면 달샤벳은 열광적인 사람들의 환호성을 받으면서 공연을 마쳤을지 모른다.
기조연설이나 공연은 건너뛰고 와서, 사람들의 반응이 궁금해 물어보니, "팔짱을 끼고 조용히 경청했어요."라고 이야기해주는 이야기를 들으며 피식 웃음을 지을 수밖에 없었다. 그 아이돌 그룹은 얼마나 어색했을까?
  모두 팔짱을 켜고 조용히 그들의 춤사위에 집중하고 있었던걸까? ^^;;
  그나마 내가 만나는 많은 개발자들은 자신의 이야기를 상대에게 전하는 것에 어색해하지 않는다. 자연스럽게 자신의 생각과 기술에 대한 이야기들을 털어놓을 수 있는 흔하지 않은 개발자들이다. 한창 많은 것을 듣고 보고 배워야할 지금 내 입장에서, 그런 개발자들이 주변에 많다는 것은 너무나 이로운 일이다. ^^
   개발자는 자신이 배우고 알게된 것을 누군가에게 전하는 것을 즐길 수 있을 때 비로소 진정한 고수의 반열에 들어서게된다.
자신만 잘 아는 것은 결코 고수라 할 수 없다.
나도 내년에는 저 앞에 서서 발표를 하고 싶어졌다.

+ Recent posts