본문 바로가기
Spring

스프링 어노테이션 관련 내용 (Spring Annotation)

by 수앙 2011. 7. 23.

1. 스프링 2.5 부터 어노테이션 기반 설정 가능
@Component 스테레오타입 애노테이션의 조상입니다.
@Controller Spring MVC에서 컨트롤러로 인식합니다.
@Service 역할부여 없이 스캔 대상이 되는데 비즈니스 클래스에 사용하면 될 것 같습니다.
@Repository DAO에 사용되며 DB Exception을 DataAccessException으로 변환해 줍니다.

2. xml 파일에 <context:component-scan base-package="xxx.yyy.zzz" />와
<context:annotation-config /> 태그를 사용하여 자동 빈 스캔 component-scan 태그 base-package 속성 필수 헤더 스키마 선언

<beans default-autowire="byName"

xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">


장점
XML 설정파일에 대한 설정을 최소화 할 수 있고 단순하다.
코드가 간결해진다.
단점
Java1.5 이상의 환경에서 지원된다.
Annotation에 대한 학습이 필요하다.

4. Annotation 종류
@Scope 설정(prototype, singleton. request, session, globalSession, 기본값은 singleton)
@Autowired = byType
@Resource = byName
@PostConstruct = init-method(어노테이션과 XML 동시 설정 가능. 그럴 경우 어노테이션이 먼저 수행) PostConstruct는 bean이 생성된 이후에 수행해야 할 작업(초기화 작업)들을 선언해주는 역할을 합니다.
@PreDestroy = destroy-method 인스턴스가 삭제되기 전에 수행해야 할 작업들을 선언(destruction callback 기능)해주는 역할을 합니다.

추가내용
어노테이션 관련 글 스프링의 구조는 JSP(View) - Controller(URL mapping) - Service(Business Logic) - Dao(Data Access)
어노테이션이 확실히 좋은 기능임은 틀림없으나 과도한 사용은 득보다 실이 많다는 의견이 많다.
어노테이션을 이용하면 메타정보가 소스코드에 들어가므로 수정될 시 재컴파일이 필요
소스코드가 같이 제공되지 않으면 사용에 제약이 따름
SpringMVC 주요 패턴인 템플릿(Template) 패턴이나 전략(Strategy) 패턴으로 기존 기능을 확장시키기 어려운 점
순수 Spring 컨트롤러에선 xxx-servlet.xml 파일을 통해 url 맵핑이 이루어지는데 어노테이션을 이용할 경우 코드의 양이 방대할수록 계층 구조를 파악하기 힘듬

Struts2는 struts.xml 파일을 통해 url mapping이 이루어지므로 관련 없음

BEA의 EJB 팀 리더이자 OpenJPA 프로젝트의 리더인 패트릭 린스키가 한 말 중 일부분
- 대형 시스템에는 어노테이션이 적합하지 않다. 본격적인 시스템에서는 xml이 필수
- 규모가 있는 시스템일 경우 xml를 단계별로 분리하여 설정을 독립하거나 어노테이션 + xml 사용을 권장

Spring의 아버지 로드 존슨의 어노테이션 도입
- 1.x 버전 당시에는 스프링 사용자들의 어노테이션 DI 요청을 묵살함
- EJB3와 Google Guice의 annotation-driven DI의 인기와 영향력에 의해 Spring2.1에 어노테이션 도입
- 배경에 대한 설명은 "고객과 엔드유저가 원하는 것이 옳은 것이다"라고 말함
- 스프링의 설정은 xml로 충분하다고 고집한 로드 존슨이 닷넷의 어트리뷰트 도입 필요성을 인식하고 가장 먼저 Spring에 어노테이션을 이용한 URL mapping인 @RequsetMapping을 적용

JDK 핵심 개발자이면서 Java5+ 개발에 깊이 관여한 조슈아 블록에 대한 입장
- 어노테이션 사용에 긍정적인 입장 CoC(관습에 의한 설정) 보다는 어노테이션이 낫다고 주장
- 어노테이션 정보(타입)를 얻기위해 사용되는 리플렉션 보다는 인터페이스 사용 선호
- 어노테이션은 타입이 없고 인터페이스는 타입이 있음

결론
시스템 복잡성이 아니라면 어노테이션 사용은 적합하게 쓰이면 코드가 간결해지고 유지보수가 용이해짐
대형 시스템엔 계층 구조가 잘 파악되기 위해서는 xml 사용이 필수
어노테이션은 메타정보가 소스코드에 들어가므로 파악하기 어려움
현재 오픈소스에도 많이 사용되고 계속 발전하는 어노테이션에 주목할 필요성이 보임

'Spring' 카테고리의 다른 글

RestTemplate 사용법  (0) 2015.02.20
Spring quartz JMX 사용방법  (0) 2013.02.15
spring 2.5.x 컨트롤러 설명  (0) 2012.05.31
Spring-2.5.6 MVC  (0) 2011.10.22
Spring-3.0.6 + Sitemesh-2.4.2 + myBatis-3.0.6 + urlrewrite-3.2.0  (0) 2011.09.10

댓글