Whiteship's Note


TDD Helper 만들었습니다.

모하니?/Coding : 2007.02.23 18:31


사용자 삽입 이미지

배포 하는 방법을 몰라서 이리저리 찾아다니다가 JET를 찾아서 EXE 파일까지 만들었건만... JET가 설치 안되있는 컴에선 안돌아가는군요. 그래서 JET로 만든 배포버젼은 삭제 하고 다시 만들었습니다. 대엽씨가 만들었던 이글루스 블로그 포스팅 프로그램 배포 하는 방법을 배꼈습니다. 헤헷..

JDK 1.5 이상에서 돌려주세요~


사용자 삽입 이미지
진짜 쪼금 쉬었군요. 더 쉴래요 ㅠ.ㅠ

물개 선생님 JET 버전의 배포판 버그 리포트 감사합니다. 전 제 컴에서만 되는 건줄도 모르고 .. ㅠ.ㅠ 영회형도 지금 올린 버젼 실행되는지 테스트 해주셔서 쌩큐요. 헤헷.

'모하니? > Coding' 카테고리의 다른 글

만들고 싶은게 너무 많아요.  (6) 2007.03.09
레포트 검사기  (2) 2007.03.09
랜덤 리스트 축출기 v1.0  (0) 2007.03.08
Tdd Helper 사용 중  (0) 2007.03.07
랜덤 리스트 축출기  (2) 2007.03.06
TDD Helper 만들었습니다.  (4) 2007.02.23
5. version 0.9  (0) 2007.02.22
4. 화면과 모델 통합에서의 갈등  (0) 2007.02.22
3. 작업 분류 2  (0) 2007.02.22
3. 작업 분류  (0) 2007.02.22
TDD Helper 화면 Version 0.5  (4) 2007.02.21
top


5. version 0.9

모하니?/Coding : 2007.02.22 21:28



고쳐야 할 것...

1. Table 크기 조정 - 완료
2. ObjectStream 으로 바꾸기 - 완료
3. save 메뉴 구현 - 구현중
4. 시간 계산 에러 수정 - 완료
5. 작업 시간을 "시 분 초"로 보여주기 추가 - 완료
6. Table에 시간 컬럼 계속 생기는 에러 수정 - 완료

'모하니? > Coding' 카테고리의 다른 글

레포트 검사기  (2) 2007.03.09
랜덤 리스트 축출기 v1.0  (0) 2007.03.08
Tdd Helper 사용 중  (0) 2007.03.07
랜덤 리스트 축출기  (2) 2007.03.06
TDD Helper 만들었습니다.  (4) 2007.02.23
5. version 0.9  (0) 2007.02.22
4. 화면과 모델 통합에서의 갈등  (0) 2007.02.22
3. 작업 분류 2  (0) 2007.02.22
3. 작업 분류  (0) 2007.02.22
TDD Helper 화면 Version 0.5  (4) 2007.02.21
2. 작업 소요 시간 측정  (0) 2007.02.21
top


4. 화면과 모델 통합에서의 갈등

모하니?/Coding : 2007.02.22 15:09


미쳐 생각하지 못했던 문제들이 슬슬 Clocking을 풀고 있습니다.

1. 저장을 어떤 형태로 할 것인가? 저는 text 파일로 저장 읽어 오기를 구현해 뒀습니다. 하지만 List를 저장하기엔..ObjectStream이 좋을 것 같네요. text로 읽어와서 파싱하는 노가다를 하기 싫어요~ ㅠ.ㅠ... 그렇다면 text 파일로 리포트를 만들어 주는 기능을 나중에 만들고 일단 저장하기와 불러오기는 ObejctStream으로 변경 할까요? 네!
사용자 삽입 이미지

2. 이런 이런 스크롤이 마우스 휠을 움직여도 움직이지 않아요. 마우스 휠로 스크롤을 움직이게 하든지..하니면 ExpendBar를 열거나 닫을 때마다 화면 크기를 딱 맞게 변하게 스크롤이 생기지 않도록 합시다. 방법은? 모르는데요. 으흐흐흐... 그렇다면 알고 나면 고칩니다. 일단 그냥 구현 합시다. 넹~

3. ToDo List 에서는 하나의 작업 만 선택하도록 합시다. 왜요? 여러 작업을 동시에 START 시킬 순 없자나요. 아아.. OK. 뭐 그럽시다. 사실은 코딩하기 귀찮아서 그런거죠? 에이.. 설마..

4. 처음 프로그램을 실행 했을 때를 생각해 봅시다.
4.1. 일단 Current Work에 Work가 없기 때문에 PAUSE 와 END 버튼은 disable 상태여야 합니다.
4.2. ToDo List 역시 아무것도 없기 때문에 START와 DELETE 역시 disable 상태여야 합니다. ADD만 그냥 두면 되겠군요.
4.3. 작업 하나를 입력 합니다. 그럼 START와 DELETE 버튼이 이용 가능해 지겠군요.
4.4. 작업 하나를 선택해서 START 시킵니다. 그럼 PAUSE 와 END 버튼이 이용 가능해 지겠군요. 대신에 START 버튼은 불이 꺼집니다.
4.5. PAUSE 버튼을 클릭하면 PAUSE 버튼의 title이 RESTART 로 바뀝니다. 그리고 START에는 다시 불이 들어옵니다.
4.6. PAUSE 버튼을 클릭한 상태에서 ToDo에서 작업을 선택하고 START를 클릭하면... 음.. 그렇게 되겠군요.
4.7. END 버튼을 클릭하면 PAUSE 버튼은 불이 꺼지고 Completed Work List에 완료된 작업이 추가 됩니다.

'모하니? > Coding' 카테고리의 다른 글

랜덤 리스트 축출기 v1.0  (0) 2007.03.08
Tdd Helper 사용 중  (0) 2007.03.07
랜덤 리스트 축출기  (2) 2007.03.06
TDD Helper 만들었습니다.  (4) 2007.02.23
5. version 0.9  (0) 2007.02.22
4. 화면과 모델 통합에서의 갈등  (0) 2007.02.22
3. 작업 분류 2  (0) 2007.02.22
3. 작업 분류  (0) 2007.02.22
TDD Helper 화면 Version 0.5  (4) 2007.02.21
2. 작업 소요 시간 측정  (0) 2007.02.21
1. 작업 리스트 관리(CRUD)  (0) 2007.02.20
top


3. 작업 분류 2

모하니?/Coding : 2007.02.22 14:39


3.6. 작업 분류별 리스트를 가져옵니다.

    @Test public void workTypeList(){
        Work work1 = new Work("work1");
        workList.add(work1);
        assertEquals(work1, workList.getToDoList().get(1));

        work1.start();
        assertEquals(work1, workList.getCurrentWork());
        assertEquals(0, workList.getToDoList().size());

        work1.pause();
        assertEquals(work1, workList.getPausedWorks().get(1));
        assertEquals(null, workList.getCurrentWork());

        work1.end();
        assertEquals(work1, workList.getEndWorks().get(1));
        assertEquals(0, workList.getPausedWorks().size());
    }

Work가 List에 있는 것만 확인하면 되는데 특정 위치를 가리켜서 확인하는 건 그닥 맘에 들지 않습니다. 그래서 contain()을 추가합니다.

    @Test public void workTypeList(){
        Work work1 = new Work("work1");
        workList.add(work1);
        assertTrue(workList.getToDoList().contains(work1));

        work1.start();
        assertEquals(work1, workList.getCurrentWork());
        assertEquals(0, workList.getToDoList().size());

        work1.pause();
        assertTrue(workList.getPausedWorks().contains(work1));
        assertEquals(null, workList.getCurrentWork());

        work1.end();
        assertTrue(workList.getEndWorks().contains(work1));
        assertEquals(0, workList.getPausedWorks().size());
    }

3.7. 하나의 작업이 실행 중일 땐 다른 작업을 실행 할 수 없습니다.

이걸 조금 구현 해보니깐..Work에서 WorkList를 가지고 있어야 합니다. 그렇게 되면 굉장히 복잡해지고 커플링이 심해집니다. UI 상에서 이런 시도를 막을 수 있을 것 같습니다. UI를 구현하는 코드가 복잡해지겠지만.. 일단 한번 해본 뒤에 생각해 봐야겠습니다.


'모하니? > Coding' 카테고리의 다른 글

Tdd Helper 사용 중  (0) 2007.03.07
랜덤 리스트 축출기  (2) 2007.03.06
TDD Helper 만들었습니다.  (4) 2007.02.23
5. version 0.9  (0) 2007.02.22
4. 화면과 모델 통합에서의 갈등  (0) 2007.02.22
3. 작업 분류 2  (0) 2007.02.22
3. 작업 분류  (0) 2007.02.22
TDD Helper 화면 Version 0.5  (4) 2007.02.21
2. 작업 소요 시간 측정  (0) 2007.02.21
1. 작업 리스트 관리(CRUD)  (0) 2007.02.20
TDD 연습용 프로그램  (4) 2007.02.20
top


3. 작업 분류

모하니?/Coding : 2007.02.22 12:41


3.1. 새로 추가된 작업은 "해야할 작업" 목록에 추가 됩니다.

    @Test public void newWorkType(){
        Work work = new Work("work1");
        workList.add(work);
        assertEquals(WorkType.TODO, work.getType());
    }

음.. 화면을 먼저 만들걸.. 하는 생각이 계속 들면서 작업을 방해하기 시작하는데 메모를 해둬야 겠습니다.

- 일시 정지 클릭하고 ToDo List에서 다른 작업의 시작 버튼을 클릭하면 일시 정지 된 작업은 TODO 리스트로 옮겨지고 Current Work에는 방금 선택한 작업이 올라옵니다.

3.2. "작업 시작" 버튼을 클릭한 작업은 "진행 중인 작업" 목록에 추가 됩니다.

    @Test public void startWorkType(){
        Work work = new Work("work1");
        workList.add(work);
        work.start();
        assertEquals(WorkType.CURRENT, work.getType());
    }

3.3. "작업 완료" 버튼을 클릭한 작업은 "완료된 작업" 목록에 추가 됩니다.

- "PAUSE" 버튼과 "RESTART" 버튼을 눌렀을 때 상태 변화를 생각 못했었군요. 테스트에 추가해야겠습니다.

그 전에 일단 3.3. 부터 마무리 하구요.

    @Test public void endWorkType(){
        Work work = new Work("work1");
        workList.add(work);
        work.start();
        work.end();
        assertEquals(WorkType.END, work.getType());
    }

=> 어라.. 여기까지 하다보니 테스트 코드에 엄청난 중복이 생겼습니다. test 메소드 하나로 위에 있는 세개를 전부 합치겠습니다.

    @Test public void workType(){
        Work work = new Work("work1");
        workList.add(work);
        assertEquals(WorkType.TODO, work.getType());
        work.start();
        assertEquals(WorkType.CURRENT, work.getType());
        work.end();
        assertEquals(WorkType.END, work.getType());
    }

그럼 이제 위에 있는 세개는 지워도 되겠군요. 책 읽은게 도움이 됐습니다. 흐흐 쌩큐 Beck!

3.4. 선택한 분류의 작업만 보여주기.

이건 SWT에 있는 EnpendBar로 구현을 했기 때문에.. 코드로 처리하지 않아도 될 것 같습니다.

3.5. "PAUSE" 버튼을 클릭하면 pause 상태로 바꿔줍니다. 위에 있는 테스트 코드를 수정해서 시나리오를 만듭니다.

    @Test public void workType(){
        Work work = new Work("work1");
        workList.add(work);
        assertEquals(WorkType.TODO, work.getType());
        work.start();
        assertEquals(WorkType.CURRENT, work.getType());
        work.pause();
        assertEquals(WorkType.PAUSE, work.getType());
        Work work2 = new Work("work2");
        workList.add(work2);
        work2.start();
        assertEquals(WorkType.CURRENT, work2.getType());
        work.end();
        assertEquals(WorkType.END, work.getType());
    }

- 하나의 작업이 실행 중일 때 다른 작업을 실행하지 못하게 합니다.

SWT에서 실행 버튼을 disable 하게 해두는 걸로 하면.. 되겠죠? 훔

'모하니? > Coding' 카테고리의 다른 글

랜덤 리스트 축출기  (2) 2007.03.06
TDD Helper 만들었습니다.  (4) 2007.02.23
5. version 0.9  (0) 2007.02.22
4. 화면과 모델 통합에서의 갈등  (0) 2007.02.22
3. 작업 분류 2  (0) 2007.02.22
3. 작업 분류  (0) 2007.02.22
TDD Helper 화면 Version 0.5  (4) 2007.02.21
2. 작업 소요 시간 측정  (0) 2007.02.21
1. 작업 리스트 관리(CRUD)  (0) 2007.02.20
TDD 연습용 프로그램  (4) 2007.02.20
CallBack 사용해 보기  (2) 2007.02.20
top


TDD Helper 화면 Version 0.5

모하니?/Coding : 2007.02.21 23:37


사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지
흠..AWT 보다 사용하기가..... 쪼금 더 편하고.. Visual은 많이 이쁘네요.

http://www.eclipse.org/swt/widgets/ 여기서 원하는 컴포넌트 그림을 찍은 다음에(마음 속으로) 그 그림의 아래에 보면 snipet과 javadoc이 보입니다. snipet을 클릭하면 예제 코드들이 나오는데 그 코드들을 Eclipse에서 실행시켜서 실제 화면이랑 코드랑 대조 해보면서 만들었습니다.

개선 할 것
1. 두 번째 화면에.. text는 label로 고쳐야 겠습니다.
2. 세 번째 화면에.. list에서 여러개를 선택할 수 있는데 여러개를 삭제 하는 기능을 구현해야 겠습니다.
3. 세 번째 화면에.. 새로운 work 추가하는 text 부분이 너무 쫍은데 이거 늘리는걸 API 찾아 봤는데..setBounds도 안먹고 setSize도 안먹고..ㅠ.ㅠ
4. 네 번째 화면은.. 좀 더 그리드 스럽게 보여 주고 싶습니다. Work Name, Worked Time 컬럼 두 개를 나타내도록 말이죠..table을 쓰면 되겠군요.

'모하니? > Coding' 카테고리의 다른 글

TDD Helper 만들었습니다.  (4) 2007.02.23
5. version 0.9  (0) 2007.02.22
4. 화면과 모델 통합에서의 갈등  (0) 2007.02.22
3. 작업 분류 2  (0) 2007.02.22
3. 작업 분류  (0) 2007.02.22
TDD Helper 화면 Version 0.5  (4) 2007.02.21
2. 작업 소요 시간 측정  (0) 2007.02.21
1. 작업 리스트 관리(CRUD)  (0) 2007.02.20
TDD 연습용 프로그램  (4) 2007.02.20
CallBack 사용해 보기  (2) 2007.02.20
spring 코딩 할 때  (0) 2006.11.06
top


2. 작업 소요 시간 측정

모하니?/Coding : 2007.02.21 12:59


2.1. "작업 시작" 버튼을 클릭 한 시간 부터 "작업 완료" 버튼을 클릭 했을 때 까지의 시간을 잽니다.

이걸 좀 더 잘개 쪼개야 겠습니다. 시간은 초 단위가 좋을 것 같습니다.
2.1.1. "작업 시작" 버튼을 클릭하면 시간을 재기.

    @Test public void getStartTime(){
        int startTime = new Work("work1").start();
        assertFalse(startTime == 0);
    }

다음 작업을 하기 전에 startTime을 Work 클래스에 저장해 둬야 할 것 같아졌습니다. 그래야 나중에 작업이 완료 됐을 때 계산할 수 있으니깐요..

2.1.2. startTime 저장하기

    @Test public void getStartTime(){
        Work work = new Work("work1");
        work.start();
        assertNotNull(work.getStartTime());
    }

2.1.2. "작업 완료" 버튼을 클릭하면 현재 시간에서 작업 시작 시간을 빼서 소요 시간 구하기.
   
    @Test public void getWorkedTime(){
        Work work = new Work("work1");
        work.start();
        long workedTimeInMilli = work.end();
        assertEquals(work.getEndTime() - work.getStartTime(), workedTimeInMilli);
        assertEquals(workedTimeInMilli * 1000, work.getWorkedTime());
    }

2.2. "일시 정지" 버튼을 클릭하면 시간 재는 걸 잠시 중단 합니다. "작업 시작"버튼을 클릭하면 다시 이어서 시간을 잽니다.

이 작업을 구현하려니까 시간을 가지고 테스트 하는게 엄청 불편하게 느껴집니다. start와 end를 할 때 로그 메시지를 기록 하도록 하고 그 메시지를 확인 하도록 테스트를 변경합니다.

    @Test public void pausedTime(){
        Work work = new Work("work1");
        work.start();
        work.pause();
        work.reStart();
        long workedTime = work.end();
        assertEquals("작업 시작 -> 일시 중지 -> 다시 시작 -> 작업 종료", work.getLog().toString());
        assertEquals((work.pause() - work.start()) + (work.getEndTime() - work.reStart()), workedTime);
    }

2.3. "작업 완료" 버튼을 클릭하면 해당 작업한 시간이 기록됩니다. 이건 이미 위에 것들을 구현하다보니 구현이 되버렸군요.

현재 까지 작업 상황을 보면

- 시작 -> 종료 :: 2.1.
- 시작 -> 일시 정지 -> 다시 시작 -> 종료 :: 2.2.
- 시작 -> 일시 정지 -> 종료
- 시작 -> 일시 정지 -> 다시 시작 -> 일시 정지 -> 다시 시작 -> 종료

미쳐 아래 두 가지 경우 수를 생각 못했었군요.

그리고 작업한 시간을 출력해보니 전부 0으로 나오기 때문에 수치가 정확한지 가늠할 수 있는 뭔가 더 좋은 테스트 방안을 모색해 봐야겠습니다.

테스트를 위해서 log를 만들었지만 이 것이 차후 프로그램에서 필요한가를 생각해보니.. 시간 테스트를 위한 대안이였는데 전혀 적절한 대안이 되진 못한 것이 절 초라하게 만드는군요. ㅠ.ㅠ

'모하니? > Coding' 카테고리의 다른 글

TDD Helper 만들었습니다.  (4) 2007.02.23
5. version 0.9  (0) 2007.02.22
4. 화면과 모델 통합에서의 갈등  (0) 2007.02.22
3. 작업 분류 2  (0) 2007.02.22
3. 작업 분류  (0) 2007.02.22
TDD Helper 화면 Version 0.5  (4) 2007.02.21
2. 작업 소요 시간 측정  (0) 2007.02.21
1. 작업 리스트 관리(CRUD)  (0) 2007.02.20
TDD 연습용 프로그램  (4) 2007.02.20
CallBack 사용해 보기  (2) 2007.02.20
spring 코딩 할 때  (0) 2006.11.06
top


1. 작업 리스트 관리(CRUD)

모하니?/Coding : 2007.02.20 18:46


1.1. 새로운 작업 추가 - 완료

    @Test public void addNewWork(){
        WorkList workList = new WorkList();
        String workName = "새로운 작업 추가하기";
        workList.add(new Work(workName));
        assertEquals(1, workList.size());
        assertEquals(workName, workList.get(1).name);
    }

1.2. 선택한 작업 삭제 하려다 보니 Work 마다 번호가 매겨져 있어야 할 것 같아졌습니다. 새로운 작업을 추가 했을 때 그 작업의 번호를 리턴 받도록 합니다. 작업 번호는 1번 부터 시작합니다. 새로 추가되는 작업의 번호는 리스트 요소중에 제일 큰 번호를 갖게 됩니다.

1.2 작업 번호 받기 - 완료

     @Test public void addNewWork(){
        WorkList workList = new WorkList();
        String workName = "새로운 작업 추가하기";
        int workNumber = workList.add(new Work(workName));
        assertEquals(1, workNumber);
        assertEquals(1, workList.size());
        assertEquals(workName, workList.get(workNumber).name);
    }

1.3. 선택한 작업 삭제 - 완료

    @Test public void deleteWork(){
        WorkList workList = new WorkList();
        int workNumber1 = workList.add(new Work("work1"));
        int workNumber2 = workList.add(new Work("work2"));
        assertEquals(2, workList.size());
        workList.delete(workNumber1);
        assertEquals(1, workList.size());
        assertEquals("work2", workList.get(workNumber2 - 1).name);
    }

리스트에서 작업이 삭제 되면 작업의 번호도 그에 따라 변경 됩니다. 예를 들어 2개의 작업에서 첫번째(1번) 작업이 삭제 되면 두번째(2번) 작업의 번호가 첫번째 작업의 번호로 바뀌게 됩니다.

두 개의 메소드에 중복이 발생했습니다. workList 객체를 @Before 가 붙은 메소드로 올리겠습니다.

    WorkList workList;

    @Before public void setUp(){
        workList = new WorkList();
    }

1.4. 파일로 저장하기 - 완료

    @Test public void saveList() throws IOException{
        workList.add(new Work("work1"));
        String fileName = "ToDoList.txt";
        workList.save(fileName);
        StringBuffer buffer = new StringBuffer();
        String line;
        BufferedReader reader = new BufferedReader(new FileReader(fileName));
        while ((line = reader.readLine()) != null) {
            buffer.append(String.format(line + "\n"));
        }
        reader.close();
        assertEquals("work1\n", buffer.toString());
    }

1.5. 파일에서 읽어오기 - 완료

    @Test public void loadList(){
        int workNumber = workList.add(new Work("work1"));
        String fileName = "ToDoList.txt";
        workList.save(fileName);
        workList = new WorkList();
        workList.load(fileName);
        assertEquals(1, workList.size());
        assertEquals("work1", workList.get(workNumber).name);
    }

1.6. 전체 리스트 보여주기 - 완료

    @Test public void printList(){
        workList.add(new Work("work1"));
        workList.add(new Work("work2"));
        workList.add(new Work("work3"));
        assertEquals("work1\nwork2\nwork3\n", workList.toString());
    }

그리고 여태까지 Work class에 name 변수가 public으로 되어 있었는데 private으로 바꿔주고 에러나는 부분은 getter와 setter로 포장해 줍니다.




'모하니? > Coding' 카테고리의 다른 글

TDD Helper 만들었습니다.  (4) 2007.02.23
5. version 0.9  (0) 2007.02.22
4. 화면과 모델 통합에서의 갈등  (0) 2007.02.22
3. 작업 분류 2  (0) 2007.02.22
3. 작업 분류  (0) 2007.02.22
TDD Helper 화면 Version 0.5  (4) 2007.02.21
2. 작업 소요 시간 측정  (0) 2007.02.21
1. 작업 리스트 관리(CRUD)  (0) 2007.02.20
TDD 연습용 프로그램  (4) 2007.02.20
CallBack 사용해 보기  (2) 2007.02.20
spring 코딩 할 때  (0) 2006.11.06
top


TDD 연습용 프로그램

모하니?/Coding : 2007.02.20 17:40


"TDD 도우미"

TDD를 사용하여 개발 또는 공부를 할 때 도움이 될 프로그램을 생각해 봤습니다. 조그만 목록 관리와 작업 당 소요 시간 측정은 작업의 난이도가 어땠는지.. 혹은 작업의 단위를 너무 크게 한 것은 아닌지 생각해볼 수 있지 않을까 해서 넣어봤습니다.

1. 작업 리스트 관리(CRUD)
1.1. 새로운 작업 추가 - 완료
1.2. 선택한 작업 삭제
1.3. 작업 리스트 파일로 저장
1.4. 작업 리스트 읽어 오기
1.5. 전체 리스트 보여주기

2. 작업 소요 시간 측정
2.1. "작업 시작" 버튼을 클릭 한 시간 부터 "작업 완료" 버튼을 클릭 했을 때 까지의 시간을 잽니다.
2.2. "일시 정지" 버튼을 클릭하면 시간 재는 걸 잠시 중단 합니다. "작업 시작"버튼을 클릭하면 다시 이어서 시간을 잽니다.
2.3. "작업 완료" 버튼을 클릭하면 해당 작업한 시간이 기록됩니다.

3. 작업 자동 분류(완료된 작업, 진행 중인 작업, 해야할 작업)
3.1. 새로 추가된 작업은 "해야할 작업" 목록에 추가 됩니다.
3.2. "작업 시작" 버튼을 클릭한 작업은 "진행 중인 작업" 목록에 추가 됩니다.
3.3. "작업 완료" 버튼을 클릭한 작업은 "완료된 작업" 목록에 추가 됩니다.
3.4. 선택한 분류의 작업만 보여주기.


'모하니? > Coding' 카테고리의 다른 글

TDD Helper 만들었습니다.  (4) 2007.02.23
5. version 0.9  (0) 2007.02.22
4. 화면과 모델 통합에서의 갈등  (0) 2007.02.22
3. 작업 분류 2  (0) 2007.02.22
3. 작업 분류  (0) 2007.02.22
TDD Helper 화면 Version 0.5  (4) 2007.02.21
2. 작업 소요 시간 측정  (0) 2007.02.21
1. 작업 리스트 관리(CRUD)  (0) 2007.02.20
TDD 연습용 프로그램  (4) 2007.02.20
CallBack 사용해 보기  (2) 2007.02.20
spring 코딩 할 때  (0) 2006.11.06
top