알라딘

헤더배너
상품평점 help

분류

이름:박성철

최근작
2024년 10월 <데이터 지향 프로그래밍>

박성철

중학교 2학년 때 이른바 ‘중2병’으로 컴퓨터에 푹 빠진 후 지금까지 40년가량 컴퓨터를 매개로 세상을 탐험하고 있다. 평생 혼자 살 운명이었으나 천사를 만나 구원받고 용인의 한적한 산기슭에서 아들과 함께 셋이서 행복한 가정을 꾸리고 산다. 지금은 컬리에서 멋진 개발자들과 함께 IT와 데이터 기술을 바탕으로 세상을 바꾸는 즐거운 퀘스트를 수행 중이다. 소프트웨어 개발에 대한 인식을 바꾸고 개발 현장을 개선하는 데 관심이 많다.  

대표작
모두보기
저자의 말

<데이터 지향 프로그래밍> - 2024년 10월  더보기

마틴 클레프만(Martin Kleppmann)은 『데이터 중심 애플리케이션 설계』(위키북스, 2018)에서 소프트웨어가 이미 한 프로세스 또는 클러스터를 벗어나 다른 차원으로 확대됐다는 것을 명확히 보여줍니다. 다양한 이벤트(입력)를 다량으로 받아 빠르고 가볍게 처리해서 바로 응답(출력)해야 하는 현대의 시스템에서 개별 프로세스는 정교하고 복잡한 모델을 갖고 무거운 연산을 수행하기보다 단순히 데이터를 조작하면서 고도의 동시성과 반응성을 달성하는 것이 더 중요할 수 있습니다. 이 책은 문제를 단순하게 푸는 방법을 제시합니다. 시스템의 복잡성은 두 가지 측면에서 구분해볼 수 있습니다. 한 측면은 구조의 복잡성입니다. 어떤 시스템의 기존 구조가 단순할 수도, 복잡할 수도 있습니다. 또 다른 측면은 구성의 복잡성입니다. 한 시스템이 소수의 요소만으로 구성돼 단출할 수도, 여러 이질적인 요소가 마구 섞여 잡다할 수도 있습니다. 후자는 복합성이라고 달리 부를 수도 있겠습니다. 어떤 시스템은 복잡성은 높지만 복합성은 낮고, 어떤 시스템은 복잡성은 낮지만 복합성은 높습니다. 당연히 둘 다 높거나 낮은 시스템도 있습니다. 어떤 기술은 (구조가) 복잡한 문제는 잘 해결하지만 (구성이) 복합적인 문제를 푸는 데 그리적합하지 않을 수 있습니다. 단순하지만 복합적인 시스템은 함수와 데이터 수는 많고 추상화 깊이는 낮습니다. 복잡한 문제에 적합한 기술을 복합적인 문제에 사용하게 되면 본질적 복잡성(해결하려는 문제 자체의 복잡성)에 우발적 복잡성(사용되는 기술 자체의 복잡성)까지 더해져 시스템 구축이 지나치게 복잡해질 수 있습니다. 저자는 오랫동안 클로저 커뮤니티에서 경험한 효과적이고 단순한 문제 해결 방식이 다른 프로그래밍 언어에서도 그대로 적용 가능하다고 생각하고, 그 원리와 구현 방식을 정리해 ‘데이터 지향 프로그래밍(DOP)’이란 이름을 붙여 소개합니다. 책을 읽는 많은 객체지향 프로그래밍(OOP) 개발자와 함수형 프로그래밍(FP) 개발자가 어쩌면 화를 낼 지도 모릅니다. OOP 개발자에게는 FP를 다른 이름으로 포장해 설명하면서 지금까지 쌓아온 OOP를 섣불리 무너뜨리려는 것으로 보일 테고, FP 개발자에게는 잘못된 유사 FP를 가르치는 시도로 보일 것입니다. 저자가 통상의 OOP가 시스템을 복잡하게 만드는 경향이 있다며 보여주는 OOP 설계 예시가 확실히 좋은 설계라고는 할 수 없습니다. 하지만 흔히 보게 되는 (능숙하게 적용되지 못한) OOP인 것은 맞습니다. 저는 자바를 주로 사용합니다. 자바는 처음 세상에 소개될 때 OOP 언어를 표방했고, 급속히 가장 인기 있는 언어로 자리매김한 이유도 OOP의 인기에 편승했다는 점에서 찾을 수 있을 것입니다. 클래스를 만들지 않고는 동작하는 코드 한 줄도 작성하지 못하는 자바의 OOP에 대한 입장은 아주 견고해 보였습니다. 이런 자바도 자바 8 이후로 지난 10여 년간 람다식, 메서드 참조, 함수 인터페이스, 스위치식, 패턴 매칭, 레코드, 밀봉 클래스(sealed class) 등 OOP와 상관없어 보이는 여러 언어적인 개선을 이루고 있습니다. 자바의 이런 변화는 사실 당연한 듯 보입니다. 자바를 제외하고는 대부분의 언어가 다중 패러다임의 길을 걷기 때문입니다. 어찌 보면 자바는 사람들의 성원에 못 이겨 애써 따라가는 형세이므로, 아무도 이런 변화에 의문을 던지지 않는 분위기입니다. 하지만 이런 개선 사항을 어떻게 활용할지를 두고 토론이 벌어지면 저마다 생각이 다릅니다. 누군가는 이제 자바도 FP를 할 수 있게 됐다면서 FP를 해야 한다고 주장합니다. 다른 한편에서는 그저 화려한 표현이 추가됐을 뿐 프로그래밍 방식에 아무런 영향이 없다고 생각합니다. 새로운 언어 변화를 어떻게 사용하면 좋을지 안내하는 지침이 없다 보니 성급한 사람들은 최대한 최신 표기법을 적용하고 싶어 안달이고, 조심스러운 사람들은 성능과 가독성 등을 문제 삼으면서 이런 분위기를 불편해합니다. 자바 아키텍트이면서 앰버 프로젝트를 이끄는 브라이언 게츠(Brian Goetz)는 2022년 인포큐(InfoQ)에 ‘자바 데이터 지향 프로그래밍(Data-Oriented Programming in Java)’이란 글을 기고하면서 이것이 자바 8 이후의 개선 사항을 적절하게 활용하는 패러다임이라고 소개합니다. 게츠는 복잡한 문제는 기존의 OOP를 활용해 풀고 단순한 문제는 단순하게 풀라면서 자바 최신 개선 사항으로 DOP를 적용하는 예를 보여줍니다. 애플리케이션 전체가 아닌 일정 계층이나 영역에 DOP를 적용하는 것도 좋습니다. 예를 들어, 도메인 모델은 객체지향 모델링을 적용하더라도 외부와 통신하는 계층만 DOP를 적용하는 것을 고려할 수 있습니다. 경계를 구분할 때는 OOP의 캡슐화를 적극적으로 활용하고 세부 구현에는 DOP를 적용하는 것도 가능합니다. 상속 계층이 깊거나 클래스 내부에 은닉되는 구현이 복잡하고 클수록 OOP는 장점이 부각됩니다. 반면에 상속 깊이가 얕거나 내부 구현이 단순할 때 OOP는 비용만 많이 들고 별 도움이 안 된다고 느껴질 수 있습니다. OOP가 특별히 도움이 되지도 않고 부담이 되지도 않는, 그래서 어느 프로그래밍 패러다임을 사용해도 상관없는 중간 지대도 상당히 클 것입니다. 게츠가 소개한 DOP와 이 책의 DOP는 완전히 동일하지 않습니다. DOP가 클로저 커뮤니티에서 도출된 만큼 DOP의 네 가지 원리에는 클로저 또는 클로저의 모태가 되는 리스프(Lisp)의 특성이 반영돼 있습니다. 클로저는 범용 자료구조를 적극적으로 사용하고 동적 타입이면서 함수형 프로그래밍을 지원하는 현대적인 리스프 방언입니다. 게츠는 DOP의 네 가지 원리에서 두 가지는 수용하면서 정적 타입 언어와 맞지 않는 두 가지는 적절하게 정적 타입 언어의 특징으로 흡수하는 유연성을 보입니다. 그리고 여전히 OOP를 기본으로 삼으면서 DOP를 보조로 사용하도록 권합니다. 게츠가 제시했던 자바용 DOP는 최근에 다음과 같은 (이 책에서 제시하는 원리와 다른) 네 가지 원리로 정리됐습니다. ■ 데이터를 불변하면서도 투명하게 모델링하라. ■ 데이터를 온전히 데이터 그 자체로 모델링하라. ■ 잘못된 상태가 발생하지 않게 하라. ■ 데이터와 동작을 분리하라. 이런 자바의 데이터 지향 프로그래밍 도입 시도는 다른 다중 패러다임 언어에서도 참고가 될 것입니다. 이 외에도 DOP를 실무에 적용하기 위한 부가적인 기법을 함께 소개하지만, 자바의 DOP는 자바의 최신 개선 사항을 소개하는 수준에 머물러 있어 추가적인 논의가 필요합니다. 책을 읽는 동안, 동의하지 않는 부분이 있더라도 일단 책의 안내에 따라 인내심을 갖고 끝까지 따라가볼 것을 권합니다. 특히 부록의 내용은 유용합니다. 이 책의 부록은 본문이 대화를 통한 이야기 형식이라 담아내지 못한 이론적인 내용이 잘 정리된, 또 다른 본문입니다. 이렇게 다 읽고 나서 책의 개념을 어떻게 적용할지 고민해보길 바랍니다. 어떤 분야(또는 어떤 언어)에서는 책에서 제시하는 네 가지 원리를 모두 적용하는 것이 의미가 있을지도 모릅니다. 반면 어떤 경우에는 한두 가지만 의미가 있을 것입니다. 개인적으로 범용 자료구조(특히 이종 맵)와 범용 함수는 (책에서 의사코드처럼 쓰인) 자바스크립트와 같이 맵 리터럴이 있는 동적 타입 언어에서는 자연스러울 수 있어도 정적 타입 언어(적어도 자바)에서는 적잖이 고민하게 될 것입니다. 부록에서는 정적 타입 언어에서 범용 자료 구조와 함수를 사용하는 방법을 모색하지만, 다소 억지스럽고 한계가 있습니다. 저자의 주장과 달리 자바용 범용 함수 라이브러리 같은 생태계도 그리 건실하지 않습니다. 마지막으로, 마이클 T. 나이가드와 라이언 싱어가 쓴 ‘추천의 글’을 이 책을 읽기 전과 후에꼭 읽어보길 바랍니다. 이렇게 책의 의미를 잘 소개한 추천사를 지금껏 본 적이 없다고 느낄 정도로 훌륭한 추천사이기 때문입니다. 특히 나이가드의 추천사는 그의 연륜이 느껴질 정도로 깊이가 있습니다(이 ‘옮긴이의 말’은 두 추천사를 읽을 것을 권하는 이 문단 외에는 쓸모없다고 해도 과언이 아닙니다). 마지막으로, 부족한 번역으로 인해 불편을 끼칠 것에 대해 미리 사과합니다. 그래도 부단히 노력한 결과인 만큼 즐거운 여정에 도움이 되길 바랍니다.

가나다별 l l l l l l l l l l l l l l 기타
국내문학상수상자
국내어린이문학상수상자
해외문학상수상자
해외어린이문학상수상자