[dW] JUnit과 TestNG 자세히 살펴보기

Posted at 2009/01/31 22:40// Posted in 나만의 작업/dW
JUnit

테스트 픽스쳐는 특정 로직이 테스트 전후에 실행되도록 보장하는 하나의 약정이므로 손쉽게 재활용할 수 있다.
JUnit 4 이전 버전에서는 setUp() 메소드에서 각 메소드마다 필요한 일들을 명시하면, 각 테스트 메소드가 실행되기 전에 각각 한번씩 실행이 되었다.

하지만  픽스쳐에 따른 상당한 오버헤드가 있었고 이 메소드를 한번만 하게 하려면 한번만 실행되도록 지정하는 방법이 번거로웠지만, JUnit 4에서는 모든 테스트에 대해 또는 전체 클래스에 대해 한 번 픽스쳐를 실행하거나, 아예 실행하지 않을 수 있도록 좀더 유연해 졌다.

클래스를 겨냥한 @BeforeClass, @AfterClass : 한 클래스에서 한번만 일어나도 되는 일들을 정의
메소드를 겨냥한 @Before, @After : 각 메소드마다 한번씩 일어나야하는 일들을 정의

매개변수 테스트 작성하기 5단계
  1. 매개변수를 사용하지 않는 일반 테스트를 작성한다.
  2. Collection 유형을 반환하는 static 피더 메서드를 작성하고 @Parameter 주석으로 표시한다.
  3. 첫 번째 단계에서 정의한 일반 메서드에 필요한 매개변수 유형에 대한 클래스 멤버를 만든다.
  4. 이러한 매개변수 유형을 사용하고 이를 세 번째 단계에서 정의한 클래스 멤버와 연결하는 생성자를 만든다.
  5. @RunWith 주석을 통해 Parameterized 클래스와 함께 실행할 테스트 케이스를 지정한다.

exception 테스트 : 특정 유형의 예외가 발생할 경우에 테스트가 통과하는 것.

public void testDivisionByZero() {
try {
int n = 2 / 0;
fail("Divided by zero!");
}

catch (ArithmeticException success) {
assertNotNull(success.getMessage());
}
}



기존에 이렇게 예외처리를 테스트하였다면, JUnit 4에선,

@Test(expected=ArithmeticException.class)
  public void divideByZero() {
int n = 2 / 0;
}
이렇게 exception을 테스트할 수 있다.





테스트 무시하기

이전에 작성했던 테스트 메소드가 지금 당장 무시하고 싶다면!!!
@Ignore를 이용하자~


Timed test

@Test(timeout=2000)
public void remoteBaseRelativeResolutionWithDirectory()
throws IOException, ParsingException {
builder.build("http://www.ibiblio.org/xml");
}




TestNG
Junit4와 마찬가지로 네 가지 유형의 설정 메소드들이 있다.

  • beforeTestClass 메소드 : 테스트 메소드가 실행되기 전, 클래스가 인스턴스로 된 후에 실행된다.
  • afterTestClass 메소드 : 클래스의 모든 테스트 메소드가 실행된 후 이 메소드가 실행된다.
  • beforeTestMethod 메소드 : 클래스의 모든 테스트 메소드가 실행되기 전에 이 메소드가 실행된다.
  • afterTestMethod 메소드 : 클래스의 모든 테스트 메소드들이 실행된 후 이 메소드가 실행된다.

그림 2. 테스트 클래스 수명주기
Lifecycle of a test class


exception  검사
@ExpectedExceptions annotation을 이용.

public class NumberUtilsTest
{
@Test(groups = {"tests.math"})
@ExpectedExceptions(NumberFormatException.class)
public void test()
{

NumberUtils.createDouble("12.23.45");
assert false; //shouldn't be invoked
}

}

추가 : 2009.2.20
기존의 @ExpectedExceptions는 deprecated되어서
@Test(expectedExceptions = " ... ")
이렇게 쓰라고 한다.
 
@Test(expectedExceptions = NumberFormatException.class)


참고
JUnit 4로 뛰어들기
An early look at JUnit 4
예제를 통한 TestNG 살펴보기

테스트엔지로 자바 단위 테스트를 쉽게! 



댓글을 남겨주세요

Name *

Password *

Link (Your Homepage or Blog)

Comment

Secret


개발자라면 프로그램을 짤때마다 항상~ 고민되는 테스트를 어떻게 최대한 구멍없이 하여 
멀쩡한 프로그램을 짤까~~가  늘~ 고민중의 하나이겠지요.

Junit을 이용하여 단위테스트를 하긴 하지만, Database를 사용한다면 기본적인 CRUD 테스트 메소드 말고 내 눈에 안보이는 구멍난 부분을, 더 많은 기능을 복잡하게 하는 부분을 어떻게! 어떻게!! 테스트해야할까.. 고민에 빠져서 자료를 찾아보니...  


이 글에선 많이 유명한 Junit과 DbUnit을 쓰라는 간략적인 내용이 나와있고, 또 성능에 대한 고민은 JUnitPerf이라는 성능 테스트 도구를 이용하면 되는군요.
JUnitPerf는 Junit과 함께 작동하는 프레임워크로 미리 정해진 시간 안에 테스트가 미쳐 다 수행이 되지 않으면 테스트가 실패로 나오는 방법이군요.

또, Selenium 프레임워크를 통해 기능 테스트를 할 수도 있습니다.

Cobertura를 이용하여 작성한 테스트들을이 실행될 때 적용을 받는 코드의 양을 나타낼 수 있는데, 
HTML리포트를 작성하는 Ant를 작성하여 HTML로 코드의 양을 볼 수도 있습니다. 

이러한 도구들을 이용하면 좀 더 구멍 막는 프로그램을 짤 수 있을까 하는 안도(?)의 한숨이 놓아지는군요.

관련된 글 


댓글을 남겨주세요

Name *

Password *

Link (Your Homepage or Blog)

Comment

Secret


이 튜토리얼에선 본(Bourne) 셸 스크립트로 프로그래밍을 작성하여 처리하는 예제가 있습니다.
제가 모르는 것만 정리해 둡니다~ 더 자세한 내용은 링크를.. 이용해 주세요^^

주석 셸에서 # 기호는 주석 행을 뜻한다. (쓸일이 없어서 몰랐군..)

bc를 이용하여 진법 변환하기
bc는 임의의 정밀도를 제공하는 계산기 언어(arbitrary precision calculator language)로, 대다수 유닉스 배포판에서 제공한다. 출력 진법을 지정할 수 있으므로 10진법 이외에 다른 진법으로 결과를 출력할 때 유용하다.

인라인 입력
Here-document를 생성하려면 명령행에서 셸 연산자 <<와 제한 문자열(limit string)을 지정한다. 제한 문자열은 공백이 없는 한 어떤 문자열이라도 괜찮다.
$ cat << buriEND
buriEND라는 글자를 치기 전까지 계속~입력받는다.

here-document를 이용하여 셸 스크립트 사용법 정보를 출력할 수 있다.

셸 안에서 셸 실행하기
현재 셸에서 서브셸(subshell)이라는 새 셸을 띄운 후 명령이나 명령 목록을 실행하기도 한다. 서브셸을 띄우면 현재 셸은 서브셸의 부모가 된다. 서브셸은 부모 환경을 그대로 이어받는다. 자식 셸과 부모 셸 사이에 입출력 재지정도 가능하다. 하지만 서브셸은 부모 환경을 수정하지 못한다. 스크립트를 실행하는 셸 환경은 그대로 유지하면서 특정한 명령군을 실행하는 셸 환경만 바꾸고 싶다면 서브셸이 적합하다. 동시에 오래동안 돌아갈 백그라운드 프로세스를 여러 개 시작할 때도 서브셸이 적합하다. 한 셸에서 서브셸을 여러 개 띄울 수 있으며, 재귀적으로 각 서브셸이 다시 서브셸을 여럿 띄울 수 있다. 

키보드 입력 : read 명령

!!! Point!!! 유용한 한 줄짜리 셸 코드
  • 현재 디렉터리에서 파일 이름이 정확히 두 자인 파일을 모두 찾아 .ppm이라는 확장자를 추가한다.

    for i in ??; { mv $i $i.ppm; }
    

  • tar와 서브셸을 사용하여 디렉터리 트리 전체를 복사한다. 파일 권한은 그대로 유지한다.

    ( cd source ; tar pcf - * ) | ( cd target ; tar pxvf - )
    

  • 이진수를 읽어 십진수로 출력한다.

    read BINLOC;echo $((2#$BINLOC))
    

  • /usr/local 디렉터리에서 확장자가 .mp3인 파일을 모두 찾은 후 각 파일을 bzip2 유틸리티로 압축한다. 이름에 공백이 들어가는 파일도 포함한다.

    find /usr/local -name "*.mp3" | while read name ; do bzip2 $name; done
    

  • 파일에서 10진수 값 전부를 16진수로 출력한다.

    cat file | while read number ; do echo $((0x$number)); done
    

  • 파일에서 10진수 값 전부를 16진수로 변환하여 새로운 파일에 저장한다. 새 파일 이름은 원래 파일 이름에 .hex 확장자를 추가한다.

    cat file | while read number ; do echo $((0x$number)) >> file.hex; done
    

  • 루프를 열 번 돌면서 command를 추가한다. command 인수로 0, 10, 20, ..90까지 숫자를 넘긴다.

    i=0; while [ $i -ne 100 ]; do command $i; i=$(($i+10)); done





  1. 2009/01/29 11:53 [Edit/Del] [Reply]
    다녀간 것도 이제야 확인을 했네^^
    유닉스 명령어....... 정말 지겹게 썼고.. 많이 안다고 생각했었는데...
    그 길을 떠난지 1년도 채 안되어 거의 다 잊어가네;;
    다시 보면 기억이나 하려나 모르겠다..^^

    당장 다음 월요일인 2월 2일에 출국예정이기에.. 마음만 무거워~
    하연이와 하연맘을 두고.. 홀로 3개월간 나가려니..흑흑..ㅠㅠ

    새해 복 많이 받구~
    행복만으로 가득한 한해가 되길 바래^^
    • 2009/01/30 21:45 [Edit/Del]
      앗!! 곧 있으면 출국하시는군요..3개월동안 몸건강하시구..
      늦었지만 새해 복도 많이 받으시구,
      그곳에서도 안부 전해주세요~^^

댓글을 남겨주세요

Name *

Password *

Link (Your Homepage or Blog)

Comment

Secret

[dW] iBatis에 관한 글들

Posted at 2008/12/30 10:44// Posted in 나만의 작업/dW

iBatis에 관한 글을 찾다가 좋은 글 발견!~
dW에 있는 내용인데 보려면 로그인이 필요하지만 단계별로 따라하기 좋은 문서이다.

Improve persistence with Apache Derby and iBATIS, Part 1: Initial configuration, semantics, and a simple test 

- What is iBatis?
- Advantages of iBatis
- iBatis Data Mapper semantics
- Configure derby and iBatis
- Test derby and iBatis

Improve persistence with Apache Derby and iBATIS, Part 2: Data definition in Derby 

- JPetStore history/build/run
- DAO framework
- Data model
- Object model
- Taking iBatis out for a spin


Improve persistence with Apache Derby and iBATIS, Part 3: Transactions, caching, and dynamic SQL 

- Transactions using Derby and iBatis
- Caching in iBatis
- Dynamic SQL in iBatis
- Standalone DAO example

댓글을 남겨주세요

Name *

Password *

Link (Your Homepage or Blog)

Comment

Secret

[dW] Dojo concepts for Java developers

Posted at 2008/12/27 01:29// Posted in 나만의 작업/dW

자바 개발자를 위한 Dojo 컨셉 - Declaring classes and setting context

자바에 익숙한 개발자가 Dojo를 이용한 자바스크립트를 사용할 때 차이점과 혼돈을 해결해주기 위해~ Dojo 컨셉을 설명해 주는 영문 article이 있길래~ 간추려 남겨봅니다.

1. The JavaScript hash
Hash는 curly brace ({})사이에 attribute의 set으로 표현된다. hash는 6개의 attribute로 이뤄져 있다.
string, integer, boolean, undefined attribute, 다른 hash, function

Listing 1. Example JavaScript hash
var myHash = {
str_attr : "foo",
int_attr : 7,
bool_attr : true,
undefined_attr : null,
hash_attr : {},
func_attr : function() {}
};
JavaScript는 weakly type이라는게 중요한데, 각 attribute는 value가 이름에 linked될 때 초기화된다.
2. Functions are objects
JavaScript function은 다른 function에 argument를 set, referenced, passed 할 수 있다는게 object와 같다. Java method와 JavaScript function사이의 중요한 차이점은 JavaScript function은 다른 context에서 실행될 수 있다. Java programming은 keyword인 this로 쓰여진 class의 현재 instance를 참조하지만, JavaScript function이 사용될 때 this는 function이 실행되고 있는 context를 참조한다.
3. Declaring classes

class를 정의하는데는 세개의 object가 필요하다.
1. class의 unique한 이름
2. extend 할 function
3. attribute와 function을 정의하는 hash

Listing 4. Basic class declaration
				
dojo.declare(
   "myClass",
   null,
   {}
);


Listing 5. Basic class instantiation
				
var myClassInstance = new myClass();

class를 정의하는데 관한 tips

1. "myClass" 라는 이름을 더욱 정확하게 valid한 이름으로 정의하려면 fully quailified class name의 스타일로 정의하는 것이 좋다. 예를 들면~ "com.ibm.dojo.myClass"로~~

2. 마지막 attribute후에 오는 ,(콤마)는 firefox와 같은 브라우저는 무시할 수 있지만 다른 브라우저(ie) 같은 것은 안그럴수도 있으니 주의~~

자바 코드에서는 다중으로 오버로드한 constructor(생성자)를 정의하여 class의 instantiation에 접근할 수 있는 많은 방법이 있는데 dojo Class에서는 preamble, constructor, postscript에서 할 수 있다. 하지만 constructor를 정의할때 필요한 중요한 경우가 있다.

- 다중 상속과 비슷하게 다른 클래스를 mixing-in 하지 않은 한 preamble이 필요할 일이 없다.
extended와 mixed-in class를 실제 passed하기 전에 constructor argument를 조작하는 것을 허용할 수 있다.

4. Complex attribute rules

Class attribute는 정의될때 초기화가 된다. 하지만 만약 attribute가 복잡한 object type(hash나 array같은)로 초기화가 되어야한다면 자바에서 public static 변수같은 attribute가 되어야 한다.
이것은 어떤 instance가 변경될때 reflect되어 있는 다른 instance도 변경되어야 함을 의미한다.
이 문제를 피하기 위해 복잡한 attribute는 constructor에서 초기화 되어야 한다. 하지만 string, boolean, 기타 등등과 같은 간단한 attribute는 필요하지 않다.

Listing 7. Global class attributes
				
dojo.declare(
    "myClass",
    null,
    {
        globalComplexArg : { val : "foo" },
        localComplexArg : null,
        constructor : function() {
                          this.localComplexArg = { val:"bar" };                          
                      }
    }
);

// Create instances of myClass A and B...
var A = new myClass();
var B = new myClass();

// Output A's attributes...
console.log("A's global val: " + A.globalComplexArg.val); 
console.log("A's local val: " + A.localComplexArg.val); 

// Update both of A's attributes...
A.globalComplexArg.val = "updatedFoo";
A.localComplexArg.val = "updatedBar";

// Update B's attributes...
console.log("A's global val: " + B.globalComplexArg.val);
console.log("A's local val: " + B.localComplexArg.val);
            


Figure 3. Class attributes
Class attribues

5. Overriding methods

자바코드에서는 오버라이드된 메소드를 호출하게 위해 super에 있는 메소드를 호출한다.
예를 들면 super().methodName(arg1, arg1); 
이렇게, 하지만 Dojo 에서는 inherited 메소드를 이용한다. (this.inherited(arguments);)

Listing 8. Invoking superclass method in Dojo
	
dojo.declare(
    "parent",
    null,
    {
        helloWorld : function() {
                         console.log("parent says 'hello world'");
                     }
    }
);

dojo.declare(
    "child",
    parent,
    {
        helloWorld : function() {
                         this.inherited(arguments); // Call superclass method...
                         console.log("child says 'hello world'");
                     }
    }
);

var child = new child();
child.helloWorld();


Figure 4. Output from invoking superclass method in Dojo
Output from invoking superclass method in Dojo 

6. Setting method context

자바코드에서 class scoped 변수에 접근할 때 this 키워드를 사용해서 접근할 수 있지만 Dojo에서는 context가를 잃어버린다(자바스크립트의 this는 실행할때의 context를 가르키므로~)

Dojo에서 확실하게 context를 세팅하는 법은~

Listing 11. Setting correct context in Dojo
	
dojo.declare(
    "myClass",
    null,
    {
        targetArray: null,
        constructor: function(source) {
                         // Initialise in constructor to avoid making global
                         this.targetArray = []; 

                         // Copy each element from source into target...
                         dojo.forEach(source, 
                                    function(item) {
                                        this.targetArray[this.targetArray.length] = item;
                                    }, this);
                     },
    }
);

  
Listing 12. Setting context in dojo.subscribe
	
dojo.declare(
    "myClass",
    null,
    {
        subscribe : function() {
                        dojo.subscribe("publication",
                                       this, 
                                       function(pub) { 
                                           this.handlePublication(pub);
                                       });
                    },

        handlePublication : function(pub) {
                                console.log("Received: " + pub);
                            }
    }
);
                


Listing 13. Setting context in dojo.connect
	
dojo.connect(obj1, "methodA", obj2, "methodB");
 

원문 : Dojo concepts for Java developers

custom dojo widget을 만들때 참고할만한 문서~(Writing a custom Dojo application)

댓글을 남겨주세요

Name *

Password *

Link (Your Homepage or Blog)

Comment

Secret

[dW] IBM campus wizard 모집

Posted at 2008/12/22 17:49// Posted in 나만의 작업/dW

어느덧~ 2008년의 마무리를 알려주는 2009년 4기의 IBM campus wizard 모집을 하는군요.

대학생만 대상으로 하는거라, 저는 참여할 수 없지만 제가 대학생일때 이런게 있었다면, 

참여를 꼭 했을텐데.. 그땐 하지도 않았고, 정보에 지금보다 더 뒤지고 있을때라..^^ 못해봤지만, 

디벨로퍼웍스를 모니터링만 하는것으로도 현재 흐름을 파악하기에 좋은 것 같아요.

더구나 좋은 글도 많고~ 자기 능력을 올리는데 많은 도움이 될 듯 합니다.^^

전국에서 모이는 대학생들과의 교류도 재미있을 것 같고~

관심있으신 분들은 신청해보세요~^_^

신청 -> http://www.ibm.com/developerworks/kr/event/monitor/4th/



댓글을 남겨주세요

Name *

Password *

Link (Your Homepage or Blog)

Comment

Secret


어떤 프로그램이던지 오류가 있기 마련이고, 그에 대한 해결을 얼마나 어떻게 잘해야하는건 프로그래머에게 달려있다.
프로그램을 짜는 사람이 사용자입장에서 보아도 제일 화가나는 프로그램은 이런 오류가 있다! 하고 그냥 죽어버린다거나, 심지어는 오류를 뱉어내지도 않고 그냥 죽는 프로그램일 것이다.

이러한 오류를 처리하기 위해선, 우수한 오류 처리 코드 요건이 있는데..
  • 사용자를 우선한다.
    • 뉴저지 주에 사는 컴퓨터 사용자든, 3층에 있는 웹 개발자든, 뉴욕 증권 거래소 소장이든, 일단 내 고객이 누구인지 파악하고나면, 해당 고객이나 고객층을 고려하여 코드를 작성한다. 내 고객이 일반 컴퓨터 사용자라면 프로그래밍 용어를 배제하고 이해하기쉬운 오류 메시지를 제공한다.

  • (꼭 필요하지 않는 한) 프로그램 흐름을 방해하지 않는다.
    • 문제를 돌아가는 길을 찾는다. 프로그램을 죽이거나, “죄송합니다. 운이 없군요”라는 문구를 내놓거나, 호출 스택 내용을 쏟아내는 방식은 오류 처리가 아니다. 이런 행위는 오류 보고다. 진짜로 어쩌지 못하는 최악의 상황에서만 프로그램 흐름을 완전히 중단한다. 파일이 완전히 누락되었거나, 자료가 복구하지 못할정도로 손상되었거나, XML 문서에서 필수 엘리먼트가 빠졌을 때만 사용자 작업을 중단한다. 고속도로 네다섯 곳이 홍수로 끊기고뒷골목이 완전히 수몰되었을 경우에만 가는 길을 중단하라는 뜻이다. 즉, 진정한 재난이 아니라면 프로그램을 중단하지 말라는 뜻이다.

  • 유용한 정보를 제공한다.
    • 오류를 어떻게 처리하든 오류 처리 코드는 유용한 정보를 제공해야 한다. 프로그램 사용자가 원했거나 요청한 정보를 제공하거나애초에 프로그램이 제공하려던 정보를 제공한다면 더 이상 바랄 나위가 없다. 우아하게 복구하기 어렵거나 다른 방식으로 처리해야한다면 프로그램 사용자에게 현재 상황을 알려준다. 드물게 프로그램을 완전히 중단해야 한다면 문제 진단에 도움이 될만한 정보를 제공한다.

XML 오류를 제대로 처리하려면 SAX API를 잘 알아야 한다.  대다수 XML API는 SAX에 기반을 두기 때문이다.
SAX에서 오류를 처리하는 핵심 인터페이스는 org.xml.sax.ErrorHandler

public void warning(SAXParseException exception) throws Exception
public void error(SAXParseException exception) throws Exception
public void fatalError(SAXParseException exception) throws Exception
프로그램에서 의미 있는 오류 정보를 전달하는 가장 쉬운 방법이 SAXException으로 넘길 예외 클래스를 직접 정의하는 방법인데 getException(), getMessage(), getString()을 이용하여 의미있는 문구를 작성하는
것이 좋다.
코드에서는,
  1. 오류 메시지가 구체적이고 이해하기 쉬우며 유용하다. 또한 프로그래머가 아니라 실제 사용자에게 제공하는 정보다.
  2. 상태 코드와 오류 페이지 등 프로그램 관련 정보를 상위 응용 프로그램에 제공한다. 따라서 XML 구문분석 컴포넌트를 호출한 상위 프로그램이 판독 불가능한 호출 스택 대신 대처 가능한 정보를 얻는다.
  3. 심지어 재지정 페이지도 유용한 정보를 제공한다. 로그 파일에 기록하거나 나중에 프로그래머가 대응할 수 있도록 버그 보고서를 자동으로 생성할 때 필요한 정보를 포함한다.
이러한 내용의 일을 하는 것이 좋다.

더 자세한 내용은,  XML 구문을 분석할 때 발생하는 오류 처리하기 이곳에서~

오류를 효율적으로 처리하는 방법은 아직 나에겐 어렵지만 좀 더 심혈을 기울여 짜는 것이 나중에도 좋고 프로그램에도 좋을 듯한 뻔한 이야기이겠지?


  1. seattle
    2008/12/11 23:25 [Edit/Del] [Reply]
    오랜만이어요~ 잘 지내죠? ^^

댓글을 남겨주세요

Name *

Password *

Link (Your Homepage or Blog)

Comment

Secret


아파치 더비를 이용한 오프라인 Ajax

apache derby인 Java 1.6에선 JavaDB로 포함되어 있는 database를 클라이언트 측의 캐시로서 이용하는 예가 나와 있습니다.

derby에 대해서, 또는 Ajax에 대해서 많은 부분이 나와 있는 건 아니지만, derby를 오프라인일 때 로컬 데이터캐시로 활용할 수 있다~
라는 아이디어를 보여주는 것 같군요.  비중으로 따지면 applet이 더 많이 나와 있는듯...하군요..

댓글을 남겨주세요

Name *

Password *

Link (Your Homepage or Blog)

Comment

Secret

이번주 토요일 재미있는 행사를 하는군요
그러나 전 잠시 주말에 지방에 다녀와야해서 참석은 못하겠지만, 수다 예고편을 보니 재미있겠는데요..

개발자들도 예쁜 옷 입고 앉아서 할려나?ㅎㅎㅎㅎㅎ 머 거기까진 아니겠지만, (밑의 그림을 보니..)
못가는 게 너무 아쉽습니다.ㅠㅠㅠ


  • 일 시: 11월 8일 토요일 오후 2:00~6:00
  • 장 소: 도곡동 군인공제회관 23층 온디맨드홀 (약도 참고)
  • 참가 신청
    참가 신청은 전자우편(dWkorea@kr.ibm.com)으로 해주시고, 신청시 이름, 소속, 연락처 등을 적어서 보내주시기 바랍니다.
    장소 관계상 참가 신청은 선착순 200명으로 한정하니, 빠른 신청을 부탁드립니다.
  • 그 동안 developerWorks에 기고하였던 김도형, 김석준, 김승권, 김영후, 김창준, 박재호, 송치형, 이영석, 박찬욱, 서광열, 이준하, 지형준, 권용호, 안영회 씨 등 다양한 분야의 전문가들이 참석할 예정입니다.
  • 수다 예고편
    "개발자들의 스타트업과 창업", "나는 어떤 일을 잘 할 수 있는가?", "오픈소스에 대한 나의 생각", "개발자들의 제태크", "개발자와의 연애, 불가능한가?", "여성개발자의 커리어패스", "개발자와 QA, 친해지길 바래" 등 이외에도 참가자들이 즉석에서 주제를 제안할 수 있습니다.
  • 관련기사: 한국IBM, "개발자들끼리 수다 떱시다"

  • Agenda

    Tag dw
    1. 2008/11/06 23:54 [Edit/Del] [Reply]
      와~ 재미있겠네요. ^^

    댓글을 남겨주세요

    Name *

    Password *

    Link (Your Homepage or Blog)

    Comment

    Secret

    Eclipse 3.4 Ganymede에 새로 추가된 자바스크립트 개발 툴킷(JavaScript Development Toolkit, JSDT)에 대한 소개가 dW 글에 올라왔군요.

    자바스크립트 개발 툴킷(JSDT) 살펴보기

    Javascript는 loosely typed이라 에디터를 제공하기 위해선 어려움이 많기 때문에 정말 많이 쓰이는 언어이지만 에디터는 그에 반해 너무 없는게 안타까운게 현실이지요.

    JSDT는 자바스크립트 언어를 모델링하고 클래스 구조를 실시간으로 반영한다고 하는데 잘~~~반영해 줄련지...


    <JSDT 디자인>



    에디터로서 반드시 갖춰야 할 덕목! 자동완성, 문법에러, 플로우분석, 퀵픽스등의 기능을 제공하고,
    • 문법 하이라이팅
    • 폴딩/라인 넘버
    • 전체 아웃라이닝, 클래스 , 함수, 필드 보여주기
    • 대응하는 소괄호/중괄호 확인하고 하이라이팅
    • 소괄호, 중괄호, 들여쓰기 자동 완성
    • Mark occurrence
    • 주석 달기(한 줄, 블록)
    • JsDoc 엘리먼트 생성하기
    • do, for, try/catch, while 문으로 둘러싸기
    • 사용자가 설정 가능한 템플릿 완성
    • 함수 추출/함수 시그너처 변경
    • 들여쓰기 바로잡기
    • 선언 열기
    • 타입 계층 구조 열기
    • 호출 계층 구조 열기
    • 코드 포매팅 커스터마이징
    • 전체 검색
    • 리팩터링/이름 바꾸기/이동하기
    • 브레이크 포인트 기능 지원
    • 파이어폭스, 인터넷 익스플로러, 그리고 ECMA-3에서 가용한 JsDoc으로 정의된 브라우저 라이브러리
    • JsDoc과 자바스크립트 프로토타입 정의를 사용하여 사용자가 정의한 라이브러리 지원
    • 라이브러리 이미지 지원
    • ATF 프로젝트를 통한 디버깅 지원

    이런 기능을 제공한답니당~

    참고 : JSDT wiki
    1. seattle
      2008/11/03 23:38 [Edit/Del] [Reply]
      요즘 바빠서 정독은 못하겠지만 나중에 꼼꼼히 살펴볼께요. 큰 도움이 될거 같네요~

    댓글을 남겨주세요

    Name *

    Password *

    Link (Your Homepage or Blog)

    Comment

    Secret

    2회(2008년10월): 자바로 만든 자바스크립트 엔진, 리노

    리노(Rhino)는 1997년 넷스케이프에서 '자바로 만든 자바스크립트 엔진'으로 스파이더 몽키(SpiderMonkey)를 본따 개발되었다.

    자바 1.6에서는 javax.script 패키지에 포함되어 있다.

    리노는 자바스크립트에서 자바 라이브러리를 사용할 수있게 해주고, 자바에서 자바스크립트 코드를 불러오고 실행할 수 있다. 자바 바이트코드로 컴파일할 수 있을 뿐 아니라 인터프리터를 이용할 수도 있다.

    이런 내용이!
    1. 2008/10/29 18:41 [Edit/Del] [Reply]
      노트 빌드할때... 맨날 그거 쓰고 있구만...-.-
    2. seattle
      2008/10/29 18:43 [Edit/Del] [Reply]
      말로만 흘려듣던 것을 요기서 자세히 보네요. 좋은정보 감사해요~

    댓글을 남겨주세요

    Name *

    Password *

    Link (Your Homepage or Blog)

    Comment

    Secret

    1회(2008년9월): 다시 보는 자바스크립트의 역사


    하루종일 자바스크립트하고 노는데, 늘~ 알수없는 녀석이 어떻게 살아왔나 익히 들어와서 대충 알고있긴 하지만, 이렇게 정리되어 있어 한번 쭈욱 읽고나니 조금 더 묘한 느낌(지금 째즈음악을 듣고 있어서 그런가...)이 납니다.

    역사 얘기도 나오고 자바스크립트의 특징도 살짝 나오고,, 지금은 비록 모습이 많이 없지만, 프로토타입 기반 객체지향 개념을 내세운 자바스크립트, 아이오(Io) 언어에 의해 계승되고 있다는 셀프(self)언어를 꺼내며 프로포타입 기반의 객체지향과 클래스 기반의 객체지향에 대해서도 살짝 나오고 있습니다.

    Tag dw, javascript
    1. seattle
      2008/10/28 12:51 [Edit/Del] [Reply]
      얕보다 큰코 다치게하는 자바스크립트군요 으흐흐

    댓글을 남겨주세요

    Name *

    Password *

    Link (Your Homepage or Blog)

    Comment

    Secret

    [dW] RESTful한 웹 서비스 만들기

    Posted at 2008/09/29 14:49// Posted in 나만의 작업/dW

    RESTful한 웹 서비스 만들기(REST와 RESTlet 프레임워크에 대한 소개)

    REST란 동사(verb)라고 볼 수 있는 이러한 요청들과 명사(noun)라 볼 수 있는 자원을 연결함으로써 행동(behavior)을 논리적으로 표현한다.


    * CRUD/HTTP 간의 대응


    애플리케이션 작업
    HTTP 명령





    Create
    POST

    Read
    GET

    Update
    PUT

    Delete
    DELETE

    장점
    메시지가 아닌 이름이 부여된 자원에 REST가 의존하기에 애플리케이션 디자인 측면에서 볼 때 느슨한 결합이라는 게 쉽게 가능해지는데, 이는 하부를 떠 받치는 기술이 무엇인지 노출되지 않기 때문이다.


    REST의 아름다움은, 자원은 어떤 것이든 될 수 있고 표현될 수 있는 방식도 다양하다는 점이다. 바로 전에 보았던 예에서 자원은 HTML 파일이었기에 응답 형식도 그에 따라 HTML이 될 것이다. 하지만 자원이 XML 문서이거나, 직렬화된 객체이거나, 혹은 JSON 표현법이었을 수도 있다.

    그게 뭐든 상관없다. 중요한 건 하나의 자원은 이름이 부여된다는 것 그리고 자원과의 통신은 자원의 상태에 영향을 주지 않는다는 것이다. 상태에 영향을 미치지 않는다는 것은 중요하다. 상태 없는(stateless) 상호 작용이 확장을 쉽게 해주기 때문이다.


    Restlets 프레임워크

    첫째, Restlet은 HTTP 혹은 HTTP가 이야기하는 쿠키, 세션과 같은 실질적인 상태와 관련한 것에 대해 직접적인 개념을 갖고 있지 않다. 둘째, Restlet 프레임워크는 초경량화되어 있다. 알게 되겠지만 완벽한 기능을 갖춘 RESTful한 애플리케이션은 핵심 Restlet 기본 클래스 몇 개에서 확장(extends)한 소수의 클래스들만으로도 만들 수 있다. 설정과 배치는 기존 컨테이너 모델을 이용할 수 있기 때문에 간단히 web.xml 파일 정도만 고쳐 표준 웹 아카이브(WAR) 파일을 배치한다.





    1. seattle
      2008/09/29 23:29 [Edit/Del] [Reply]
      뭔말인지는 모르겠지만 좋은글 잘 보고 갑니다. 날씨 선선해지는데 감기 조심하고요.

    댓글을 남겨주세요

    Name *

    Password *

    Link (Your Homepage or Blog)

    Comment

    Secret


    어쩜 이런글은 지나다니다 많이 본 글인 것 같은데..
    오늘도 역시 지나다가 한번 훑어보고 나중에 보기위해 포스팅합니다.

    [dW] XML을 사용하는 좋은 습관 열가지

    1. XML과 인코딩을 정의하라
    <?xml version="1.0" encoding="us-ascii"?> 이런식으로 써주면 XML 구문분석기가 문서를 잘못 분석할 가능성을 줄일 수 있다.

    2. DTD 또는 XSD를 사용하라
    DTD를 정의하면 XML 문서 구조를 검증해 문제를 찾아내기 쉬워진다.
    일부 XML 편집기는 자동 완성 기능에 DTD를 요구하는 반면, 스키마를 사용하면 실제 문서 구조를 설계하기가 훨씬 편리해진다. DTD를 사용할지 XSD를 사용할지 여부는 개발자가 처한 상황에 달렸다.

    3. 항상 검증하라
    JSLint는 자주 쓰는데 xmllint도 있군요. Validation
    xmllint는 libxml2 툴킷에 포함되며, libxml2 툴킷은 리눅스, 유닉스(UNIX®), 맥 OS X에 기본적으로 들어있고,  윈도(Windows®) 플랫폼에서는 별도로 툴킷을 내려받아야 한다고 하군요.


    4. 때로는 검증으로 부족하다

    5. 엘리먼트냐 속성이냐
    쓸 때 맨날 고민하는 것 중 하나.. 엘리먼트로 할까? 속성으로 할까?
    의견이 분분한데 이 문서에선
    "일반적으로는 파일 내부에서 엘리먼트를 사용해 정보를 기술하는 편이 낫다. 즉, 자료를 태그 사이에 정의하는 편이 낫다. 속성은 기술하고자 하는 자료에 조건을 추가할 때 사용해야 한다." 이렇다고 한다.

    6. XPath를 활용해 정보를 찾자

    7. 정보 인출을 위해 반드시 구문분석기를 사용할 필요는 없다

    8. SAX가 DOM보다 나은 경우
    문서가 크거나 문서를 변환할 생각이라면 SAX가 낫다.

    반면, 구조를 저장하거나 기록하려는 경우에는 SAX가 적합하지 못하다. 또는 문서 전체를 이해한 다음에 문서에서 특정 정보를 추출하려는 경우에도 (예를 들어, 전체 문서에서 연락처 하나만 찾는 경우에도) 마찬가지다.

    이 때는 XML 문서 전체를 읽어 자료 구조를 판독한 후 (필요에 따라) 엘리먼트를 출력하는 복잡한 처리 과정을 구현해야 한다.


    9. DOM이 SAX보다 나은 경우
    DOM은 XML 구조를 보존하고 이해하므로 응용 프로그램에서 구조 전체나 개별 엘리먼트를 쉽게 참조하고 조작할 수 있다.

    반면, DOM은 파일을 스트림으로 처리하기 어렵다는 단점이 있다.

    또한 DOM은 문서 전체를 메모리로 읽어들이므로 속력이 느려지고 메모리가 많이 필요하다. 반면, 문서 전체를 분석해 메모리에 보존하므로 장점도 존재한다.

    10. 좋은 XML 편집기를 사용하라
    Tag dom, DTD, dw, jslint, SAX, XML, xmllint
    1. 2008/09/24 13:18 [Edit/Del] [Reply]
      버리님~ 스터디할 자료 말고 일상적인 이야기나 사진은 안올리시나요? ^^
      블로그에서 그런거 본지 꽤 된거 같네요~ 바쁘셔서 그러신지~ ㅎㅎ
      • 2008/09/24 13:59 [Edit/Del]
        ^^어느순간 저도 모르게 그랬네요..^^
        일상적인 이야기는 궁금해하실분이 없으실 것 같아서(?)ㅎㅎ
        요즘 맘편히 블로깅하는 시간이 없었던 것 같아요(놀러다니느라..ㅎㅎ)

        이야기랑 사진 올려야죠~ ㅎㅎ 또 놀러오세요~ ㅎㅎ
    2. seattle
      2008/09/24 23:00 [Edit/Del] [Reply]
      정말 간만에 아는 이야기 나와서 히죽대고 있습니다. ㅋㅋ

      전 자알~ 지냅니다. 여기서 대답하기 -_-v
      • 버리야
        2008/09/24 23:47 [Edit/Del]
        히죽이요?ㅎㅎㅎㅎㅎㅎ 모습이 상상이 되는데요~~
        seattle님은 잘~지내고 계시는군요..ㅎㅎ

    댓글을 남겨주세요

    Name *

    Password *

    Link (Your Homepage or Blog)

    Comment

    Secret


    dW에서 3주동안 시리즈로 올라오는 글 중 웹개발에 도움되는 글이 있군요.

    Ajax와 자바 개발을 간단하게, Part 1
    JSP 태그 파일로 자바스크립트 코드 동적으로 생성하기 내용인데
    HTML과 URL 인코딩 함수 - 유틸리티 함수가 유용하군요~

    Ajax와 자바 개발을 간단하게, Part 2
    JSTL과 JSP 태그 파일을 사용하여 커스터마이징이 가능한 웹 컴포넌트를 만들기

    Ajax와 자바 개발을 간단하게, Part 3
    자바스크립트와 JSP 태그 파일을 사용하여 사용자 친화적이고 웹 폼에 안전한 검증 기능을 구현하기

    사용자가 웹 브라우저에 입력한 값을 자바스크립트로 검사하는 valid 같은 특정 기능에 얽매이지 않고 더 일반적인  함수를 만들 수 있는 코드가 있군요.
    저같이 수련이 많이 필요한 사람에겐~  배울게 많군요...
    1. seattle
      2008/09/23 20:17 [Edit/Del] [Reply]
      블로그에 한동안 소식이 없어서 궁금했었는데, 역시 열공중이었군요! 멋져부려요~
      • 2008/09/24 10:31 [Edit/Del]
        열공은... 매일 마음속 다짐으로^^
        늘 변함없이 들러주시는 seattle님이 더 멋진데요!ㅋㅋ
        잘 계시죠?ㅎㅎ 여기서 안부묻기..ㅎㅎ
    2. 2008/09/24 00:34 [Edit/Del] [Reply]
      오랜만에 들려봅니다 :)
      AJAX라... 일단 내용은 패스;;
      한결같은 열공이 멋지네요 ㅎㅎ

    댓글을 남겨주세요

    Name *

    Password *

    Link (Your Homepage or Blog)

    Comment

    Secret

    [dW] Groovy 유창하게 쓰기

    Posted at 2008/08/06 19:30// Posted in 나만의 작업/dW
    IBM dW에 스크린캐스트로 올라온 글중에 26분 42초만 투자하면 그루비(Groovy)가 잘 생겼는지, 못생겼는지 대충 실루엣을 볼 수 있고, 간단한 특성, 클로져등을 볼 수 있습니다.

    그루비 처음 공부할 때 이렇게 친절하게 설명한 동영상을 더 먼저 봤으면 더 이해가 쏙쏙 되었을텐데..
    이렇게 동영상으로 읊어주시니(?) 더욱 좋은 것 같아요

    근데 이 영상을 보고 제목처럼 유창하게 쓸 수 있을지는 모르겠다는 의문이 들긴하지만
    그루비가 궁금하신 분은 잠깐 시간내어 보시는 거에 강추합니다.

    Groovy 유창하게 쓰기



    1. seattle
      2008/08/08 08:50 [Edit/Del] [Reply]
      그루비 그놈참 똑부러지게 생겼더군요! ^__^

    댓글을 남겨주세요

    Name *

    Password *

    Link (Your Homepage or Blog)

    Comment

    Secret

    유닉스 팁: 열 가지 더 좋은 유닉스 습관


    유닉스를 많이 사용해 본 적이 없어서 더구나 콘솔로 사용할 일도 많이 없었지만

    최근엔 콘솔 사용하는것에 재미(?)를 느껴서 찾아보니 예전 대학교 1학년때 열심히 외우던

    명령어가 어렴풋이 배웠던 기억이 나는 명령어도 있군요.

    그냥 기록해놓으면 좋을 것 같아서.. 남겨 놓습니다..^^


    익혀야 하는 열 가지 더 좋은 습관


    • 파일 이름 완성 기능을 활용하자.(bash 쉘에선 TAB: 쉘마다 키가 다르다)
    • 히스토리 확장 기능을 활용하자.(!$ 명령은 명령어에 사용했던 마지막 인수를 반환한다. )
    • 직전에 사용한 인수를 재사용하자.(!:1 연산자는 명령에서 사용한 인수를 반환한다. )
    • pushdpopd로 디렉터리를 탐색하자.
    • 대용량 파일을 탐색하자.
    • 편집기 없이 임시 파일을 생성하자.(cat 명령어와 > 파일 재지정 연산자를 활용)
    • curl 명령행 유틸리티를 활용하자.(curl 명령은 HTTP, HTTPS, FTP, FTPS, Gopher, DICT, TELNET, LDAP, FILE 프로토콜을 사용해서 서버에서 자료를 가져올 수 있다. )
    • 정규 표현식을 적극 활용하자.
    • 현재 사용자가 누구인지 알아내자.(whoami)
    • awk로 자료를 처리하자.
    Tag dw, UNIX
    1. seattle
      2008/08/03 19:40 [Edit/Del] [Reply]
      좋은팁 감사합니다~

    댓글을 남겨주세요

    Name *

    Password *

    Link (Your Homepage or Blog)

    Comment

    Secret

    [dW] Ajax 성능 도구

    Posted at 2008/08/01 18:53// Posted in 나만의 작업/dW

    Ajax 성능 도구

    Ajax 성능에 향상을 주는 여러가지 도구와 부가 기능이 많이 있는데 저는 그 중 쓰는게 RAMBack과 YSlow밖에 없군요...

    하나씩 써봐야 겠군요... 이렇게 정리해 주니 좋은 것 같습니다. ㅎㅎ

    참고로 Load Time Analyzer이 firefox 3 버젼을 아직 지원안하는군요


    오픈 소스 도구

    • Apache Bench: 서버 부하를 흉내 낸다.
    • Tsung: 다중 프로토콜 부하를 시험한다.
    • Bonnie++: 디스크 I/O 문제 추적
    • Wireshark: 네트워크 트래픽 분석
    • Comet 서버 응용 프로그램 도구: 더 긴(long-lived) 연결, 더 높은 병행성, 더 낮은 지연, 더 낮은 서버 부하를 위해 사용된다.


    파이어폭스 부가 기능

    LiveHTTPHeaders(일 반적인 HTTP 트래픽을 확인)와 파이어버그(자원의 적재 시간을 측정)는 유용한 파이어폭스 부가 기능들이다. RAMBack(내부 캐시 지우기), Load Time Analyzer(적재 시간 분석기: 웹 페이지의 적재 시간을 측정), YSlow(웹 페이지 분석), iMacros for Firefox(웹 응용 프로그램 테스트), ColorBlind Ext(색맹 보조) 등 확장도 관심을 가질 만하다.



    Tag ajax, dw, 성능

    댓글을 남겨주세요

    Name *

    Password *

    Link (Your Homepage or Blog)

    Comment

    Secret

    [dW] 아파치 메이븐 2 시작하기

    Posted at 2008/07/11 19:55// Posted in 나만의 작업/dW
    제가 몸담고 있는 팀에서는 소프트웨어 프로젝트를 빌드하고 관리하는 작업에 "아파치 메이븐(apache maven)"을 쓰고 있습니다.
    maven을 처음 쓸 때 dependency 관리에서 그만... 반하고 말았습니다. :)

    이클립스에서 프로젝트에 필요한 library를 직접 걸어주고 또는 소스가 보고싶을때 매번 attach source를 해서 자주보는 소스는 다운을 직접 받아서 연결을 시켜줘야 하는데 maven을 쓰면 이 작업이 모두 xml파일(pom.xml)에 몇줄만 추가해주면 되니 너무 행복했지요. maven의 중앙 repository에서 알아서 jar파일을 다운로드하고 관련된 source도 받을 수 있게 할 수 있지요..

    이건 뭐.. 빙산의 일부분이겠지요~ 그래도 이것만 되도 행복할 것 같은데, 그 외에도 많은 기능을 제공하지요.
    뭐 아실만한 분은 다 아시겠지요~ ㅋㅋ

    오늘 내부 세미나에서 maven을 주제로 세미나 하신 분이 계셨는데 그 계기로 좀 더 알아보려고 찾아보다가 dW에서 찾아보니 좋은 문서가 있군요~

    아파치 메이븐 2 시작하기

    여기에는 maven에 대한 기본 골격과 이클립스에서 메이븐 프로젝트를 생성하는 과정이 잘 나와 있습니다.


    참고로 maven을 위한 이클립스 플러그인에는 m2eclipse와 q4eclipse가 있는데
    q4e는 dependency 관계를 그림(?)으로로 보여준답니다.
    얘가 어떤애를 참고 하고 어떤애가 다른애를 참고하고 있는 걸 눈에 이쁘게 보여주죠~

    참고해 보세요.. maven 강추!~ ^^ 제가 아는건 이것밖에 없어서 슝슝=33
    1. seattle
      2008/07/12 00:00 [Edit/Del] [Reply]
      메이븐 정말 파워풀합니다... 라고 누가 그랬던거 같네요.. 이런거 보면 저도 참 어지간히 공부 안했구나 생각이 듭니다. 즐거운 주말 보내세요~

    댓글을 남겨주세요

    Name *

    Password *

    Link (Your Homepage or Blog)

    Comment

    Secret

    [dW] REST 서비스 작성하기

    Posted at 2008/06/30 23:38// Posted in 나만의 작업/dW
    REST 서비스 작성하기

    이 글은 REST(Representation State Transfer)와 Atom Publishing Protocol(APP)에 관한 개념이 잘 나와있습니다. 그리고 REST/APP 기반의 서비스 구현 방법도 예로 나와있지요~


    본문 내용중에,

    REST 원칙은 URI(Uniform Resource Identifiers)를 사용하여 주어진 자원 표현의 위치를 알아내고 접근한다. 표현 상태(representational state)라 알려진 자원 표현은 만들어질 수도, 찾아올 수도, 수정될 수도, 삭제될 수도 있다. 예를 들어 REST를 적용하여 문서를 발행해 독자들이 이 문서를 읽을 수 있게 할 수 있다. 언제든 문서를 발행할 때는 웹 URL을 보여줘야 한다. 그래야 독자들이 그 문서의 정보(표현 상태)에 접근할 수 있다. 문서를 읽는 사람은 URL만 알면 문서 정보를 읽을 수 있고 승인이 있다면 정보를 수정할 수 있다.

    HTTP 기반 REST 시스템에서는 GET, PUT, POST, DELETE라는 표준 HTTP 메서드를 사용하여 자원의 표현 상태에 접근해야 한다.

    APP는 REST 개념과 기술을 사용하여 의미적으로 풍부한 콘텐츠 교환에 쓰이는 여러 메커니즘을 정형화기 위해 인기있는 아톰 배급 포맷(Atom Syndication Format) 위에 구축된다.
    • GET: 컬렉션이나 멤버 자원 표현을 찾아오는 데 쓰인다.
    • POST: 새 멤버 자원을 만드는 데 쓰인다.
    • PUT: 멤버 자원을 갱신하는 데 쓰인다.
    • DELETE: 멤버 자원을 삭제하는 데 쓰인다.
    HTTP 프로토콜을 거쳐 자원을 전달하는 시스템에 REST 원칙을 적용하는 데 자바 프로그래밍 언어를 사용할 수 있다. APP를 사용하여 이런 시스템을 확장하고 블로그 엔트리, 포드캐스트, 위키 페이지, 달력 엔트리 등을 사용하여 자원 접근 및 조작을 용이하게 할 수 있다.

    Tag APP, dw, java, REST
    1. seattle
      2008/07/01 07:44 [Edit/Del] [Reply]
      우왕~ 블로깅에 다시 발동 거셨군요. 하지만 알아볼 수 있는 내용이 아니라는거 ㅠㅠ

    댓글을 남겨주세요

    Name *

    Password *

    Link (Your Homepage or Blog)

    Comment

    Secret