스프링 프레임크를 사용하기 시작한지는, 만 5년 정도 된것 같다. 아니 정확하게 이야기하면 알기 시작한지 5년이다. 그 동안 몇개의 프로젝트에는 적극적으로 사용해왔고, 사용하려고 했었다.

솔루션을 위한 내부의 기반 프레임워크를 개발하기에도, 그 자체만으로도 스프링은 너무 훌륭하기 때문에, Application의 공통 부분을 위한 기능들만을 최적화하고, 정의하는 것 만으로도 노력대비 좋은 결과들을 낼수 있었다. 다 로드존슨 아저씨가 많은 시간을 들여서 갈고 닦고, 발전시킨 노력의 결과들이다.

시간이 흐를수록 큰 조직에서는 코드와 PC와 씨름하기 보다는 수 많은 회의와 씨름을 하는 일이 많아진다. 더군다나 같이 협업하는 사람들이 많아지면, 본인이 원치 않아도 관리자의 길에서 뛰고 있는 모습을 보게된다. 딱 지금의 나의 모습니다.

공부하지 않고, 적절하게 판단하고 선택하고 방향에 대해서 이야기 할 수 있을까?
많은 고민을 하지만, 역시 시간이 절대적으로 부족하다.

요즘은 코드를 보기가 힘들정도로, 공부할 여유가 별로없다.
하지만, 사둔 책이 아깝다는 이유이든, 공부의 재미를 알았다는 이유이든 개발자로 살아가는 한은
꾸준히 배워야한다.

스프링 3.1은 또 다른 변호들을 이야기 할지는 모르겠다. 이전에 책을 보면서 정리한 내용인데 일단 올려놓는다.

[Spring Framework 3.0 - MVC]

·         스프링은 DespatcherServlet 7개의 Strategy를 기반한 MVC 프레임워크를 제공한다.

·         이중 DespatcherServlet는 가장 기본적이면서도 SpringMVC의 필수적인 기본 Servlet 역할과 스프링의 특징중의 하나인 Light-weight 컨테이너의 역할을 수행한다.

 

1.     @RequestMapping 핸들러 매핑

o    @MVC는 메소드 레벨에서 컨트롤러를 작성할 수 있다.

o    Annotation은 타입(클래스, 인터페이스)레벨뿐 아니라 메소드 레벨에도 적용 가능함.

o    @MVC 핸들러 매핑을 위해서는 DefaultAnnotationHandlerMapping이 필요하다.

o    DefaultAnnotationHandlerMapping은 기본 핸들러 이므로 다른 Handler Mapping bean이 명시적으로 등록이 되지 않았다면, 기본으로 사용이 가능하다.

o    만약, 다른 핸들러 매핑 빈이 등록이 되었다면, DefaultAnnotationHandlerMapping
명시적으로 등록을 해주어야 사용이 가능하다.

2.     Class/Method 결합 Mapping 정보

o    DefaultAnnotationHandlerMapping

·         @RequestMapping 애노테이션을 활용해서 타입레벨과 메소드 레벨 지원하며
타입레벨을 기본으로 삼고, 메소드 레벨의 어노테이션 정보는 타입레벨의 매핑을 세분화 하는데 사용한다.

o    @RequestMapping Annotation

·         Spring[] value(): URL 패턴

1.     String 배열 타입으로 URL 패턴을 지정해서 사용

2.     URL 패턴은 ANT 스타일과 와일드카드를 사용이 가능하다.

·         @RequestMapping("/hellow")

·         @RequestMapping("/admin/**/user")

·         @RequestMapping("/hellow", "/hi")

3.     "{ }"를 사용할때는, "{ }"의 위치에 해당하는 내용을 컨트롤러 Method에서 파라메터로 전달받을 수 있다. "{ }"에 들어가는 변수를 "path variable"이라고 부른다.

·         @RequestMapping("/user/{userid}")

·         RequestMethoe{} method(): HTTP Request Method

1.     Request Method GET, HEAD, POST, PUT, DELET, OPTIONS, TRACE 7개의 HTTP 메소드가 정의되어 있다

2.     HTTP 메소드를 추가하면 요청 메소드에 따라 다른 메소드를 매핑해 줄 수 있다.

·         @RequestMapping(value="/user/add", method=RequestMethod.GET)

3.     정의된 메소드 이외의 사용시 "HTTP 405 - Method Not Allowed"를 받음.

4.     타입레벨에서 URL을 주고 HTTP 요청 메소드를 지정할 경우 URL 생략가능.

·         @RequestMapping(method=RequestMethod.GET)

·         String[] params(): Request Parameter

1.     이것은 요청 Parameter와 그 값을 비교해서 매핑해 주는 것이다.

2.     같은 URL을 사용하지만, Parameter값에 따라 다른 작업을 할 때 사용한다.

·         @RequestMapping(value="/user/edit", params="type=admin")

3.     특정 Parameter 값이 존재하지 않아야 한다는 조건을 둘 경우 사용

·         @RequestMapping(value="/user/edit", params="!type")

·         String[] header(): HTTP 헤더

1.     Header 정보에 따라 매핑이 가능하다.

·         @RequestMapping(value="/view", headers = "content-type="text/*")

 

o    Type level 매핑과 Method level 매핑의 결합

·   타입(클래스오 인터페이스)레벨에 붙는 @RequestMapping은 타입내의 모든 매핑용 메소드의 공통 조건을 지정할대 사용한다.

·   메소드 레벨의 매핑은 클래스 레벨의 매핑을 상속한다.

      1. 컨트롤러가 각각 /user/add, /user/edit, /user/delete URL에 매핑

@RequestMapping("/user")

public class UserController{

@RequestMapping("/add") public String add(){ }

@RequestMapping("/edit") public String edit(){ }

@RequestMapping("/delete") public String delete(){ }

}

2.     타입 레벨의 URL패턴에 * **를 사용하여 매핑 가능

·         /user/*

·         /user/**  

·         타입레벨에서 공통의 매핑을 정의하고, 메소드 별로 세분화 해서 사용

 

o    Method 레벨 단독 매핑

·   공통 매핑 조건이 없을 경우, 조건을 주지 않고 메소드 레벨에 정의해서 사용.

·   이렇게 정의하지 않는다면, 클래스 자체가 매핑이 되지 않는다.

·   만약, @Controller 애노테이션을 붙여서 자동 빈 스캔을 사용할 경우는, 클래스 레벨의 @RequestMapping을 생략할 수 있다.

o    Type 레밸 단독 매핑

·   클래스 레벨의 URL 패턴이 /*로 끝나는 경우, apthem 레벨의 URL 패턴으로 메소드 이름을 사용할 수 있음.

·   아래는 /user/add /user/edit 로 각각 매핑

@RequestMapping("/user/*")

Public class UserController {

@RequestMapping public String add( ) { }

@RequestMapping public String edit( ) { }

}

 

 

 

 

 

Posted by 행복상자
Google Trend를 이용해서, 최근에 사용되고 있는 웹 기술들을을 한번 살펴 보았다.
기술이라는 것이 단지 인기에 의해서 흥하고 망하는 것은 아니지만, 사람들이 관심을 끌고 있는 기술들이 무엇인지 안다면, 분명히 그 이유가 있다. 그리고 이를 안다면 개발하고자 하는 프로젝트에 적용할 때, 적지 않은 도움이 될거라고 생각된다.

내가 회사에서 관련 있는 프로젝트는 ExtJS를 기본 Javascript Framework로 사용하고 있는데, ExtJS는 라이센스가 유료이다. 그리고 많은 Component를 개발자에게 제공하지만, 이를 숙달할수 있도록 익히기 위해서는 약 2달정도의 공부할 수 있는 시간이 필요하다. 왜냐하면, Javascript와 CSS의 기본을 충분히 알지 못한다면, 각 Componet를 원하는대로 쉽게 제어하기 힘들기 때문이다.
그래서, 최근에는 JQuery를 검토하고 있고, 이는 생각보다 개발자드의 코드를 많이 줄여주고, 코드를 단순화 시키는데 도움이 된다. 

Google Trend를 통해, 이러한 기술들에 대한 사람들의 관심도를 알아보기 위해서 검색을 해보니, JQuery에 대한 관심도가 상승곡선을 타고있고 Prototype과 ExtJS는 상대적으로 낮은 traffic을 보여주고 있다.

     jquery: 6.40    prototype: 9.80    extjs: 1.90

 위 그래프는 JQeury의 관심도가 ExtJS보다 약 6배정도 높다는 것을 보여주고 있다. (ExtJS를 1이라고 볼때, JQeury는 6.40의 traffic을 보여주고 있다.)  Prototype의 traffic은 초기부터 현재까지 거의 일정하다. 이를 사랑하는 사람들이 꾸준한 애정을 가지고 있다고 할 수 있다.

다음은 개인적으로 관심을 가지고 있는 Microsoft의 ASP.NET MVC에 대한 사람들의 관심도를 알아볼 것이다.
최근에 ASP.NET 3.5의 Extention으로 마이크로소프트 사는 MVC프레임워크를 개발하고 1.0버전을 공식 발표했다.
이에 대한 사람들의 관심도는 기대 이상으로 보인다. 향후에 이를 이용해서 개발하는 개발자들이 꾸준하게 늘거라 생각한다. 그리고 MS에서는 Asp.net에서 제공하는 기본 Javascritp framework으로 JQuery를 제공하고, 이를 Visual studio에서 툴로서 지원하고 있다. 

최근에 많이 사용하고 있는 Spring MVC와 Structs를 비교해서 검색해 보았다.
Spring MVC는 꾸준하게 관심도를 유지하는 반면에, Structs는 시간에 지남에 따라 상대적으로 관심도가 줄어 들오 있다. 이에 반해 MS의 ASP.NET MVC는 최근에 발표된 이후로 많은 관심을 끌고 있음을 아래 차트를 통해서 알수 있다.
 
    spring mvc: 2.10    struts mvc: 1.00    asp.net mvc: 1.40  

위의 차트가 모든 것을 다 말해줄수는 없다. 최근에 발표되었기 때문에 MS의 ASP.NET MVC가 사람들의 관심을 끌고 있을 수도 있고, 검색 조건에 따라서 차트의 결과가 달라질 수도 있기 때문이다.
그러나 분명한 것은 개인적으로는 MS에서 발표한 MVC 프레임워크와 Scheffold 기능은 오픈 소스에서 진행되었던 여러 프로젝트의 장점들을 따서 만들었기 때문에 개발자들에게 도움이 될거라는 점이다.

어떤 기술을 선택할지는 개발자의 몫이다. 기간과 리소스와 개발자들의 기술 수준을 고려해서 프로젝트 초기부터 잘 검토한다면, 효율적인 개발이 이루어질거라 믿는다. 초기에 제대로 검토하는 시간과 노력없이 프로젝트를 진행해서 나중에 땜빵으로 누더기를 만드는 프로젝트를 여러번 보아왔다. 이 또한 개발자의 양심과는 대치대는 것이지만, 후 작업과 품질 좋은 코드를 원한다면, 초기에 많은 시간이 들여야 한다.

항상 하는 이야기지만, 개발자는 코드로 이야기 해야한다.
Posted by 행복상자

Spring MVC는 Spring Framework중에서 웹 개발을 쉽게 할 수 있도록 도와준다.
국내에서 출판된 책들은 Source를 제공하기는 하지만, 책을 보고 Source를 실행하려고 하면 잘 동작하지 않는다. 물론 손으로 직접 쳐서 입력할때 오타가 있기는 하지만, 서버의 설정과 환경 구성에 대해서 충분하게 설명해 주지 못하기 때문이다.

이를 위해, www.springframework.org에서는 제공하고 있는 Spring MVC를 위해서, Developing a Spring Framework MVC application step-by-step
라는 제목으로 Spring MVC개발에 대해 설명하고 있다. 2003년에 작성된 것과 올 2008년에 작성된 것이 있다.

예제는 초보자를 위해서, 개발 환경 설정과, Ant의 Build.xml 만들기와 사용법등을 부과적으로 설명하고 있다. Ant를 사용하는 법도 부과적으로 얻을 수 있다. 이에 대한 목차는 다음과 같다.(2003년도 작성)

[목차] 
Part 1 – Basic Application and Environment Setup
Part 2 – Developing and Configuring the Application
Part 3 – Adding Unit Tests and a Form to the Application
Part 4 – Implementing Database Persistence

위는 2003년도에 작성된 예제와 Sample이고 tex t위주의 설명으로 되어 있지만,  MVC개발을 위한  설정 XML 파일을 어떻게 작성해야 하는지, 그리고 Dispatcher와 Controller 그리고, View에 대한 코드들에 대해 쉽게 이해할 수 있도록 예제와 더불어 쉽게 설명하고 있다.

그리고, 2008년도에 작성된 Spring MVC step-by-step의 목차는 다음과 같은데, 설명과 함께 캡처한 이미지를 제공하여 설명을 돕고 있다.

[목차]
 

Overview
1. What's covered
2. Prerequisite software
3. The application we are building
1. Basic Application and Environment Setup
1.1. Create the project directory structure
1.2. Create 'index.jsp'
1.3. Deploy the application to Tomcat
1.4. Check the application works
1.5. Download the Spring Framework
1.6. Modify 'web.xml' in the 'WEB-INF' directory
1.7. Copy libraries to 'WEB-INF/lib'
1.8. Create the Controller
1.9. Write a test for the Controller
1.10. Create the View
1.11. Compile and deploy the application
1.12. Try out the application
1.13. Summary
2. Developing and Configuring the Views and the Controller
2.1. Configure JSTL and add JSP header file
2.2. Improve the controller
2.3. Decouple the view from the controller
2.4. Summary
3. Developing the Business Logic
3.1. Review the business case of the Inventory Management System
3.2. Add some classes for business logic
3.3. Summary
4. Developing the Web Interface
4.1. Add reference to business logic in the controller
4.2. Modify the view to display business data and add support for message bundle
4.3. Add some test data to automatically populate some business objects
4.4. Add the message bundle and a 'clean' target to 'build.xml'
4.5. Adding a form
4.6. Adding a form controller
4.7. Summary
5. Implementing Database Persistence
5.1. Create database startup script
5.2. Create table and test data scripts
5.3. Add Ant tasks to run scripts and load test data
5.4. Create a Data Access Object (DAO) implementation for JDBC
5.5. Implement tests for JDBC DAO implementation
5.6. Summary
6. Integrating the Web Application with the Persistence Layer
6.1. Modify service layer
6.2. Fix the failing tests
6.3. Create new application context for service layer configuration
6.4. Add transaction and connection pool configuration to application context
6.5. Final test of the complete application
6.6. Summary
A. Build Scripts


위의 순서대로 예제를 실행해 보았는데, 어렵지 않게 스프링 MVC에 대해 이해할 수 있었고, 개발시 환경 구성과 설정방법들에 배울 수 있었다.



Posted by 행복상자

사실 오늘은 최근에 공개한 iPhone SDK 소개 키노츠와 데모 동영상을 보려고 PC를 열었다가  별 생각 없이 .Net MVC를 찾아들어가게 되었다. 의도한 것은 절대로 아니다.
요즘에 나온는 많은 웹 프레임워크들은 경쟁적으로 자기들이 많든 MVC Framework의 우수함을 알리는데 열을 올리고 있다. 그리고 실제로 쓰기에 충분할 만큼 안정성과 성능을 보장해 준다.

그러나 최근에 이도 종지부가 찍힌것 같다.(이는 절대적으로 내 개인적인 소견이다.) 새로 개발되거나 또는 기존 Framework가 버전업이 되면서 MVC Framework들이 유사해 지기 시작했으니 말이다. 이에 가장 큰 영향을 준 Framework는 역시 Rails이다. 개발자에게 필요한 것은(자신을 증명하는 것은), 마지막에 완성된 코드라고 누군가가 이야기 한것 같다. (아마도 최근에 한국에 찾아온 MS의 누군가 였었지요..)

개발자에게는 생산성과 안정성이 가장 큰 이슈이다. 이것은 마케팅적으로 영업적으로 대외에 홍보하는 포장되고 형식적인 것이 아니라, 프로젝트를 함에 있어서 필수적인 것이다.
웹 개발에 있어서는 배포된 Application의 성능과 안정성은 너무나 중요하다. (사실 이외에도 챙겨할 것들은 부지기수 이다.)

그런 면에서 RobyOnRails는 가히 충격적이었다. 마치 Visual Basic을 처음 접할때의 충격과도 같았다. MVC를 지원하기 위한 Simple하고도 직관적인 구조와 개발자가 부담감 없이 익힐 수 있는 기본 명령과 사용법등은 누구를 위한 Framework 인가를 바로 알수 있게 해준다.

지난 몇달전에 일민(Toby)이가 진행하는 KSUG 세미나를 통해, Spring 2.5에서 변화되는 Spring MVC 프레임워크의 변화를 접하게 되었는데, XML과 자바 Annotation 그리고 Auto Wiring를 이용하지만 그 근간은 Rails의 프레임워크라는 생각이 많이 들었다.

많은 프레임워크가 서로의 좋은 기능을 통해서 발전하는 것은 개발자로서는 행복한 선택을 할 수 있어서 즐겁다.

이야기가 길어졌는데, 오늘 내가 본 Micorsoft의 MVC 데모 동영상이다.  



너무나도 쉽고, Rails와 유사히지 않은가?
사실 회사에서는 요즘 .Net이냐 Java냐로 논란이 많다. 그래서 관심있게 본것이다.

아래의 링크들을 이용하면 다른 데모도 볼수 있다.
      - Part 1 - Displaying Data 
      - Part 2 - Editing Data and Making Forms 
      - Part 3 - Advanced Techniques 
      - Part 4 - Testing

Posted by 행복상자