2016년 개발 연대기: 프레임워크의 세대교체와 인공지능의 충격
.NET Core 1.0, Kotlin 1.0, Angular 2와 Vue 2, Docker Swarm mode, AlphaGo, 국내 클라우드 보안인증과 케이뱅크 본인가로 2016년의 개발 흐름을 살펴봅니다.
2016년에는 전년도에 공개되거나 준비되던 기술들이 실제 1.0과 2.0에 도달했다. .NET Core 1.0은 .NET 애플리케이션을 Windows뿐 아니라 Linux와 macOS에서 실행하는 정식 기반을 내놓았고, Kotlin 1.0은 JVM과 Android에서 Java 코드와 공존할 수 있는 언어 호환성을 약속했다.
프론트엔드에서는 Angular 2와 Vue 2가 안정판으로 나왔다. 두 프레임워크 모두 컴포넌트 중심의 UI 개발에 대응했지만, AngularJS 1.x를 전면 재설계한 Angular와 점진적 도입을 유지한 Vue는 서로 다른 선택지를 보여주었다. Docker는 Engine 안에 Swarm mode를 넣어 컨테이너 실행과 오케스트레이션을 한 도구로 묶으려 했다.
3월 서울에서 열린 AlphaGo와 이세돌 9단의 대국은 인공지능 연구를 개발자 사회 밖의 대중적 의제로 끌어냈다. 국내에서는 클라우드서비스 보안인증제가 시행되고 케이뱅크가 첫 인터넷전문은행 본인가를 받았다. 인공지능과 클라우드·모바일 금융이 연구나 계획을 넘어 구체적인 시스템으로 보이기 시작한 해였다.
2016년을 보여주는 장면
| 분야 | 주요 변화 | 개발자에게 생긴 의미 |
|---|---|---|
| .NET | .NET Core·ASP.NET Core 1.0 | Windows·Linux·macOS에서 실행되는 모듈식 오픈 소스 .NET 기반 |
| JVM 언어 | Kotlin 1.0 | Java와 혼용 가능한 간결한 문법과 null 안전성을 안정 버전으로 제공 |
| 프론트엔드 | Angular 2 정식 출시 | TypeScript와 컴포넌트·의존성 주입·RxJS 중심으로 전면 재설계 |
| 프론트엔드 | Vue 2 정식 출시 | 반응성·템플릿의 접근성을 유지하면서 virtual DOM과 SSR 도입 |
| 컨테이너 | Docker 1.12 Swarm mode | Docker Engine 자체에서 서비스·노드·복제본을 선언하고 관리 |
| 인공지능 | AlphaGo 대 이세돌 대국 | 딥러닝과 강화학습의 성과가 사회와 산업의 관심을 집중시킴 |
| 국내 클라우드 | 클라우드서비스 보안인증제 시행 | 공공기관용 민간 클라우드가 충족해야 할 보안 기준 마련 |
| 국내 핀테크 | 케이뱅크 본인가 | 첫 인터넷전문은행의 전산·보안·영업 준비가 최종 인가 단계에 도달 |
.NET Core 1.0, .NET이 운영체제의 경계를 넘다
Microsoft는 6월 27일 .NET Core 1.0, ASP.NET Core 1.0과 Entity Framework Core 1.0을 정식 출시했다. Windows와 OS X, Linux에서 실행할 수 있는 오픈 소스·모듈식 플랫폼으로 웹 애플리케이션, 마이크로서비스, 라이브러리와 콘솔 프로그램을 개발할 수 있었다.
dotnet 명령행 도구는 프로젝트 생성과 복원·빌드·실행의 공통 진입점이 되었다. 애플리케이션이 필요한 프레임워크 구성요소를 NuGet 패키지로 선택하고, 런타임을 함께 배포하는 self-contained 방식이나 설치된 공용 런타임을 사용하는 방식을 고를 수 있는 방향도 제시했다.
using System;
public class Program
{
public static void Main()
{
Console.WriteLine("Hello from .NET Core 1.0");
}
}
ASP.NET Core는 기존 ASP.NET MVC와 Web API의 프로그래밍 모델을 하나로 정리하고, 가벼운 요청 pipeline과 내장 의존성 주입을 제공했다. IIS만이 아니라 Kestrel 웹 서버를 사용하고 Linux 컨테이너에 배포할 수 있다는 점은 .NET 서버 개발의 운영 선택지를 넓혔다.
하지만 .NET Core 1.0이 .NET Framework 전체의 크로스 플랫폼 복제본은 아니었다. Windows 전용 데스크톱 기술과 기존 라이브러리 가운데 사용할 수 없는 부분이 있었고, 초기 도구와 프로젝트 형식도 이후 버전에서 바뀌었다. Microsoft 역시 .NET Framework, .NET Core와 Xamarin이 각기 계속 발전한다고 설명했다.
Kotlin 1.0, Java 프로젝트 안에서 조금씩 시작할 수 있는 언어
JetBrains는 2월 15일 Kotlin 1.0을 출시했다. 객체지향과 함수형 기능을 결합하고 간결성, null 안전성, Java 상호 운용성과 IDE 지원을 핵심 가치로 내세웠다. JVM 바이트코드를 생성해 기존 Java 라이브러리를 사용하고 Java와 Kotlin 파일을 한 프로젝트에서 함께 컴파일할 수 있었다.
data class Post(val year: Int, val title: String?)
fun label(post: Post): String =
post.title?.let { "${post.year}: $it" } ?: "${post.year}: 제목 없음"
nullable 타입을 String?처럼 구분하고 안전 호출 ?.과 Elvis 연산자 ?:를 제공한 것은 흔한 null 참조 오류를 컴파일 단계에서 줄이려는 설계였다. data class, 확장 함수, 스마트 캐스트와 고차 함수는 Java에서 반복되기 쉬운 코드를 줄였다.
1.0에서 JetBrains는 JVM·Android용 언어와 표준 라이브러리의 장기 하위 호환성을 약속했다. 반면 Kotlin/JavaScript는 아직 실험적이었고, Kotlin Multiplatform의 현재 구조도 완성되지 않았다. Android의 공식 지원 언어로 발표된 시점은 2017년 Google I/O이므로 2016년에는 플러그인을 설치해 선택적으로 사용하는 언어였다.
Kotlin의 중요한 특징은 기존 Java 프로젝트를 버리지 않고 클래스나 파일 단위로 도입할 수 있다는 점이었다. 새 언어의 표현력을 얻으면서 오랜 JVM 생태계와 빌드·배포 기반을 계속 이용하는 현실적인 전환 경로를 제공했다.
Angular 2, AngularJS의 후속이지만 사실상 새로운 프레임워크
Google의 Angular 팀은 9월 Angular 2.0.0 안정판을 공개했다. AngularJS 1.x의 controller와 $scope, directive 중심 구조를 그대로 확장하지 않고 TypeScript와 ES2015, 컴포넌트와 명시적인 메타데이터를 중심으로 다시 설계했다.
import { Component } from "@angular/core";
@Component({
selector: "year-card",
template: "<h2>{{ year }}년 개발 연대기</h2>",
})
export class YearCard {
year = 2016;
}
컴포넌트 트리, 의존성 주입, router와 forms, HTTP 기능을 하나의 포괄적인 프레임워크 안에 제공했다. RxJS Observable은 이벤트와 비동기 데이터 흐름을 다루는 중요한 기반이 되었다. ahead-of-time 컴파일은 템플릿을 빌드 시점에 분석해 실행 성능과 오류 탐지를 개선할 가능성을 제시했다.
그러나 AngularJS에서 Angular 2로의 이동은 단순한 버전 업데이트가 아니었다. 언어 선택, 컴포넌트 구조와 빌드 도구가 달라 기존 코드를 상당 부분 다시 설계해야 했다. 한동안 ‘AngularJS’는 1.x, ‘Angular’는 2 이상을 가리키며 두 생태계가 병존했다.
또한 2016년의 Angular를 이후 버전과 같다고 보면 안 된다. 현재 익숙한 Ivy renderer는 아직 없었고, 초기 릴리스의 빌드 규모와 복잡성에 대한 부담도 있었다. 이 해의 출시는 장기간 이어진 프리뷰와 release candidate를 마치고 새 API의 안정 기준을 확정한 사건이었다.
Vue 2, 점진적 도입과 virtual DOM을 함께 선택하다
Evan You는 4월 Vue 2.0의 첫 공개 프리뷰를 발표했고, 안정판은 9월 말 출시되었다. Vue 1.x의 반응성 및 HTML에 가까운 템플릿 경험을 유지하면서 rendering layer를 virtual DOM 기반으로 다시 작성했다.
<div id="app">{{ year }}년 개발 연대기</div>
<script>
new Vue({
el: "#app",
data: { year: 2016 }
});
</script>
템플릿을 virtual DOM render function으로 미리 컴파일해 runtime 크기를 줄일 수 있었고, 필요하면 JSX나 직접 작성한 render function도 사용할 수 있었다. 서버 측 렌더링과 hydration을 지원하는 구조도 마련되었다. 반응성 시스템은 각 컴포넌트가 사용하는 의존성을 추적해 필요한 부분을 갱신했다.
Angular처럼 완전한 응용 프로그램 프레임워크를 한 묶음으로 강제하기보다, Vue는 화면 일부에 script 태그로 도입한 뒤 vue-router·Vuex와 single-file component를 필요에 따라 더할 수 있었다. 작은 화면부터 SPA까지 확장할 수 있다는 점이 진입 장벽을 낮췄다.
Vue 2도 Vue 3와 같지 않다. 반응성은 ES5의 Object.defineProperty를 사용했기 때문에 속성 추가와 배열 변경에 제약이 있었고, Composition API와 Proxy 기반 반응성은 후대에 등장했다. 2016년에는 React와 Angular 사이에서 템플릿 친화성과 가벼운 점진적 도입을 내세운 별도의 흐름이 안정판에 도달했다.
Docker 1.12, 오케스트레이션을 Engine 안으로
Docker는 6월 DockerCon에서 1.12의 built-in orchestration을 발표했고 7월 정식 버전을 배포했다. 이전에도 별도 프로젝트인 Docker Swarm이 있었지만, 1.12의 Swarm mode는 클러스터 관리 기능을 Docker Engine 자체에 포함했다.
관리자 manager와 작업자 worker 노드를 swarm으로 묶고, 사용자는 이미지·복제본 수·포트와 네트워크를 service로 선언했다. manager의 Raft 합의가 클러스터 상태를 관리하고 scheduler가 task를 노드에 배치했다. 노드 간 상호 TLS와 인증서 발급·순환을 기본 구성에 포함한 것도 특징이었다.
docker swarm init
docker service create --name web --replicas 3 -p 80:80 nginx
한 Docker CLI와 API로 로컬 컨테이너부터 다중 호스트 서비스까지 다룰 수 있다는 단순성이 장점이었다. 원하는 복제본 수를 유지하고 rolling update와 내부 load balancing을 제공해 별도 오케스트레이터의 설치 부담을 줄이려 했다.
Swarm mode가 Kubernetes를 대체했다거나 오케스트레이션 경쟁이 이때 끝났다고 볼 수는 없다. 두 시스템은 같은 문제를 다른 추상화와 생태계로 풀었고, 조직은 기능·복잡성·운영 경험을 비교했다. 2016년은 컨테이너를 ‘실행하는 법’보다 ‘여러 서버에서 계속 운영하는 법’이 본격적인 제품 경쟁이 된 해였다.
AlphaGo, 연구 성과가 서울에서 사회적 사건이 되다
Google DeepMind의 AlphaGo는 3월 9일부터 15일까지 서울에서 이세돌 9단과 다섯 차례 대국해 4승 1패를 기록했다. 2015년 유럽 챔피언 판후이에게 5승을 거둔 결과와 Nature 논문이 먼저 공개되었지만, 세계 정상급 기사와의 공개 대국은 기술의 수준을 훨씬 넓은 대중에게 보여주었다.
AlphaGo는 전문가 기보로 학습한 policy network와 승패를 예측하는 value network, self-play 강화학습과 Monte Carlo tree search를 결합했다. 신경망만으로 다음 수를 즉시 정한 것도, 가능한 모든 수를 완전 탐색한 것도 아니었다. 학습된 직관과 선택적 탐색을 함께 사용했다.
2국의 37번째 수는 기존 인간 기사들의 관습에서 벗어난 선택으로 큰 관심을 받았고, 이세돌 9단은 4국에서 승리했다. 결과는 인공지능이 모든 지능 문제를 해결했다는 증거가 아니라, 명확한 규칙과 방대한 self-play가 가능한 특정 영역에서 학습과 탐색의 조합이 어느 수준에 이르렀는지를 보여준 사건이었다.
개발 업계에서는 기계학습을 연구소의 특수 기술로만 보던 시선이 달라졌다. 데이터·GPU·모델 학습과 추론 시스템에 대한 관심이 커졌고, 전년도 공개된 TensorFlow 같은 도구를 직접 학습하려는 움직임도 확산되었다. 대국이 국내에서 열렸다는 점은 이 변화를 더욱 직접적인 사회적 경험으로 만들었다.
국내: 클라우드 보안인증제가 공공 시장의 문턱을 만들다
전년도 클라우드컴퓨팅법 시행에 이어 2016년 5월 클라우드서비스 보안인증제가 시행되었다. 국가·공공기관에 민간 클라우드를 공급하려는 사업자의 정보보호 수준을 객관적인 기준으로 평가해 이용자의 보안 우려를 줄이려는 제도였다.
평가 범위는 서버 몇 대의 기술 설정에 그치지 않았다. 가상화 인프라와 네트워크, 물리 시설, 개발·운영 조직과 지원 서비스 등 클라우드 제공에 관련된 자산과 관리 체계를 포함했다. KT G-Cloud가 2016년 첫 IaaS 인증을 받았다.
공공기관 입장에서는 검증된 민간 서비스를 선택할 기준이 생겼고, 공급자에게는 공공 시장에 진입하기 위해 충족해야 할 구체적인 요구사항이 생겼다. 반면 물리적 분리와 시스템 위치, 심사 비용 같은 조건은 글로벌 서비스와 중소 공급자에게 높은 진입 장벽이 될 수 있었다.
보안인증은 애플리케이션 자체의 보안을 대신하지 않았다. 인증된 기반을 사용해도 개발자는 계정과 권한, 데이터 암호화, 로그와 취약점 관리, 백업과 사고 대응을 서비스 특성에 맞게 구현해야 했다.
국내: 케이뱅크 본인가, 영업 개시 전 마지막 제도적 단계
금융위원회는 12월 14일 케이뱅크에 은행업 본인가를 내렸다. 국내 첫 인터넷전문은행 인가이자 1992년 평화은행 이후 24년 만의 은행 신설 인가였다. 자본금, 주주 구성, 사업 계획뿐 아니라 인력·영업 시설과 전산 체계가 인가 요건으로 심사되었다.
2015년의 예비인가와 달리 은행업을 영위할 최종 법적 자격을 얻은 것이지만, 2016년에 고객 서비스가 시작된 것은 아니다. 금융결제원 지급결제망 연계와 최종 운영 준비를 거쳐 실제 영업은 2017년 4월 시작되었다.
인터넷전문은행은 24시간 계좌와 대출 서비스를 제공하면서 은행 원장의 정합성, 본인 확인, 이상거래 탐지와 고객 정보 보호를 동시에 지켜야 했다. 지점 직원의 절차를 모바일 화면과 자동화된 심사로 옮기는 작업은 단순한 앱 개발보다 훨씬 넓은 금융 시스템 통합이었다.
2016년의 의미
2016년은 선택지가 늘어난 동시에 전환 비용이 선명해진 해였다. .NET Core와 Kotlin은 기존 생태계와 공존하며 운영체제와 언어의 경계를 낮췄다. Angular 2는 과감한 재설계의 힘과 마이그레이션 부담을 함께 보여주었고, Vue 2는 점진적 도입이라는 다른 길을 제시했다.
Docker Swarm mode는 컨테이너 오케스트레이션을 기본 도구 안에 넣었고, AlphaGo는 학습 시스템의 가능성을 사회 전체에 각인시켰다. 국내 클라우드 보안인증과 케이뱅크 본인가는 새로운 서비스가 기술만으로 성립하지 않으며 보안·규제·운영 체계를 함께 갖춰야 함을 보여주었다.
2017년에는 Kotlin의 Android 공식 지원, TensorFlow 1.0, Kubernetes 생태계의 성장, WebAssembly의 주요 브라우저 지원, React의 새 라이선스와 Fiber, 국내 인터넷전문은행의 실제 출범이 이 흐름을 다음 단계로 옮기게 된다.
참고 자료
- Microsoft .NET Blog, Announcing .NET Core 1.0
- Microsoft .NET Blog, Announcing ASP.NET Core 1.0
- JetBrains, Kotlin 1.0 Released
- JetBrains, Kotlin 1.0 release announcement
- Angular, Angular 2.0.0 release
- Vue.js, Announcing Vue.js 2.0
- Vue.js, Vue 2 end-of-life notice and history
- Docker, Docker 1.12: Now with Built-in Orchestration
- Docker Docs, Swarm mode key concepts
- Google DeepMind, AlphaGo
- Nature, Mastering the game of Go with deep neural networks and tree search
- 한국인터넷진흥원, 클라우드 보안인증제 제도 소개
- 대한민국 정책브리핑, 2017년 국가정보화 연차보고서: 2016년 클라우드 보안인증제 시행
- 금융위원회, 케이뱅크 은행 은행업 인가