Spring XML vs Annotation

스프링은 크게 3가지 방식의 설정을 할 수 있다. DB, 빈, 기타등등 스프링 관련 설정들 말이다.

XML             MIXED           ANNOTATION
<---------------------------------------->

그럼 ARABOJA.

XML

스프링의 전통적인 설정 방법이며, 구성을 포함해 모든 자바 빈들을 XML에 정의한다.

  • 원하는 빈만 XML에 담궈 놓고 클래스 목록을 한 번에 볼 수 있다.
  • 필요 시 특정 빈만 주석처리 하는 등 활성화/비활성화가 용이하다.
  • 빈 생성 시 반드시 XML에 정의해줘야 하며, 그렇지 않으면 일반 클래스가 되버린다.
  • 신규 작성시에는 많은 공수시간이 요구되지만, 유지보수 시 부담이 적다.

매우 큰 프로젝트일 경우, 여러 스프링 프로젝트를 운영할 경우 XML 방식을 선호하는 게 이 때문이다.
어노테이션을 쓰게 되면 클래스가 많을 수록 스캔 시간이 길어지지만, 완전 XML에서는 정의된 빈만 스캔하기 때문에 그럴 걱정이 없다.

Mixed

현재 대부분 스프링 프로젝트에서 사용하는 방법이며, 전자정부에서도 기본적으로 이 설정으로 시작하도록 유도하고 있고,
가장 흔한 방식으로, 기본 구성은 XML, 빈 등 가장 많이 차지하는 구성을 어노테이션으로 정의한다.

  • 기본적인 구성 설정(DB, 웹의 경우 Resolver 등)은 XML에 정의한다.
  • 나머지 빈은 패키지 범위를 정해놓고 어노테이션에 맡긴다 (annotation-driven)
  • 이후 빈 생성은 어노테이션만 정의하면 바로 클래스 작성 후 배포할 수 있다.
  • 신규 작성 시 XML보다 공수 시간은 줄어들지만, 수정 및 비활성화가 필요할 경우 재컴파일하여 배포해야 한다.

사실 완전 XML에 비해서 크게 단점으로 작용할 만한 요소는 없다. 대부분 많이 바뀌는 게 바로 기본 구성 성정인 DB나 메시지 정의들이니.
대신 스프링 앱 시작 시 스캔을 시작한다. 여기서 패키지 범위 내 클래스가 많을 수록 스캔 시간은 어쩔 수 없이 길어지게 된다.

Annotation

아예 XML을 쓰지 않고 모든 구성과 빈을 자바에 맡겨놓는 방식이다.

  • 기본 구성 설정부터 @Configuration 어노테이션을 정의한 기본적 클래스로 설정할 수 있다.
  • 이 때 가장 강점은, Strong Type에 가장 부합해 빈 클래스의 무결성을 가장 빨리 검사하고 보장할 수 있다.
  • Java 기반 구성 설정은 Spring 3.0부터 지원하기 때문에 이하 버전에서는 할 수 없다.
  • 자바만 쓰기 때문에 개발생산속도는 가장 빠르지만, 변경 시마다 재컴파일 해야 하기 때문에 유지보수 속도는 매우 떨어진다.

JRebel 같이 실시간 핫스왑으로 개발하거나, 이제 아예 Spring Boot 내부 기능을 통해 재시작 없이 개발할 수 있는 기술의 발달로
더이상 완전한 어노테이션 개발의 문제점은 사라진 상태. 하지만 구성 설정부터 빈까지 모두 스캔해야 하기 때문에 시작속도는 당연히 더 느린 편.
게다가 사소한 수정조차 재컴파일을 거쳐야 하기 때문에 대응속도가 빠르게 요구되는 프로젝트에서는 어려움이 따를 수 있다.

공통

역시 정적 문자열 정의는 properties 가 진리. 텍스트 바꾸고 배포만 하면 되니까.
Spring 4.0 부터는 yml 방식의 구성 또는 메시지도 지원한다고 하니, 좀 더 읽기 쉽고 구조적 구성을 원하면 이거 쓰는것도 나쁘진 않다.

결론

  • 대규모 프로젝트이거나 분산 프로젝트인가? 신규개발은 어렵지만 유지보수가 용이한 XML 설정을 사용하라
  • 별다른 특이사항이 없을 경우 가장 흔히 사용하는 Mixed 방식은 스프링에 접근하기 딱좋다.
  • 가볍고 빠른 생산성으로 소규모 서비스를 원한다면, Spring Boot를 통한 Annotation 기반이 도움이 될 것이다.
  • 프로토타입이나 목업인가? 데모 앱이 필요한가? 그러면 제발 스프링 쓰지마 병시나.

끗.

composite / 2017년 9월 12일 / Piss Development / 0 Comments

ASP.NET MVC5 에 특성(Attribute)기반 라우팅이 생기셨다?

자바 Spring 에 어노테이션 기반 라우팅에 익숙한 사람! (나.)

(근데 아직도 XML 라우팅 정의를 고집하는 사람은 “구식밖에 모르는 바보!” 라고 외쳐주고 싶다. 특히 전자정부프레임웤.)

MSDN 공식 블로그에서 ASP.NET MVC 5 에 특성기반 라우팅이 생긴다고 한다.

http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx

근데 난 낸시 프레임워크로 특성기반 라우팅 구현해서 별로 부럽진 않다.ㅋ

근데 천천히 훑어보니 열나게 세세하게 라우팅을 구성했긴 한데.. 아직까지 GET/POST 메소드 지정은 안보인가보다.

하지만 라우팅 식에 타입과 정규식을 넣을 수 있다 한다는군.

스프링이 낫다고 생각하죠? 네 맞아요. 아직까지 Request 와 타입 매핑에 대한 세세한 컨트롤이 미흡해요. 물론 미흡하면 추가개발로 만들면 되긴 하지만.

조만간 github 로 Nancy Attribute Route 소스를 공개하도록 하겠다. 허접하지만.

여러분. RESTFul 원하시면 걍 낸시로 오세요. 졸라 편해요.

composite / 2013년 10월 18일 / 미분류 / 0 Comments