달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
2008. 11. 8. 08:02

Spring Framework 2.5.6 Released 좋아하는 것2008. 11. 8. 08:02

지난 10월 30일에 Spring Framewrk 2.5.6버전이 릴리즈 되었다.
지금 내가 하고 있는 프로젝트는 Spring 2.5.5를 기반으로 개발하고 있는데, 현재 개발자 테스트를 시작하고 있는 중이다. 프로젝트 종료가 올해말로 예정되어 있기 때문에 현재 구성되어 있는 개발 환경을 바꾸지 않고 올해 말까지 진행 하기로 하였다. 

그래도 변경된 부분을 살펴봐야 하기에 로그를 살펴 보았는데, 여느때 보다는 수정된 목록들의 개수가 적었다. 그 만큼 많은 부분들이 안정되어 간다는 말일 거다.

Changes in version 2.5.6 (2008-10-31)
-------------------------------------

General
* removed outdated EAR support from sample applications
* upgraded to AspectJ 1.6.2 (retaining compatibility with AspectJ 1.5.x and 1.6.x)
* upgraded to EHCache 1.5.0 (retaining compatibility with EHCache 1.2 and higher)
* upgraded to TestNG 5.8 (retaining compatibility with TestNG 5.5 and higher)
* upgraded to OpenJPA 1.1.0 (retaining compatibility with OpenJPA 1.0.x as well as 1.2.0)
* upgraded to EclipseLink 1.0.1 (EclipseLinkJpaVendorAdapter requires EclipseLink 1.0.0+ now)

Package org.springframework.aop
* AbstractAutoProxyCreator (as used by "aop:config") correctly ignores null bean instances
* "aop:aspect" doesn't insist on aspect bean reference to be specified when just containing declare-parents elements
* "bean" pointcut matches exposed FactoryBean products only; "&..." syntax supported for matching FactoryBean itself

Package org.springframework.beans
* BeanUtils skips conventional editor check for array classes (in order to not break AspectJ weaving)
* BeanWrapper's introspection resolves bridge methods to find setter method for getter method with covariant return type
* TypeMismatchException message differentiates between editor with inappropriate value returned versus no editor at all
* containing bean definition is exposed to ParserContext for BeanDefinitionDecorators as well
* BeanDefinition objects are considered equal even if their originating resource objects are different
* AbstractFactoryBean's early singleton proxy handles equals, hashCode and toString calls locally (avoiding eager init)
* PropertyPathFactoryBean logs a warning if the target bean is still in creation at the time of obtaining the property
* exposed public "copyRegisteredEditorsTo" method on ConfigurableBeanFactory interface
* fixed corner case in AbstractBeanDefinition where a ClassCastException could arise in "getBeanClass(Name)"
* DefaultSingletonBeanRegistry eagerly cleans up cached dependency information when destroying a bean
* AbstractBeanFactory rejects getBean request with arguments in case of a pre-existing singleton of same name as well
* AbstractAutowireCapableBeanFactory preserves possible matches hint in property exception
* SmartInstantiationAwareBeanPostProcessor's "determineCandidateConstructors" is only invoked for non-null bean Class
* ServiceLocatorFactoryBean handles equals and hashCode based on proxy object identity
* factored out "createBeanDefinition" template method in BeanDefinitionParserDelegate
* turned visibility of BeanDefinitionParserDelegate's "checkNameUniqueness" method to protected
* XML list/set/map elements (in both the beans and the util namespace) support nested description element

Package org.springframework.cache
* EhCacheFactoryBean obtains decorated Ehcache instead of raw Cache, honoring pre-configured cache decorators
* removed useless "diskStorePath" property from EhCacheFactoryBean (ignored by all current EHCache versions anyway)

Package org.springframework.context
* DefaultMessageSourceResolvable and FieldError implement "equals" and "hashCode" such that all fields are respected
* ClassPathBeanDefinitionScanner performs trace/debug logging during class resource introspection
* ClassPathBeanDefinitionScanner ignores same class found multiple times in the classpath (i.e. equal bean definition)
* component-scan preserves original source of scanned bean definitions, for silently ignoring already scanned classes
* annotation-config registers PersistenceAnnotationBeanPostProcessor independent from client bundle's class loader
* added CUSTOM value to FilterType enumeration

Package org.springframework.core
* ClassPathResource uses cleaned path for relative resources as well
* PathMatchingResourcePatternResolver considers URL protocol "vfszip" as jar file (to search JBoss-managed jars)
* GenericCollectionTypeResolver correctly resolves collection element type even when target bean is a collection itself

Package org.springframework.ejb
* SpringBeanAutowiringInterceptor calls "InvocationContext.proceed()" in order to invoke subsequent interceptors as well

Package org.springframework.instrument
* ShadowingClassLoader excludes "net.sf.cglib." package from shadowing by default

Package org.springframework.jdbc
* provided Jdbc4SqlXmlHandler as default implementation of the SqlXmlHandler interface
* added SqlValue class to "jdbc.support" package, with SqlXmlValue derived from SqlValue instead of SqlTypeValue
* SQLErrorCodesFactory always loads its "sql-error-codes.xml" files from Spring's class loader (-> static singleton)
* added "transientDataAccessResourceCodes" category to "sql-error-codes.xml", with default codes for DB2 and Sybase
* SQLErrorCodeSQLExceptionTranslator applies default SQLExceptionSubclassTranslator after error code translation only
* SQLErrorCodeSQLExceptionTranslator is able to work without fallback SQLState translation as well
* SQLExceptionSubclassTranslator translates SQLFeatureNotSupportedException to InvalidDataAccessApiUsageException
* SQLStateSQLExceptionTranslator returns TransientDataAccessResourceException for well-known vendor-specific SQL states
* factored out AbstractFallbackSQLExceptionTranslator base class for consistent "fallbackTranslator" capabilities
* CallableStatementCreatorFactory strictly honors "SqlParameter.isInputValueProvided" (allowing for statement caching)
* JdbcTemplate passes full Calendar argument to JDBC driver even in case of no SQL type specified
* JdbcTemplate does not call the costly "Statement.getWarnings()" unless ignoreWarnings=false or debug logging is on
* added "checkFullyPopulated" setting to BeanPropertyRowMapper, for validating that all bean properties have been mapped

Package org.springframework.jms
* JmsException message and logged JMSException message explicitly includes linked exception now if not already contained
* SingleConnectionFactory only calls "Connection.stop()" on reset when the shared Connection has actually been started
* SingleConnectionFactory explicitly creates Queue/TopicConnection when first call is createQueue/TopicConnection method
* CachingConnectionFactory explicitly creates Queue/TopicSession when first call is createQueue/TopicConnection method
* CachingConnectionFactory's JMS Session proxies implement SessionProxy interface, allowing for access to target Session
* CachingConnectionFactory rolls back cached transacted JMS Sessions on logical close if no commit/rollback was issued
* CachingConnectionFactory explicitly closes cached JMS Sessions on Connection close
* CachingConnectionFactory's cached producers pass on "disableMessageID" and "disableMessageTimestamp" properties
* CachingConnectionFactory also caches MessageConsumers (controlled through "cacheConsumers" property)
* AbstractJmsListeningContainer eagerly clears shared JMS Connection after releasing, avoiding repeated close exceptions
* revised DefaultMessageListenerContainer to correctly work with non-JMS transaction manager and CACHE_CONNECTION level
* DefaultMessageListenerContainer supports a stop notification callback for unlimited maxMessagesPerTask as well now
* introduced SubscriptionNameProvider interface for message listener objects suggesting default subscription names
* "jms:listener-container" uses actual message listener object's class name as default subscription name

Package org.springframework.jmx
* fixed NotificationListenerHolder to correctly handle multiple specified object names
* added "allowEagerInit" property to MBeanExporter, for autodetecting lazy-init beans and FactoryBean-produced objects
* added "environment" property to MBeanClientInterceptor and NotificationListenerRegistar, allowing for JMX env entries
* added "refreshOnConnectFailure" property to MBeanClientInterceptor, allowing for reconnect in case of I/O failure

Package org.springframework.mail
* ConfigurableMimeFileTypeMap explicitly closes the InputStream that it uses for "mime.types" resource reading

Package org.springframework.mock
* SimpleNamingContextBuilder supports "deactivate()"+"activate()", with the standard JNDI provider exposed inbetween

Package org.springframework.orm
* HibernateTemplate detects Spring-managed transactional Session even with SessionFactory proxy and allowCreate=false
* HibernateTemplate's "loadAll" operation selects distinct root entities (avoiding duplicate entries in result list)
* HibernateTemplate translates Hibernate's DataException into a Spring DataIntegrityViolationException (for consistency)
* fixed HibernateTransactionManager's "earlyFlushBeforeCommit" feature to apply to the outermost transaction only
* added "packagesToScan" property to Hibernate AnnotationSessionFactoryBean, for autodetection of @Entity classes
* HibernateJpaDialect checks "EntityManager.getDelegate()" as well to find Hibernate Session (for Seam compatibility)
* added "persistenceXmlLocation" property to DefaultPersistenceUnitManager, as alternative to "persistenceXmlLocations"
* @PersistenceContext of type TRANSACTION allows returned Query objects to be parameterized and executed as well
* @PersistenceContext for default EntityManagerFactory lookup works even in an @Configurable Hibernate entity

Package org.springframework.remoting
* added "interceptors" property to RemoteExporter, allowing for registering custom AOP interceptors before the endpoint
* RmiClientInterceptor always logs connect failure at warn level, even when debug logging (incl. stacktrace) is active
* JndiRmiClientInterceptor skips narrowing for RmiInvocationHandler stubs (fixing a regression in 2.5.4)
* Hessian/Burlap service exporters explicitly close input and output streams now (not relying on servlet container)
* Simple/CommonsHttpInvokerRequestExecutor set the current locale according to LocaleContextHolder as HTTP lang header
* JaxWsPortProxyFactoryBean exposes the JAX-WS BindingProvider interface in the Spring-generated proxy as well

Package org.springframework.scheduling
* SchedulerFactoryBean populates scheduler context first before satisfying SchedulerContextAware on a given JobFactory
* SchedulerFactoryBean uses bean name as default scheduler name (when "schedulerName" property not explicitly specified)
* SchedulerFactoryBean does not accept a pre-registered Scheduler instance in the Quartz SchedulerRepository anymore
* SchedulerFactoryBean does not expose the Spring-created/managed Scheduler to the Quartz SchedulerRepository anymore
* added "exposeSchedulerInRepository" flag to SchedulerFactoryBean, for explicit exposure to the SchedulerRepository
* introduced SchedulerAccessorBean for registering jobs/triggers/listeners on an existing Quartz Scheduler instance
* ScheduledExecutorFactoryBean uses Runnable decorator for logging exceptions that lead to termination of execution

Package org.springframework.test
* SpringJUnit4ClassRunner skips execution of test classes with non-matching @IfProfileValue annotation completely

Package org.springframework.transaction
* AbstractPlatformTransactionManager resumes after any kind of inner begin failure (not just after TransactionException)
* TransactionSynchronizationManager interaction gets logged at trace level only (minimizing debug log per transaction)
* JotmFactoryBean sets "defaultTimeout" value as actual JOTM default (even if no transaction timeout specified at all)

Package org.springframework.util
* fixed "StringUtils.delete" to prevent an eternal loop in case of the pattern being empty
* "StringUtils.cleanPath" preserves leading slash if given in original path
* "FileSystemUtils.copyRecursively" ignores 'special' files (i.e. neither a regular file nor a directory)

Package org.springframework.web
* HttpRequestHandlerServlet propagates HTTP request locale into Spring's LocaleContextHolder
* revised "WebUtils.extractFilenameFromUrlPath" to search actual URI part only even when given a URL with query string
* Log4jNestedDiagnosticContextFilter/Interceptor explicitly remove the NDC stack if depth=0 after the "NDC.pop()" call
* fixed FacesWebRequest's "getParameterValues" implementation to use "ExternalContext.getRequestParameterValuesMap"
* PortletContextResource cleans given path (analogous to ServletContextResource)
* Servlet/PortletContextResource accept path with leading "/../" part as well (as accepted by most servlet containers)
* DispatcherServlet removes error-view-driven servlet request attributes after rendering (for Tomcat compatibility)
* exposed "getParamName()" method on LocaleChangeInterceptor and ThemeChangeInterceptor
* added "cacheSecondsForSessionAttributeHandlers" property to Servlet/Portlet AnnotationMethodHandlerAdapter
* AnnotationMethodHandlerAdapter exposes special ModelMap that removes BindingResult if target attribute gets replaced
* Servlet AnnotationMethodHandlerAdapter always takes first exact @RequestMapping path match as best path match
* @MVC handler methods, model attribute methods and init binder methods allow for overriding a generic superclass method
* @ModelAttribute annotated handler method arguments can resolve to a null value as well (when contained in the model)
* standard method argument subtypes (such as a Principal subclass) fail with a descriptive exception if incompatible
* Portlet AbstractCommandController falls back to lazy command creation if session timed out after action phase
* ByteArray/StringMultipartFileEditor do not log warning but rather include root cause in IllegalArgumentException
* InternalResourceView's "preventDispatchLoop" checks against the same request's URI only (for Portlet compatibility)
* made RedirectView's "renderMergedOutputModel" implementation non-final
* VelocityConfigurer exposes ServletContext as VelocityEngine attribute (analogous to the standard VelocityViewServlet)
* revised XsltView to specify full resource URI as StreamSource system id, for properly resolving relative paths
* officially deprecated AbstractXsltView in favor of XsltView and its more flexible "locateSource" mechanism
* revised error logging during XSLT processing to properly log compilation errors before an eventual fatal exception
* moved internal TransformerUtils helper class to generic "org.springframework.util.xml" package





:
Posted by 행복상자
2008. 10. 31. 23:28

Silverlight 2.0 Windows Auto Update 좋아하는 것2008. 10. 31. 23:28

얼마전에  "Silverlight 2.0 발표 즈음하여" 라는 제목의 글을 올린 적이 있었다.
Silverlight 1.0을 발표하고 많은 노력과 공을 들여 개발하고 최근에 2.0을 발표하였는데, MS가 전략적으로 집중하는 모습이 이전의 브라우져 전쟁때와 비슷하다. 
그때는 넷스케이브가 브라우져의 90% 이상의 점유율을 가졌을 때이기 때문에, 새로운 시작과 기술들은 넷스케이프를 중심으로 열릴것이라고 생각되었던 때이다. 

하지만 MS는 OS의 강점을 10분 이용하여, OS의 설치시 자신의 웹 브라우져인 IE 3를 기본적으로 윈도우의 설치해서 배포하였다. 이 당시에는 지금 생각하면 황당한 것은 새로운 브라우져를 설치하면, 내가 개발하던 프로그램이 갑자기 동작하지 않거나, 에러를 발생시키도 하였다. 이는 웹브라우져와 OS에서 사용하는 DLL의 인터페이스가 변경된 것이 원인인데, 브라우져를 통해서 OS의 기능을 변경했다는 이야기와 일맥 상통한다.  

하지만 결국, 이러한 전략적인 배포 방법으로 MS는 넷스케이프를 밀어내고, 그 자리를 자신의 브라우져인 IE를 대체하여 버렸다. 그 당시는 MS에서 브라우져 개발을 최우선으로 하고 약 3000명의 개발자를 할당하였었다. 넷스케이프는 약 200명 정도의 개발자들이 참여했었던 것으로 기억되는데, 이러한 공격적인 개발전략으로 넷스케이프는 역사속의 프라우져가 되었다.

최근에 Silverlight 2의 개발이 끝났는데, 역시 마이크로 소프트이다라고 할 만한 방법으로 Silverlight를 배포하고 있다. MS는 윈도우의 자동 업그레이드를 이용하여 패치를 진행하고 있는 것이다. 최근에 지인과 이야기를 했는데, 그는 Silverlight는 Flash에 비해서는 2수정도 부족하다고 평하였고, 상대가 안될거라 이야기를 했었다.
하지만 나는 실버라이트가 기술적 우수성을 떠나서, 전략적인 면에서는 더욱 우세할 거라는 의견에 한표를 실어주었다. 왜냐하면, MS는 어떤 식으로든 실버라이트를 기본적으로 OS에 탑재하여 배포할 것이기 때문이다.

그런데, 그러한 예측이 며칠전 부터 일어나기 시작하였다. 윈도우즈의 Software 자동 업데이트 기능을 이용하여 배포를 시작한 것이다.

이러한 MS의 공세에, Flash와 JavaFX는 어떤 식으로 방어와 수성을 할지 궁금하다.

아래는 며칠전에 내 PC의 자동 Update 되는 과정을 캡처한 화면이다.



:
Posted by 행복상자

지난 목요일은 신도림역 테크노 마트에서 열렸던 Web Application Conference 2008에 다녀왔다. 작년도에는 참가하지 못하였다가 이 번에는 참가하기 위해서 몇가진 개인 적인 장애를 넘어서 참가하였다.

아침에 집을 나섰을 때는, 비가 내리지는 않았는데, 신도림역에 도착하니 비가 내리기 시작하였다. 8시경에 전철을 탄적을 별로 없었는데, 제법 사람들이 많아서, 아니 비가 오기 때문인지 지하철리 연착되고 있는 중이었다.

신도림 역에서는 제법 비가 오기 시작하였는데, 행사장은 전철역에서 약 150미터 정도 떨어져 있었다. 보통 컨퍼런스는 서울 강남 쪽에서 많이 열렸었는데, 조금 외진 곳에서 열리는 것이, 행사에 대한 기대를 반감 시키는 역할을 했다.

엘리베이터를 타고 11층으로 올라가려했는데, 이런 10층까지만 불이 들어오고 11층은 버튼을 눌러도 불이 들오 오지 않았다.(홀 짝수 층을 나누어서 운영하였다.) 아마도 행사 때문에 몇가지 조치를 한 것 같은데, 바로 옆쪽 짝수층 엘리베이터를 탔더니, 11층 운행이 가능하였다.

11층에 올라가서, 사전 등로 부스에서 이름표를 받았다. 이름만 확인하고 별다른 인척사항을 묻지 않았다. 원걸, 동명이인인지 다른 회사명이 적혀있는 이름표를 받았다. 아마도 기본적인 사항을 확인하였으면, 이런 일이 없었을 텐데...
별도로 작성한 책자나 소개자료들은 없었다. 이 전에 열렸던 많은 유료 행사들은 세션에 사용하는 자료들은 책자로 만들어서 배포하곤 하였는데, 요즘에 열리는 행사들은 책자를 배포하는 것을 보기가 힘들다. 무료행사여서 그렇다고는 생각했지만, 그래도 유료행사인데, 좀 아쉽다. 만약 책자를 나누어 준다면, 다음 세션들에 대한 내용을 미리 흩어 볼 수 있을 텐데, 제목만 가지고는 예측하기가 힘들기 때문이다.

약 15분 정도 늦게 도착하였지만, 행사는 정시에 시작한 듯하였다. 웹 Front-end관련된 세션을 들었는데, 웹 개발시에 성능 향상에 대한 14가지 테크닉에 대해서 설명하는 시간이 진행 중었다. 나름 세션을 잘 준비하였는지, 눈이 잘 들어왔고 내용도 꼭 한번쯤은 생각해 봄 직한 내용으로 구성되어 있었다. 나중에 팀 내의 개발자들과 공유할 만한 사항들이라는 생각이 들었다.

그리고 디자인에 대한 세션도 들음직하였다. 나름 잘 만들어진 내용들과 Content들은 이런 부분들에도 열심있고 또 공부할 많은 것들이 있음을 보여주었다.

이 세션 시작전에, "리치웹을 이용한 매쉬업 웹 애플리케이션 개발"이라는 세션이 있었는데, 주로 말발로 때우려는 것이 역력하였다. 전날 PC바이오스 업그레이드 하다가 PC를 날려다는 이야기와 밤 늦게까지 술을 마셔서 제대로 준비하지 못했다는 이야기를 했는데, 사실 돈 내고 온 입장에서는 잘 이해가 되지 않는 부분이었다. PC를 날려서 술 먹었는지, 술먹고 PC 바이오스 업그레이드를 하다 PC를 날려먹었는지는 모르지만, 전 반적으로 너무 성의 없는 세션이었다. 많은 데모와 예제를 보여준다면 쉽게 이야기하는 것들을 잘 이해할 수 있었을 테데, 솔직히 무엇을 말하는지 이해가 잘 안가는 세션이었다. 하지만 다음 번에는 좀더 성의 있는 세미나가 될거라는 막연한 기대를 갖는다.

전반적으로 괜찮은 내용들로 진행된 컨퍼런스였다. 예상했던 것보다는 많은 것들을 주었지만, 아쉬움도 많은 행사였다. 세션을 맡은 강사들의 PC가 네트워크에 연결이 되지 않아서 준비한 데보를 볼 수 없었고, 또 진행 전에 테스트 할 시간들도 많이 부족해 보이기도 했다.
그러나, 많은 개발자들의 열정과 보이지 않은 곳에서 준비를 위해 수고한 손길들의 노력이 가치있게 빛나는 컨퍼런스 였다.

오후에도 여러 세션이 있었지만, 오전의 그것보다는 그리 나았다고 볼 수는 없었다.
조엘 온 소프트의 저자인 조엘 스폴스키가 나와서 여러가지 많은 것들을 이야기 했지만, 사실 동시 통역없이 그렇게 빨리 이야기하는 것을 제대로 받아들일 수 있는 사람들 과연 몇명이나 될까라는 생각이 들었다. 누군가 유명한 사람을 볼 수 있다는 것을 좋았지만, 결단코 기대한 만큼을 사람들이 얻지 못하였을 것이라는 생각이 들었다. 그래도 그가 한 이야기 중에 1등과 2등이하와의 차이점 중에 하나는 재미를 줄 수 있느냐? 라는 것인데, 많은 시사하는 바가 크다.  다음에 올때는 조금만 천천히 이야기 했으면 좋겠다.

오후에는 이전에 같이 일했던 소프트 뱅크 랩의 류한석 소장을 잠시 만났다. 사실 뭐라고 부를지는 모르겠다. 같은 회사에서 일할 때와는 직함이 달라졌으니까..
신규 웹서비스의 심사와 사회를 보기 위해 왔다고 한다. 나중에 소개때 사진 몇 컷을 말 안하고 찍었다.

여러가지로 많은 생각과 좋은 경험들이 있었다. 내가 불만을 이야기 하지만 사실 불만만 이야기 하고 싶을 생각을 없다. 누군가가 내 글을 보고서 다음에 같은 실수를 하지 않고 조금만 더 배려할 지도 모른다는 생각으로 글을 이 글을 쓴다. 개발자들이 한 자리에 모여서 여러가지를 나눈다는 것보다 더 나은 것을 없다고 본다. 하지만 모든사람들이 모두 같은 생각을 하지는 않을 뿐 더러, 그렇다고 나쁜 것만 생각하는 사람들은 없을 거라 생각한다.

이전에 MS에서 열었던 Tech-Ed행사에 매년 참가하였었다. 아직도 미국에서는 매년 열리지만 한국은 몇년전에 없어졌다. 매년 진행하는 행사는 질이 떨어지고 나중에는 3일 하던 핻사도 2일로 줄이더니 결국의 개발자의 호응이 떨어짐과 동시에 한국에서는 사라져 버렸다.
나는 그 것을 보면서 정말 많은 아쉬움을 가졌었다. 내돈과 시간을 들여서 매년 참석하였지만 참석하면서 어떤 세션은 돈이 아깝다는 생각을 많이 주었기 때문이었다. 하지만 돈의 아까움이 아니라 내가 기대했던 기대치를 채워주지 못하였기 때문이었다. 그렇지만 그 행사가 사라지기를 바랬던 것은 아니었다. 우리에게는 오늘 보다 나은 내일을 바라기 때문이다.

위 사진은 신규 웹 서비스에 대한 소개와 각 팀의 설명이 있었는데, 그 중 한팀이 소개를 하고 있는 사진이다.


이 사진은 나와 전에 같은 팀에서 일하던 지인의 사진이다. 웹 서비스 경진 대회의 사회를 맡아 진행하고 있는 모습이다.


열심히 자신들의 웹서비스를 소개하는 모습..


경진 대회의 심사위원들의 모습들이 스크린을 통해서 보였다. 심사위원들은 제일 앞자리에 앉아 있어서, 심사위원 소개할 때를 빼 놓고는 뒷 보습만 보았다.




자원 봉사자들의 소개와 인사하는 모습


1등상을 시상하는 모습인데, 초점이 잘 안맞았다.



그 행사에 참석해서 보았던 사진을 몇장 올렸는데, 행사의 후반부에 찍은 것들이 대분이다.
사진기를 가져갔지만 점심을 먹고나서야 사진기를 가져간 것을 인지 하였기 때문이다.







:
Posted by 행복상자
오늘은 구글 Crom browser의 업그레이드가 되는 것을 보고 몇가지 생각이 들어서 글을 쓴다. 분당에서 예전에 같이 일했던 지인을 만나서 인지도 모르지만, 차를 타고 오면서 현재의 기술적 추이와 앞으로의 나타날 기술적 진보에 대해서도 생각해 보았다.
하지만, 결코 알 수가 없었다. 하지만 미래는 정.반.합의 반복과 조화를 통해서 만들어 질거라는 것과 과거를 통해서 미래의 흔적을 찾을 수 있다는 것이 나의 생각이다.  

구글 크롬은 아직은 안정성이나 기능들이 발전할 가능성들이 많다. 하지만 아직도 0.3버전일 뿐이다. Google의 명성을 등에 업고, 최근에 우리에게 나타났지만, 많은 부분들이 기존 브라우져와 비교할 때 부족하다. 하지만 그 가능성은 아무도 예측하지 못한다. Google이 브라우져 시장에 발을 들일때는 여러가지 이유들이 있을 것이다.

지금은 브라우져들의 춘추 전국 시대이다. 하지만 모든 메이져 브라우져들은 미국 기업들이 만들고 발전시키고 있다. 10년 전에도 넷스케이프와 IE의 전쟁도 그들만의 전쟁이었다. 지금 역시 이들은 다시 전쟁을 시작하고 있는데, 전쟁에는 반듯이 목적이 있다. 아무 이유없이 많은 힘과 리소스틀 소모하려 하지는 않은 것이다. 
 
그때는 데스크탑을 타겟으로 한 전쟁이라면, 지금은 모바일 디바이스를 타켓으로 전쟁의 서문을 열고 있다. 지금의 시장과 기술을 여러가지로 성숙기에 들어서 있다. 그리고 그러한 성숙된 기술은 새로운 마켓의 시작을 보여줄 수 있다. 아직 아무도 독점하지 않은 블루오션이 디바이스에 있기 때문이다. 내가 가지고 있는 모바일 기기만 해도 4~5개는 된다. 몇년 전만해도 mp3 player하나 였었는데 말이다. 최근에 갑자기 늘어났다.

현재는 모바일 시장에서 가장 앞서는 브라우져는 Apple의 사파리가 가장 앞서고 있는 것 같다. iPhone와 iPod touch를 내세워 풀브라우징을 통해 우수함을 드러내고 있다.
MS의 Moblile IE는 가장 먼저 개발되어 설치되었자만, 그 다지 우수하거나 자랑할 만한 기능을 가지고 있지 못하다. 최근에 기능들이 개선되고 있지만 말이다.
Google의 브라우져인 Crom은 다른 브라우져의 장점과 기능들을 통해서 발전해 나갈 것이지만, 결국은 G-Phone의 기본 탑재가 될 것이고, 이를 통해서 검증을 받을 것이다.

현재의 모바일 브라우져는 PC의 그것과 기능을 비교할 때 손색이 없다. Flash와 같은 Plug-in 을 설치하지 않는다 해도, 브라우져 자체의 기능으로 충분히 구현이 가능하다. iPhone의 Web application을 보면 게임도 상당히 많다. 그리고 구글 맵도 충분히 잘 돌아간다.

사용자의 잎장에서는 기술의 경쟁은 많은 이득이 있고, 즐거움과 기대를 갖게 한다.
브라우져의 승자는 OS의 시장 점유율이 높은 개발사가 승리할 가능성이 높다. 하지만 모바일은 Apple이 유리하지만 아무도 예측하기 힘들다. 워낙 다양한 모바일 기기와 통신 회사들이 많기 때문에 전략적인 측면에서 승자가 가려질 가능성이 높다.
:
Posted by 행복상자