JavaScript 로 본 MVC 모델

2006. 9. 12. 13:35

보통 웹어플리케이션을 구현하는 과정에서 항상 나오는 얘기는 MVC 패턴으로 뷰와 모델, 컨트롤러를잘 분리해서 개발을 해야한다 라는 것이다.

이런 과정에서 지금껏 아무생각 없이 자바스크립트 언어를 사용해오던 방식 - 자바스크립트를 화면 랜더링,property변경, form유효성검증 등의 HTML 의 보조용도로 사용해 오던 것 - 이 아니라, 화면 계층의 메인 프로그램언어로서 사용하게 됨으로써 점점 복잡한 스크립트 언어를 사용하게 되고 요즘에서는 Ajax 라는 용어로 요약되는것 처럼, 잘못된스크립트 코드의 남용은 곧바로 유지보수가 거의 불가능한 스파게티 코드를 양산해내게되고 있다.

일단 자바스크립트라는 것을 이해하는 차원에서 위의 MVC 모델을 적용해서 이해해볼 필요도 있겠다. 약간은 억지스런 느낌도 있지만, 이렇게 이해하면 나름대로 머릿속에 쏙쏙.. 들어오는 느낌을 가질수 있겠다.

코드 예

[CODE]

function sample(id, element){

this.id = id;

this.div = element;

this.div.onclick = this.clickHandler;

}

[/CODE]

위와 같은 함수를 만들었다고 생각하자. 이경우 각각 모델, 뷰, 컨트롤러에 해당하는 부분은 어떻게 적용할 수 있을까?

1. 모델 : sample 이라는 객체 자체가 일종의 모델이라고 할 수 있다. id 와 div 속성을 가지고 있는 모델.

2. 컨트롤러 : 모델의 div 객체의 onclick 이벤트를 처리하는 함수가 clickHandler 라고 연결 되어 있는데, 이때 이벤트를 처리하는 이 clickHandler 라는 함수가 컨트롤러라고 생각할 수 있다.

3. 뷰 : sample 함수를 호출할때 넘어오는 객체 element 는 뷰단에서 이벤트를 발생시킨 객체를 의미한다. element라는 파라미터로 넘어온 객체가 뷰라고 할 수 있다.

이렇게 자바스크립트 코드내에서도 MVC 를 적용해서 생각한다면 스크립트 내에서 이벤트를 처리하는 함수를 구현하거나 이해할 때 혼란스러운 부분을 줄일 수 있을 것 같다.

즉 브라우저가 동작하는 방식에서 이해해본다면 브라우저는 DOM 엘리먼트를 클릭하는 경우 해당 이벤트의 처리 함수의컨텍스트로 DOM 엘리먼트를 지정하게 되고 이 이벤트의 정보를 담은 Event 객체를 생성해서 인자로 넘겨주게 된다는 의미.

,

Tear Drop 일냈다 !!!

2006. 9. 12. 10:36

호세 밴드가 드디어 세상에 더욱 널리 알려지려나보다.

이번 Rocket 2006 Fest 에서 당당히 1등을 차지한 그룹 Tear Drop !!! ㅎㅎㅎ 아래 링크에 가서 1등 그룹의 음악을 들어보시라 ~~~

1등 수상소식

음악은여기

싸이 홈페이지

,

Spring MVC 셈플 코드 연습중 첫번째 문제..

뷰와 컨트롤러를 분리하기 위해서 JstlView 클래스를 사용해서 분리하려고 테스트 하다가 아래와 같은 오류가 발생하였다.

2006-07-02 20:25:16 StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception
java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo.<init>(Ljava/lang/String;ZLjava/lang/String;ZZ)V
at org.apache.jasper.compiler.TagLibraryInfoImpl.createAttribute(TagLibraryInfoImpl.java:568)
at org.apache.jasper.compiler.TagLibraryInfoImpl.createTagInfo(TagLibraryInfoImpl.java:401)
at org.apache.jasper.compiler.TagLibraryInfoImpl.parseTLD(TagLibraryInfoImpl.java:248)
......

쩝 이리저리 설정을 봐도 잘못된 곳은 없었는데, 문제점은 servlet.jar 파일을 클래스 패쓰에 넣어두었던 것 때문에 발생하는 것이었다.

위와 같은 문제가 발생하면 클래스 패쓰에 servlet.jar 또는 struts.jar 같은 파일이 잡혀있는지 주의 깊게 살펴보자.

,