내가 Virtual Box를 블로그를 통해서 소개한지 꽤 오랜 시간이 지났다.
가상화와 관련된 제품들이 많이 나오고, 또 앞으로도 유용하게 사용될 것이라는 점에 대해서는 크게 의심하지 않는 바이다.

내가 이 제품에 대해서 관심을 갖게 된 이유로는 무료로 사용할 수 있으면서도 기능과 버전이 빠르게 올라갈 만큼 사용자가 원하는 기능들을 지속적으로 개발해 나가고 있었기 때문이다. 더군다나 메뉴와 도움말을 한글로 지원하기까지 했다.

이 제품은 원래는 Sun에서 개발하던 제품이었는데, 오라클로 합병하면서 오라클에서 제공하던 오라클 VM 서버 제품군과 중복이 되어서, 추가 개발이 이루어 지지 않을지 걱정했었다. 선과 오라클과의 합병은 개인적으로는 별로 바람직한 방향이 아니고, 단지 비즈니스적으로 주도권을 유지하는 측면으로만 진행될거라 예상했고, 실제로 이러한 우려와 예측은 틀리지 않았다.

이러한 와중에서 며칠전, 지난 12월 22일자로 Virtual Box의 새로운 버전인 4.0 버전이 Release 된것은 굉장히 놀라운 소식이었다.

4.0 버전으로 릴리스 하면서, 추가된 기능과  변경되 몇가지 주요 Feature들은 다음과 같다.

1) File Location 
   - VirtualBox의 Configuration 파일들과 disk 이미지 파일들이 다른 위치(폴더)에서
      관리되었으  나, 4.0에서는 동일한 디렉토리에 저장된다.
   - 기본 Configuration 파일의 확장자가 XML로 관리되었는데, 4.0 에서는 vbox로 변경되었다.
      그러나 내용은 이전과 동일하다.
   - 기본 저장 위치도 이전에는 .VirtualBox 였으나, VirtualBox VMs로 바뀌게 되었다.
      (윈도우즈 계열 OS의 사용자 Profile 디렉토리 아래 저장)
2) User Interface 변경
   - Virtual Machine 설정 화면이 좀더 사용성 있게 바뀌었고 실행되고 있는 또는 저장되어 있는
     이미지에 대한 Preveiw 기능이 들어갔다.
3) 아이콘을 통한 VM 이미지 실행하기
   - 실행을 하기 원하는 OS의 이미지를 바탕화면에서 실행할 수 있도록 아이콘을 생성해 준다.
4) Virtua 이미지 쉽게 삭제하기
   - 이지미 삭제시, 이와 관련된 이미자와 Confituration 파일들을 클릭 한번에 모두 삭제해 준다.
5) 네크워크 Boot와 가상 H/W 칩셋 설정하기
   - 네트워크 Booting을 지원하며, H/W에 대한 칩셋 종류에 대해서 설정 가능하다.
6) 더 많은 Host OS의 메모리의 할 당이 가능하다.
   - 초기의 VirtualBox 버전들에서는 1.5Gbyte 이상의 메모리 할당이 어려웠으나, 4.0에서는
     그 이상의 할당이 가능하다. 만약 32bit OS의 윈도우 7에서 할당한다면, 3Gbyte까지 가능.
7) Open Virtualization Format Archive (OVA) 지원
   - OVA 파일 포맷으로 Import/Export 가 가능하다. VmWare에서 생성한 파일의 사용 가능함.

그리고, 아래는 이번에 Release 된 VirualBox 4.0의 릴리즈 로그이다. 더 많은 변경 사항들은 아래 로그를
확인할 수 있다.

VirtualBox 4.0.0 (released 2010-12-22)

This version is a major update. The following major new features were added:

  • Reorganization of VirtualBox into a base package and Extension Packs; see chapter 1.5, Installing VirtualBox and extension packs, see the manual for more information
  • New settings/disk file layout for VM portability; see chapter 10.1, Where VirtualBox stores its files, see the manual for more information
  • Major rework of the GUI (now called “VirtualBox Manager”):
    • Redesigned user interface with guest window preview (also for screenshots)
    • New “scale” display mode with scaled guest display; see chapter 1.8.5, Resizing the machine’s window, see the manual for more information
    • Support for creating and starting .vbox desktop shortcuts (bug #1889)
    • The VM list is now sortable
    • Machines can now be deleted easily without a trace including snapshots and saved states, and optionally including attached disk images (bug #5511; also, VBoxManage unregistervm --delete can do the same now)
    • Built-in creation of desktop file shortcuts to start VMs on double click (bug #2322)
  • VMM: support more than 1.5/2 GB guest RAM on 32-bit hosts
  • New virtual hardware:
    • Intel ICH9 chipset with three PCI buses, PCI Express and Message Signaled Interrupts (MSI); see chapter 3.4.1, “Motherboard” tab, see the manual for more information
    • Intel HD Audio, for better support of modern guest operating systems (e.g. 64-bit Windows; bug #2785)
  • Improvements to OVF support (see chapter 1.12, Importing and exporting virtual machines, see the manual for more information):
    • Open Virtualization Format Archive (OVA) support
    • Significant performance improvements during export and import
    • Creation of the manifest file on export is optional now
    • Imported disks can have formats other than VMDK
  • Resource control: added support for limiting a VM’s CPU time and IO bandwidth; see chapter 5.8, Limiting bandwidth for disk images, see the manual for more information
  • Storage: support asynchronous I/O for iSCSI, VMDK, VHD and Parallels images
  • Storage: support for resizing VDI and VHD images; see chapter 8.21, VBoxManage modifyhd, see the manual for more information.
  • Guest Additions: support for multiple virtual screens in Linux and Solaris guests using X.Org server 1.3 and later
  • Language bindings: uniform Java bindings for both local (COM/XPCOM) and remote (SOAP) invocation APIs

In addition, the following items were fixed and/or added:

  • VMM: Enable large page support by default on 64-bit hosts (applies to nested paging only)
  • VMM: fixed guru meditation when running Minix (VT-x only; bug #6557)
  • VMM: fixed crash under certain circumstances (Linux hosts only, non VT-x/AMD-V mode only; bugs #4529 and #7819)
  • GUI: add configuration dialog for port forwarding in NAT mode (bug #1657)
  • GUI: show the guest window content on save and restore
  • GUI: certain GUI warnings don’t stop the VM output anymore
  • GUI: fixed black fullscreen minitoolbar on KDE4 hosts (Linux hosts only; bug #5449)
  • BIOS: implemented multi-sector reading to speed up booting of certain guests (e.g. Solaris)
  • Bridged networking: improved throughput by filtering out outgoing packets intended for the host before they reach the physical network (Linux hosts only; bug #7792)
  • 3D support: allow use of CR_SYSTEM_GL_PATH again (bug #6864)
  • 3D support: fixed various clipping/visibility issues (bugs #5659, #5794, #5848, #6018, #6187, #6570)
  • 3D support: guest application stack corruption when using glGetVertexAttrib[ifd]v (bug #7395)
  • 3D support: fixed OpenGL support for libMesa 7.9
  • 3D support: fixed Unity/Compiz crashes on natty
  • 2D Video acceleration: multimonitor support
  • VRDP: fixed rare crash in multimonitor configuration
  • VRDP: support for upstream audio
  • Display: fixed occasional guest resize crash
  • NAT: port forwarding rules can be applied at runtime
  • SATA: allow to attach CD/DVD-ROM drives including passthrough (bug #7058)
  • Floppy: support readonly image files, taking this as the criteria for making the medium readonly (bug #5651)
  • Audio: fixed memory corruption during playback under rare circumstances
  • Audio: the DirectSound backend now allows VMs to be audible when another DirectSound application is active, including another VM (bug #5578)
  • EFI: support for SATA disks and CDROMs
  • BIOS: reduce the stack usage of the VESA BIOS function #4F01 (Quake fix)
  • OVF/OVA: fixed export of VMs with iSCSI disks
  • Storage: Apple DMG image support for the virtual CD/DVD (bug #6760)
  • Linux host USB support: introduced a less invasive way of accessing raw USB devices (bugs #1093, #5345, #7759)
  • Linux hosts: support recent Linux kernels with CONFIG_DEBUG_SET_MODULE_RONX set
  • Guest Additions: Shared Folders now can be marked as being auto-mounted on Windows, Linux and Solaris guests
  • Linux Additions: Shared Folders now support symbolic links (bug #818)
  • Linux Additions: combined 32-bit and 64-bit additions into one file
  • Windows Additions: automatic logon on Windows Vista/Windows 7 is now able to handle renamed user accounts; added various bugfixes

Posted by 행복상자
인터넷에서 크롭의 정식이 임박했다는 소문이 흘러다니더니, 결국 어제 1.0 버전이 Release 되었다. 

나는 몇가지 브라우져를 동시에 사용하지만, 사실 Chrome을 기본 브라우져로 사용하지 않는다. 이유는 정식 버전도 아니고, 단순하고 빠르지만, 여러면에서 불편했었기 때문이다. 이번에 발표된 1.0은 이러한 부분들이 당연히 개선되었을 것이라고 생각한다.

새로운 버전을 받아서 설치하려면, 아래의 Google  Chrome 사이트에서 다운 받아 사용하면 된다.

   - Google 크롬: http://www.google.com/chrome/

아래는 내가 사용 하였던 0.4.154.29 버전의 Google 크롬의 정보 창이다.
어제 회사의 크롬을 설치하였고, 오늘은 집에 있는 PC의 크롬을 설치 하였다. 하단에 "새 버전 설치 중..." 이라는 Text가 보인다. (새로운 버전으로 Upgrade 하는 있다.)


새로운 버전의 설치가 마무리 되면, 아래와 같이 브라우져를 새로 시작하라는 메시지가 나타난다. 새로 크롬을 시작 시켜야 한다.



새로 설치한 크롬의 버전이 0.4.154.29에서 1.0.154.36으로 변경 되었다.
그런데 신기한 것은 중간의 "154"가 같다는 것이다. 시실은 0.4.154.36 버전이 아닐까 쉽다.


구글의 한글 블러그에
"구글 크롬(Chrome)이 베타 옷을 벗었습니다! "라는 제목으로 글이 올라와 있다.
기능상의 변화나 수정 사항은 위와 "Google Chrome" 사이틀 참고하는 것이 좋은 것 같다.

아직도 "154"의 의미가 궁금하다.
Posted by 행복상자
지난 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 행복상자
오늘 ZdNet을 보니 구글 크롬이 새로운 버전이 릴리즈되었다는 기사가 떴다.
관련된 기사의 링크는 다음과 같다. http://www.zdnet.co.kr/news/internet/browser/0,39031243,39174206,00.htm

크롬은 물론 아직 정식 버전이 아니다. 하지만 많은 가능성을 내포하고 있는 브라우져이다. 현재 정식 버전이 아니므로, 시장 점유율은 아직 미약하지만 어떤 식으로든 많은 사람들에게 배포될 것이다.

아래 구글 크롬의 Release Note를 보면 그동안 알려진 버그들이 고쳐졌음을 알 수 있다.
http://dev.chromium.org/getting-involved/dev-channel/release-notes


Posted by 행복상자
며칠 전에  ZDNet을 통해서 실버라이트의 정식 버전 발표가 입박했음으로 보았는데, 이제는 쉽게 정식 버전이 출시되었다는 기사를 볼수 있다.

Silverlignt의 정식 버전은 PressPress 을 통해서 발표되었다.
이는 또한 며칠전에 Scott Guthrie's의 블러그에도 언급도기도 했는데, 어제는 Silverlight 2 Released 라는 제목으로 새로 글이 올라와 있다.

공식적으로 한국시간으로 10월 15일자로 마이크로 소프트는 Silverlight를 배포하고 있으며, 이는 http://www.microsoft.com/silverlight/ 에서 다운로드 받을 수 있다.

아시다시피 Silverlight는 다양한 Platform을 지원하고 동작하도록 마이크로 소프트에서 서포트 하고 있는데, 이는 기존의 MS의 정책과는 상당히 다른 접근 방법이었다. 하지만, 이는 10년전에 마이크로 소프트가 OS시장을 주도적으로 이끌고 경쟁에서 살아남기 위해서, 많은 Application을 개발할 수 있도록 SDK만을 제공하던 그 때와는 크게 다르다.

구글의 경우만 해도 MS의 브라우져 시장에 대한 지배력과는 무관한 방향에서 사업을 성장시켰으며, 특정 OS와는 무관한 방향에서 사업을 키워나갔다. 검색엔진과 다양한 Application을 여러 Platform에 제공하며서, Beta아닌 Beta 서비스로 사용자 층을 끌어 모으으고 확장하고 있다. 최근에는 Crom이라는 브라우져를 발표하였다.

하지만 역시, Adobe의 Flash가 MS의 행보에 가장 큰 영향을 키쳤을 거랴 생각한다.
다양한 브라우져와 OS에서 동일하게 동작을 한다. RIA를 떠 올리면 Flash로 만들어진 Application을 쉽게 떠 올리게 되는데, 이는 Flash를 통해서 만들어진 Application이 주변에 많기 때문이다. Adobe는 브라우져가 아닌 OS위에서 Flash가 동작할 수 있는 Application을 개발할 수 있도록 AIR와 Flex 3를 제공하고 있다. 이는 Desktop시장뿐만 아니라 Mobile시장까지 확장하려는 Adobe의 의지가 보이는 대목이다.

MS는 이들과 경쟁을 해야 한다. 최근에는 SUN에서 JavaFX의 정식버전을 발표했다.(Mobile지원에 대해서는 슬그머니 빼 놓고 말이다.) 이는 SUN의 JavaFX도 경쟁 상대임을 의미한다.
따라서 MS는 Cross-Platform을 지원해야 하고, Cross-Browser를 지원해야만 한다. 이를 위한 최적의 기술은 바로 Silverlight임을 쉽게 알 수 있고, 개발되고 있는 것이다.

Eclipse에서 Silverlight를 개발 할 수 있는 툴을 만들고 있는 회사가 있다. 이를 MS에서 지원하고 있다.  http://www.eclipse4sl.org/ 를 보면 툴에 대한 설명과 Screen-shot를 볼수 있다. 그리고 여기를 보면 실버라이트의 Step-by-Step 예제가 있다. 

이번에 Silverlight 2.0 에는 새로운 컨트롤이 많이 추가 되었다.


다음은 Silverlight 2.0의 ReadMe Note 인데, 개발전에 한번 꼭 읽어 보면 많은 도움이 될것이다. 설치에 대한 부분과 달라진 점들은 읽어볼 필요가 있다.

 
 

'공부하는 것' 카테고리의 다른 글

6 New ASP.NET Dynamic Data Videos  (0) 2008.11.06
Spring 3.0 Preview  (0) 2008.10.21
Silverlight 2 Released  (0) 2008.10.15
Silverlight 2.0 발표 즈음하여...  (0) 2008.10.15
MS SQL 2005서버에서 유니코드 사용하기  (0) 2008.10.08
Cocoa Programming을 시작하며...  (0) 2008.10.07
Posted by 행복상자

최근에 구글 크롬을 설치를 하였다. 집에서와는 달리, 회사에서는 몇가지 이유로 설치가 제대로 되지 않아서, 설치와 제거를 수 차례 반복하였다. 결국 설치 후 방치해 놓고 사용하지 않다가, 최근에 해결 방법을 찾아서 사용하고 있다.

내가 사용하고 있는 브라우져는, 맥북에서 사파리 3과 Firefox 3, 그리고 윈도우즈에서는 IE6와 7을 같이 사용하고 있다. 대부분 나는 IE를 사용하고 있는데, 이는 금융거래와 인증서 때문이고, 회사의 인트라넷 역시 IE에서만 동작하기 때문이다.

내가 Google의 크롬에 관심을 가졌던 이유는 내가 IE를 사용하는 이유와 동일하다. 최근에 Crom을 발표할 때 한국의 사용자들의 위하여 CROM에서 ActiveX 지원할 거라는 발언을 들었기 때문이다.
크롬에서 지원하는 AcitveX-Plugin은 다음 링크에서 찾아 볼수 있다. (구글 크롬 ActiveX Plugin) 이미 진행되어지고 있는 프로젝트 중에 하나이다.

ActiveX를 사용하는 것은 한국에서만 진행하고 있는 특이한 상황으로 볼수 있지만, 최근의
MS에서는 새로 개발하고 있는 IE 8에서는 웹 표준을 지원하겠다고 공언하고, ActiveX의 지원을 없애거나, 최소한으로 줄이려는 움직임을 보이고 있다.

이는 MS의 지금까지의 ActiveX를 바라보는 관점이 상당히 달라졌다는 반증이다.
아는 사람들은 알겠지만 ActiveX라는 기술의 탄생은 계획보다는 우연에 가깝다. 약 10년전에 자바 진영에서 Java Applet를 가지고 나와 웹을 동적으로 만드는 기술을 내 놓았을때 MS는 자신들이 가지고 있는 기술중에 가장 이와 유사한 기술을 가지고 내 놓은 것이었다. (사실은 OLE 또는 COM 기술이었다.) 이는 MS의 OS인 윈도우의 리소스를 쉽게 사용할 수 있었끼 때문에 개발 생산성과 효율성은 아주 높았다. 사실 웹 브라우져는 단지 COM 기술의 Container 역할만 할 뿐이었다.

이때 까지마 해도, 자바는 속도가 아주 느리고, 낮은 사양에서는 사용하기 어려운 기술이었기 때문에 개발자들이 선듯 내세우기 힘들었다. 반면 MS는 많은 Intranet환경에서 ActiveX를 이용한 솔루션이 개발되고, 만들어지면서 IE의 사용율을 높여갈 수가 있었다.

MS가 새로운 브라우져에서는 표준을 지향한다고, 이야기 하고 Vista를 비롯하여 IE8에서는 ActiveX의 지원을 하지않겠다고 공공연하게 이야기 하고 있다. 우리나라와 같이 AciveX를 많이 사용하는 나라에서는 갑작으로 방향 전환에 도무지 이해가 안하는 상항인데, MS의 입장을 알면 이해가 되는 부분이다.

최근 몇년 사이에 이러한 것(ActiveX)들을 대체할 수 있는 기술들이 나타나기 시작했는데, 이들은 어느새 웹 개발자들 사이에 표준처럼 사용되고 있기 때문이다.  Ajax와 Flash가 이들을 대표한다고 할 수 있다. 그리고 새로운 브라우져들이 MS의 시장 점유율을 눈에 띄게 줄이기 시작했다. (Firefox, Safari...)
Adobe의 Flash의 경우는 모바일과 윈도우 Application 영역마져도 침범하고 있다. Flash의 경우는 MS의 ActiveX와 마찮가지로 IE를 단지 컨테이너로 밖에 생학하지 않는 독립적을 Architecture를 가지고 있기 때문이다.

그리고, 이제는 웹과 Application의 경계마져도 허물어지고 데스크탑과 모바일의 경계마져도 허물어지고 있는 시점에 다달았고, 이에 부응하여 새로운 패러다임의 전환과 새로운 수익원을 찾아야 하는 때가 되었기 때문이다.

그러면 왜 AciveX를 버리려고 할까?
MS는 윈도우즈를 살리기 위해서 MS-DOS 버려야만 했다. 사람들이 새로운 제품으로 이동하지 않는다면, 윈도우즈가 살아남을 수가 없기 때문이다.
이와 유사하게 Silverlight가 살기 위해서는 ActiveX를 버려야만한다. 지금의 ActiveX는 오르지 윈도우와  IE에서만 작동을 하고 있기 때문에 새로운 패러다임에는 맞지 않는다.

제품의 라이프 사이클이라는 측면에서는 새로운 기술이 적용된 제품이 나오면, 자연스럽게 기존 제품이 사라져야 하지만, ActiveX의 경우는 결코 쉽지 않다. MS의 입장에서는 기존과 마찮가지로 그대로 유지하기에는 사용되는 비용도 결코 만만치 않기 때문에, 결국은 ActiveX를 죽일수 밖에 없다.

며칠 전에 Silverlight 2의 발표가 임박했다는 기사를 보았었다.
개인적으로는 Silverlight는 MS에서 방향을 잘 잡았다고 생각을 하고, 이전 보다 Open된 Platform의 모습을 갖춰가나고 있다고 생각한다. Ruby와 Python과 같은 Dynamic language를 지원하는 것을 봐도 .Net Framework 1.0을 발표 할 때와 사뭇 다른 태도를 보이고 있다는 것을 알 수가 있다. (그때는 수많은 VB 개발자들과 지지자들을 너무나도 쉽게 버렸었다.)

그리고, 기대를 하고 있다. 개발 생산성을 바라지는 않지만,  앞으로도 많은 기능 개선과 개발자 지원으로 인터넷 비쥬얼 베이직으로 자리잡을 수 있기를 바란다. Silverlight 2의 새로운 컴포넌트를 보면, 마치 Visual basic의 툴 컨트롤이 연상이 되기 때문이다.
(Visual Basic은 내가 좋아하는 개발 툴이어서 애착이 많이 간다.)



'공부하는 것' 카테고리의 다른 글

Spring 3.0 Preview  (0) 2008.10.21
Silverlight 2 Released  (0) 2008.10.15
Silverlight 2.0 발표 즈음하여...  (0) 2008.10.15
MS SQL 2005서버에서 유니코드 사용하기  (0) 2008.10.08
Cocoa Programming을 시작하며...  (0) 2008.10.07
Spring Dynamic Modules 1.1.2 Released  (0) 2008.10.05
Posted by 행복상자