Whiteship's Note


DisplayTag 링크 기능



참조 : http://displaytag.sourceforge.net/11/tut_links.html

<display:column property="name" title="이름" href="detail.do" paramId="id" paramProperty="id" sortable="true" />
이런식으로 지정해 주면 detail.do 로 링크가 생기며 이 링크로 객체의 id를 id라는 이름으로 넘겨 줍니다.

이것을 받아서 member 한명에 대한 정보를 뿌리는 controller를 만듭니다.

more..

id로 넘어온 id를 받은 뒤 그것을 가지고 member 객체를 가져오고 다시 member 객체를 detail이라는 view와 함꼐 ModelAndView 객체에 담아서 리턴합니다. 그럼 viewResolver에 의해서 detail.jsp를 찾아가게 될 것입니다.

more..


JSTL을 사용하기 위해 taglib을 지정해 주고 이 페이지에 member객체가 넘어 왔을 테니깐 "${member.name}" 이런식으로 사용해주면 됩니다.

사용자 삽입 이미지

결과는..
사용자 삽입 이미지

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top


Validator 사용하기



앞에서 만든 검색창을 사용할 때 빈 값을 넣으면 에러 메시지가 오른쪽에 출력하도록 하고 싶어졌습니다.

사용자 삽입 이미지

저렇게 해주고 싶으면 먼저 Validator가 필요하고...Controller에 Validator를 등록해줘야 하고...View에서 에러 출력할 부분을 표시해 줘야 합니다.

1. Validator 구현하기

public class SearchingValidator implements Validator {

    @SuppressWarnings("unchecked")
    public boolean supports(Class clazz) {
        return MemberCommand.class.isAssignableFrom(clazz);
    }

    public void validate(Object obj, Errors errors) {
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "keyword", "required", "Field is required.");
    }
}

위 코드는 Spring Reference 13.9.12에 있는 error tag 부분에 있는 소스를 거의 그대로 사용했습니다. 여기에 있는 코드를 보기 전에는 Pro Spring을 보고 아래처럼 구현했었습니다. 전 위가 더 간단해 보이고 편했습니다.

more..

2. Controller에 등록하기.

    <bean name="/search.do"
        class="member.web.SearchMemberController">
        <property name="memberRepository" ref="memberRepository" />
        <property name="validator" ref="searchingValidator" />
    </bean>

    <!-- Validator 등록 -->
    <bean name="searchingValidator" class="validator.SearchingValidator"/>

3. View에 자리잡기.

        <table>
            <tr>
                <td>SEARCH:</td>
                <td><form:input path="keyword" /></td>
                <td><form:errors path="keyword" /></td>
                <td><input type="submit" value="GO" /></td>
            </tr>
        </table>

4. 실험해 봤습니다.
사용자 삽입 이미지

수고했삼~

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top

TAG validator

검색창 하나로 모든 필드에서 검색하기.



검색을 할 때 하나의 창에 입력한 값이 멤버와 관련된 어떠한 필드에 포함되더라도 검색을 하도록 구현했습니다. 입력한 값으로 모든 필드를 뒤져보면 되겠죠. 몇일 전 찬욱이가 모든 필드를 나타내는 키워드는 없는지 궁금해 했었는데 궁금해 하는 이유를 물어보다가 이런 기능을 구현할 때 있으면 편하겠구나 하는 생각이 들었는데 찾아보질 않았네요.

애니웨이... 실험해 봤습니다.
사용자 삽입 이미지
결과
사용자 삽입 이미지
이번에는 blog 주소로 검색을 해봤습니다.
사용자 삽입 이미지
결과
사용자 삽입 이미지

흠... 잘 되는 군요.

Good Job! 이제 검색 메뉴를 없애고 검색을 리스트 화면에 합쳐 놓고 리스트 부분만 갱신 되도록 바꿔봐야겠습니다. 검색할려고 다른 곳으로 이동한다는 것이[각주:1]귀찮기 때문이죠.
  1. 눈으로 메뉴를 찾고 클릭을 해야 하고 입력할 곳을 눈으로 찾고 다시 엔터나 클릭을 해야 한다는 번거로움 [본문으로]

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top


SimpleFormController 에피소드2



아래 발생한 문제는 SimpleFormController와는 전혀 관계가 없는 내용일 수도 있다는 것을 미리 알려드리고 시작해야겠습니다. 이유는 결론을 보시면 알게 되실듯.

사용자 삽입 이미지
위와 같은 리스트가 있습니다. 오호 분명히 "기선"이라는 사람이 매우 많이 있습니다. 왼쪽에 있는 search로 이동해서 "기선"을 찾아 봅시다.

사용자 삽입 이미지
이렇게 기선을 입력하고 enter 또는 search 버튼을 클릭했더니 다음과 같은 화면이 출력 됐습니다.

사용자 삽입 이미지
헐...출력할 것이 없다니.. 도대체 어디서 문제가 생긴거야???

1. 소스코드를 점검하기 시작합니다. JSP와 Controller를 점검하기 시작했습니다.

more..


처음에는 command 객체에 값이 들어가지 않는 것 같다는 생각이 들었습니다. 중간에 출력문을 한번 넣어보면 될 것을[각주:1] 아직까지도 SimpleFormController가 어떻게 동작하는 것인지 제대로 모르기 때문에 그 떈 더욱 더 Command 객체에 값이 언제 들어가는 것인지 알 수가 없었습니다.

그리고 두번째는 지난 글에서 의문이 들었던 command 객체를 도메인 객체로 써야 하는건가? 싶어서 Member로 바꿔서도 해봤습니다. 결과는... 여전했습니다.

2. 조금더 공부하다가 Command 객체에 값이 들어갔는지 확인해봤습니다. 세상에 값이 들어가 있었습니다. 값이 들어가 있긴 한데... 한글이 깨져있더군요.

message 출력: ?¸°???

-_-;; 난감했습니다. 이전에 DB 인코딩 문제로 한참을 해맸었는데 또다시 인코딩문제인가.. ㄷㄷㄷ 거리고 있었는데 다행히 한수형이 알려주셔서 web.xml에 다음과 같이 코드를 넣어줬더니 한글이 제대로 보였습니다.

more..


3. 좋았습니다. 이제 콘솔에 찍어보니 한글도 제대로 보이고 검색을 날렸는데... 여전히!! 못찾는겁니다. 왜?? 도대체 왜!! 못찾는거야.. 하면서 iBATIS에 SQL을 확인하러 갔습니다... 세상에...ㅠ.ㅠ

more..

like로 바꿔야 겠어요. 흐흐흐흐흐흐흐


  1. 소스코드에 주석처리 된 부분입니다. [본문으로]

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top


SimpleFormController 에피소드1



이녀석을 공부하는 어제부터 현재까지 여러 가지 에피소드들이 있었습니다. 발생한 의문들에 자문 자답을 해봅니다.

1. SimpleFormController가 어떻게 흘러가는 건지 이해가 되지 않았습니다.

AbstractController는 ModelAndView 객체에 요청을 처리할 view이름과 그 view에서 사용할 객체를 전달해 주었습니다. 그런데 이녀석은 그렇게 처리하기엔 뭔가.. 허전하다고 느껴지거든요. 자신에게 어떤 요청이 들어왔다는 것은 무엇을 입력할 곳을 찾아 왔다는 것이고[각주:1] 그럼 일단 그 화면으로 이동을 해줘야 하고 그 때 사용자가 입력할 데이타를 받아들일 객체가 있어야겠습니다. 아마도 그녀석을 Command 객체라고 부르는 것 같습니다. 일단 여기까지는 AbstractController와 비슷합니다. 하지만 여기서 끝나면 안되겠죠. 사용자가 입력을 마치고 엔터를 쳤을 때 또 다시 요청이 날아오게 됩니다. 이것도 역시 처리를 해줘야겠죠. 이 요청도 처리를 합니다. 생성자에 setSuccessView("결과를 보여줄 view 이름") 을 생성자에 추가해주면 그쪽 페이지로 이동하게 됩니다.

1.1. Command 객체는 뭔가?

도메인 객체인가? 아닌것 같다는 생각이 듭니다. 물론 도메인 객체를 써도 되겠지만 Command 객체는 사용자가 입력한 값을 받아 오는 역할을 하는 객체이고 만약 사용자가 입력하는 정보다 여러개의 객체에 걸쳐있는 값들이라면 그 때는 도메인 객체만으로는 처리할 수 없겠죠. 아마 그럴 땐 Command 객체를 하나 만들어서 그 안에서 해당 객체에 정보가 들어가도록 처리를 해야될 것 같습니다.

1.2. ModelAndView 객체에는 여러 객체가 들어갈 수 있는 건가?

add("이름", 객체) 형태의 메소드로 여러 객체를 ModelAndView에 붙여 줄 수 있습니다. 그리고 여기서 붙인 객체들은 "첫번째 요청에 의해 보여지는 페이지"와 "두번째 요청에 의해 보여지는 페이지"[각주:2]에서 모두 사용이 가능합니다.
  1. 검색을 하기 위한 링크를 클릭 했다든가 회원 가입, 글 쓰기등의 버튼을 클릭했을 것입니다. [본문으로]
  2. success view에서 요청한 페이지 [본문으로]

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top


Spring's form tag



참조 : http://static.springframework.org/spring/docs/2.0.x/reference/mvc.html#mvc-formtaglib

JSP 맨 위에
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

이렇게 올려놓고...
<form:form commandName="searchMember">
    <table>
        <tr>
            <td>Name:</td>
            <td><form:input path="name" /></td>
        </tr>
     </table>
</form:form>
요론식으로 쓰면 된다길래 해봤는데...다음과 같은 에러 메시지 나옵니다.

org.apache.jasper.JasperException: /search.jsp(3,5) Invalid standard action

맨위에 올려놓은 <%@ taglib ..%> 이 부분을 없애면 페이지를 읽긴하는데 저게 없으니까 Spring form tag를 쓸 수가 없고(이걸 써보려고 한건데 못쓰게 되면 안되는뎅;) 저걸 붙이면 에러가 나오고.. 흠.. 왜이러나.. ㅠ.ㅠ

아래는 search.jsp 코드 전부 입니다.

more..


헉.. 포스팅 하자마자 문제 해결...

jsp 1.2  문법을 보니깐 xml에서는 taglib을 <jsp:root xmlns:이름="uri" >이렇게 지정해 주고 쓰는 거군요.

위에 있는 코드 윗 부분을 아래 처럼 수정을 하면 제대로 tag가 먹힙니다. 나이스!!  :)
<jsp:root version="1.2" xmlns:jsp="http://java.sun.com/JSP/Page"
    xmlns:display="urn:jsptld:http://displaytag.sf.net"
    xmlns:form="http://www.springframework.org/tags/form">

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top


DisplayTag과 SpringMVC



SpringMVC의 컨트롤러에서 원하는 페이지 이름(여기서는 index)으로 memberList 객체를 memberList라는 이름으로 전해 줬습니다.

more..

그리고 .jsp로 가도록 View Reslover를 등록 해뒀기 때문에 index -> index.jsp에 membeList객체를 들고 찾아갑니다. 그래서 index.jsp에서는 다음 처럼 dispalyTag에 바로 이 memberList 라는 이름을 사용했더니 어젯밤에 잠들기 전에 본것과 같은 화면이 출력됐습니다.

more..

위 코드는 컬럼명을 원하는 이름으로 주고(title), 페이징을 하고(pagesize), 컬럼별로 정렬이 가능하도록(sortable) 했습니다. 아. 그리고 exel, pdf, cvs(?), rtf(?) 형식의 파일로 데이타를 추출해 낼 수 있도록 했습니다.(export=true)
사용자 삽입 이미지
이런 화면이 보입니다. 원하는 대로 된 것 같지만... 페이지 번호를 눌러보고 메뉴별로 눌러서 정렬을 해보려고 하면 다음과 같은 에러를 만나게 됩니다.
사용자 삽입 이미지
=> page 번호 클릭 했을 때 발생하는 에러

사용자 삽입 이미지
=> 컬럼이름을 눌러서 정렬하고 싶었는데 발생한 현상

다음과 같이 수정을 하면 원하는 대로 동작합니다.

more..

추가 or 수정한 부분을 빨간표시를 했습니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
top


DisplayTag 배끼기



DisplayTag 예제에 있는 css와 img파일을 가지고 마치 제것인양 써봤습니다.
사용자 삽입 이미지
이전에 jstl을 사용해서 table을 출력 했던 화면을 DisplayTag를 사용하도록 바꾸려고 생각했는데예상 한 것 보다 시간이 오래 걸렸습니다. 그래도 위처럼 이쁘장한 화면으로 베낄 수 있었다는 것에 만족하며 잠들어야 겠습니다.

원래의 화면과 비교를 해보시면... 저의 만족감에 공감하실 수 있을지도...
사용자 삽입 이미지

'Spring > 주소록 만들기' 카테고리의 다른 글

검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
top


주소록 개발 카탈로그



프로젝트 시작
* 요구 사항 인터뷰
개발 준비 작업
* 프로젝트 생성 + jar 파일 추가
* MySQL 설치 + 사용
* MySQL Connector Down + testAdd()
신나게 개발

more..

개발 도중 공부

more..

중간 점검
* 수정해야 할 것들
* 중간점검
에피소드
* Alt + Shift + X, R 주의
* DB 인코딩 문제
* MySQL 설치 시 주의 할 점



'Spring > 주소록 만들기' 카테고리의 다른 글

SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
top


JSP 화면 작성



참조 : Spring MVC 어플리케이션 개발 <9> JSP 화면 작성

이전에 컨트롤러를 만들고 viewResolver를 등록해서 적당한 jsp파일에 적당한 객체가 주어지도록 했습니다.[각주:1] 하지만~ 그 객체를 써먹진 않고 그냥 "OK~"만 화면에 출력을 했었습니다.

이번에는 jstl을 사용해서 전달 받은 객체를 가지고 화면에 출력하는 jsp페이지를 만들겠습니다.

JSTL을 사용하기 위해서는 jstl.jar파일과 standard.jar파일이 필요합니다. 이 파일들은 http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi 이곳에서 Taglib를 다운 받아 압축을 풀면 lib 디렉토리에서 찾을 수 있습니다.

위 두 파일을 WEB-INF/lib 폴더에 복사해서 추가를 한 뒤 index.jsp파일을 다음과 같이 수정했습니다.

more..


그리고 프로그램을 실행시켜 봅시다.
사용자 삽입 이미지

휴~ 기나긴 여정의 끝이 보이기 시작합니다.

앞으로 남은 일

1. 삭제하기 버튼을 클릭했을 때 정말 삭제할 것인지 확인 하는 팝업 창이 뜬 뒤에 수정을 해주고 다시 리스트를 뿌려주는 일.

2.수정하기 버튼을 클릭했을 때 수정하는 화면으로 넘어가는 일

3.수정하기 화면에서 수정 완료 버튼을 클릭하면 수정이 완료되었슴을 알리는 글자를 출력하고 다시 이 화면으로 넘어 오는 일

4. 새로운 멤버 추가 버튼(Add)을 클릭하면 새로운 멤버의 정보가 추가되었슴을 알려주고 다시 위 리스트를 보여주기.

  1. index.jsp 파일에 memberList 객체를 memberList 라는 이름으로 전달해 주었습니다. [본문으로]

'Spring > 주소록 만들기' 카테고리의 다른 글

SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
top


Spring MVC configuration 파일들 설정 하기



참고 : Spring MVC 어플리케이션 개발 <5> MVC 컨트롤러 작성

먼저 앞에서 만들어 둔 컨트롤러를 기존의 WebApplicationContext[각주:1]에 등록해준 Controller를 수정하여 등록합니다.
<!-- Controller 등록 -->
    <bean name="/index.do"
        class="member.web.MemberListController">
        <property name="memberRepository" ref="memberRepository" />
    </bean>
컨트롤러에서 사용한 memberRepository 변수를 IOC를 사용하여 연결 시키고 있습니다.

memberRespocitory 빈을 applicationContext.xml에 다음과 같이 등록 하고 WEB-INF/spring폴더를 만들고 그 안에 넣어둡니다.
    <bean id="memberRepository" class="net.webapp2.member.service.MemberRepositoryImpl">
        <property name="memberDao" ref="memberDao" />
    </bean>
</beans>

위에서 사용하는 memberDao 빈은 daoContext-member.xml에 정의해 둡니다.
<bean id="memberDao" class="net.webapp2.member.dao.SqlmapMemberDao">
        <property name="sqlMapClient" ref="sqlMapClient" />
    </bean>

그리고 여기서 사용하는 sqlMapClient는 daoContext.xml에 정의해 둡니다.
<bean id="sqlMapClient"
        class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation"
            value="WEB-INF/ibatis/sql-map-config.xml" />
        <property name="dataSource" ref="dataSource" />
    </bean>

iBATIS와 연동하는 부분이네요. iBATIS는 WEB-INF/ibatis폴더에 sql-map-config.xml을 만들어서 넣어 줍니다. 지금 까지 설정한 파일들의 대부분은 기존의 Spring MVC를 제외한 상태에서 만들었던 프로젝트에 있던 파일들입니다. 따라서 적당한 위치로 복사해 주면 될 것 같습니다.

지금까지 설정해준 설정 파일들은 web.xml에서 읽어 들이도록 다음과 같이 코딩을 합니다.
<!-- Spring Context Config Location -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring/daoContext-member.xml
            /WEB-INF/spring/applicationContext.xml
            /WEB-INF/spring/daoContext.xml
        </param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

사용자 삽입 이미지

  1. addressBook-sevlet.xml [본문으로]

'Spring > 주소록 만들기' 카테고리의 다른 글

Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
top


MVC 컨트롤러 작성



참고 : Spring MVC 어플리케이션 개발 <5> MVC 컨트롤러 작성

현재 진행 중인 이클립스 프로젝트(webAddress)에서 src폴더에 member.web 패키지를 만듭니다. Spring에서 제공하는 AbstractController를 상속받는 MemberListController 클래스를 생성합니다.

package member.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class MemberListController extends AbstractController {

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
        // TODO Auto-generated method stub
        return null;
    }

}


Member의 List를 반환하도록 handleRequestInternal() 메소드를 구현합시다. 그 전에 arg0과 arg1을 request와 response로 보다 명확한 이름을 사용하도록 바꿔줍니다.

구현하기전에 Spring MVC에 손대기 전에 만들어 두었던 Service, DAO, Domain layer를 구현했던 코드를 jar파일로 묶어서 WEB-INF/lib에 추가해줍니다. 그리고 개발 할 때 사용한 jar파일들도 추가해 줍니다.

more..


public class MemberListController extends AbstractController {

    private MemberRepository memberRepository;

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        List<Member> memberList = memberRepository.getAllMembers();
        return new ModelAndView("index", "memberList", memberList);
    }

    public void setMemberRepository(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

Member의 List를 jsp에서 사용할 수 있도록 위와 같이 코딩을 합니다.
녹색 글자 부분은 MemberRespository[각주:1]를 Spring의 IOC를 이용하기 위한 것입니다.
파란 글자 부분은 기존에 구현해 둔 MeberRepository를 사용하여 Member 리스트를 가져오도록 코딩을 했습니다.
보라색 부분은 "index"라는 View 이름에게[각주:2] memberList(세번째 인자)를 memberList(두번째 인자)라는 이름으로 참조 할 수 있도록 던지는 부분입니다.

이제 코딩은 끝났고 환경 설정 파일을 이리 저리 바꿔주고 옮겨주는 일이 남았습니다.

  1. Service Interface입니다. [본문으로]
  2. View Resolver에서 해당하는 파일 이름으로 변환해 줍니다. [본문으로]

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
top


화면 작성



참고 : Spring MVC 어플리케이션 개발 <4> 화면 요구 작성

html 공부 중
html 공부 중 2탄
주록 화면 완성

이렇게 세 번에 걸쳐서 html로 기본 골격을 만들었습니다. 개발 하다가 공부 하다가 개발 하다가 공부 하다가 이렇게 되다보니 시간이 오래 걸리고 있습니다. 목표가 두 가지(개발 & 공부)이기 때문에 어쩔 수 없는 현상이라고 생각하며 새로 알게 되는 것이 많아져서 기분이 좋습니다.

이 골격을 만들면서 생각한 것은 화면을 만들어보니 요구 사항이 더 명확해 진다는 것입니다. 사용자 입장에서 만들어진 화면을 보니 새로운 요구 사항이 새록새록 생겨나기 시작했습니다. 진작에 화면 부터 만들어 볼 껄 하며 '화면 만들기의 중요성'을 느꼈습니다.


'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
top


Alt + Shift + X, R 주의



이전 글의 에러 발생 원인을 찾던 중...

어떻게 해도 계속 비슷한 404 화면만 보여질 뿐 뚜렷한 해결방법이 보이지 않았습니다. 그래서 jsp파일도 최대한 간추려보고 Handler Mapping도 명시적으로 등록도 해보았습니다.
<!-- Handler Mapping 등록 -->
    <bean id="handlerMapping"
        class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
그리고 찬욱이의 조언대로 log4j도 등록해서 원인을 찾으려고 web.xml에 log4j도 등록해 두었습니다.

<!-- Log4J Config Location -->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j/log4j.properties</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.util.Log4jConfigListener
        </listener-class>
    </listener>
log4j설정 파일인 log4j.properties파일은 springkorea에 있는 것을 가져다 썼습니다. 하지만 무엇이 잘못됐는지 로깅 메시지를 볼 수 없었습니다. log4j에서 좀만 더 공부하면 뭔가 이해할 수 있을 것 같은데 내일 한번 알아봐야겠습니다.

이 모든 것들을 해보았는데 여전히... 같은 결과... OTL...

수십번 정도의 Alt + Shift + X -> R 을 클릭하고 있던 저는 지쳐서 마우스만 가지고 실행시키기 위해서 프로젝트 이름 위에서 오른쪽 마우스 클릭 -> Run as -> Run on Server를 클릭하였습니다.

헉!!....

사용자 삽입 이미지

Alt + Shift + x -> R 로 Run on Server 하지 맙시다. 저처럼 되는게 안 될 수도 있는 현상이 벌어집니다. ㅠ.ㅠ

'Spring > 주소록 만들기' 카테고리의 다른 글

주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
top


Web Application Context 작성



참조 : Spring MVC 어플리케이션 개발 <3> Web Application Context 파일 작성

Spring Reference에 Dispatcher와 WebApplicationContex와의 관계를 나타낸 그림이 있어서 퍼왔습니다.
사용자 삽입 이미지
앞에서 addressBook-servlet.xml로 .do로 끝나느 요청을 넘기기로 했고 지금 이 글에서 작성해야할 addressBook-servlet.xml을 예전에는 hanlderMapping이라고 머릿속으로 단순화 시켜서 인식하고 있었는데 그게 아닌 것 같습니다. addressBook-sevlet.xml은 WebApplicationContext이고 이 안에 Handler Mapping, View Resolver, Controller들을 등록해 둘 수 있는 것 같습니다.

web/WEB-INF 폴더 안에 addressBook-servlet.xml 이라는 파일을 생성합니다.
Spring 2.0에서 XML 기반의 configuration metadata의 기본 포맷은 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
  <bean id="..." class="...">
    <!-- collaborators and configuration for this bean go here -->
  </bean>
  <bean id="..." class="...">
    <!-- collaborators and configuration for this bean go here -->
  </bean>
</beans>

이제 여기에 Handler Mapping, View Resolver, Controller들을 넣어 봅시다.

Handler Mapping은 요청이 들어온 URL에 따라 어떤 컨트롤러가 사용되어야 하는지 매핑시키는 것으로 이해를 했는데 아무것도 지정해 두지 않으면 bean이름으로 매핑 시킨다고 하는데 흠~ 공부가 필요한 부분입니다.

View Resolver는 view를 실제 파일 이름으로 변환해주는 변환기 역할을 한다고 합니다.

 <bean id="viewResolver"
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass"
   value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />
 </bean>

위와 같이 등록해 둡니다. view앞에는 /WEB-INF/jsp/ 를 붙이고 뒤에는 .jsp를 붙여서 실제 파일을 찾을 수 있도록 합니다. viewClass 속성은 jsp가 JSTL을 사용할 때 적어주는 것 같습니다.

Controller차례인데요. 먼저 Handler는 요청을 처리하는 Controller의 메소드 단위 라고 합니다. 역시 이 부분도 공부가 필요할 것 같습니다. 이것을 다음과 같이 설정합시다.

<bean name="/index.do"
  class="org.springframework.web.servlet.mvc.ParameterizableViewController">
  <property name="viewName" value="index" />
 </bean>

index.do 요청이 발생하면 ParameterizableViewController로 요청이 넘어가고 이 녀석은 view 이름으로 index를 반환해 줍니다. 그럼 이것이 View Resolver를 타고 /WEB-INF/jsp/index.jsp 를 찾게 됩니다.

이제 addressBook-servlet.xml 파일은 다 만든것 같습니다.

실제 web/WEB-INF 폴더 밑에 jsp라는 폴더를 만들고 그 안에 index.jsp 파일을 만듭니다. index.jsp파일은 제대로 돌아가는지 확인하기 위해 "오~케이!!!"가 출력 되도록 간단히 만들어 봤습니다.

그리고 서버를 가동 시키면....
사용자 삽입 이미지
헉... 이렇게 나오네요;; 음~ 각본에 없던 것이 발생했습니다.

원래대로면 Jstl.jar파일이 없어서 에러가 발생해야 하는데..왜 404가 뜨는지 모르겠군요. 분명히 addressBook-servlet.xml파일은 존재하는데;; 일단은 문제가 발생했으니 여기서 STOP해야겠습니다.

=> 문제 해결 됨. 서버 에서 실행(Run on Server)를 할 때 Alt + Shift + x -> R 단축키를 사용하지 말고 프로젝트 이름 우클릭 -> Run as -> Run on Server 클릭하면 됩니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
top


Spring MVC 구동을 위한 web.xml 작성



참조 : Spring MVC 어플리케이션 개발 <2> Spring MVC 구동을 위한 web.xml 작성

Spring MVC 공부중에서 찬욱이와 열띤 토론이 있었던 dispatcher를 설정하는 부분인 것 같습니다.

앞에서 만든 웹 프로젝트를 보면 이클립스에서 만들어준 web폴더 -> WEB-INF 안에 보면 web.xml이 있습니다. 그 파일을 보시면 다음과 같습니다.

more..


<display -name>은 어디에 표시가 되는건지 모르겠지만 웹 사이트에 대한 간략한 설명이 들어가면 좋을 것 같습니다.
<webcole-file-list>는 대문으로 쓰일 수 있는 파일 이름들이 쭉~ 나열되어 있는데 현재 대문역할을 하는 파일은 index.html밖에 없으니 나머진 지워도 될 것 같습니다.
따라서 다음과 같이 수정합니다.

more..


그리고 이제 Dispatcher를 추가합니다. Dispatcher는 Spring에서 front controller역할을 하는 것으로 특정 URL의 요청을 처리할 Contoller를 찾아 주는 Handler Mapping을 등록해둡니다.

<!-- Spring Front Controller 등록 -->
    <servlet>
        <servlet-name>addressBook</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>addressBook</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
.do로 끝나는 요청들을 addressBook-servlet.xml로 보내도록 설정했습니다.


설정 내용 중에 보시면 org.springframework.web.servlet.DispatcherServlet을 사용하고 있습니다. 따라서 spring.jar파일을 web/WEB-INF/lib에 넣어줍니다. 그러면 자동으로 Web App Libraries로 lib폴더에 들어간 spring.jar파일을 인식하게 됩니다.
사용자 삽입 이미지

'Spring > 주소록 만들기' 카테고리의 다른 글

Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
top


이클립스에서 웹 프로젝트 생성하기



참조 : Spring MVC 어플리케이션 개발 <1> 프로젝트 디렉토리 생성

new -> 프로젝트를 클릭하고 web -> dynamic web project를 선택합니다.
사용자 삽입 이미지

next를 클릭한 뒤에 적당한 프로젝트 이름을 적고 꼭 target server를 지정해 줘야 합니다. tomcat5.5 지정 해주고 설치된 폴더를 찾아주면 됩니다.
사용자 삽입 이미지

이제 next를 두 번 정도 누르면 아래 화면이 보이는데 이 때 컨벤션을 지키기 위해서 content directory를 WebContent에서 web으로 바꾸고 finish를 합니다.
사용자 삽입 이미지

이렇게 생성된 프로젝트를 보면 아래와 같습니다.
사용자 삽입 이미지

제대로 돌아가는지 확인을 하기 위해서 web폴더에 index.html파일을 만듭니다. index.html파일의 내용은 다음과 같습니다.
<html>
 <head>
  <meta http-equiv="Refresh" content="0;URL=index.do">
 </head>
</html>

index.do페이지를 읽도록 요청한 것 같습니다. 보안과 관련되어 있다고 하는데 자세히는 모르겠군요.

이제 끝났습니다. Art + Shift + x 를 클릭하고 R 을 클릭하면 새로운 서버에서 구동할 것인지 기존 서버에서 구동할 것인지 선택하는 화면이 나오는데 여기서 next를 클릭해 보시면 다음과 같이 서버에서 구동하게 될 어플리케이션이 오른쪽에 위치된 상태를 확인한 뒤 finish를 클릭하면 됩니다.
사용자 삽입 이미지

이 때 이클립스 내장 브라우져가 실행이 되는데 IE나 FireFox 브라우져로 확인하고 싶다면 window -> web browser에서 원하는 브라우져를 선택하면 됩니다.
사용자 삽입 이미지

'Spring > 주소록 만들기' 카테고리의 다른 글

MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
top


Spring MVC 공부 중



Spring MVC가 작동하는 전체적인 그림은 Spring Reference에 있는 그림을 참고 하면 다음과 같습니다.
사용자 삽입 이미지
그림에 순서가 적혀있지 않아서 번호를 붙여 봤는데 아무래도 저렇게 동작할 것 같습니다. Spring In Action에도 이와 비슷한 그림을 본 것 같아서 찾아 봤습니다.
사용자 삽입 이미지

Spring Reference에 있는 그림보다 깔끔한것 같습니다.

Dispatcher Sevlet은 흔히 web.xml 파일을 말하며에 <servlet>태그로 설정하며  이것이 Spring Reference에 있는 front controller에 해당합니다.

Handler Mapping은 요청에 따라 어떤 controller 객체가 사용될지에 대한 정보를 가지고 있으며 web.xml에 bean 설정파일에 하나 이상의 Handler Mappling들이 등록되어 있습니다.을 등록할 수 있습니다.

예제보기


Controller는 Handler Mapping에 전부 등록이 되어있고 POJO 형태이고 DI를 사용합니다. ModleAndView 객체를 반환하는 메소드들이 있습니다.

ViewResolver는 반환된 ModelAndView 객체를 View에 맵핑합니다. 여기서 궁금한 것은 Handler Mapping과 분리 된 파일에 정의 해 둘 수도 있고 같은 곳에 둘 수도 있겠죠?? 아마 그래서 Spring In Action에서는 따로 그리고 Spring Reference에서는 Front Controller로 향하도록 그린것 같습니다. 이 bean에 있는 정보를 바탕으로 이 객체의 정보를 사용할 view에 객체를 전달하게 되는 듯 합니다. (여기서 부터 주춤거리기 시작합니다. ㅎㅎㅎ)

View Resolver 예제 보기


View는 JSP나 HTML같은 파일을 말하는 것 같습니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
top


CSS 공부 중



참초 : http://www.w3schools.com/css/css_syntax.asp
위 사이트에서 CSS 기본 문법을 공부 했습니다.

기본 구조는 다음과 같습니다.
selector {property: value}

selector는 HTML 태그나 엘리먼트(ex. body)가 오는 자리이고
property는 기본 속성을 바꾸고 싶은 어트리뷰트(ex. bgcolor)가 오는 자리입니다.
value는 속성에 대입할 값(ex. red)입니다.

property와 value 사이에는 :으로 구분을 합니다.
예)
body {color: black}

속성이 여러 단어로 된 경우 ""으로 묶어 줍니다.
예)
p {font-family: "sans serif"}

여러 속성을 지정할 경우 다음과 같이 ; 으로 구분 합니다.
예)
p {
text-align: center;
color: black;
font-family: arial
}

여러개의 태그에 공통으로 들어있는 속성을 변경하고 싶을 때 selector를 여러개 지정할 수 있습니다.
예)
h1,h2,h3,h4,h5,h6
{
color: green
}

같은 속성에 다른 값을 대입하는 여러 개의 class들을 만들 수 있습니다. 이 것을 적용하고 싶을 때는 태그에 class 속성에서 사용할 class를 지정해 주어야 합니다.
css class 예)
p.right {text-align: right}
p.center {text-align: center}
css 사용 예)
<p class="right">
This paragraph will be right-aligned.
</p>
<p class="center">
This paragraph will be center-aligned.
</p>

여러개의 class를 하나의 태그에 적용하고 싶을 때는 다음과 같이 스페이스로 공간을 띄고 계속 적어주면 됩니다.
예)
<p class="center bold">
This is a paragraph.
</p>

모든 태그들의 속성에 적용할 class를 정의할 때는 다음과 같이 합니다.
예)
.center {text-align: center}

id selector는 #로 시작합니다.
예)
#green {color: green}

id와 클래스와 사이의 차이점은 . 대신 #을 사용한다는 것이고 id선택자는 한 페이지에서 오직 하나의 엘리먼트와 일치해야 한다는 것입니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
top

TAG CSS

주소록 화면 완성



사용자 삽입 이미지

Gmail을 따라 그리다가 개발이 한도 끝도 없이 길어질까봐 일단 화면을 좀 더 간추리고 단순하게 만들었습니다. 한 화면에서 모든 멤버 보기와 새로운 멤버 추가, 그리고 삭제가 가능한 화면입니다.

이전에 만들어둔 새로운 멤버 추가 화면은 멤버의 정보를 수정하는 화면으로 살짝 바꿨습니다.
사용자 삽입 이미지

화면을 보니 대강 프로그램이 어떻게 진행되어야 할지 선명하게 눈에 들어옵니다.

삭제 시나리오
맨 위에 있는 화면이 제일 처음 이 프로그램의 사용자가 보게 될 화면입니다. 그곳에서 삭제 버튼을 누르면 "정말로 삭제 하시겠습니까?" 라고 물어보는 팝업창(이건 어떻게 만들지;;)이 뜨며 거기서 확인을 클릭하면 해당하는 주소가 지워지고 다시 첫화면을 뿌려줍니다.

새로운 멤버 추가 시나리오
첫 화면의 빈 칸들에 적당한 문자들을 입력한 후 add버튼을 클릭합니다. 이 때 입력된 값들이 적당한 값들인지 확인 하고 email이 중복 됐거나 얼토당토 않은 문자들이 입력 됐을 때는 해당하는 메시지를 출력하고 적당한 값들이 입력 됐다면 저장이 되었음을 알려주는 팝업창을 띄워주고 다시 첫 화면을 뿌려줍니다.

수정하기 시나리오
첫 화면의 오른쪽에 있는 modify 버튼을 클릭하면 두 번째 화면(수정 화면)으로 넘어가고 그 곳에는 첫 번째 화면에서 수정을 원했던 사용자의 정보들이 input box안에 적혀 있습니다.(이건 또 어떻게 하지;;) 그리고 수정할 부분의 input box에 원하는 문자열로 수정한 뒤 Commit 버튼을 클릭하면 "새로운 멤버 추가 시나리오"에서 거쳤던 검증을 거친 뒤에 첫 번째 화면을 다시 뿌려줍니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
top


중간점검



GUI를 그려보면서 진작에 화면 부터 그려볼껄... 이라는 생각을 했습니다.

그리다보니 현재 구현한 기능 중에 일부는 행방이 묘연해 진 것도 있고 이런 저런 기능들이 더 있으면 좋겠구나 라는 생각이 들었습니다. 처음부터 요구사항을 완벽하게 정하고 시작하지 않았기 때문에 거의 제 맘대로 작성을 하면 되는 프로그램이였기에 이제부터라도 다시 시작하면 될 것같습니다.

1. Gmail이 모델인 만큼 주소록에 있는 사람들을 분류할 수 있는 기능이 있으면 좋겠다는 생각을 했습니다. 그러려면 DB도 바껴야 할 것 같고 어쩌면 테이블이 만들어질지도 모르겠습니다.

2. HTML/CSS 공부하는 것이 만만치 않다는 것을 느꼈습니다. 기본을 소홀히 하면 어떤 댓가를 치루게 되는지 절실하게 느끼는 중입니다.

3. Spring공부를 하려고 개발하기 시작한 것인데.. TDD, Easymock, Abstract Test, iBATIS, HTML, CSS등 공부할 것이 많았습니다. Spring만 공부하려던 것이 개발에 필요한 기본기를 배우게 되는 것 같아 주제가 바뀐 것 같지만 그런면에서도 만족을 합니다.

앞으로 방학이기도 하고 좀더 열심히 해서 언능 마무리하자 기선아


'Spring > 주소록 만들기' 카테고리의 다른 글

Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
top

TAG 느낀점

HTML 공부 중 2탄



오늘은 http://www.w3schools.com/html/html_forms.asp 여기 공부합니다.
입력 하는 부분 만들어야 해서요.

폼 태그
<form name="input" action="html_form_action.asp" method="get">

Type your first name:
<input type="text" name="FirstName" value="Mickey" size="20">
<br>Type your last name:
<input type="text" name="LastName" value="Mouse" size="20">
<br>
<input type="submit" value="Submit">

</form>

form의 name은 어디에 쓰이는지 모르겠지만;;; action은 입력 된 것을 넘겨줄 다음 페이지를 지정하고 method에는 get방식인지 post방식인지 설정합니다.
input 태그는 type으로  radio, checkbox, text, submit 등으로 지정할 수 있으며 지정하는 태그에 따라 모양이 달라집니다. name은 input 부분에 입력 된 값을 가리킬 수 있는 변수명 이고 value는 이 변수명에 대입될 값입니다. text의 경우에는 입력된 값이 들어갑니다. size는 text 입력하는 부분의 길이를 지정합니다

이거랑 table이랑 합쳐서 입력 화면을 만들었습니다. 이것도 역시 gmail이 모델인데 오늘도 역시 웃음만 나옵니다. 크헤헤헷;;;

모델
사용자 삽입 이미지

나의 것
사용자 삽입 이미지


'Spring > 주소록 만들기' 카테고리의 다른 글

이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
top


Strict HTML 4.01 지침서



Head First HTML with CSS & XHTML을 참고합니다.
p291쪽에 잘 정리되어 있습니다.

- 모든 웹 페이지는 다음과 같은 Doctype으로 시작합니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

- <html> 엘리먼트가 Doctype 바로 다음에 오는 최상위 루트 엘리먼트가 되어야 합니다.

- <head>와 <body> 만 <html>에 들어가고 나머지는 <head>나 <body>안에 들어갑니다.

- <head>안에 <title> 꼭 넣기
<head> 엘리먼트 안에는 <title> <meta> <style>를 넣을 수 있는 유일한 장소~

- <body>안에는 블럭 엘리먼트만 넣기

- 인라인 엘리먼트는 블럭 엘리먼트안에 넣기
인라인 엘리먼트 안에는 텍스트 or 다른 인라인 엘리먼트

- <ul> 과 <ol> 안에는 <li> 만 올수 있습니다.

- <li> 안에는 무엇이든(텍스트, 인라인 엘리먼트, 블럭 엘리먼트) 넣을 수 있습니다.

- <blockquote>에는 블럭 엘리먼트들만 넣습니다.

블럭 엘리먼트들 보러가기
인라인 엘리먼트들 보러가기

'Spring > 주소록 만들기' 카테고리의 다른 글

Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
top


HTML 공부 중



참조 : http://www.w3schools.com/html/html_intro.asp
위 링크를 참조하며 공부하고 있습니다.

앵커 태그
<a href="whiteship.tistory.com">My Blog</a>
이렇게 쓰는것이 가장 기본 형태 같습니다.

<a name="index">목차</a>
<a href="#index">목차로 이동</a>
목차로 이동을 클릭하면 목차로 이동하게 됩니다. 인덱스 기능이네요.

<a herf="whiteship.tistory.com" target="_blank">새창에서 Blog 열기</a>
타겟을 지정해주면 새창에서 열립니다. _top 으로 하면 현재 창에서 열립니다.(프레임 무시)

<a href="mailto:whiteship2000@gmil.com?subject=Hello%20again">보내기</a>
메일 보내는 페이지로 이동합니다.(firefox에서는 Gmail로 탭이 생기던데... IE에서는 전자 메일이 실행됩니다.) 이동하면서 이 메일 제목은 Hello again이고 두 단어 사이를 %20 만큼 띱니다.

좀 더 복잡한 E-mail 링크 걸기 예제는 참조를 클릭해 주세요.

프레임 태그
<frameset rows="15%,70%,15%">
  <frame noresize="noresize" src="upMenu.htm">
  <frame noresize="noresize" name="center" src="list.htm">
  <frame noresize="noresize" src="downMenu.htm">
</frameset>

frameset에 rows는 가로로 쪼개고 cols는 세로로 쪼개기 입니다.
noresize="noresize"로 해주면 프레임 나누고 있는 막대기를 드래그 하지 못하게 설정합니다.
각각의 프레임에 이름을 설정해 줘서 앵커 태그의 targer 속성에 적어줄 수 있습니다.

주의 할 것 frameset 태그를 쓰면 body 태그를 쓰지 못한다는거~

테이블 태그
<table border="1">
   <tr>
       <th>Index</th>
       <th>Name</th>
       <th>Blog</th>
   </tr>
   <tr>
       <td>1</td>
       <td>백기선</td>
       <td><a href="http://whiteship.tistory.com/" target="_blank">보러가기</a></td>
   </tr>
</table>

th는 테이블의 헤드 부분이며 굵은 글씨에 중앙 정렬이 됩니다. <td></td> 이렇게 빈칸으로 두면 기본 보더 스타일에서 내부의 조그만 사각형이 안그려 지는데 &nbsp; 를 넣어서 만들 수 있습니다.

colspan="2' rowspan="2" 를 사용해서 셀 병합 시킬 수 있습니다.
cellspacing="10" 은 셀 두깨 cellpadding="3"은 셀 안에 있는 글자와 셀의 간격
background="bgdesert.jpg" 으로 배경 넣을 수 있습니다.

오늘의 결과물
사용자 삽입 이미지
GMail을 모델 삼았는데 이거 정말 웃음 밖에 안나오는군요. ㅎㅎㅎㅎㅎ

'Spring > 주소록 만들기' 카테고리의 다른 글

CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
단위 테스트 모르겠슴 ㅠ.ㅠ  (0) 2006.12.05
top


페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)



1. 먼저 MemberRepositoryTest에 다음과 같이 Easymock을 이용한 Test코드를 추가합니다.
   @Test
   public void pagsing(){
       final Member member = new Member();
       List<Member> members = null;

       mockMemberDao.add(member);
       expectLastCall().times(15);
       expect(mockMemberDao.list(1)).andReturn(members);

       replay(mockMemberDao);
       for (int i = 0; i < 15; i++) {
           memberRepository.add(member);
       }
       assertEquals(members, memberRepository.list(1));

       verify(mockMemberDao);
   }
=> 여기서 의문이 드는 것은 "빨간색으로 표시된 부분이 올바른 표현인가?" 모르겠습니다. Return 타입을 예상하는 부분으로 기억이 나는데 다시 공부할 필요가 있겠습니다.
=> 또하나 의문이 드는 것은 return type인 "List의 크기를 예측할 순 없을까"하는 것입니다. 왠지 방법이 있을 것 같은데 이것도 좀더 공부할 필요가 있겠습니다.

이 테스트를 통과 시키기 위해서는 MemberDao 인터페이스에 새로운 메소드가 추가되어야 하며 MemberRepository 인터페이스에도 새로운 메소드가 추가되어야 합니다. 그리고 그 메소드를 구현한 MemberRepositoryImpl 에서 새로 추가한 메소드를 구현해 두어야 합니다. MemberDao의 list()를 호출하도록 수정하면 위 테스트는 간단하게 통과 합니다.

2. 이번에는 Dao Test를 하기 위해서 SqlmapMemberDaoTest 클래스에 다음의 테스트 코드를 추가합니다.
   public void testPaging(){
       final int numberOfMembers = 15;
       insertMembers(numberOfMembers);

       List<Member> members = memberDao.list(1);
       assertNotNull(members);
       assertEquals(12, members.size());

       members = memberDao.list(2);
       assertEquals(3, members.size());
   }
=> 이 테스트를 통과시키면 구현이 끝나게 됩니다.

3. 테스트를 통과 시키기 위해서 SqlmapMemberDao에 list를 아래와 같이 구현합니다.
public List<Member> list(int page) {
       Map<String, Integer> params = new HashMap<String, Integer>();
       params.put("defaultSize", 12);
       params.put("offset", 12 * (page-1));
       return getSqlMapClientTemplate().queryForList("Member.list", params);
   }
=> 아직도 테스트를 통과하지 못합니다. iBATIS에 list라는 id를 가진 SQL을 작성해야 합니다.

4. Member.xml에 다음과 같이 추가하면 테스트는 통과하고 기능 추가가 끝나게 됩니다.
<select id="list" resultMap="memberMap">
       SELECT *
       FROM Member
       ORDER BY id
       LIMIT #defaultSize# OFFSET #offset#
   </select>
=> LIMIT에 대한 MySQL document를 참조했습니다.
기본구조)  [LIMIT {[offset] row_count | row_count OFFSET offset}]
예) LIMIT 5 => 상위 5 줄
    LIMIT 2, 5 => 상위에서 2줄 버리고 5 줄
    LIMIT 5 OFFSET 2 => 상위에서 2줄 버리고 5줄

5. 코드에 수정할 부분을 찾아서 리팩토링 합니다. 한 페이지에 12개 씩 보여주기로 정했습니다.(제 맘대로ㅋㅋ) 그래서 위에 표시해 둔 12라는 숫자는 의미가 있는 숫자입니다. MemberRepository에 DEFAULT_LIST_SIZE 상수로 바꿉니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
단위 테스트 모르겠슴 ㅠ.ㅠ  (0) 2006.12.05
Eclipse에서 Rename Method 리팩토링  (0) 2006.12.04
top


Easymock 연습하기 3탄



Easymock 연습하기 2탄에서는 mock 객체를 이용해서 void 형태의 메소드를 테스트 했습니다. 즉 올바른 인자가 들어가는지 확인을 한것입니다.

이번에는 나오는 값도 테스트를 해보겠습니다. 나오는 값을 테스트하기 위해서는 expect라는 메소드와 andReturn메소드를 사용합니다.

소스보기

more..


expect를 이용해서 리턴값이 있는 메소드를 감싸고 그 뒤에 andReturn을 호출하면서 반활 될 타입의 객체를 지정해 줍니다. => "memberDao에 get메소드를 호출하면 member가 나온다."

그리고 replay를 실행하여 실제로 member를 추가한 뒤에 memberRepository를 이용해서 get을 호출하면 memberRepository 안에 있는 memberDao의 Mock 객체가 member를 반환해주게 됩니다. 따라서 시나리오와 액션이 일치하게 되며 verify를 이용해서 확인할 수 있습니다.


위 메소드의 내용을 한번 그려봤습니다. Dao 쪽은 Mock으로 처리하고 Service만 test를 할 수 있게 되었습니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

중간점검  (0) 2006.12.17
HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
단위 테스트 모르겠슴 ㅠ.ㅠ  (0) 2006.12.05
Eclipse에서 Rename Method 리팩토링  (0) 2006.12.04
세련된 SQL map (iBATIS)  (0) 2006.12.04
top


Easymock 연습하기 2탄



import static org.easymock.EasyMock.*;
import org.junit.*;
import net.webapp2.member.dao.MemberDao;
import net.webapp2.member.domain.Member;

public class MemberRepositoryTest {

   MemberDao mockMemberDao;
   MemberRepository memberRepository;

   @Before
   public void setup(){
       mockMemberDao = createMock(MemberDao.class);
       memberRepository = new MemberRepositoryImpl();

       memberRepository.setMemberDao(mockMemberDao);

   }

   @Test
   public void add(){
       final Member member = new Member();
       mockMemberDao.add(member);

       replay(mockMemberDao);
       memberRepository.add(member);

       verify(mockMemberDao);
   }
}

먼저 Test할 대상 클래스와 Mock 테스트를 할 클래스 타입의 객체를 만듭니다.(하늘색) 그리고 memberRepository에서 memberDao객체를 사용해야 하기 때문에 setter를 사용하여 위에서 만든 Mock 객체로 setting 해줍니다.(첫번째 분홍색)

그리고 시나리오를 생각해 봅니다.
"Member를 추가하는 기능이기 때문에 memberRepository의 add(Member)를 호출하면 memberDao의 add(Member)가 호출이 되서 DB에 들어가겠구나 리턴값은 없고..."

다음 테스트 메소드를 작성하기 시작하는데 먼저 시나리오에 해당하는 부분(두번째 분홍색 윗부분)에서 Mock 객체(mockMemberDao)에게 일어날 일을 생각합니다. mockMemberDao.add(member); 이것 밖에 없네요.

이제 시나리오 대로 돌아가는지 replay(Mock 객체) 시켜봅니다. replay 시키면서 당연히 "액션"을 취해 줘야 하는데 이 "액션"이 여기서는 memberRepository.add(member) 가 됩니다.

그리고 시나리오 대로 액션이 이뤄졌는지 verify(Mock 객체)를 합니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

HTML 공부 중 2탄  (2) 2006.12.14
Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
단위 테스트 모르겠슴 ㅠ.ㅠ  (0) 2006.12.05
Eclipse에서 Rename Method 리팩토링  (0) 2006.12.04
세련된 SQL map (iBATIS)  (0) 2006.12.04
메소드 추상화  (2) 2006.12.04
top

TAG EasyMock

Easymock 연습하기



http://www.easymock.org/Downloads.html
위 링크에서 Easymock을 다운로드 합니다.

압축을 풀면 easymock.jar 파일이 있습니다. 이것을 Eclipse 프로젝트에 추가합니다. 그리고 JUnit 도 추가합니다. JDK는 5.0 이상에서 작동합니다. (easymock 버젼 2 부터 그런 것 같습니다.)

MemberRepositoryImpl 클래스를 테스트 하기 위한 코드 입니다.
import static org.easymock.EasyMock.*;
import org.junit.*;
import net.webapp2.member.dao.MemberDao;

public class MemberRepositoryTest {

   MemberDao mockMemberDao;
   MemberRepository memberRepository;

   @Before
   public void setup(){
       mockMemberDao = createMock(MemberDao.class);
       memberRepository = new MemberRepositoryImpl();
   }

   @Test
   public void add(){
       //recoding

       //verify
   }
}

이 전에는 MemberDao 까지 거쳐서 테스트를 했었지만 위의 상태는 아래의 그림과 같이 MemberRepository에만 국한 될 수 있습니다.

Easymock을 사용하는 방법은 세 단계로 나뉘어 집니다. 먼저 createMock(Interface Type)을 사용하여 Mock 객체를 만들게 됩니다. 인터페이스 타입의 객체는 못만들기 때문에 MemberDao를 사용하고 있던 MemberRepositoryImpl에서 SqlmapMemberDao(MemberDao 구현체) 까지 사용해가며 테스트를 했었는데 이제는 거기까지 가지 않고 MemberDao에서 끊기게 됩니다.

그 다음 어떤 활동이 벌어질지 시나리오를 작성하고(recoding) 실제 작업이 돌아갈 때 결과가 시나리오와 일치 하는지 확인(verify)합니다.

참고 :
Easymock Document
Easymock 시작하기
단위 테스트의 '단위'
단위 테스트의 경계 : 어디까지가 단위 테스트인가?

'Spring > 주소록 만들기' 카테고리의 다른 글

Strict HTML 4.01 지침서  (6) 2006.12.14
HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
단위 테스트 모르겠슴 ㅠ.ㅠ  (0) 2006.12.05
Eclipse에서 Rename Method 리팩토링  (0) 2006.12.04
세련된 SQL map (iBATIS)  (0) 2006.12.04
메소드 추상화  (2) 2006.12.04
log4j.properties 파일 위치 시키기  (2) 2006.12.04
top


단위 테스트 모르겠슴 ㅠ.ㅠ



기본의 테스트 클래스 모습입니다.

이 그림은 현재 개발 중인 어플리케이션의 클래스 다이어그램 입니다. 왼쪽의 파란 테스트 클래스가 테스트 하는 대상이 현재 MemberRepository와 MemberDao 두 계층을 모두 통과합니다. 그 뿐만 아니라 DAO를 통해서 DB까지도 들렸다 오지요.

그래서 이전 수정 사항 중에 하나로 저 테스트 클래스를 Service 을 통해서 Dao 로 가지 않고 바로 MemberDao를 사용하도록 수정하였습니다.
이상태도 단위 테스트라고 할 수 있을지 의심이 됩니다. 의심이 된다는 자체가... 좀... 아 어지럽네요. 이렇게 안하고 어떻게 MemberDao 인터페이스가 제대로 동작하는지 확인 할 수 있을까요?

EasyMock이라는 것을 공부하다가 머리가 더 복잡해져서 잠시 쉬면서 현재 상태를 정리해 둡니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

HTML 공부 중  (2) 2006.12.13
페이징 기능 구현하기(TDD, Easymock, iBATIS, MySQL)  (2) 2006.12.11
Easymock 연습하기 3탄  (0) 2006.12.06
Easymock 연습하기 2탄  (0) 2006.12.05
Easymock 연습하기  (0) 2006.12.05
단위 테스트 모르겠슴 ㅠ.ㅠ  (0) 2006.12.05
Eclipse에서 Rename Method 리팩토링  (0) 2006.12.04
세련된 SQL map (iBATIS)  (0) 2006.12.04
메소드 추상화  (2) 2006.12.04
log4j.properties 파일 위치 시키기  (2) 2006.12.04
log4j 설정하기(in spring)  (0) 2006.12.02
top


Eclipse에서 Rename Method 리팩토링




getNumberOfMembers() 메소드 이름을 count()로 바꾸는 것이 좋겠다는 의견을 받았습니다. 생각해보니 주소록 어플리케이션에서 숫자를 셀 것이 몇명이나 등록되어 있는지 밖에 없는데 굳이 "몇 명이 있는지 세어라" 라고 할 필요 없이 "몇이냐" 라고 물어보는게 타당하다는 생각이 듭니다.

문제는 getNumberOfMembers() 메소드를 사방에서 사용하고 있다는 것입니다. memberDao 인터페이스에 만들어둔 이 메소드를 count()로 변경하게 되면 여러 클래스에서 에러가 발생하게 되고 각 클래스들을 돌아가니며 수정을 해도 되겠지만...Eclipse가 그 모습을 본다면 매우 안타까워 할 것 같습니다.

Alt + Shift + R 을 클릭합니다.
변경하고 싶은 이름을 입력한 뒤 Preview를 눌러 확인 해 볼 수 도 있습니다.
어디서(class) 어떤 부분이 바뀌게 될지 확인 할 수 있습니다.

OK를 눌러주면 리팩토링 끝입니다. :)

참고 :
Rename Method -> http://www.refactoring.com/catalog/renameMethod.html


top