WebTUnit에 CoC 적용 결과

한 가지를 더 수정해서 이제는 WarConfiguration 설정이 더 간편해졌다. 8080 포트를 사용하여 웹 테스트를 할 때는 appName이라는 속성을 명시하지 않고 그냥 애플리케이션 이름만 명시하면 된다.

@RunWith(WebTestRunner.class)
@WarConfiguration(“springsprout”)
@DataConfiguration
public class MemberWebTest {

    @WebTest
    public void memberPages(){
       …
    }
}

이제 한 가지만 더 정리하면 1.0-M1 버전을 공개할 수 있을 듯 하다. 캬캬캬

——————————–

@RunWith(WebTestRunner.class)
@WarConfiguration(appName=”springsprout”)
@DataConfiguration(dataType=DataType.XML, location=”org/springsprout/testData.xml”)
public class MemberWebTest {

    @WebTest
    public void memberPages(){
       …
    }

설정하는 방법을 위와 같은 형태에서 아래와 같이 변경됐습니다.

@RunWith(WebTestRunner.class)
@WarConfiguration(appName=”springsprout”)
@DataConfiguration
public class MemberWebTest {

    @WebTest
    public void memberPages(){
          …
    }
}

이 것이 전부입니다.

먼저, 바뀐 내용 중 하나는 파일 확장자를 통해 데이터 타입을 짐작한다는 것입니다. CoC라기 보다는 아예 바뀐 내용입니다.

1. 적용한 CoC는 우선, 기본 테스트 데이터 파일 이름을 testData.xml로 생각하며, 테스트하려는 클래스와 동일한 패키지에 들어있다고 가정합니다.

2. 하지만, /를 사용하여 파일 이름을 명시 했을 때에는 해당 패키지 경로에서 테스트 파일을 찾게 합니다.

@RunWith(WebTestRunner.class)
@WarConfiguration(appName=”springsprout”)

@DataConfiguration(fileName=”integration/member/testData.xml”)
public class MemberWebTest {

    @WebTest
    public void memberPages(){
          …
    }
}

이런식으로 말이죠.

ControllerClassNameHandlerMapping 잘 되네~

@Controller
public class MemberController {

    @Autowired
    private MemberService memberService;

    @RequestMapping
    public ModelAndView list(){
        return new ModelAndView(“member/list”)
            .addObject(“members”, memberService.getAll());
    }
}

요렇게만 해두면, /member/list.xxx 라는 요청이 오면 알아서(Conversion) 저 메소드가 처리하도록 합니다. ㄴXxx-servlet.xml에는 XML에는

<bean class=”org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping” />

애만 등록해주면 됩니다. 저 한 줄의 XML로 URL 맵핑을 손수 적는 수고를 덜 수 있습니다.

계속해서 진화하는 Spring MVC 어디까지 갈텐가~~ 멋있어 멋있어 끝까지 가는거야~~

2008/04/08 – [모하니?/Coding] – ControllerClassNameHandlerMapping가 찾아 준댔는데…
ps : 새벽에 괜히 삽질만 하고… 잠이나 계속 잘껄..

Convention over Configuration

RoR을 공부해 본적은 없지만 조만간 운좋게 베타리더로 Rails for Java Developer를 접하게 될 것 같아서 공부하게 될 것 같습니다.

짧게나마 이해한 바로는 ‘설정보다 규약이 편하니까 규약으로 할 수 있는 건 규약으로 하자.’는 것 같습니다. 숙제3 에 있는 링크 중에 하나에 다음과 같은 그림이 있습니다.

사용자 삽입 이미지

장점 : 1. 새로운 개발자가 시스템을 빨리 이해할 수 있다. 2. 일관성을 높일 수 있다. 3. 보다 유연하다.

단점 : 1. 잘 알고 있어야 한다. 2. 프레임웤이 커진다. 3. 프레임웤이 새로운 규약을 도입했을 때 리팩토링이 힘들다.

단점 중에 3번이 가장 치면적인 것 같습니다. EJB였나.. 3.0으로 올리면서 어떤 속성의 default값을 바꿔서 온라인에서 개발자와 된통 싸웠다는 이야기를 들은 것 같은데 3번에 딱 맞는 예가 될 것 같습니다.[footnote]자세한 내용은 찬욱이한테 들은 것 같긴한데 기억이 잘 안납니다.[/footnote]

Spring에 CoC가 적용된 예로는 InternalResourceViewResolver, MethodNameResolver, ControllerClassNameHandlerMapping. 이런 것들이 있다고 합니다. 참조

숙제 3

SimpleFormController
– Spring reference
[#M_ more.. | less.. | a form controller that provides even more support when creating a form with a corresponding command object. The SimpleFormController  let’s you specify a command object, a viewname for the form, a viewname for page you want to show the user when form submission has succeeded, and more._M#]- Spring API :: SimpleFormController
– Spring MVC :: p65(84)
– Pro Spring :: p547

CoC
– Convention over Configuration 의 약어로 “설정을 능가하는 규약” 정도의 의미.
http://softwareengineering.vazexqi.com/files/pattern.html
Convention vs Configuration
CoC in Spring MVC