스프링에는 두 가지 대표적인 TypeConverter가 존재한다.

하나는 SpringMVC가 HttpRequest를 커맨드(모델)로 전환할 때 사용하는 (Web)DataBinder이고, 다른 하나는 스프링의 빈의 프로퍼티 설정을 위해서 사용하는 BeanWrapper이다. 두가지 모두 TypeConverter 인터페이스를 구현하고 있다.

두 경우 모두 타입전환이 필요로 하는 이유는 텍스트 포맷으로 존재하는 XML설정이나 HTTP 파라미터를 임의의 오브젝트로 전환해야 하기 때문이다.

스프링이 이 타입변환을 위해서 사용하는 방법은 JavaBeans의 PropertyEditor이다. 각각 PropertyEditorRegistry가 되어서 기본타입을 포함해서 Class, Resource 나 콜렉션 같은 복잡한 타입도 간단하게 변환이 가능하도록 만들고 있다. 또한 새로운 Editor를 추가하는 것도 어려운 일이 아니다. SpringMVC를 마스터하기 위해서(@MVC도 마찬가지이다) 중요한 것이 이 PropertyEditor와 DataBinder 메카니즘이다.

이 PropertyEditor는 한가지 큰 약점이 있다. 그것은 쓰레드쎄이프하지 않다는 것이다. 아주 잠깐이지만 인스턴스 변수 안에 value를 저장해 두고 그것을 다시 읽어오도록 되어있다. 원래 GUI툴에서 프로퍼티 뷰와 실제 오브젝트의 프로퍼티의 값을 전환하기 위해서 설계한 것이기 때문에 구지 쓰레드쎄이프하게 만들어지지 않은 것이다.

따라서 모든 PropertyEditor는 순차적으로 사용되는 것이 보장되지 않는다면 반드시 쓰레드마다 새 인스턴스를 만들어서 써야 한다. initBinder 등에서 에디터를 등록할 때 new로 새로운 인스턴스를 만드는 것이 필수다.

문제는 M2O관계에서 아이디-엔티티 변환을 시도하는 경우다. 폼에는 레퍼런스 아이디가 넘어가고 돌아오면 그 아이디에 해당하는 실제 오브젝트를 DB(또는 캐쉬)에서 가져오는 것이다. 이 방법의 문제점은 DAO등을 PropertyEditor가 DI 받아야 하므로 빈으로 등록해야 한다는 점이다. 문제는 싱글톤 빈으로 등록되면 멀티쓰레드에서 문제가 발생할 수 밖에 없다. 그래서 프로토타입 빈으로 등록하고 이를 메소드 주입 등의 방법을 이용해서 매번 새 인스턴스를 가져오게 만들어야 한다.

이를 지키지 않고 싱글톤으로 그냥 썼을 때는 치명적인 버그를 심을 수 있다. 대부분 잘 되다가 사용자가 급격히 늘어나면 갑자기 엉뚱한 데이터가 들어가거나 나오는 일이 생길 수 있다.

 

하지만 PropertyEditor가 쓰레드쎄이프하지 않다는 것을 모르는 스프링 개발자들이 적지 않다. 자바의 java.text.Format 클래스들이 쓰레드쎄이프 하지 않다는 것을 모르는 것과 비슷하다.

 

그래서 스프링은 3.0에서 PropertyEditor를 대체할 수 있는 새로운 타입변환 방식을 도입했다. 바로 ConversionService이다. 이 ConversionService는 쓰레드 쎄이프한 임의의 타입변환을 지원한다. 따라서 PropertyEditor처럼 싱글톤으로 등록하고 사용하는 것에 대한 제한이 없다.

이 컨버전 서비스는 ConfigurablePropertyAccessor에 지원메소드가 추가되었다. 이제 BeanWrapper는 ConversionService를 PropertyEditor와 함께 사용할 수 있다. PropertyEditor를 완전히 대체할 것인지, 일단은 보조적으로 사용하게 하고 차차 전환할 것인지는 확실치 않다. 아마도 후자가 아닐까 싶다.

지난 몇주간 키쓰 도날드가 열심히 이 ConversionService를 코어에 추가하는 작업을 해왔다. 이제 95학번 유겐 횔러가 이를 스프링 전체에 적용하는 작업을 진행할 것이다.  01~03년 사이에 개발되었던 pre-1.0에 존재했던 오래된 스프링의 기본 메카니즘에 대대적인 개선이 일어나는 것을 보는 것은 즐거운 일이다.

Related posts:

  1. Spring 3.0 (51) @Rule 지원성공 그리고 Formatter, ConversionService의 전면 등장
  2. Spring 3.0 타입변환/바인딩 기술 – 어떤 것이 우선일까?
  3. Spring 3.0.1 mvc:annotation-driven 이 몰래 하는 짓
  4. Spring 3.0 (7) Spring 3.0 Dependency Matrix
  5. Spring 3.0 (26) Spring Expression Language와 @Value
  6. Spring 3.0 (35) Spring 3.0 Reference Document 공개
  7. Spring 3.0 (53) Spring Dependency Matrix 업데이트
  8. Spring 3.0 (42) Spring Dependency Matrix 업데이트
  9. 유쾌한 이슈처리 재촉 메일
  10. Spring 3.0 (44) Spring 3.0과 JEE6
  11. Spring 3.0 (4) – Maven에서 Spring 3.0 최신버전 사용하기
  12. Spring 3.0 (38) Spring Reference 업데이트
  13. Spring 3.0 (50) JUnit 4.5~4.7 겨우 지원성공 그리고 계속되는 악몽
  14. Spring 3.0 (34) R-941 스프링의 Maven 지원정책은?
  15. Spring 3.0 (43) Spring 3.0 RC2 추가

Facebook comments:

to “Spring 3.0 (47) PropertyEditor vs ConversionService”

  1. What are the laws as to using company logos in blog posts?

  2. You, my pal, ROCK! I found exactly the info I already searched everywhere and simply could not find it. What an ideal web-site.

  3. check below, are some absolutely unrelated internet websites to ours, nonetheless, they’re most trustworthy sources that we use

  4. Every after in a though we pick out blogs that we study. Listed beneath would be the most up-to-date websites that we decide on

  5. Wonderful story, reckoned we could combine several unrelated information, nonetheless definitely really worth taking a appear, whoa did a single find out about Mid East has got much more problerms at the same time

  6. The facts talked about inside the article are a few of the best available

  7. This blog was… how do you say it? Relevant!! Finally I’ve found something which helped me. Thanks a lot!

  8. prada wallet sale ??????30????????????????5??????????????? | ????????

  9. Wow, incredible weblog structure! How long have you been blogging for? you make running a blog look easy. The whole glance of your site is wonderful, let alone the content material!

  10. Good article. Nice to meet you.

  11. Way cool! Some very valid points! I appreciate you penning this post and the rest of the site is really good.

  12. that is the end of this post. Right here you will uncover some web-sites that we believe youll value, just click the links over

  13. Wonderful story, reckoned we could combine a number of unrelated information, nevertheless really really worth taking a appear, whoa did 1 understand about Mid East has got more problerms at the same time

  14. please take a look at the internet sites we stick to, such as this one particular, because it represents our picks through the web

  15. Sites of interest we have a link to

  16. Here is a great Weblog You may Locate Fascinating that we Encourage You

  17. check beneath, are some totally unrelated sites to ours, having said that, they may be most trustworthy sources that we use

  18. Im grateful for the post.Really thank you! Cool.

  19. Very fantastic information can be found on site.

  20. You ave made some good points there. I looked on the net to find out more about the issue and found most individuals will go along with your views on this site.

  21. please check out the web pages we stick to, like this a single, because it represents our picks from the web

  22. we prefer to honor numerous other net internet sites on the net, even though they arent linked to us, by linking to them. Underneath are some webpages really worth checking out

  23. Im obliged for the article post.Really looking forward to read more.

  24. although web sites we backlink to beneath are considerably not related to ours, we feel they may be in fact worth a go via, so possess a look

  25. Muchos Gracias for your blog post.Much thanks again. Want more.

  26. Well I sincerely enjoyed reading it. This tip procured by you is very helpful for accurate planning.

  27. Every when inside a while we opt for blogs that we study. Listed below are the most current web pages that we pick out

  28. Here are several of the sites we suggest for our visitors

  29. Is it only me or do a few of the responses look as if they are written by

  30. It’s nearly impossible to find experienced people on this topic, but you seem like you know what you’re talking about! Thanks

  31. Thanks so much for the article.Really thank you! Cool.

  32. bed sheets that are made of flannel fabric are the best type of bed sheets,

  33. post and a all round exciting blog (I also

  34. Sites of interest we have a link to

  35. check below, are some totally unrelated web-sites to ours, having said that, they are most trustworthy sources that we use

  36. Here is a great Blog You might Obtain Fascinating that we Encourage You

  37. Many thanks for sharing this very good article. Very inspiring! (as always, btw)

  38. the time to read or check out the subject material or websites we’ve linked to below the

  39. please check out the internet sites we stick to, including this one particular, as it represents our picks from the web

  40. usually posts some incredibly fascinating stuff like this. If you are new to this site

  41. Can I simply say what a relief to find someone who truly knows what they are talking about over the internet. You definitely know how to bring an issue to light and make it important. A lot more people really need to check this out and understand this side of the story. I can’t believe you aren’t more popular because you certainly have the gift.

  42. please pay a visit to the websites we follow, like this one, as it represents our picks from the web

  43. Every as soon as inside a whilst we select blogs that we study. Listed beneath would be the most recent web sites that we pick out

  44. There is noticeably a bundle to know about this. I assume you made sure nice factors in options also.

  45. just beneath, are several absolutely not associated web pages to ours, however, they’re certainly really worth going over

  46. Very nice post. I just stumbled upon your blog and wanted to say that I ave really enjoyed browsing your blog posts. After all I will be subscribing to your rss feed and I hope you write again soon!

  47. Simply wanna comment that you have a very decent site, I love the style it really stands out.

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha