구글이 크롬OS라는 새로운 운영체제를 발표했습니다. 구글이 지난 7월에 처음 크롬 OS의 존재를 이야기하면서 안드로이드와는 전혀 별개의 새로운 운영체제라고 하여 많은 사람들이 의아해 했습니다. 이미 안드로이드가 큰 이슈가 되며 채택되어가고 있는데 왜 구글은 전혀 별개의 새로운 운영체제를 개발하는지 두개가 상충되는 부분은 없는지 궁금해 했습니다. 안드로이드는 모바일폰에서부터 넷북까지 아우를 수 있는 플랫폼으로 알려져 있는데 새로운 넷북용 OS를 개발한다고 하니까요.

GoogleChromeOS

구글의 대답은 서로 다른 장치를 위한 서로 다른 운영체제라는 것이었습니다. 안드로이드는 작은 스크린 사이즈를 가지는 모바일 폰을 위주로 개발되었고, 크롬은 10인치 가량의 큰 스크린 사이즈를 가지는 넷북을 위해 적합하게 개발되어 서로 충돌하지 않는다고 했습니다. 하지만 크롬 OS가 공개되기전 이미 몇몇 PC 제조사들이 안드로이드 넷북을 개발하여 출시했습니다. 물론 구글이 말한대로 현재의 안드로이드는 작은 스크린 크기를 가지는 장치들에 적합하기 때문에 출시된 넷북들은 아직 쓸모있는 수준이 못되었습니다. 가능성만을 살짝 보여주었을 뿐이지요. 그래도 안드로이드 기반의 넷북 개발에 들어간 업체들은 크롬OS가 신경쓰일 수 밖에 없었습니다.

chromeos

마침내 크롬OS가 공개되었고 그동안의 우려는 깨끗이 사라졌습니다. 크롬OS는 ‘웹브라우저가 OS였고 웹페이지가 애플리케이션’이었습니다.

새로운 형태의 애플리케이션 프레임워크나 API가 존재하는 운영체제가 아니었기에 충돌할 부분은 별로 없었습니다. 이 새로운 운영체제는 장기적으로 구글이 클라우드 컴퓨팅 시장으로 가고자 하는 비전을 명확히 보여주었습니다. 하지만 각광을 받고 있는 안드로이드와는 달리 당장은 틈새 시장을 위한 제품으로 윈도우즈와 인텔이 장악하고 있는 시장과 산업 구조에 큰 영향을 주기는 힘들것 같습니다. 하지만 앞으로는 어떨까요?

크롬OS를 공개할때 구글의 창업자인 세르게이 브린은 공식 발표 이후에 “안드로이드와 크롬OS는 시간이 지나며 서로 수렴하게 될 것이다”고 말을 했습니다. 이것은 폰이 점점 PC를 닮아가고 있고 PC가 점점 이동성과 연결성이 중요해지고 있다는 흐름과도 맞아 떨어집니다. 또한 두 프로젝트에 모두 리눅스와 웹킷(WebKit)이 사용되니 가능성은 충분하죠.

하지만 현재는 전혀 다른 두개의 프로젝트로 관리되고 있고 언제쯤 이 두개의 프로젝트가 합쳐질수 있을지, 기술적으로 가능할지, 뚜렷한 목표가 있는지에 대해서는 아직 알수가 없습니다. 언젠가 이 두개가 만났을때의 그 가능성에 대해서는 많은 기대와 상상을 하게 됩니다. 저는 안드로이드에 대해서 ‘모바일 컴퓨팅도 클라우드로 간다. 그 흐름에 가장 적합한 플랫폼이 안드로이드이며 남보다 앞장서 갈것이다”라고 항상 이야기를 하는데 그 길에서 크롬 OS와 만나게 될것 같습니다.

‘왜 애초에 하나의 궁극적인 플랫폼을 내놓지 않았는가’에 대해서는 웹에 기반한 구글의 소프트웨어 개발 방식이 잘 들어가 있다고도 볼 수 있습니다. 지구를 지배할 궁극의 플랫폼을 개발하는데는 5년이 걸릴지 10년이 걸릴지 모릅니다. 대신 일단 불완전하더라도 제품을 내어놓고 하나둘씩 발전시켜 나아가는 방식을 구글은 운영체제에도 적용하고 있네요. 구글맵이 처음 나왔을 때 웹에서 지도 정보를 검색하는 것 정도로 봤지, 지금 처럼 턴바이턴 내비게이션 회사들을 한방에 몰아세울지 생각도 못했습니다. 안드로이드와 크롬OS가 발전하여 하나가 되는 것은 먼 훗날일지 모르겠지만 큰 혁신이 될 것이라는 것은 짐작할 수 있습니다.

요즈음의 안드로이드로 돌아와보면, 안드로이드는 폰을 위한 플랫폼이라고 했는데 그 부분은 이제 상당 부분 완료가 되어가고 있습니다. 안드로이드는 단계적으로 다른 형태의 장치를 지원해가고 있는데 2.0 버전에서 나온 결과물을 봤을때 내년 안드로이드 3.0 에서는 공식적인 형태의 안드로이드 MID가 출현할 수 있을 것 같습니다. 루머에 의하면 다음 버전의 안드로이드는 국내 제조사와 작업하고 있다는 이야기도 있으니 더 기대가 됩니다.


M3
- MOF(Meta Object Facility)
- M2 수준에 속한 메타 모델을 정의하는 메타메타 모델

M2
- UML 기반 설계를 가능케하는 모델 요소를 정의하는 메타 모델

M1
- 사용자 모델을 도식화하는 모델 계층

M0
- 런타임 인스턴스 계층
- 모델이  코드를 생성하고, 그것을 실행하는 단계

 

[출처] 한국IBM

 

I. UML 2.0 개정의 개요

. 머리말

UML 2.0은 모델 중심의 방식을 위해 존재한다. 스케치 툴로서 사용하고자 하는 사람들도 UML 1 처럼 비공식적으로 사용할 수 있다. 언어의 룩앤필도 별로 변경되지 않았다.
하지만 MDD에서는 이제 표준화 방식으로 사용할 수 있다. UML 2.0은 정확성이 향상되었다. 완전히 자동화된 코드 생성 기능을 사용할 수 있다.
언어 구조는 모듈식과 점진적은 방식으로 채택하도록 구성되었다. 관심 있는 언어의 일부를 공부하고 나머지는 무시해도 된다. 경험과 지식이 늘어날수록 새로운 기능을 선택적으로 사용할 수 있다. 순응성 정의도 상당히 간단해져서 보조 툴들간 상호운용성과 다양한 벤더들의 툴들간 상호 운용성이 향상되었다.
새롭게 추가된 부분은 얼마 안된다. (언어가 팽창되는 것을 방지하기 위해서이다.) 그리고 이 모든 것들은 실제로 매우 크고 복잡한 시스템을 모델링 할 수 있는 반복 원리에 따라 디자인되었다. 특히, 소프트웨어 아키텍쳐, 복잡한 시스템 인터랙션, 플로우 기반 모델이 확장되어 비즈니스 프로세스 모델링과 시스템 엔지니어링 같은 애플리케이션에 이상적으로 쓰이도록 변모하였다.
언어 확장 메커니즘도 단순하게 재구성되었다. UML에 기반하여 도메인 스팩의 언어들을 정의할 때 보다 직접적인 방식을 사용할 수 있다. 이러한 언어들은 UML 툴과 전문성을 활용할 수 있다는 장점이 있다.
전체적으로 볼 때, 고급의 소프트웨어 시스템을 보다 빠르고 신뢰성 있게 구현할 수 있는 차세대 모델링 언어가 되었다. 중요한 것은, 개별 컴포넌트들이 큰 규모에 통합될 때 하드웨어 디자인에서 발생하는 단계들과 견줄 수 있는 고급 레벨의 프로그램 디자인이란 점이다

 

. UML 2.0의 정의

- 보다 수준 높은 자동화를 실행할 수 있는 정확한 언어 정의

. UML 1 개정의 이유

- MDD 툴과 메소드를 보다 잘 지원하기 위함

- 전통적인 CASE 툴 보다 한층 더 수준 높은 자동화를 지원하는 UML 기반의 툴 필요성

- 수준 높은 자동화를 지원하기 위해서는 원래 표준보다 더 정확한 방식으로 UML을 정의해야함

- 웹 기반 애플리케이션과 SOA등 신기술의 등장

 

II. UML 2.0의 향상된 특징

. UML 2.0의 주요 기능

기능

내용

정확한 언어 정의

MDD에 필요한 고급 자동화를 지원

모델의 모호함과 부정확성을 없애고 프로그램이 모델을 변형 및 조작을 가능케함

향상된 언어 구조

사용자가 언어에 보다 쉽게 접근할 수 있고 툴들 간 내부 작동을 활성화 할 수 있는 모듈식

규모가 큰 시스템의 모델링 향상

현대 시스템은 더욱더 복잡해지고 있는 추세=>이를 지원하기 위해 유연한 새로운 계층 기능이 언어에 추가되어 소프트웨어 모델링을 지원

도메인 스팩의 특성화 지원 향상

" 확장" 메커니즘 이용

기본적인 언어가 보다 정확하고 단순해지도록 정리되었음

다양한 모델링 개념들의 정리, 개념화, 정의

보다 단순하고 일관성 있는 언어

중복된 개념을 제거하고, 많은 정의들을 정리하고, 텍스트 정의와 예제를 추가함

. UML 2.0의 상세 설명

1). 정확도

- 초기 소프트웨어 모델링 언어는 비공식적으로 정의=>사람마다 다르게 해석

- 대부분의 모델링 언어들이 문서화나 설계에만 사용되고 상세한 부분은 구현시 기술함

이러한 모호함을 줄이기 위해 UML 첫 표준 정의가 메타모델(metamodel)을 사용하여 정의

- 메타모델은 UML의 한 요소를 사용하여 정의되었고 Object Constraint Language (OCL)로 작성된 정식 제약으로 보완

이렇게 조합하여 UML의 추상 신택스에 대한 공식 스팩을 선보임.

 

메타모델 : 각 UML 모델링 개념의 특징과, 다른 모델링 개념들과의 관계를 정의하는 모델

UML 클래스 다이어그램에서 정의된 개념들로 구성된 UML의 하위 세트를 Meta-Object Facility (MOF)라고 한다. 이 하위세트는 다른 모델링 언어를 정의하는데도 사용

이것은 실제 표기법이나 구체적 신택스 (텍스트와 그래픽)와 무관하기 때문에 모델을 표현하는데 사용

다시 말해서 이것은 해당 모델이 잘 구성되었는지 여부를 결정할 때 사용할 수 있는 규칙 세트를 정의한 것.

 

- UML 2.0에서 정확도를 향상시키기위해 추가한 기능

기능

내용

메타모델 인프라의 리팩토링

추상적인 모델링 개념과 패턴들로 구성하여 의미와 규칙을 명확히 표현

신택스와 의미를 개별적으로 정의함

잘 정리된 개념들은 다양한 방식들로 조합되어 보다 복잡한 사용자 레벨의 모델링 개념들을 만듬

확장되고 보다 정확해진 의미 설명

UML 2.0 스팩은 의미를 강조

분명하게 정의된 역할 의미

UML 2.0 스팩은 원 버전의 심각한 의미 차이를 명확히 함

런타임 시 링크와 인스턴스의 구조적 의미

구조와 작동의 관계

현재 UML의 모든 고급 작동 형식에서 공유되고 있는 의미의 기초 또는 일상성 모델(스테이트 머신, 액티비티, 인터랙션)과 잠재적인 미래 모델. 또한 다양한 형식을 사용하여 표현되는 객체의 작동은 서로 인터랙팅 하는지를 확인

그림 1. UML 2.0 의미 구조

 

2). 새로운 언어 아키텍쳐

- 언어의 복잡성 문제를 다루기 위해 UML 2.0은 언어(표 1) 모듈을 선택적으로 사용할 수 있는 방식으로 구성

- 그림 2는 공유 개념들(클래스와 관련 개념)로 이루어진 기초로 구성하고, 그 위에는 하위 언어 또는 언어 단위의 모음들이 수직적으로 구성함

- 수직적 언어 단위들은 최대 세 가지 레벨들로 구성하고 이 레벨들은 아래 레벨에서 사용했던 것에 더 많은 모델링 기능을 추가함


그림 2. UML 2.0의 언어 구조

언어 단위

목적

Actions

정의가 잘된 액션들의 (기본) 모델링

Activities

데이터와 제어 흐름 작동 모델링

Classes

기본 구조들의 (기본) 모델링

Components

컴포넌트 기술을 위한 복잡한 구조 모델링

Deployments

전개 모델링

General Behaviors

일반적인 동작 의미 기초와 시간 모델링 (기본)

Information Flows

추상 데이터 흐름 모델링

Interactions

객체간 동작 모델링

Models

모델 구조

Profiles

언어 커스터마이징

State Machines

이벤트 중심의 동작 모델링

Structures

복잡한 구조 모델링

Templates

패턴 모델링

Use Cases

비공식적인 동작 요구사항 모델링

1. UML 2.0의 언어 단위

 

3). 호환성

- 호환성의 정의와 구조도 UML 2.0에서 매우 단순해짐

- UML 2.0에서, 단 세 개의 호환성 레벨만 정의

- 계층적 언어 단위 레벨에 순응하는 것은 0으로 표시.

- 레벨(n)의 모델이 더 높은 레벨(n+1)에 있는 모델들에도 호환되도록 정의

네 가지 유형의 호환성이 정의

·  추상 신택스 호환

·  구체적 신택스(UML 표기법) 호환

·  추상/구체적 신택스 호환성

·  추상/구체적 신택스에 대한 호환과 다이어그램 교환 표준[OMG03b]에 대한 호환

 

4). 대규모 시스템 모델링 기능

- 대부분의 새로운 모델링 기능들은 기존 기능들의 단순한 확장일 뿐이고, 이것은 대규모의 소프트웨어 시스템을 모델링 하는데 사용됨

- 해당 유형의 모델 엘리먼트들을 조합하여 단위로 만들고 다음 추상화 레벨에서 같은 방식으로 조합

프로그래밍 언어의 프로시저가 다른 프로시저 안에서 중첩되는 방식과 비슷

다음 모델링 기능들은 위에 설명한 방식으로 확장됨.

  • 복잡한 구조(Complex structures)
  • 액티비티(Activities)
  • 인터랙션(Interactions)
  • 상태 머신(State machines)

위 세가지 요소는 UML 2.0에서 거의 90% 이상을 차지.

 

5). 복잡한 구조(Complex structures)

- 다양한 아키텍쳐 디스크립션 언어들에 기반하고 그래프로 개념을 나타냄

- 한 개 이상의 포트(port)를 갖고 있는 파트(part)라고 하는 기본 구조적 노드들은 커넥터(connector)라고 하는 통신 채널을 통해 서로 연결

- 자신의 포트를 갖고 있는 더 높은 레벨 안에서 캡슐화 되어 다른 상위 레벨에 조합됨(그림3)


그림 3. 복잡한 구조 모델링 개념
  그림 3에서 /a:A 파트와 /b:B 는 파트 /c:C 내에서 중첩된다. 이것은 합성 구조 클래스 C의 인스턴스를 나타냄.

- 모두 포트, 파트, 상호연결 등의 개념을 갖고 있고 이 세 가지 기본 개념을 반복적으로 적용하는 것으로 임의의 복잡한 소프트웨어 아키텍쳐를 모델링이 가능함

 

액티비티(Activities)

다양한 종류의 흐름들을 모델링하는데 사용

신호(signal)나 데이터(data) 흐름 뿐만 아니라, 알고리즘 (algorithmic) 흐름 또는 절차적(procedural) 흐름을 모델링

UML 2.0은 상태 머신 기초를 훨씬 더 일반적인 의미로 바꾸어 그 모든 제한사항을 제거함

다른 액티비티들과 이들을 결합하여 보다 복잡한 액티비티를 구성

인터랙션(Interactions)

보다 확장된(고급 레벨의) 시퀀스에서 반복될 수 있는 재사용 시퀀스 기능

복잡한 시스템의 인터랙션을 표현하는 다양한 복잡한 제어 흐름의 모델링 기능(반복적인 연속 발생, 대안 실행 경로, 동시성, 순서와 무관한 실행 등)

그림 4. 복잡한 인터랙션 모델 참조

상태 머신(State machines)

변환 엔트리와 변환 종료점을 분명히 묘사

재사용 가능한 개별적인 상태 머신 스팩에 의해 그 상태의 내부 분해를 정의


그림 4. 복잡한 인터랙션 모델
그림 4는 확장된 인터랙션 모델을 묘사하고 있다. 이 경우, ATMAccess 인터랙션은 CheckPIN 이라고 하는 저수준 트랜잭션을 처음으로 호출한다. 나중에 발생하는 인터랙션은 매개변수를 갖고 있다. (이 경우, 무효 PIN이 트랜잭션이 취소되기 전에 입력될 수 있는 회수). 그 후, 클라이언트는 어떤 종류의 인터랙션이 필요한지, DispenseCash 인터랙션이나 PayBill 인터랙션중 어떤 것을 수행할지를 지정하는 비동기식 메시지를 보낸다.

 

6).언어 부분의 기능들

액션과 액티비티

액션의 개념적 모델은 데이터 흐름과 제어 흐름 컴퓨팅 모델을 모두 수용

액션과 액티비티에 대한 일반적인 문법 및 의미 구조를 제공

전체적인 단순함과 명확성에 기여

템플릿(Templates)

UML 2.0의 템플릿 메커니즘은 분류자, 연산, 패키지로 제한

컴포넌트 기반 디자인 개념(Component-based design concepts)

UML 2.0에서 컴포넌트는 일반적인 클래스의 특별한 경우로서 정의

하위시스템들도 컴포넌트 개념 중에 단지 특별한 경우

의미와 표기법 스팩도 강화

각 메타클래스 스팩에는 의미상의 변이 포인트, 표기법 옵션, UML 1 스팩과의 관계 등을 분명히 정의

 

+ Recent posts