블로그 목록
SW 개발 연대기

2018년 개발 연대기: 클라우드 운영이 서비스가 되고 개인정보가 설계 조건이 되다

Java 11, Android Jetpack과 AndroidX, React Hooks 공개, AKS·EKS 일반 제공, GDPR과 TLS 1.3, 국내 5G 기업용 상용화와 인터넷전문은행 특례법으로 2018년의 개발 흐름을 살펴봅니다.

2026년 7월 24일약 25분
#2018#Java 11#Android Jetpack#AndroidX#React Hooks#Kubernetes#GDPR#TLS 1.3#5G#인터넷전문은행#개발 연대기

2018년의 개발자는 기능을 구현하는 일만으로 제품을 완성할 수 없었다. 개인정보를 왜 수집하는지 설명하고, 이용자의 요청에 따라 데이터를 조회·이동·삭제할 수 있게 설계하며, 통신 구간의 보안 수준도 높여야 했다. 유럽연합의 일반 개인정보 보호법인 GDPR이 본격 적용되고 TLS 1.3이 표준화되면서 개인정보와 보안은 사후 점검 항목이 아니라 시스템 구조를 결정하는 조건으로 들어왔다.

플랫폼과 운영 환경도 바뀌었다. Java 11은 새로운 6개월 출시 주기에서 처음 등장한 장기지원 버전이었고, Android Jetpack과 AndroidX는 흩어져 있던 앱 개발 구성요소를 하나의 체계로 묶기 시작했다. React 팀은 함수 컴포넌트에서 상태와 부수 효과를 다루는 Hooks를 공개했다. Microsoft와 AWS는 각각 AKS와 EKS를 일반 제공하며 Kubernetes 제어 영역의 운영을 클라우드 서비스로 옮겼다.

국내에서는 이동통신 3사가 기업용 단말을 대상으로 5G 상용 서비스를 시작했다. 같은 해 인터넷전문은행 특례법이 공포되며 정보통신기술 기업과 금융 산업의 결합을 확대할 제도적 토대도 마련됐다. 두 변화 모두 실제 대중 서비스가 펼쳐질 다음 해를 준비하는 출발점이었다.

2018년을 보여주는 장면

분야주요 변화개발자에게 생긴 의미
JavaJava 11 일반 제공과 장기지원6개월 출시 주기와 장기지원 버전을 구분해 도입 전략을 세울 필요가 생김
AndroidJetpack 공개와 AndroidX 전환생명주기·데이터 저장·백그라운드 작업을 재사용 가능한 구성요소로 설계
웹 UIReact Hooks 제안 공개함수 컴포넌트에서 상태와 부수 효과를 다루는 새 모델이 등장
클라우드AKS·EKS 일반 제공Kubernetes 제어 영역의 가용성과 유지보수를 클라우드 사업자에게 맡길 수 있게 됨
개인정보GDPR 적용동의·보유·삭제·이동 같은 요구사항이 데이터 모델과 API 설계에 직접 반영됨
웹 보안TLS 1.3 표준화더 단순하고 안전한 암호 조합과 짧아진 연결 수립 절차가 표준이 됨
국내 통신기업용 5G 상용 서비스 개시초저지연·대규모 사물인터넷을 전제로 한 서비스 실험이 시작됨
국내 금융인터넷전문은행 특례법 공포ICT 기업의 금융 참여를 넓힐 법적 기반이 마련됨

Java 11, 빠른 출시 주기 속의 장기지원 기준점

Oracle은 9월 25일 Java 11의 일반 제공을 발표했다. Java 9 이후 도입된 6개월 출시 주기에 따라 Java 10이 나온 지 반년 만에 도착한 버전이었다. 동시에 Oracle의 지원 정책에서 새로운 주기 이후 처음 지정된 장기지원, 즉 LTS 버전이기도 했다. 조직은 모든 기능 릴리스를 장기간 운영할지, LTS 버전을 중심으로 업그레이드할지 결정해야 했다.

Java 11에는 Java 9부터 incubator 상태였던 HTTP Client API가 java.net.http 모듈의 표준 API로 들어왔다. HTTP/1.1과 HTTP/2, 동기·비동기 요청을 JDK 안에서 다룰 수 있었다. 단일 소스 파일을 먼저 별도로 컴파일하지 않고 java Hello.java처럼 실행하는 기능도 추가됐다.

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

class StatusCheck {
    public static void main(String[] args) throws Exception {
        var client = HttpClient.newHttpClient();
        var request = HttpRequest.newBuilder(
            URI.create("https://example.com")
        ).build();
        var response = client.send(
            request,
            HttpResponse.BodyHandlers.ofString()
        );

        System.out.println(response.statusCode());
    }
}

지역 변수 타입 추론을 위한 var 자체는 2018년 3월의 Java 10에 먼저 도입됐다. Java 11은 lambda 매개변수에도 var를 사용할 수 있게 확장했다. 이 구분은 Java 11의 기능을 설명할 때 자주 뒤섞인다. Java Flight Recorder가 오픈 소스 JDK에 포함된 것도 서버 애플리케이션의 진단과 성능 분석에 의미 있는 변화였다.

반대로 Java EE와 CORBA 모듈이 JDK에서 제거됐고 JavaFX도 JDK와 분리됐다. 이전 버전에서 묵시적으로 제공받던 모듈에 의존한 애플리케이션은 외부 의존성을 명시해야 했다. Java 11은 기능 추가뿐 아니라 JDK의 책임 범위를 정리한 버전이었다.

LTS라는 표현도 모든 Java 11 배포판이 같은 기간 무료 지원된다는 뜻은 아니었다. Oracle JDK와 OpenJDK 기반 배포판은 라이선스와 업데이트 제공 주체가 달랐다. 개발 조직은 언어 버전 외에도 어느 공급자의 빌드를 사용하고 보안 업데이트를 어떻게 받을지 함께 결정해야 했다.

Android Jetpack과 AndroidX, 앱 구조를 구성요소로 정리하다

Google은 5월 Google I/O에서 Android Jetpack을 공개했다. 기존 Support Library와 Architecture Components를 비롯한 라이브러리, 도구, 지침을 하나의 이름 아래 묶은 체계였다. Activity와 Fragment의 생명주기에 모든 로직을 몰아넣는 대신 ViewModel, LiveData, Room 같은 구성요소로 화면 상태와 데이터 저장을 분리하는 흐름이 더 분명해졌다.

Jetpack은 단일 프레임워크나 한 번의 완성된 출시가 아니었다. 이미 안정판이던 구성요소와 Navigation, WorkManager처럼 당시 alpha 단계였던 항목이 함께 소개됐다. 따라서 2018년에 Jetpack이 공개됐다는 사실과 각 라이브러리가 운영 환경에서 안정적으로 쓸 수 있었던 시점은 구분해야 한다.

같은 날 Google은 Support Library를 androidx 이름 공간으로 옮기는 AndroidX의 초기 프리뷰를 발표했다. 기존 패키지는 Android 플랫폼 API와 지원 라이브러리의 클래스가 모두 android.* 아래 섞여 있었고, 라이브러리 전체가 하나의 버전 번호를 공유했다. AndroidX는 androidx.* 패키지로 출처를 분명히 하고 구성요소마다 독립적으로 버전을 올릴 수 있게 했다.

초기 프리뷰는 운영 앱 사용을 권장하는 단계가 아니었다. 그해 하반기 AndroidX 1.0 안정판과 Android Studio의 migration 도구가 제공되면서 실제 전환이 시작됐다. Support Library 28은 기존 android.support.* 계열의 마지막 기능 릴리스가 됐다. 패키지 이름이 바뀌었으므로 애플리케이션 코드뿐 아니라 함께 쓰는 외부 라이브러리도 호환 여부를 확인해야 했다.

React Hooks, 2018년에 공개되고 2019년에 안정화된 제안

React 팀은 10월 React Conf에서 Hooks를 처음 공개했다. useStateuseEffect 같은 API를 사용하면 class를 작성하지 않고도 함수 컴포넌트에서 상태를 보존하고 렌더링 이후의 부수 효과를 처리할 수 있었다. 여러 컴포넌트가 상태 관련 로직을 공유할 때 render prop이나 고차 컴포넌트로 계층을 겹겹이 감싸던 문제를 사용자 정의 Hook으로 풀 수 있다는 제안이었다.

import { useEffect, useState } from "react";

function Clock() {
  const [now, setNow] = useState(new Date());

  useEffect(() => {
    const timer = setInterval(() => setNow(new Date()), 1000);
    return () => clearInterval(timer);
  }, []);

  return <time>{now.toLocaleTimeString()}</time>;
}

그러나 위 모델을 2018년의 안정 기능으로 기록해서는 안 된다. 공개 당시 Hooks는 React 16.7 alpha에서 시험할 수 있는 제안이었고, 안정판은 2019년 2월 React 16.8에 포함됐다. React 팀은 class 컴포넌트를 제거할 계획이 없으며 기존 코드를 모두 다시 작성할 필요도 없다고 설명했다.

Hooks가 제시한 핵심은 문법을 줄이는 데 그치지 않았다. 컴포넌트의 생명주기 메서드별로 로직을 나누는 대신 서로 관련된 상태와 효과를 한 함수에 묶고, 이를 다른 컴포넌트와 조합할 수 있게 했다. 이후 프론트엔드 개발 방식에 큰 영향을 주었지만 2018년은 그 변화가 완성된 해가 아니라 공개 검증을 시작한 해였다.

AKS와 EKS, Kubernetes 제어 영역을 클라우드 서비스로

Microsoft는 6월 13일 Azure Kubernetes Service, AKS의 일반 제공을 발표했다. AWS도 6월 5일 Amazon Elastic Container Service for Kubernetes, EKS를 일반 제공했다. 2017년에 각각 프리뷰로 공개됐던 서비스가 운영 환경에서 사용할 수 있는 단계로 넘어온 것이다.

Kubernetes를 직접 운영하려면 API server, etcd, scheduler 같은 제어 영역 구성요소의 고가용성, 패치와 장애 복구를 책임져야 했다. 관리형 서비스는 이 부분을 클라우드 사업자가 운영하도록 했다. EKS는 출시 당시 제어 영역을 세 개의 가용 영역에 걸쳐 구성했고, AKS는 관리형 제어 영역과 Azure의 네트워크·모니터링·ID 서비스를 연결했다.

다만 ‘관리형’은 Kubernetes 운영 전체가 사라졌다는 뜻이 아니었다. 당시 EKS에서는 작업 노드를 사용자가 직접 프로비저닝해야 했고, 두 서비스 모두 애플리케이션 배포, 노드 용량, 버전 업그레이드 계획, 접근 권한, 네트워크 정책과 비용은 이용자의 책임으로 남았다. 관리형 노드 그룹과 serverless 실행 환경은 이후에 더해졌다.

2018년의 변화는 Kubernetes가 특정 선도 기업이 직접 조립하는 기반 시설에서 주요 클라우드가 공통으로 제공하는 서비스 계층으로 이동했다는 데 있었다. 같은 해 Docker도 Docker Enterprise에서 Kubernetes 지원을 확대했다. 컨테이너 실행 형식에 이어 orchestration API를 중심으로 생태계가 수렴하고 있었다.

GDPR, 개인정보 요구사항이 데이터 구조와 API로 들어오다

유럽연합의 GDPR은 2016년에 발효됐고 2년의 준비 기간을 거쳐 2018년 5월 25일부터 적용됐다. 유럽연합 안에 사업장이 있는 조직뿐 아니라 일정한 조건에서 유럽연합 내 개인에게 상품·서비스를 제공하거나 그 행동을 모니터링하는 역외 조직에도 적용될 수 있었다.

개발팀에는 법률 문구를 실제 시스템 동작으로 바꾸는 일이 주어졌다. 어떤 법적 근거로 어느 데이터를 수집하는지 기록하고, 목적에 필요한 범위만 저장하며, 보유 기간이 끝나면 처리해야 했다. 이용자의 열람·정정·삭제·처리 제한·이동 요청을 받을 수 있는 절차와 데이터 추출 기능도 필요했다. 삭제권은 다른 법적 보존 의무를 무조건 무효로 만드는 절대적 권리가 아니므로 적용 근거와 예외를 함께 판단해야 했다.

개인정보 보호는 데이터베이스에서 행 하나를 지우는 기능보다 넓었다. 운영 로그, 분석 시스템, 검색 색인, 백업과 외부 처리업체에 복제된 데이터가 어디에 있는지 파악해야 했다. 침해 사고를 탐지하고 보고하는 절차, 접근 권한과 감사 기록, 기본값에서 불필요한 공개를 막는 ‘설계 및 기본 설정에 의한 개인정보 보호’도 설계 대상이 됐다.

GDPR이 전 세계 모든 서비스에 동일한 방식으로 직접 적용됐다고 단정할 수는 없다. 하지만 유럽 이용자를 상대하는 국제 서비스와 그 공급망이 대응하면서 개인정보 수명주기를 제품 요구사항으로 관리하는 흐름은 국경 밖으로 확산됐다.

TLS 1.3, 더 적은 왕복과 정리된 암호 체계

IETF는 8월 RFC 8446으로 TLS 1.3을 표준화했다. TLS 1.2까지 누적된 오래된 암호 알고리즘과 선택지를 정리하고, 인증 암호화인 AEAD 방식과 forward secrecy를 제공하는 키 교환을 중심으로 프로토콜을 단순화했다. 연결 과정에서 서버와 클라이언트가 주고받아야 하는 왕복 횟수도 줄었다.

이미 연결한 적이 있는 서버에는 0-RTT로 데이터를 더 일찍 전송하는 선택지도 생겼다. 하지만 0-RTT 데이터는 재전송 공격 가능성이 있어 결제나 상태 변경 요청처럼 반복 실행되면 안 되는 작업에 무심코 사용해서는 안 됐다. 빠른 프로토콜 기능에도 애플리케이션 수준의 안전 조건이 필요했다.

표준이 발표됐다고 모든 서버와 클라이언트가 즉시 TLS 1.3으로 전환된 것은 아니었다. 브라우저, TLS 라이브러리, CDN과 서버 소프트웨어가 구현하고 중간 네트워크 장비와의 호환성을 검증하는 과정이 이어졌다. Java 11이 같은 해 TLS 1.3 지원을 포함한 것은 런타임과 인터넷 표준의 변화가 맞물린 사례였다.

국내: 기업용 단말에서 먼저 시작한 5G 상용 서비스

국내 이동통신 3사는 12월 1일 5G 전파를 송출하고 기업 고객을 대상으로 상용 서비스를 시작했다. 초기 서비스는 스마트폰이 아니라 이동형 라우터나 동글 형태의 단말을 이용했다. 산업 현장의 원격 제어, 영상 전송, 사물인터넷 같은 기업용 사례가 먼저 제시됐다.

따라서 2018년의 5G 상용화와 일반 이용자가 5G 스마트폰을 개통한 시점을 같은 사건으로 쓰면 정확하지 않다. 스마트폰 기반 5G 상용 서비스는 2019년 4월 시작됐다. 정부와 통신 업계는 2018년의 기업용 개통을 세계 최초 5G 상용화로 설명했지만, 최초라는 평가는 대상 단말과 서비스의 정의에 따라 달라질 수 있다.

5G는 초고속뿐 아니라 짧은 지연 시간과 대규모 기기 연결을 목표로 내세웠다. 개발자에게는 고해상도 실시간 영상, 연결된 공장, 차량과 에지 컴퓨팅 같은 새로운 응용 가능성을 열었다. 다만 2018년 말의 제한된 커버리지와 단말 환경에서 애플리케이션이 전국적인 5G 연결을 전제할 수는 없었다. 그해는 대중화보다 망과 사용 사례를 검증하는 시작에 가까웠다.

국내: 인터넷전문은행 특례법이 마련한 다음 단계

국회에서 제정된 인터넷전문은행 설립 및 운영에 관한 특례법은 10월 16일 공포됐다. 일정 요건을 충족하는 비금융주력자가 인터넷전문은행 지분을 더 많이 보유할 수 있도록 은행법의 소유 규제를 완화하되, 대주주와의 거래 제한 같은 안전장치를 둔 법이었다.

이 법 역시 2018년에 곧바로 시행된 것으로 쓰면 안 된다. 시행일은 2019년 1월 17일이었다. 2017년에 케이뱅크와 카카오뱅크가 실제 서비스를 시작한 뒤, ICT 기업의 자본 참여를 넓히고 추가 사업자의 진입을 촉진하려는 제도 변화가 이어진 것이다.

제도 변화는 개발자에게 새로운 API가 하나 추가되는 사건은 아니었다. 그러나 금융과 ICT 조직이 더 긴밀히 결합하면 비대면 신원 확인, 신용평가, 이상 거래 탐지, 실시간 계정계 연동과 모바일 사용자 경험를 제품 단위로 반복 개선할 여지가 커진다. 동시에 은행 수준의 안정성·보안·감사 가능성을 빠른 제품 개발과 함께 충족해야 하는 과제도 커졌다.

2018년의 의미

2018년에는 소프트웨어의 외부 조건이 내부 구조를 바꾸는 장면이 두드러졌다. GDPR은 개인정보의 수집부터 폐기까지를 추적할 수 있는 데이터 구조와 운영 절차를 요구했다. TLS 1.3은 인터넷 연결의 보안 기준을 높이면서 오래된 선택지를 걷어냈다. 보안과 규제는 개발이 끝난 뒤 붙이는 검토표가 아니라 초기 시스템 구조의 입력값이 됐다.

플랫폼은 더 빠르게 출시되는 동시에 안정적인 기준점을 따로 제공했다. Java 11은 6개월 주기와 LTS 전략을 함께 보여줬고, Android Jetpack과 AndroidX는 앱의 생명주기와 데이터 흐름을 구성요소 중심으로 재정리했다. React Hooks는 아직 제안 단계였지만 UI 로직을 조합하는 다음 방식을 예고했다.

운영 측면에서는 AKS와 EKS의 일반 제공으로 Kubernetes 제어 영역이 클라우드 서비스의 일부가 됐다. 국내의 기업용 5G 개통과 인터넷전문은행 특례법 공포는 통신과 금융에서 다음 해의 대중 서비스와 경쟁을 준비했다. 2019년에는 React Hooks의 안정판, 5G 스마트폰 서비스, TensorFlow 2.0, GitHub Actions와 국내 오픈뱅킹처럼 2018년에 마련된 기반 위에서 개발 방식과 서비스 접점이 한층 더 구체화된다.

참고 자료