2007년 11월 22일
스프링 프레임워크 2.5의 @Service와 @Controller 관련 기능
어제 올린 What's New in Spring 2.5: Part 1를 보고 회사 동료가 게시판에 글을 올렸습니다.
그리고 @Repository,@ Service,@ Controller 과 @Component의 차이를 모르겠습니다.
@Compoent을 상속한거 같은데.. 각각 뭔가 기능이 추가 된듯 한데요..
DI만을 위해서는 이렇게 스테레오타입을 나눌 필요가 없지 않을까.
각각 어노테이션이 무얼 하는지 알 필요가 있지 않을까 생각됩니다.
대충 Repository는 data access exception translation 을 한다고 써 있네요
라고...
일단 저는 이렇게 답했습니다.
스테레오 타입을 만들어 놓고 전혀 사용을 안하는 것은 아니겠지만 기능 제공보다 구별할 수 있게 되었다는게 더 중요한 이유는 스프링을 가지고 상용 솔루션을 만드는 BEA같은 회사에서 추가적으로 각 컴포넌트를 역활별로 구별해서 다른 처리를 할 수 있게해주기 때문이라고 생각... 즉 스프링도 기본적으로 뭔가 역활별로 특화된 기능을 제공하는게 있겠지만 스프링을 커스터마이제이션하는 쪽에서 특화된 기능을 구현할 수 있게 되었다는 '가능성'이 더 중요하다는 말....
이렇게 답해 놓고 생각해보니 스프링은 @Service와 @Controller를 만들어 놓고 어떻게 쓰고 있을지 궁금했습니다. 그래서 소스를 받아 이클립스에 프로젝트 등록한 후 Java Search를 했습니다. 무식하게... 그래서 나온 결론...
@Service
관련된 기능이 전혀 없습니다. 그냥 스프링 자체에서는 역할 구별하는 표시용 말고는 없습니다. 표시를 하게 해줄테니 너희가 뭔가 하고 싶은게 있으면 만들어서 써라... 라는거죠.
@Controller
예상 했던 것 처럼 Sprint MVC와 Portlet에서 사용합니다. 다른 것은 아니고 Controller를 자동으로 인식하는 기능에서 @RequestMapping 어노테이션이 없고 @Controller만 있는 MVC 컨트롤러를 찾는데 사용하네요.
이상 끝.... ㅡ.ㅡ;
P.S. 참고로 첨언하면... @Repository, @Service, @Controller는 어떤 종류의 컴포넌트인지 표시하는 역할을 하구요. @Component는 그냥 특별한 역할 구분 없이 컴포넌트라는 표시만 합니다. 당연히 @Repository, @Service, @Controller는 @Component를 상속했구요. 그러니까 DB 작업 관련 컴포넌트는 @Repository를, 서비스 관련은 @Service, MVC 컨트롤러는 @Controller를 사용하고 그외 컴포넌트들은 @Component를 사용해서 표시해주면 두고두고 유용하게 쓸 수 있습니다. 당장은 컴포넌트 자동 인식 기능으로 사용 할 수 있구요.
그리고 @Repository,@ Service,@ Controller 과 @Component의 차이를 모르겠습니다.
@Compoent을 상속한거 같은데.. 각각 뭔가 기능이 추가 된듯 한데요..
DI만을 위해서는 이렇게 스테레오타입을 나눌 필요가 없지 않을까.
각각 어노테이션이 무얼 하는지 알 필요가 있지 않을까 생각됩니다.
대충 Repository는 data access exception translation 을 한다고 써 있네요
라고...
일단 저는 이렇게 답했습니다.
스테레오 타입을 만들어 놓고 전혀 사용을 안하는 것은 아니겠지만 기능 제공보다 구별할 수 있게 되었다는게 더 중요한 이유는 스프링을 가지고 상용 솔루션을 만드는 BEA같은 회사에서 추가적으로 각 컴포넌트를 역활별로 구별해서 다른 처리를 할 수 있게해주기 때문이라고 생각... 즉 스프링도 기본적으로 뭔가 역활별로 특화된 기능을 제공하는게 있겠지만 스프링을 커스터마이제이션하는 쪽에서 특화된 기능을 구현할 수 있게 되었다는 '가능성'이 더 중요하다는 말....
이렇게 답해 놓고 생각해보니 스프링은 @Service와 @Controller를 만들어 놓고 어떻게 쓰고 있을지 궁금했습니다. 그래서 소스를 받아 이클립스에 프로젝트 등록한 후 Java Search를 했습니다. 무식하게... 그래서 나온 결론...
@Service
관련된 기능이 전혀 없습니다. 그냥 스프링 자체에서는 역할 구별하는 표시용 말고는 없습니다. 표시를 하게 해줄테니 너희가 뭔가 하고 싶은게 있으면 만들어서 써라... 라는거죠.
@Controller
예상 했던 것 처럼 Sprint MVC와 Portlet에서 사용합니다. 다른 것은 아니고 Controller를 자동으로 인식하는 기능에서 @RequestMapping 어노테이션이 없고 @Controller만 있는 MVC 컨트롤러를 찾는데 사용하네요.
이상 끝.... ㅡ.ㅡ;
P.S. 참고로 첨언하면... @Repository, @Service, @Controller는 어떤 종류의 컴포넌트인지 표시하는 역할을 하구요. @Component는 그냥 특별한 역할 구분 없이 컴포넌트라는 표시만 합니다. 당연히 @Repository, @Service, @Controller는 @Component를 상속했구요. 그러니까 DB 작업 관련 컴포넌트는 @Repository를, 서비스 관련은 @Service, MVC 컨트롤러는 @Controller를 사용하고 그외 컴포넌트들은 @Component를 사용해서 표시해주면 두고두고 유용하게 쓸 수 있습니다. 당장은 컴포넌트 자동 인식 기능으로 사용 할 수 있구요.
# by | 2007/11/22 18:02 | 프로그래밍 이야기 | 트랙백 | 덧글(0)
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]