★ 지은이의 말 ★
2020년 3월경, 마이크로서비스의 권한 및 정책 부분을 설계하기 위해 기술 검토를 하던 중 처음으로 OPA를 접했다. 그 전에는 OPA를 쿠버네티스 환경에서 일부 검증을 할 때 사용할 수 있는 기술이라고 단편적으로 알고 있었다. 그러나 조사할수록 쿠버네티스 환경뿐만 아니라 마이크로서비스 기반 애플리케이션의 권한이나 정책을 구현할 때에도 범용으로 사용 가능한 기술임을 확실하게 느낄 수 있었다.
OPA를 적용하면서 OPA를 자세히 다룬 책이 있는지도 찾아봤지만 책의 한 장이나 부록으로 몇 페이지 다루는 책은 있어도 필요한 내용을 충분히 다룬 책은 찾을 수 없었다. 그래서 OPA 활용에 필요한 내용을 충분히 알려주는 책을 기획하게 됐다. 항상 최신 클라우드 기술에 관련된 책들은 해외에서 먼저 출판되는 사례가 많은데 OPA는 해외에서 책이 출판되기 전에 국내에 소개하겠다는 작은 목표를 세웠다.
처음에는 마이크로서비스 환경에서 애플리케이션의 정책/권한 부분에만 집중하려고 했다. 하지만 쿠버네티스 환경에서도 널리 활용되는 기술이므로 관련 내용을 꼭 포함하면 좋겠다는 의견을 주신 분이 많아 관련 내용을 보강했다. 결과적으로 옳은 의견이었고, 의견 주신 분들께 감사드린다.
OPA를 접하고 가장 놀라웠던 점은 커뮤니티 버전과 상용 버전의 기능이 차별화되는 일반적인 오픈소스들과 달리 OPA의 핵심 코드뿐만 아니라 OPA와 함께 사용할 수 있는 좋은 도구들도 함께 오픈소스로 공개된다는 점이었다. 이뿐만 아니라 OPA를 사용하다가 해결이 잘 되지 않는 문제가 있다면 Styra사에서 운영하는 OPA 슬랙 채널에서 물어보면 친절한 답변을 얻을 수 있을 것이다. 지면을 빌어 OPA와 관련 도구들을 자유롭게 사용할 수 있도록 공개해 준 Styra사에 감사를 전하고 싶다.
마이크로서비스 아키텍처의 관점에서 OPA를 논하자면, OPA는 정책/권한이라는 중요하고 특별한 도메인을 담당하는 기술이라고 할 수 있다. 마이크로서비스 아키텍처를 구성하는 모든 도메인에서 도메인 전용 언어(DSL)를 정의한다면 혼란스럽겠지만 정책이라는 도메인은 전용의 DSL을 가질 자격이 충분할 만큼 중요한 도메인이다. 정책의 별도 분리를 통해 서비스가 비즈니스 요건에 따라 계속 정책 변경을 요구하더라도 유연한 대처가 가능하다.
또 보안의 관점에서 보면 흔히 암호화와 통신 프로토콜 등에 우선 집중하게 되지만 많은 보안 사고는 정책의 설정이 잘못돼 발생한다. 수년 전 미국 트럼프 대통령의 당선 과정에서 문제가 됐던 캠브리지 애널리티카 사건의 경우도 페이스북의 보안 프로토콜이 해킹 당한 문제가 아닌 정보의 접근 권한이 잘못 설정된 문제였다.
클라우드 네이티브의 관점에서 일단 OPA 자체가 Go 언어로 개발돼 단일 바이너리로 컴파일되는 쿠버네티스 환경에서 컨테이너로 동작하기에 효율적인 형태로 개발됐다. OPA를 Go 클라이언트 라이브러로 사용할 수도 있고, 사이드카로 파드에 컨테이너와 함께 패키징할 수도 있으며, 별도의 REST 서버로도 동작시킬 수 있다. 또 정책을 번들로 패키징해서 여러 서비스에 효율적으로 동기화할 수 있는 수단도 제공한다.
클라우드 네이티브 애플리케이션과 마이크로서비스 아키텍처는 2~3년 전만해도 복잡하기만 하고 실용적이지 않다는 의심도 많이 받았지만, 현재는 그런 단계를 지나 안정적으로 정착되고 대세가 되고 있는 것 같다. 독자들이 OPA를 계속 배우다 보면 Policy as Code 개념을 배우고 있다는 것을 깨닫게 될 것이다. 결국 마이크로서비스와 클라우드 네이티브 환경에 적합한 권한 관리는 이런 형태일 수밖에 없겠다는 느낌도 받을 것이다.
책을 쓰는 과정에서 알 수 없는 버그를 만나 OPA 소스 코드를 살펴보기도 하고, 공식 문서의 내용과 다른 부분에 혼란스럽기도 했으며 자바를 위한 간단한 웹어셈블리 SDK도 만들어 봤다. 이런 힘든 과정을 마치고 책을 출판할 수 있었던 이유는 OPA가 유용한 기술인 이유도 있지만 무엇보다 배우고 적용해 보는 과정이 재밌고 흥미로웠기 때문이다.
독자들도 이러한 흥미를 느낄 수 있을 때까지 처음의 낯섦과 지루함을 조금만 견딜 수 있다면 많은 것을 얻을 수 있을 것으로 기대한다. 그 과정에서 이 책이 도움이 되기를 바란다.
★ 지은이 소개 ★
이상근
숭실대학교에서 컴퓨터공학을 전공하고, 동대학원에서 공학박사 학위를 받았다. 세부 전공은 분산처리이며, 주로 분산 컴퓨팅 아키텍처와 워크플로우 엔진을 연구했다. 학업을 마치고 개발자로 10년 이상 다양한 경력을 쌓았으며 엔터프라이즈 잡 스케줄러, 렌더팜 관리 시스템, 클라우드 데이터베이스 프로비저닝 서비스, 빅데이터 관련 시스템, 클라이언트 사이드 로드 밸런싱 등 다양한 개발 경험이 있다. 최근에는 클라우드와 빅데이터 관련 여러 프로젝트에 참여하며, OPA를 통해 마이크로서비스의 정책 관리를 개선할 수 있는 방안을 고민하고 있다.