'전체'에 해당되는 글 107건

  1. 2010/07/17 2010/07/10 JCO 세미나 KSUG 트랙의 발표자료 (2)
  2. 2010/06/03 웹 프레임워크의 Web tier 처리방식과 Spring MVC - Adobe 후원세미나 발표자료
  3. 2010/05/17 자바 개발자를 위한 ‘共感(공감)’을 찾아서 두번째
  4. 2010/04/24 2010/04/17 KSUG 세미나 관련 자료 모음 (11)
  5. 2010/04/22 제10회 스프링 사용자 모임 세미나 후기 이벤트 (5)
  6. 2010/04/18 스프링 시큐리티를 이용한 웹 보안 (KSUG세미나 발표자료) (2)
  7. 2010/02/21 [Spring Roo]'스프링 루와 함께하는 쾌속 웹개발' 발표자료(Adobe 후원 세미나) (4)
  8. 2010/01/28 [Spring Batch] Spring Batch Monitoring System by 자바지기 (1)
  9. 2010/01/28 StringTemplate 소개 (1)
  10. 2010/01/27 자바 개발자를 위한 ‘共感(공감)’을 찾아서 (1)
2010/07/17 09:20

2010/07/10 JCO 세미나 KSUG 트랙의 발표자료

* 발표자료
- 테스트 가능한 소프트웨어 설계와 TDD작성 패턴 - 채수원님 :


- 리팩토링과 검증 - 차민창님


- Google App Engine for Java & Spring - 박성철님 :


* 후기
- Outsider님 : http://blog.outsider.ne.kr/494, http://blog.outsider.ne.kr/495
Trackback 0 Comment 2
2010/06/03 13:35

웹 프레임워크의 Web tier 처리방식과 Spring MVC - Adobe 후원세미나 발표자료



 지난 2010년 5월 29일에 있었던 Adobe 후원세미나에서 발표한 자료입니다.
Trackback 0 Comment 0
2010/05/17 16:25

자바 개발자를 위한 ‘共感(공감)’을 찾아서 두번째

Trackback 0 Comment 0
2010/04/24 06:39

2010/04/17 KSUG 세미나 관련 자료 모음

지난 2010년 4월17일에 있었던 KSUG 세미나에 대해서 지금까지 공개된 자료들을 정리합니다.

- 계속 업데이트 예정입니다.



 

후기모음

아웃사이더님 - http://blog.outsider.ne.kr/456 http://blog.outsider.ne.kr/457
Decoder님 - http://decoder.tistory.com/980 http://decoder.tistory.com/981
POD님 - http://masterguru.tistory.com/entry/10회-KSUG-후기

추가:

동영상링크가 개인서버라 언제 죽을지 몰라 torrent를 만들어보았습니다.


2-이동욱님-스칼라.mp4.torrent
3-고종봉-스프링 시큐리티.mp4.torrent
4-백기선-스프링by봄싹.mp4.torrent
6-박재성-메이븐.mp4.torrent

애용해주세요.

Trackback 2 Comment 11
2010/04/22 16:25

제10회 스프링 사용자 모임 세미나 후기 이벤트

안녕하세요.

스프링 상조회 큰일꾼입니다.

지난 토요일(17일)에 진행된 세미나에 참여해주신 분들께 감사드립니다. 정말 미진하게 준비한게 미안할 정도로 좋은 발표가 좋은 분위기 속에서 진행됐습니다. 정말 흥겨운 축제를 치른 느낌입니다.

여러분이 이미 후기를 올려주시고 계신데 참석하지 못하신 분들도 같이 나눌 수 있었으면 해서 후기 공모 이벤트를 진행하려고 합니다. 세미나에 참여하셨던 분 중에 세미나를 잘 정리해서 블로그에 올리신 후에 이 글에 트랙백을 걸어주시거나 댓글로 링크를 남겨주시면 두분을 선정해서 거부할 수 없는 선물을 드리겠습니다.

선물은 다름 아니라 스프링 구루이신 토비(이일민)님이 오랫동안 힘들여 쓰신 스프링 책입니다. 아직 제목이 안 정해져서 그냥 스프링 책이라고만 말씀드리지만 감히 지금까지 나온 어떤 스프링 책 보다 훌륭할 것이라고 장담할 수 있습니다. 스프링을 모르는 분도 쉽게 읽을 수 있으면서 이미 쓰고 계신 분이라고 하더라도 스프링을 "올바로" 쓰는 방법이 무엇인지 점검 받을 수 있는 책이 될 것입니다.

개인적으로 우리나라에서 로드 존슨의 두 책이 올바로 보급되지 못한 게 불행이라고 생각하고 있습니다. 한 권은 번역이 무척 아쉽고 또 한 권은 미처 출판할 기회를 얻지 못했습니다. 이 두 책이 정상적으로 보급되기만 했어도 자바 개발자의 삶이 한층 개선되지 않았을까 생각해봅니다. 그리고 전 토비님의 책이 이 결핍 상황을 보완하리라고 확신합니다.

그래서 이 책 두 권을 받을 수 있는 교환권!을 이벤트 상품으로 내 걸겠습니다. (우와~)

주 초에 시작했어야 했는데 좀 늦었네요. 이벤트는 월말까지 진행하도록 하겠습니다.

그럼 많은 참여 부탁드립니다.
Trackback 1 Comment 5
2010/04/18 09:52

스프링 시큐리티를 이용한 웹 보안 (KSUG세미나 발표자료)

KSUG 세미나에서 "스프링 시큐리티를 이용한 웹 보안"이라는 주제로 발표한 자료를 공유해 드립니다.

(급하게 찾으시는 분이 계셔서 별도의 가공없이 발표자료 그대로 올려드립니다. ^^;)

발표한 PPT 파일과 Copy&Paste용 소스코드 입니다.



Trackback 0 Comment 2
2010/02/21 22:56

[Spring Roo]'스프링 루와 함께하는 쾌속 웹개발' 발표자료(Adobe 후원 세미나)


 지난 2010/02/20 있었던, Adobe 후원 'Java개발자를 위한 공감' 세미나에서 발표한 자료와 데모 때 사용한 코드입니다.




 그리고 발표내용은 Outsider님이 쓰신  자바 커뮤니티 공동 세미나 "자바 개발자를 위한 ‘共感(공감)’을 찾아서" #2  페이지에 잘 요약되어 있습니다. (잘 정리해 주셔서 감사합니다~)

 데모 때 사용한 roo 버전은 1.0.1이였는데, 같은날 바로 1.0.2가 나왔습니다.
 * Spring Roo 1.0.2 (GA) Released : http://www.springsource.org/node/2399

Trackback 2 Comment 4
2010/01/28 20:34

[Spring Batch] Spring Batch Monitoring System by 자바지기



  자바지기 박재성님께서 Spring Batch의 메타데이터 테이블을 조회하고 Job을 수동실행 시킬 수 있는 관리프로그램을 개발하셨습니다. 즉, 배치작업들의 실행결과, 실행시각, 처리한 건수 등을 조회하고, 필요하다면 웹브라우저를 통해 Job을 실행할 수도 있는 것이죠.

Spring Batch Monitoring System 공개 및 요구사항 수렴 
Spring Batch Monitoring System 개발자 인터뷰

  앞으로 많은 분들에게 도움이 될 수 있는 프로젝트로 발전이 될 것이라 믿습니다.


Trackback 0 Comment 1
2010/01/28 01:22

StringTemplate 소개

Mail 발송 삽질을 하다가 StringBuilder가 너무 보기 싫어 File을 이용해 메일 템플릿을 구현할 작정으로 검색을 해보았습니다. 스트링 관련 검색을 하다보니 벨로시티도 나오고 하다가 유독 StringTemplate이 괜찮다는 문구를 보고 찾아 들어갔습니다. 진짜 문자열 템플릿 엔진이더군요.

방식은 간단합니다. 파일을 읽고, 문자열을 대체한다. 물론 우아 하게 대체를 합니다. 그래도 짧은 시간안에 StringBuilder 와 "...." + "..."+를 갈아 치우게 되었습니다.

일단 잡다한 미사어구는 집어 치우고 예제들어갑니다.
예제는 String = ""; 이지만 실제는 File기반으로 쓰는경우가 더 많겠지요.



StringTemplate template = null;


// setAttrubte로 값을 넣습니다.

template = new StringTemplate("안녕하세요. 저는 $name$입니다.");

template.setAttribute("name", "lee,jaeil");

System.out.println(template.toString());


간단하게 StringTemplate를 생성하고, 대체할 문자는 $$를 씁니다. 형식이 틀리다면 에러를 냅니다.
setAttribute로 추가를 하고, toString()해주면 원하는 결과가 나옵니다.



StringTemplateGroup group = new StringTemplateGroup("mygroup", "특정폴더");

template = group.getInstanceOf("basic");

System.out.println(template.toString());


특정폴더에 basic.st라는 템플릿 파일을 읽어들입니다. 당연히 syntax는 모두 동일합니다.


static class User {

private String name;

private int age;

private String job;

public User(String name, int age, String job) {

super();

this.name = name;

this.age = age;

this.job = job;

}

public String getName() {

return name;

}

public int getAge() {

return age;

}

public String getJob() {

return job;

}

public String toString() {

return String.format("{name : %s, age : %s, job :%s}", name, age, job);

}

}


User me = new User("lee,jaeil", 19, "student");

template = new StringTemplate("안녕하세요. 저는 $user.name$이고 $user.age$살이고 $user.job$입니다.");

template.setAttribute("user", me);

System.out.println(template.toString());


내장객체가 아닌 유저가 만든 객체도 넣습니다. 물론 이게 안되면 말이 안되죠. 접근은 .을 씁니다.
사실은 객체의 toString()메소드를 출력하는것입니다. String, int boolean 모두 toString을 뽑아냅니다.

template = new StringTemplate("$user$");

template.setAttribute("user", users);

System.out.println(template.toString());




//  map도 지원합니다.

HashMap hm = new HashMap();

hm.put("name", "lee,jaeil");

hm.put("age", 19);

hm.put("job", "student");

template = new StringTemplate("안녕하세요. 저는 $user.name$이고 $user.age$살이고 $user.job$입니다.");

template.setAttribute("user", hm);

System.out.println(template.toString());

물론 Map도 지원합니다.


// Multi Values일 경우 이여 붙히지만, 구분자를 둘수 있습니다.

// Collection도 됩니다.

User[] users = new User[] {

new User("lee, jaeil", 19, "student")

, new User("seo,hyunju", 18, "student")

};

template = new StringTemplate("안녕하세요. $users; separator=\", \"$ 입니다.");

template.setAttribute("users", users);

System.out.println(template.toString());

배열일경우 연달아 출력하고 $$에 ;를 이용해서 args를 줄수있습니다. 배열일경우 separator를 인식합니다. 값은 꼭 ""를 사용해야합니다.


// Group을 정하고 다른 Template을 include  합니다.

// Group을 정해야 다른 템플릿을 사용가능합니다.

StringTemplateGroup group = new StringTemplateGroup("mygroup", "/Users/jilee/Documents/workspace-sts-2.2.1.RELEASE/StringTemplateSample/sample");

template = group.getInstanceOf("basic");

System.out.println(template.toString());

특정 폴더 이하를 group으로 묶을수 있습니다. basic.st와 bold.st를 그위치에 지정합니다.

basic.st

안녕하세요. $bold(it="test")$  입니다.


bold.st

<b>$it$</b>


bold라는 템플릿을 인클루드합니다. it는 템플릿이 args를 받을수 있는데 기본 변수 이름이 it입니다.

// 템플릿 파일을 property에 : 로 접근하여 사용할수 있습니다.

template = new StringTemplate(group, "안녕하세요. 저는 $user.name:bold()$이고 $user.age$살이고 $user.job:bold()$입니다.");

template.setAttribute("user", me);

System.out.println(template.toString());

템플릿Include를 이용해서 다양한 기능을 구사 할수 있습니다. :접근자를 이용해서 bold템플릿을 치환하고 그 값은 $it$로 받게 되어 <b></b>를 끼워 넣을수 있습니다.
간단한 템플릿을 구성하면
<html>
<head>$head()$</head>
<body>
<div>
$content()$
</div>
<div>
$footer()$
</div>
</body>
</html>

위와 같은 식으로 group으로 묶은 폴더 밑에 head.st, conten.st, footer.st를 구성할수 있습니다.


// 반복된값을 출력합니다.

// :{}를 사용합니다. :{ 와 | 사이의 이름으로 각각의 객체를 받습니다.

template = new StringTemplate("$users:{u | <ul><li>$u.name$,  $u.age$, $u.job$</li></ul>}; separator=\"\n\"$");

template.setAttribute("users", users);

System.out.println(template.toString());

Table에서 row값출력을 구현할수 있습니다. jstl의 foreach보다 훨씬 간단하지만, 그래서 햇갈렸습니다. :{}접근자를 이용해서 u라는 인스턴스로 각각의 값을 받아 users갯수만큼 그려주게 됩니다. 마찬가지로 ;를 이용해 separator를 줄수 있습니다.



// 조건문을 사용

template = new StringTemplate("$if(users)$ $users:{u | <ul><li>$u$</li></ul>}; separator=\"\n\"$ $endif$");

//template.setAttribute("users", users);

System.out.println(template.toString());

$if(...) ...값이 존재하거나 size 0보다 크다,  boolean true일때 참이게 됩니다.



//$를 쓰고 싶다면 \를 사용

template = new StringTemplate("\\$ $\\n$ $\\t$ $\\r$");

System.out.println(template.toString());


//주석도 사용할수 있음

template = new StringTemplate("$! this is a comment !$ ");

System.out.println(template.toString());

뭐 이건 알아두면 좋구요. $값이 중요한 시그니처임으로 템플릿에서는 \값을 이용해야 출력할수 있습니다.


마지막으로 가장중요한 Format에 대하 알아보겠습니다.

static class StringRender implements AttributeRenderer {

@Override

public String toString(Object o) {

return o.toString();

}

@Override

public String toString(Object o, String formatName) {

if("escape".equals(formatName)) {

String s = o.toString();

return s.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

}

return toString(o);

}

}

static class DateRender implements AttributeRenderer {


@Override

public String toString(Object o) {

return o.toString();

}


@Override

public String toString(Object o, String formatName) {

if("simple".equals(formatName)) {

return new SimpleDateFormat("yyyy-MM-dd").format(o);

}

return toString(o);

}

}

처음에 당황스러운게 html에서 중요한 specialchars를 변환하는 내장기능이 없었습니다. 문서를 보니 해당 도메인마다 적절하게 구현 해주면 되는것이더군요. 특정객체를 선언하고 formatName을 다르게 받아 여러가지 포맷팅을 가능하게 해줍니다. 

// AttributeRenderer를 이용하여 포맷을 결정한다.

template = new StringTemplate("Today date is $currentTime; format=\"simple\"$ $html; format=\"escape\"$");

template.registerRenderer(String.class, new StringRender());

template.registerRenderer(Date.class, new DateRender());

template.setAttribute("currentTime", new Date());

template.setAttribute("html", "<a href=\"\">test</a>");

System.out.println(template.toString());



기본적인 StringTemplate기능을 소개해봤습니다. 저는 몰랐지만, www.jGuru.com에서 쓰던 Template엔진을 라이브러리로 제공한것이라고 하더군요. 다음번에는 MVC모델에 직접 적용해봐야겠습니다.

참고자료


예제파일을 추가했습니다.
BasicUsage.java


Trackback 3 Comment 1
2010/01/27 16:52

자바 개발자를 위한 ‘共感(공감)’을 찾아서

Adobe의 후원으로 자바 커뮤니티 공동 세미나가 "자바 개발자를 위한 ‘共感(공감)’을 찾아서"라는 주제로 열리는데 저희 KSUG도 참여하게 되었습니다.

KSUG에서는 정상혁님이 스프링 루(Spring Roo)를 소개하고 시연하는 시간을 갖을 계획입니다. 의미있는 시간이 되기를 바라면서 관심 있는 분은 많은 참여 바랍니다.

무엇보다 아이폰 앱 "서울 버스"로 유명한 유주완님의 세션도 마련되어 있습니다. 빨리 신청하셔야 할 것 같습니다.


Trackback 2 Comment 1