2011년 개발 연대기: 웹은 실시간·3D로, 언어와 클라우드는 새 선택지로
Java 7, WebGL과 WebSocket, Kotlin과 Dart, Bootstrap, Cloud Foundry, iOS 5와 Android 4.0, 그리고 국내 스마트폰 2천만 시대를 통해 2011년의 개발 흐름을 살펴봅니다.
2011년에는 웹 브라우저가 문서와 화면 전환을 넘어 그래픽과 지속적인 양방향 통신을 직접 담당하기 시작했다. WebGL 1.0이 확정돼 플러그인 없이 GPU 가속 3D 그래픽을 그릴 수 있게 됐고, WebSocket 프로토콜은 브라우저와 서버가 하나의 연결에서 실시간으로 메시지를 주고받는 공통 규격을 얻었다.
프로그래밍 언어와 도구도 새로운 선택지를 제시했다. Java 7이 Oracle 인수 이후 첫 주요 Java 릴리스로 나왔고, JetBrains는 JVM용 언어 Kotlin을 발표했다. Google은 Dart를 공개했으며 Twitter 내부 도구에서 출발한 Bootstrap은 반복되는 웹 UI 제작을 표준화했다.
모바일에서는 iOS 5·iCloud·Siri와 Android 4.0이 기기와 서비스를 더 깊게 연결했다. 국내 스마트폰 가입자는 10월 2천만 명을 넘었고, 카카오톡은 출시 1년여 만에 가입자 1천만 명에 도달했다. 모바일 서비스는 실험적인 부가 채널이 아니라 대규모 운영을 전제로 해야 하는 주력 제품이 됐다.
2011년을 보여주는 장면
| 분야 | 주요 변화 | 개발자에게 생긴 의미 |
|---|---|---|
| Java | Java SE 7 출시 | 언어 문법과 파일·동시성 API가 개선되고 Oracle 주도의 새 배포가 시작됨 |
| 웹 그래픽 | WebGL 1.0 최종 명세 | 별도 플러그인 없이 브라우저에서 GPU 가속 3D를 표현할 길이 열림 |
| 실시간 웹 | WebSocket RFC 6455 | 폴링 대신 하나의 연결로 브라우저와 서버가 양방향 통신 가능 |
| 새 언어 | Kotlin과 Dart 공개 | JVM 생산성과 웹 애플리케이션을 각각 겨냥한 언어 실험이 시작됨 |
| 프런트엔드 | Bootstrap 1.0 공개 | 그리드·타이포그래피·UI 컴포넌트를 재사용하는 도구가 확산 |
| PaaS | Cloud Foundry 오픈소스 공개 | 여러 인프라에서 같은 방식으로 앱을 배포하려는 공개 플랫폼 등장 |
| 모바일 | iOS 5와 Android 4.0 | 클라우드 동기화와 휴대전화·태블릿 통합 API가 강화됨 |
| 국내 | 스마트폰 가입자 2천만 돌파 | 모바일 앱과 서버를 대규모 사용자 기준으로 설계해야 하는 시장 형성 |
Java 7, 오랜 간격 끝에 나온 새 Java
Java SE 7은 7월 28일 정식 출시됐다. 2006년 Java SE 6 이후 약 5년 만의 주요 릴리스였으며, Sun Microsystems 인수를 마친 Oracle의 관리 아래 처음 출시된 Java였다.
언어에는 다이아몬드 연산자를 이용한 제네릭 타입 추론, 문자열을 사용하는 switch, 숫자 리터럴의 밑줄, 여러 예외를 한 번에 처리하는 multi-catch가 추가됐다. try-with-resources는 파일이나 스트림처럼 사용 뒤 닫아야 하는 자원을 블록 종료 시 자동으로 정리했다.
try (BufferedReader reader = Files.newBufferedReader(path)) {
return reader.readLine();
}
라이브러리 측에서는 파일 시스템을 더 일관되게 다루는 NIO.2와 병렬 작업을 분할·결합하는 Fork/Join Framework가 포함됐다. invokedynamic 바이트코드 명령은 JVM 위의 동적 언어 구현이 호출을 최적화할 수 있는 기반을 제공했다.
그러나 프로젝트 Coin에서 논의된 모든 문법이나 Java 8의 람다식이 들어온 것은 아니었다. Java 7은 거대한 언어 변화보다 일상적인 코드의 불편을 줄이고 JVM과 라이브러리의 기반을 보강한 릴리스였다. 기업 시스템은 기존 Java 6 호환성과 애플리케이션 서버 지원 일정을 확인하며 점진적으로 옮겨갔다.
WebGL 1.0, 브라우저가 GPU에 접근하다
Khronos Group은 3월 3일 WebGL 1.0 최종 명세를 발표했다. WebGL은 OpenGL ES 2.0을 바탕으로 한 JavaScript API로, HTML canvas 안에서 그래픽 처리 장치의 가속을 이용해 2D와 3D 장면을 렌더링했다.
개발자는 정점과 셰이더 프로그램, 텍스처와 버퍼를 JavaScript에서 구성할 수 있었다. Flash나 Java 애플릿 같은 별도 플러그인 없이도 브라우저만으로 3D 게임, 제품 시각화, 지도, 과학 데이터 표현을 만들 수 있는 표준 기반이 생겼다.
WebGL은 높은 수준의 장면 구성 도구가 아니라 비교적 낮은 수준의 그래픽 API였다. 행렬 계산, 셰이더, 렌더링 순서를 직접 다루는 부담이 컸고 브라우저·GPU 드라이버별 호환성도 확인해야 했다. 이후 Three.js 같은 라이브러리가 이 복잡성을 감싸며 웹 3D 개발의 진입 장벽을 낮춘다.
보안 우려도 있었다. Microsoft는 당시 WebGL 구현이 GPU 드라이버의 취약점을 웹에 노출할 수 있다며 Internet Explorer에서 지원하지 않았다. 최종 명세가 나왔다고 해서 모든 브라우저에서 즉시 같은 수준으로 사용할 수 있었던 것은 아니다.
WebSocket, 폴링을 대신할 양방향 통신 규격
IETF는 12월 WebSocket Protocol을 RFC 6455로 발행했다. 브라우저에서 서버의 새 데이터를 받으려면 주기적으로 HTTP 요청을 보내거나 연결을 길게 유지하는 우회 방식이 사용됐는데, WebSocket은 하나의 TCP 연결에서 양쪽이 독립적으로 메시지를 보낼 수 있게 했다.
연결은 HTTP Upgrade 요청으로 시작한다. 서버가 전환에 동의하면 이후에는 텍스트·바이너리 메시지를 프레임 단위로 주고받는다. HTTP 헤더를 매 메시지마다 반복하지 않아 채팅, 공동 편집, 게임, 시세처럼 변경이 자주 일어나는 서비스의 지연과 부하를 줄일 수 있었다.
const socket = new WebSocket("wss://example.com/chat");
socket.onmessage = (event) => {
console.log(event.data);
};
WebSocket 아이디어와 브라우저 구현은 RFC 이전부터 존재했지만 초기 초안 간 호환성과 보안 문제로 프로토콜이 바뀌었다. 2011년 말 RFC 6455가 공통 기준을 정한 뒤에도 구형 브라우저와 프록시 지원을 고려해야 했으며, Socket.IO 같은 라이브러리는 WebSocket을 쓸 수 없을 때 다른 전송 방식으로 대체했다.
Kotlin, JVM의 생산성을 다시 설계하다
JetBrains는 7월 19일 JVM Language Summit에서 Kotlin을 처음 발표했다. IntelliJ IDEA를 개발하며 여러 언어와 대규모 Java 코드베이스를 다뤄온 경험을 바탕으로, Java와 함께 사용할 수 있으면서 더 간결하고 안전한 정적 타입 언어를 만들려는 프로젝트였다.
발표 당시 Kotlin은 외부에서 실제 제품에 사용할 만큼 성숙하지 않았고 문서로 설계 의견을 받는 단계였다. JetBrains는 컴파일러와 IDE 지원을 함께 개발하고 오픈소스로 공개할 계획을 밝혔다. 첫 마일스톤은 2012년, 안정판 Kotlin 1.0은 2016년에 나온다.
초기 방향에는 널 가능성을 타입으로 구분해 흔한 null 오류를 줄이는 설계, 타입 추론, 확장 함수, Java 코드와의 상호 운용성이 포함됐다. 기존 JVM 라이브러리와 조직의 투자를 버리지 않으면서 언어 문법과 안전성을 개선하려는 접근이었다.
Kotlin을 2011년부터 Android의 대표 언어였다고 설명하면 시대를 앞당기는 셈이다. Google이 Android 공식 지원 언어로 발표한 것은 2017년이다. 2011년의 의미는 JVM 생태계를 떠나지 않고도 Java와 다른 언어 설계를 시도한 프로젝트가 공개됐다는 데 있다.
Dart, 웹을 위한 새 언어를 제안하다
Google은 10월 덴마크에서 열린 GOTO 콘퍼런스에서 Dart를 공개했다. Dart는 클래스와 선택적 타입을 갖춘 언어로, 큰 웹 애플리케이션을 구조화하고 도구가 코드를 분석하기 쉽게 만드는 것을 목표로 했다.
초기 Dart는 독립 가상 머신에서 실행하거나 JavaScript로 컴파일할 수 있도록 설계됐다. 브라우저에 Dart VM을 직접 넣는 가능성도 제시됐지만 일반 브라우저가 이를 채택한 것은 아니었다. 웹에서 사용하려면 JavaScript 변환과 실행 환경 호환성이 중요한 과제였다.
2011년의 Dart를 Flutter용 언어라고 부르는 것도 정확하지 않다. Flutter 프로젝트는 2015년에 공개된다. 이 시기의 Dart는 JavaScript가 커지는 웹 애플리케이션을 감당할 수 있는가라는 문제의식에서 나온 별도의 웹 언어 실험이었다.
Kotlin과 Dart는 모두 2011년에 발표됐지만 즉시 안정판이 되지 않았다. 새 언어의 발표, 초기 구현, 1.0 릴리스, 주요 플랫폼의 공식 채택은 서로 다른 사건이며 이후 연도에서 따로 살펴봐야 한다.
Bootstrap, 반복되는 웹 화면을 공통 부품으로
Twitter의 Mark Otto와 Jacob Thornton이 만든 Bootstrap은 8월 19일 오픈소스로 공개됐다. 처음에는 Twitter 내부 도구들의 화면과 프런트엔드 구현이 제각각인 문제를 줄이기 위한 ‘Twitter Blueprint’에서 출발했다.
Bootstrap 1.0은 그리드, 타이포그래피, 폼, 버튼, 표, 알림과 내비게이션 같은 CSS 규칙과 JavaScript 플러그인을 제공했다. 디자이너와 개발자가 공통 클래스 이름과 컴포넌트를 사용해 관리 화면이나 웹 서비스를 빠르게 구성할 수 있었다.
이때의 Bootstrap을 곧바로 모바일 우선 프레임워크라고 부르는 것은 맞지 않는다. 반응형 기능은 2012년 Bootstrap 2에서 추가됐고, 모바일 우선 원칙은 2013년 Bootstrap 3의 핵심 변화였다. 2011년에는 일관된 웹 UI 부품을 공개 패키지로 재사용하는 방식이 널리 알려지기 시작했다.
공통 디자인을 빠르게 적용할 수 있는 대신 기본 스타일을 그대로 사용한 사이트가 비슷해 보이는 문제도 생겼다. Bootstrap의 가치는 특정 모양만이 아니라 화면 요소를 이름 붙이고 조합하는 프런트엔드 설계 체계를 보급한 데 있었다.
Cloud Foundry, 애플리케이션 배포를 인프라에서 분리하다
VMware는 4월 Cloud Foundry를 발표하고 오픈소스로 공개했다. 개발자가 애플리케이션 코드를 밀어 넣으면 플랫폼이 실행 환경과 서비스 연결, 인스턴스 관리를 맡는 Platform as a Service를 특정 클라우드 사업자에 묶이지 않게 만들려는 프로젝트였다.
초기 Cloud Foundry는 Java, Ruby, Node.js 등을 지원하고 MySQL, MongoDB, Redis 같은 데이터 서비스를 애플리케이션에 연결했다. 개발자는 가상 머신과 웹 서버를 하나씩 구성하기보다 명령줄 도구로 앱을 배포하고 필요한 서비스의 정보를 환경에서 받아 사용할 수 있었다.
Heroku와 Google App Engine도 앱 중심 배포 경험을 제공했지만 각 사업자의 서비스에서 실행됐다. Cloud Foundry는 공개 코드를 자체 인프라나 여러 클라우드 위에 설치할 수 있다는 점을 내세웠다. 같은 애플리케이션 배포 경험을 인프라 공급자와 분리하려는 ‘오픈 PaaS’였다.
운영 자동화 도구 BOSH가 오픈소스로 공개된 것은 2012년이다. 따라서 2011년 Cloud Foundry에 이후의 운영 체계가 모두 갖춰졌다고 볼 수 없다. 초기 PaaS를 직접 설치하고 유지하는 일은 여전히 복잡했다.
iOS 5와 Android 4.0, 기기보다 생태계를 연결하다
Apple은 10월 4일 iPhone 4S와 iOS 5, iCloud를 함께 발표했다. iOS 5는 10월 12일 배포됐고 알림 센터, iMessage, Twitter 통합, 무선 동기화와 업데이트 기능을 제공했다. iCloud는 사진, 문서와 설정을 여러 Apple 기기에 자동으로 전달했다.
iPhone 4S에는 음성으로 질문하고 일정·메시지·검색 기능을 실행하는 Siri 베타가 들어갔다. 초기 Siri는 영어·프랑스어·독일어만 지원했고 iPhone 4S에 한정됐다. 음성 인터페이스의 가능성을 보여줬지만 언어와 지역, 네트워크 연결에 따른 제약도 컸다.
Google은 10월 18일 Android 4.0 Ice Cream Sandwich SDK를 발표했다. Android 3.x에서 태블릿용으로 나뉘었던 인터페이스를 휴대전화와 태블릿이 공유하는 하나의 UI 도구 체계로 통합하려 했다. NFC 기반 Android Beam, Wi-Fi Direct, 소셜·캘린더 API, 데이터 사용량 제어 등이 포함됐다.
두 플랫폼 모두 단말기 한 대의 기능보다 계정, 메시지, 콘텐츠, 주변 기기를 연결하는 방향으로 발전했다. 개발자는 로컬 앱 화면뿐 아니라 클라우드 동기화, 푸시 알림, 여러 기기에서의 상태 일관성을 제품 설계에 포함해야 했다.
국내: 스마트폰 2천만 명과 모바일 서비스의 대규모 운영
방송통신위원회 자료에 따르면 국내 스마트폰 가입자는 2009년 81만 명, 2010년 720만 명에서 2011년 10월 2천만 명을 넘었고 11월에는 2,134만 명에 이르렀다. iPhone 국내 출시 약 2년 만에 이동전화 이용자의 상당수가 스마트폰으로 옮겨간 것이다.
이 정도의 보급은 기업의 개발 우선순위를 바꿨다. 웹사이트만 제공하던 서비스도 iOS와 Android 앱, 모바일 웹을 함께 준비해야 했고, 위치·카메라·푸시 알림을 활용한 금융, 쇼핑, 지도와 미디어 서비스가 늘었다. 모바일 API와 인증 서버, 앱 버전별 호환성, 트래픽 급증에 대응하는 운영 역량이 중요해졌다.
카카오톡은 2011년 4월 가입자 1천만 명을 넘었고 11월에는 이모티콘을 도입했다. 단순 메시지 도구가 빠른 개선과 디지털 콘텐츠를 갖춘 서비스로 확장되기 시작했다. 주소록 기반 네트워크 효과가 커질수록 장애와 메시지 지연이 더 많은 사람의 일상에 영향을 미쳤다.
한편 2011년 7월 대규모 개인정보 유출 사고로 포털과 온라인 서비스의 보안 문제가 크게 드러났다. 많은 사용자를 확보하는 것만큼 비밀번호 저장, 접근 통제, 로그와 개인정보 처리 절차를 안전하게 설계하는 일이 중요하다는 경고였다.
2011년의 의미
2011년의 웹은 더 이상 서버가 만든 문서를 표시하는 환경에 머물지 않았다. WebGL은 GPU 그래픽을, WebSocket은 지속적인 양방향 통신을 브라우저의 표준 능력으로 끌어들였다. Bootstrap은 화면 구성 요소를, Cloud Foundry는 앱 배포 환경을 재사용 가능한 플랫폼으로 만들려 했다.
Java 7은 기존 기업 생태계를 점진적으로 개선했고 Kotlin과 Dart는 그 생태계와 웹 언어의 한계를 다른 설계로 풀려 했다. 두 언어가 훗날 Android와 Flutter에서 맡게 될 역할은 아직 정해지지 않았지만 새로운 선택의 출발점은 이 해에 놓였다.
국내에서는 스마트폰 가입자 2천만 명이 모바일 개발을 선택 사항에서 기본 채널로 바꿨다. 서비스가 성장하는 속도만큼 서버 확장, 장애 대응과 개인정보 보호의 책임도 커졌다. 2012년에는 TypeScript, Raspberry Pi, Docker의 전신 기술, Windows 8, Android 4.1과 함께 웹·모바일 개발 도구가 한층 더 체계화된다.
참고 자료
- Oracle, Java SE 7 End of Extended Support: Java 7 history
- Oracle, Java SE 7 Features and Enhancements
- Khronos Group, Khronos Releases Final WebGL 1.0 Specification
- IETF, RFC 6455: The WebSocket Protocol
- JetBrains, Hello World: Unveiling Kotlin
- JetBrains, Ten Years of Kotlin
- Dart, History of JS interop in Dart
- Bootstrap, Ten Years of Bootstrap
- Bootstrap, Bootstrap 3 released: two-year anniversary
- Cloud Foundry, Five Years of Cloud Foundry Foundation
- Cloud Foundry, VMC Everywhere
- Apple, Apple Launches iPhone 4S, iOS 5 & iCloud
- Android Developers Blog, Android 4.0 Platform and Updated SDK Tools
- 방송통신위원회, 2012년 방송통신 핵심과제
- 방송통신위원회, 2011년도 방송통신 연차보고서
- 대한민국 정책브리핑, SK커뮤니케이션즈 개인정보 유출 사고 관련 브리핑
- 카카오, 카카오톡 서비스 연혁
- 카카오, 카카오톡 가입자 1억 돌파 보도자료