2009년 개발 연대기: JavaScript가 서버로 가고 스마트폰이 국내에 들어오다
Node.js와 Go, ECMAScript 5, Android의 확장, MongoDB, Windows 7, 그리고 iPhone 국내 출시와 전자정부 표준프레임워크 공개로 2009년의 개발 흐름을 살펴봅니다.
2009년에는 앞서 등장한 플랫폼 위에서 새로운 개발 방식이 갈라져 나왔다. Chrome의 V8 엔진은 브라우저를 벗어나 Node.js의 실행 기반이 됐고, Google은 대규모 소프트웨어와 동시성 문제를 다루기 위한 언어 Go를 공개했다. ECMAScript는 10년 만에 주요 개정판을 내놓았으며, MongoDB는 관계형 테이블과 다른 문서 중심의 데이터 모델을 제시했다.
모바일에서는 Android가 1.5, 1.6, 2.0으로 빠르게 갱신되며 여러 화면 크기와 통신 방식, 기기 기능을 받아들였다. 국내에서는 WIPI 탑재 의무가 4월 해제됐고 11월 28일 iPhone이 정식 출시됐다. 같은 해 전자정부 표준프레임워크도 공개되며 공공 소프트웨어 개발의 공통 기반을 마련하기 시작했다.
2009년을 보여주는 장면
| 분야 | 주요 변화 | 개발자에게 생긴 의미 |
|---|---|---|
| 서버 JavaScript | Node.js 공개와 JSConf EU 발표 | JavaScript로 비동기 네트워크 서버를 작성하는 실행 환경이 등장 |
| 프로그래밍 언어 | Go 오픈소스 공개 | 정적 타입·네이티브 컴파일과 가벼운 동시성 모델을 함께 추구 |
| 웹 언어 표준 | ECMAScript 5 승인 | 엄격 모드, JSON, 객체·배열 API 등 브라우저 구현의 공통 기준 확대 |
| 모바일 | Android 1.5·1.6·2.0과 NDK | 기기 종류와 API가 늘고 Java 외 네이티브 코드 활용 경로도 열림 |
| 데이터베이스 | MongoDB 1.0 공개 | JSON과 닮은 문서 모델과 수평 확장을 내세운 NoSQL 선택지가 등장 |
| 데스크톱 | Windows 7 출시 | Vista 이후 호환성과 성능을 다듬은 새 Windows 배포 기준이 형성 |
| 국내 모바일 | WIPI 의무 해제와 iPhone 출시 | 세계 앱 생태계가 국내 개발자와 사용자에게 직접 연결되기 시작 |
| 국내 공공 개발 | 전자정부 표준프레임워크 공개 | 공공 정보시스템의 공통 개발 기반과 재사용 컴포넌트가 공개됨 |
Node.js, JavaScript를 비동기 서버의 언어로 옮기다
Ryan Dahl은 2009년 Node.js를 공개하고 11월 베를린에서 열린 JSConf EU에서 이를 발표했다. 당시 소개 제목은 ‘Node.js, Evented I/O for V8 JavaScript’였다. Google이 전년도에 공개한 V8 JavaScript 엔진에 이벤트 루프, 스레드 풀, HTTP 파서를 결합해 서버 프로그램을 만드는 실행 환경이었다.
일반적인 서버는 요청마다 스레드나 프로세스를 할당하거나, 파일과 네트워크 작업이 끝날 때까지 실행 흐름을 기다리는 방식으로 작성되는 경우가 많았다. Node.js는 입출력 결과를 기다리는 동안 다른 작업을 처리하고, 결과가 준비되면 콜백으로 이어가는 비동기·이벤트 중심 방식을 전면에 내세웠다.
const http = require("http");
http.createServer((request, response) => {
response.end("Hello from 2009");
}).listen(8080);
JavaScript는 브라우저의 화면 동작을 작성하는 언어라는 인식이 강했지만, Node.js는 같은 언어로 네트워크 서버까지 만들 수 있음을 보여줬다. V8의 빠른 실행 속도와 JavaScript의 단일 스레드 이벤트 모델은 많은 동시 연결을 다루는 서비스에 어울리는 조합으로 제시됐다.
그러나 2009년의 Node.js는 초기 프로젝트였다. 첫 구현은 Linux와 Mac OS X를 중심으로 했고 API도 안정되지 않았다. 패키지 관리자 npm은 2010년에 등장했으므로, 거대한 패키지 생태계까지 2009년의 성과로 돌리는 것은 맞지 않는다. 이 해에는 서버 측 JavaScript의 새로운 설계가 공개되고 개발자 공동체에 소개됐다는 점이 핵심이다.
Go, 동시성과 대규모 개발을 언어 설계에 담다
Google은 11월 10일 Go 프로젝트를 오픈소스로 공개했다. Robert Griesemer, Rob Pike, Ken Thompson이 2007년에 설계를 시작했고, 이후 Russ Cox와 Ian Lance Taylor 등이 컴파일러와 표준 라이브러리 개발에 참여했다.
Go는 C와 C++이 맡던 시스템 프로그래밍 영역을 겨냥하면서도 더 단순한 문법, 가비지 컬렉션, 빠른 컴파일을 추구했다. 정적 타입과 네이티브 코드 생성 방식을 사용하면서 goroutine과 channel로 여러 작업이 함께 진행되는 프로그램을 비교적 간결하게 표현하려 했다.
go fetch(url, results)
message := <-results
Go가 겨냥한 문제는 실행 속도만이 아니었다. 코드베이스와 개발 조직이 커질 때 빌드 시간이 길어지고 의존 관계가 복잡해지는 문제, 네트워크 서버에서 많은 작업을 동시에 조정해야 하는 문제를 언어와 도구 설계에서 함께 다루려 했다.
다만 2009년 공개판은 완성된 제품이 아니었다. 지금의 통합 go 명령도 없었고, 컴파일과 링크에 별도 명령을 사용했으며 구현과 문법이 계속 바뀌었다. 호환성을 약속한 Go 1.0은 2012년에 출시된다. 2009년은 새 언어의 방향과 작동하는 초기 구현이 공개된 시점이다.
ECMAScript 5, 멈춰 있던 JavaScript 표준을 다시 움직이다
Ecma International은 12월 3일 ECMA-262 제5판을 승인하고 12월 15일 이를 발표했다. 1999년 제3판 이후 10년 만의 주요 표준 개정이었다. 대규모 변경을 추진했던 ECMAScript 4 논의는 합의에 이르지 못했고, 기존 웹과의 호환성을 중시한 ECMAScript 3.1 작업이 제5판으로 이어졌다.
ECMAScript 5에는 오류를 조용히 넘기던 일부 동작을 제한하는 엄격 모드, JSON.parse와 JSON.stringify, 객체 속성을 세밀하게 정의하는 Object.defineProperty, 배열의 map, filter, reduce 같은 메서드가 포함됐다. 언어의 완전히 새로운 형태보다는 이미 웹에서 필요성이 확인된 기능과 구현 간 차이를 표준으로 정리하는 성격이 강했다.
표준 승인과 브라우저 지원 완료는 같은 사건이 아니다. 기존 브라우저가 ECMAScript 5의 모든 기능을 즉시 구현한 것은 아니어서 개발자는 기능 감지와 호환성 코드를 계속 고려해야 했다. 그럼에도 JavaScript가 브라우저와 서버 양쪽에서 더 큰 프로그램을 맡기 시작한 시기에 공통 언어 기준이 다시 전진했다.
Android, 하나의 기기에서 여러 형태의 기기로
Android는 2009년에 여러 차례 SDK를 갱신했다. 4월의 Android 1.5 Cupcake는 소프트웨어 키보드와 홈 화면 위젯 등을 도입했고, 9월 15일 공개된 Android 1.6 Donut SDK는 CDMA와 더 다양한 화면 해상도를 지원했다. 하나의 초기 단말기 규격에서 여러 이동통신망과 화면 크기로 확장하려는 변화였다.
10월 27일에는 Android 2.0 Eclair SDK가 공개됐다. 계정과 연락처 동기화, Bluetooth, 개선된 카메라와 화면 지원을 위한 API가 추가됐다. 2009년 말에는 1.5, 1.6, 2.0을 사용하는 기기가 함께 나오기 시작해 개발자가 API 수준과 화면 크기별 호환성을 시험해야 했다.
7월에는 첫 Android Native Development Kit, NDK도 제공됐다. 앱 전체를 C나 C++로 작성하는 도구라기보다, 계산량이 많거나 기존 네이티브 코드가 필요한 일부 기능을 Java 앱 안의 공유 라이브러리로 넣는 수단이었다. 9월의 1.6 NDK는 OpenGL ES 1.1 접근을 지원해 게임과 그래픽 프로그램의 선택지를 넓혔다.
Android의 빠른 확장은 기회를 늘리는 동시에 파편화 문제를 드러냈다. 서로 다른 API 수준과 화면, 제조사별 단말기를 지원하려면 에뮬레이터와 실제 기기에서 더 넓은 시험이 필요했다. 개방형 플랫폼의 다양성이 개발 비용과 함께 나타나기 시작한 것이다.
MongoDB 1.0, 문서를 그대로 저장하는 데이터 모델
MongoDB는 2009년 8월 1.0을 정식 공개했다. 초기 공개판 0.8은 2월에 나왔지만 1.0 일반 제공 시점은 8월 27일이므로 두 날짜를 구분할 필요가 있다. 개발사 10gen은 원래 클라우드 애플리케이션 플랫폼을 만들다가 그 기반 데이터베이스를 독립 제품으로 발전시켰다.
MongoDB는 행과 열로 구성된 테이블 대신 BSON 문서를 저장했다. 애플리케이션의 객체와 닮은 중첩 구조와 배열을 한 문서에 담을 수 있고, 모든 문서가 완전히 같은 필드를 가질 필요도 없었다. 웹 애플리케이션의 빠른 데이터 구조 변경과 여러 서버에 데이터를 나누는 확장 방식을 주요 용도로 삼았다.
이 무렵에는 MongoDB뿐 아니라 CouchDB, Cassandra 같은 비관계형 데이터베이스가 함께 주목받으며 ‘NoSQL’이라는 표현이 퍼졌다. 이것은 SQL이나 관계형 데이터베이스가 불필요해졌다는 뜻이 아니었다. 조인, 트랜잭션, 일관성보다 유연한 문서 구조나 분산 확장을 우선하는 작업에 별도의 선택지가 생겼다는 의미에 가까웠다.
초기 MongoDB는 이후 버전이 제공하는 기능과 안정성을 모두 갖춘 상태가 아니었다. 따라서 2009년을 문서형 데이터베이스가 관계형 데이터베이스를 대체한 해로 볼 수는 없다. 개발자가 데이터의 형태와 확장 요구에 따라 저장 방식을 다시 선택하기 시작한 시기였다.
Windows 7, 데스크톱 개발 환경의 전환
Microsoft는 7월 22일 Windows 7의 RTM을 발표했고 10월 22일 전 세계에 일반 판매를 시작했다. 개발 완료와 일반 사용자의 구매 가능 시점이 다른 만큼 출시 날짜를 말할 때에는 두 단계를 구분해야 한다.
Windows 7은 Windows Vista의 드라이버 모델과 보안 구조를 이어받으면서 성능, 사용자 인터페이스, 하드웨어 호환성을 다듬었다. 새 작업 표시줄, 멀티터치 지원, 라이브러리, 개선된 사용자 계정 컨트롤이 제공됐고 64비트 Windows의 보급도 점차 늘었다.
개발 조직에는 새 운영체제 지원과 함께 Vista·XP 호환성 시험이 계속 필요했다. 기업 환경에서는 Windows Server 2008 R2, DirectAccess, BranchCache 같은 기능과 연계한 배포도 고려 대상이 됐다. Windows 7은 갑작스러운 API 단절보다 기존 Windows 생태계를 정리하고 다음 배포 기준을 만드는 성격이 강했다.
국내: iPhone 출시가 앱 생태계의 문을 열다
2008년 12월 결정된 WIPI 탑재 의무 해제는 2009년 4월 1일부터 시행됐다. 범용 모바일 운영체제를 탑재한 외산 단말기가 WIPI를 별도로 넣지 않고도 국내 이동통신망에 들어올 수 있는 제도적 조건이 마련됐다.
KT는 11월 28일 iPhone 3G와 3GS를 국내에 정식 출시했다. Apple이 첫 iPhone을 미국에서 판매한 지 약 2년 5개월 뒤였다. 당시 기사와 KT 발표에는 출시 전 예약 가입자가 4만 명을 넘었고, 개통 행사에 많은 사용자가 모였다는 기록이 남아 있다.
iPhone은 국내 사용자를 App Store의 앱과 직접 연결했다. 개발자는 이동통신사별 콘텐츠 규격과 유통 창구만이 아니라 세계 시장을 대상으로 같은 앱을 배포할 수 있었고, 사용자는 Wi-Fi와 데이터 요금제를 통해 웹과 앱 서비스를 이용했다. 이동통신사와 제조사도 자체 앱 장터와 스마트폰 전략을 서두르게 됐다.
그러나 출시 당일부터 기존 휴대전화 시장이 사라진 것은 아니다. 국내 스마트폰 가입자 비중은 당시 약 1% 수준이었고 데이터 요금, 무선망 품질, 위치정보 규제, 한글화된 서비스가 함께 해결돼야 했다. 2009년은 국내 스마트폰 대중화의 완성이 아니라 전환이 가시화된 출발점이었다.
전자정부 표준프레임워크, 공공 개발의 공통 기반을 공개하다
행정안전부와 정보화진흥원은 6월 1일 전자정부 표준프레임워크를 임시 공개하고 6월 24일 공식 발표했다. 1단계 구축에는 대형 IT 서비스 기업과 여러 중소기업이 공동으로 참여했으며, Java와 오픈소스 기술을 기반으로 실행환경·개발환경과 공통 컴포넌트를 마련했다.
당시 공공 정보시스템은 사업자마다 자체 프레임워크를 사용해 중복 개발이 발생하고, 특정 업체의 기술에 종속될 수 있다는 문제가 제기됐다. 표준프레임워크는 화면 처리, 업무 처리, 데이터 접근, 공통 서비스의 구조와 개발 도구를 공개해 사업 간 재사용성과 상호운용성을 높이려 했다.
첫해부터 모든 공공 사업에 의무 적용된 것은 아니다. 2009년 하반기 국가대표포털 등 일부 사업에 시범 적용하며 검증과 확산을 시작했다. 이후 버전에서 관리·운영 환경과 공통 컴포넌트가 계속 추가됐으므로, 2009년의 1.0은 장기간 발전할 공공 개발 기반의 첫 공개판으로 보는 것이 적절하다.
2009년의 의미
2009년에는 JavaScript의 역할이 브라우저 화면에서 서버와 언어 표준으로 넓어졌다. Node.js는 이벤트 중심 서버를 제시했고 ECMAScript 5는 오랫동안 정체됐던 공통 규격을 갱신했다. Go는 네트워크와 동시성, 대규모 코드 관리 문제를 새로운 언어 설계로 풀려 했다.
Android의 빠른 버전 확장과 국내 iPhone 출시는 모바일 앱 개발을 별도의 전문 영역으로 만들었다. MongoDB는 애플리케이션 구조에 가까운 문서 저장 방식을 내놓았고, 전자정부 표준프레임워크는 국내 공공 소프트웨어가 공유할 개발 기반을 공개했다.
이 해에 나온 기술들은 아직 거칠었다. Node.js에는 npm이 없었고 Go는 1.0 이전이었으며, Android 개발자는 빠르게 늘어나는 API 수준을 감당해야 했다. 그러나 언어, 데이터, 실행 환경, 유통 경로를 기존 방식과 다르게 조합할 수 있는 선택지가 분명히 늘어났다. 2010년에는 iPad와 Windows Phone 7, npm, OpenStack, AngularJS 등이 등장하며 모바일·웹·클라우드의 경쟁이 더 구체화된다.
참고 자료
- JSConf EU 2009, Ryan Dahl: Node.js, Evented I/O for V8 Javascript
- JSConf EU 2009, Video: Node.js by Ryan Dahl
- Node.js, Making Node.js Downloads Reliable
- The Go Blog, Go: one year ago today
- The Go Blog, Go Turns 10
- Ecma International, Ecma International approves major revision of ECMAScript
- Ecma International, ECMA-262, 5th edition, December 2009
- Android Developers Blog, Android 1.6 SDK is here
- Android Developers Blog, Announcing Android 2.0 support in the SDK
- Android Developers Blog, Now available: Android 1.6 NDK
- MongoDB, MongoDB Evolved: Version History
- Microsoft, Microsoft Releases Windows 7 and Windows Server 2008 R2
- Microsoft, Windows 7 goes GA
- 전자신문, 아이폰, 28일 국내 공식 출시
- KT, KT, 28일 아이폰 개통 행사 가져
- 대한민국 정책브리핑, 수산업, 아이폰에서 길을 보다
- 공개SW 포털, 공개SW Governance v1.0
- 한국지능정보사회진흥원, 전자정부 표준프레임워크 관련 보도자료