2013년 개발 연대기: 컨테이너와 컴포넌트가 개발의 단위를 바꾸다
Docker의 공개 시연, React와 Android Studio의 등장, Bootstrap 3의 모바일 우선 전환, Compute Engine 일반 제공과 모바일 플랫폼 변화, 국내 LTE-A와 공공데이터법 시행으로 2013년의 개발 흐름을 살펴봅니다.
2013년에는 응용 프로그램을 만들고 실행하는 단위가 달라지기 시작했다. Docker는 운영체제 전체를 복제하는 가상 머신보다 가벼운 컨테이너를 개발자가 빌드하고 전달하는 흐름으로 묶었고, React는 화면을 재사용 가능한 컴포넌트의 조합으로 다루는 방식을 공개했다. 두 기술 모두 아직 초기 단계였지만 이후의 웹 개발과 인프라 운영에 큰 영향을 줄 출발점이었다.
개발 도구도 변했다. Google은 IntelliJ IDEA를 기반으로 한 Android Studio의 초기 프리뷰를 공개했고, Bootstrap 3는 모바일 화면을 예외가 아닌 기본값으로 삼았다. Google Compute Engine이 일반 제공 단계에 들어서면서 범용 가상 머신을 빌려 쓰는 클라우드 시장의 경쟁도 한층 뚜렷해졌다.
국내에서는 LTE-A 상용화로 이동통신 속도 경쟁이 이어졌고, 「공공데이터의 제공 및 이용 활성화에 관한 법률」이 시행되었다. 빠른 모바일 네트워크와 개방된 공공 데이터는 각각 새로운 서비스의 전달 경로와 재료를 넓혔다.
2013년을 보여주는 장면
| 분야 | 주요 변화 | 개발자에게 생긴 의미 |
|---|---|---|
| 실행 환경 | Docker 공개 | 애플리케이션과 실행 환경을 이미지로 묶어 전달하는 흐름의 출발 |
| 웹 UI | React 공개 | 상태에 따라 화면을 선언하고 컴포넌트를 조합하는 개발 방식 제시 |
| Android 도구 | Android Studio 초기 프리뷰 | Android 전용 IDE와 Gradle 기반 빌드 환경의 방향 공개 |
| 반응형 웹 | Bootstrap 3 정식 출시 | 모바일 우선 설계와 반응형 그리드를 기본값으로 채택 |
| 클라우드 | Google Compute Engine 일반 제공 | Google의 범용 가상 머신 서비스가 본격적인 상용 단계에 진입 |
| 모바일 OS | iOS 7과 Android 4.4 | 64비트 전환과 저사양 기기 지원이라는 서로 다른 과제 부각 |
| 국내 통신 | LTE-A 스마트폰 서비스 상용화 | 더 빠른 이동통신망을 전제로 한 고용량 모바일 서비스 확대 |
| 국내 데이터 | 공공데이터법 시행 | 공공기관 데이터의 개방과 민간 활용을 위한 법적 기반 마련 |
Docker, 실행 환경을 함께 운반하는 방법을 보여주다
Solomon Hykes는 3월 15일 PyCon에서 Docker를 공개 시연했다. Docker는 PaaS 기업 dotCloud의 내부 기술에서 출발했으며, 당시에는 0.x 버전의 젊은 오픈 소스 프로젝트였다. 안정된 Docker 1.0은 2014년에 출시되므로 2013년을 완성된 컨테이너 생태계의 해로 표현해서는 안 된다.
컨테이너 자체가 Docker와 함께 처음 발명된 것도 아니다. Linux에는 프로세스와 자원을 격리하는 namespaces와 cgroups가 있었고 LXC 같은 도구도 사용되고 있었다. Docker가 제시한 변화는 이러한 커널 기능 위에 애플리케이션의 파일 시스템과 의존성을 이미지로 만들고, 같은 명령 체계로 빌드·배포·실행하는 경험을 제공한 데 있었다.
FROM ubuntu
RUN apt-get update
CMD ["echo", "hello"]
개발자는 “내 컴퓨터에서는 동작한다”는 설명 대신 실행에 필요한 구성을 이미지에 기록할 수 있었다. 서버마다 설치 순서가 달라 생기는 차이를 줄이고, 완성된 이미지를 저장소를 통해 전달하는 방식도 가능해졌다. 다만 초기 Docker는 Linux 컨테이너를 다루는 도구였으며 보안 격리, 네트워크, 영구 저장소와 여러 호스트의 운영 문제를 모두 해결한 것은 아니었다.
Compose, Docker 1.0, OCI 표준, Kubernetes 같은 후대의 기술을 2013년 Docker에 소급해서는 안 된다. 이 해의 의미는 컨테이너가 대규모 운영의 표준이 되었다는 데 있지 않고, 개발자가 실행 환경을 코드와 가까운 산출물로 다루는 흐름이 공개적으로 시작되었다는 데 있다.
React, 화면을 상태의 결과로 선언하다
Facebook은 5월 JSConf US에서 React를 오픈 소스로 공개했다. Facebook 내부에서 News Feed 등에 사용하던 UI 라이브러리를 외부 개발자에게 연 것이다. 당시 웹 화면은 DOM을 직접 찾아 내용을 바꾸거나, 템플릿을 다시 그린 뒤 이벤트와 상태를 맞추는 코드가 복잡해지기 쉬웠다.
React는 상태가 주어졌을 때 어떤 UI가 보여야 하는지를 컴포넌트가 선언하도록 했다. 상태가 달라지면 React가 이전 결과와 새 결과를 비교해 필요한 DOM 변경을 적용했다. 이 접근은 화면의 한 부분을 데이터·표현·동작이 결합된 컴포넌트로 나누고 다시 조합하게 만들었다.
function Chronicle({ year }) {
return <h2>{year}년 개발 연대기</h2>;
}
JavaScript 안에 마크업과 비슷한 JSX를 적는 모습은 관심사 분리 원칙에 어긋난다는 반응도 불러왔다. 그러나 React가 말한 분리의 기준은 파일 형식보다 같은 UI 책임을 가진 코드였다. 데이터가 한 방향으로 흘러 화면을 갱신하는 모델도 복잡한 양방향 동기화를 줄일 가능성을 보여주었다.
2013년의 React는 지금의 전체 생태계와 같지 않았다. React Native, Hooks, Server Components는 아직 존재하지 않았고 라우팅이나 데이터 요청을 모두 해결하는 프레임워크도 아니었다. 이 시점에는 브라우저 UI를 만드는 새로운 라이브러리이자 실험적인 설계 방식으로 보는 것이 정확하다.
Android Studio, Android 개발을 위한 전용 작업장이 등장하다
Google은 5월 15일 Google I/O에서 Android Studio의 초기 액세스 프리뷰를 발표했다. JetBrains의 IntelliJ IDEA Community Edition을 바탕으로 Android 전용 기능을 더했고, Gradle 기반 빌드와 여러 화면 크기·언어·Android 버전의 레이아웃 미리보기를 주요 특징으로 제시했다.
이는 IDE와 명령행 빌드, 지속적 통합 환경이 같은 빌드 정의를 공유할 수 있는 방향을 보여주었다. 제품 변형과 서명, 의존성 같은 설정도 프로젝트의 빌드 파일에 더 체계적으로 기록할 수 있었다. IntelliJ의 코드 분석과 리팩터링 기능을 Android 개발 과정에 결합한 점도 중요했다.
그러나 발표 당시 Android Studio는 미완성 프리뷰였다. Google도 운영 중인 앱을 당장 옮길 필요가 없으며 기존 Eclipse 기반 도구를 계속 지원한다고 안내했다. 안정판 1.0은 2014년 12월에 나왔다. 따라서 2013년은 Eclipse가 즉시 사라진 해가 아니라, 이후의 공식 Android 개발 환경이 모습을 드러낸 해였다.
Bootstrap 3, 모바일 우선을 기본값으로 삼다
Bootstrap 3는 8월 19일 정식 출시되었다. 가장 큰 변화는 반응형 기능을 별도 선택지로 두지 않고 처음부터 포함한 모바일 우선 설계였다. 작은 화면을 기본으로 스타일을 작성한 뒤 미디어 쿼리로 더 큰 화면의 배치를 확장했다.
새 그리드 시스템은 화면 폭에 따라 xs·sm·md·lg의 네 구간을 제공했다. 개발자는 같은 콘텐츠를 휴대전화에서는 한 열로, 넓은 화면에서는 여러 열로 배치할 수 있었다. box-sizing: border-box의 전면 사용과 Glyphicons 포함, 구성요소 디자인 개편도 함께 이루어졌다.
반대로 오래된 브라우저 지원 범위는 줄었다. Internet Explorer 7과 Firefox 3.6 지원이 제거되었다. 이는 모든 환경을 같은 수준으로 끌고 가기보다 보급 중인 모바일 기기와 현대 브라우저에 개발 자원을 집중하려는 선택이었다. 모바일 웹이 데스크톱 사이트의 축소판이 아니라 설계의 시작점이 된 변화를 상징했다.
Compute Engine, Google의 범용 가상 머신이 일반 제공으로
2012년에 제한된 프리뷰로 공개된 Google Compute Engine은 2013년 12월 일반 제공 단계에 들어갔다. App Engine이 정해진 애플리케이션 실행 환경을 제공했다면, Compute Engine은 사용자가 Linux 가상 머신의 이미지·머신 크기·디스크·네트워크를 선택하는 IaaS였다.
일반 제공은 단순한 기능 공개보다 강한 의미를 가졌다. Google은 24시간 지원과 월 99.95% 서비스 수준 계약을 제시했다. 같은 해 5월에는 인스턴스 요금을 10분 최소 사용 이후 1분 단위로 계산하기 시작했다. 개발 조직은 AWS EC2 외에도 대규모 인프라 기업이 제공하는 범용 VM을 본격적으로 비교할 수 있게 되었다. 자동 지속 사용 할인은 2014년에 도입되므로 이 시기의 특징과 구분해야 한다.
그렇다고 2013년의 클라우드가 곧 컨테이너 중심이었다는 뜻은 아니다. Docker는 막 공개된 단계였고, 많은 시스템의 배포 단위는 여전히 가상 머신이었다. 이 해에는 VM을 빌려 쓰는 상용 클라우드의 성숙과 그 VM 안의 실행 환경을 더 작게 포장하려는 컨테이너의 초기 움직임이 나란히 나타났다.
iOS 7과 Android 4.4, 64비트와 저사양 지원
Apple은 9월 18일 iOS 7을 배포했다. 반투명 효과와 얇은 서체, 평면적인 아이콘을 사용한 전면적인 UI 개편이 눈에 띄었고 Control Center, AirDrop, 개선된 멀티태스킹과 자동 앱 업데이트가 추가되었다. 개발자는 기존 앱의 아이콘·레이아웃·상태 표시줄과 새로운 시각 체계의 조화를 다시 점검해야 했다.
iPhone 5s의 A7 프로세서와 함께 64비트 전환도 시작되었다. iOS 7은 64비트 커널·라이브러리·드라이버를 갖추고 Xcode가 32비트와 64비트 앱을 지원했다. 모든 앱이 즉시 64비트가 된 것은 아니지만 모바일 애플리케이션의 자료형, 메모리 사용과 네이티브 라이브러리 호환성을 다시 살필 시점이 열렸다.
Google은 10월 Android 4.4 KitKat을 공개했다. 핵심 목표 중 하나는 512MB RAM을 가진 기기에서도 원활히 동작하도록 운영체제의 메모리 사용을 줄이는 것이었다. 개발자용 저메모리 API와 도구는 앱이 제한된 자원에 맞춰 기능을 조절하도록 도왔다.
Android 4.4에는 새로운 ART 런타임을 시험적으로 선택하는 기능도 들어갔지만 기본 런타임은 여전히 Dalvik이었다. ART가 기본이 된 것은 Android 5.0부터다. 2013년의 두 플랫폼은 한쪽에서는 64비트 고성능 기기로, 다른 쪽에서는 더 넓은 저사양 기기 범위로 모바일 개발의 경계를 동시에 확장했다.
국내: LTE-A, 광고 속도와 실제 체감 사이
SK텔레콤은 6월 26일 LTE-A 스마트폰 서비스를 상용화했다고 발표했다. 서로 다른 주파수 대역을 묶는 주파수 집성 기술을 이용해 이론상 최대 다운로드 속도를 150Mbps로 높였고, LG유플러스도 7월 LTE-A 서비스를 시작했다. 사업자들이 말한 ‘세계 최초’는 스마트폰 기반 상용 서비스라는 조건을 함께 보아야 한다. 러시아 Yota는 2012년에 LTE-A USB 동글 서비스를 시작한 사례가 있었다.
최대 속도는 언제나 이용자가 경험하는 평균 속도와 같지 않았다. 정부의 2013년 통신서비스 품질 평가에서 LTE-A의 평균 다운로드 속도는 47.2Mbps로 조사되었다. 단말기, 기지국과의 거리, 이용자 밀집도, 망 구축 범위에 따라 결과가 달라졌기 때문이다.
그래도 더 넓어진 전송 여력은 고화질 동영상, 실시간 게임, 사진·파일 동기화처럼 지속적으로 데이터를 주고받는 앱의 가능성을 키웠다. 개발자는 빠른 망만 가정할 수 없었으므로 연결 변화, 재시도, 압축과 캐시를 함께 설계해야 했다. ‘최대 150Mbps’는 서비스가 보장할 수 있는 고정된 환경이 아니라 새로운 상한선이었다.
국내: 공공데이터를 서비스의 재료로 열다
「공공데이터의 제공 및 이용 활성화에 관한 법률」은 7월 30일 공포되어 10월 31일 시행되었다. 공공기관이 보유한 데이터를 국민이 이용할 수 있도록 제공하고 민간 활용을 촉진하는 제도적 기반을 마련한 법률이다. 공공데이터전략위원회, 제공 목록의 등록, 제공 신청과 분쟁 조정 같은 절차도 규정했다.
교통·기상·관광·행정 데이터가 파일이나 API로 개방되면 민간 개발자는 모든 원천 데이터를 직접 수집하지 않고도 검색, 지도, 분석과 알림 서비스를 만들 수 있다. 공공데이터포털은 이러한 데이터를 찾고 활용 신청을 하는 중심 창구로 자리 잡았다.
법 시행만으로 데이터 활용 문제가 모두 해결된 것은 아니다. 항목의 정의와 형식, 갱신 주기, 누락과 오류, 이용 조건이 서비스 품질을 좌우했다. 개발자는 API 호출에 성공하는 것뿐 아니라 출처와 기준 시점, 변경 가능성을 표시하고 데이터가 늦거나 비어 있을 때의 동작도 설계해야 했다.
2013년의 의미
2013년에는 서버, 브라우저, 개발 도구와 네트워크에서 각기 다른 변화가 일어났지만 공통된 방향이 있었다. 실행 환경은 Docker 이미지로 기록할 수 있는 대상으로, 화면은 React 컴포넌트로 조합할 수 있는 대상으로 바뀌기 시작했다. Android Studio와 Bootstrap 3는 도구와 UI 설계의 중심을 모바일 환경에 더 가깝게 옮겼다.
Compute Engine의 일반 제공은 범용 컴퓨팅 자원을 서비스로 조달하는 선택지를 넓혔다. iOS 7과 Android 4.4는 모바일 플랫폼이 고성능과 폭넓은 보급이라는 두 방향을 함께 다루고 있음을 보여주었다. 국내에서는 LTE-A가 데이터 전송의 상한을 높이고 공공데이터법이 서비스가 활용할 데이터의 범위를 넓혔다.
이 변화들은 2013년에 완성되지 않았다. Docker와 React, Android Studio는 특히 초기 단계였다. 그러나 이때 공개된 생각과 도구는 2014년의 Docker 1.0, Kubernetes, Swift, Java 8과 Android Studio 1.0으로 이어지며 개발·배포·플랫폼의 경계를 더 크게 바꾸게 된다.
참고 자료
- Docker, Docker: Nine Years Young
- Docker, Changes to dockerproject.org APT and YUM repositories
- Meta Engineering, 2013: A Year of Open Source at Facebook
- Android Developers Blog, Android Studio: An IDE built for Android
- Bootstrap Blog, Bootstrap 3 released
- Google Cloud Blog, Google Compute Engine is now Generally Available
- Google Cloud Platform Blog, Google Compute Engine is now open to all
- Apple, iOS 7 available September 18
- Android Developers, Android 4.4 KitKat
- LG, LG유플러스, LTE-A 서비스 개시
- 연합뉴스, LTE-A 평균 다운로드 속도 47.2Mbps
- 국가법령정보센터, 공공데이터의 제공 및 이용 활성화에 관한 법률 제정문
- 행정안전부, 공공데이터법 시행 10주년