쿠버네티스, 클라우드 네이티브, 마이크로서비스 아키텍처 등 최근 클라우드 생태계를 중심으로 개발과 운영을 포괄하는 첨단 기술에 대한 이야기가 여기저기서 들리고 있다. 물론, 간단한 개인 블로그 서비스를 만드는 학습 과정에서 복잡한 개발 기법을 적용해보기란 사실상 불가능하고, 분초를 다투는 MVP 서비스를 만드는 경우에는 그 무엇보다 비즈니스를 달성하기 위한 동작이 먼저이므로 확장 가능성과 안정성을 극대화하기 위한 복잡한 운영 기술을 처음부터 고려할 필요는 없어 보인다. 하지만 복잡하고 낯설다는 이유만으로 신기술에 대한 무조건적인 반대 입장을 펼치기 앞서, 이런 신기술들이 부지불식간에 우리의 일상에 스며들어 이미 어느 정도 자리를 잡고 있는지 확인할 필요가 있다.
여러 첨단 기술 중에서도 상위에 위치한 아키텍처 관점에서는 아무래도 마이크로서비스를 빼놓을 수가 없다. 마이크로서비스 이야기가 나올 때마다 단골 손님으로 등장하는 넷플릭스와 아마존을 제외하고 생각해봐도 월마트, 베스트바이, 쿠팡과 같은 대형 소매업종은 물론이고 우버나 배달의민족 같은 공유 플랫폼 서비스업종, 그리고 뱅크샐러드나 스포티파이 같은 일반 고객을 대상으로 하는 서비스업종에 이르기까지, 어느 정도 업계에서 자리를 잡은 회사라면 마이크로서비스를 직간접으로 고려하고 있거나 이미 도입했다. 마이크로서비스는 개발이나 운영 관점에서 복잡성을 떨어뜨리는 장점을 제공할 뿐만 아니라, 레거시를 클라우드로 전환하는 관점에서도 마이그레이션을 원활하게 만드는 특성이 있기 때문이다.
여기까지는 너무 뻔한 이야기처럼 들릴 것이다. 하지만, 최근에 의외의 곳에서 마이크로서비스를 적용한 사례를 목격했다. 기술적으로 상당히 앞서 있으면서도 보수적인 입장을 취하는 군사 부문에서 마이크로서비스를 채택했다면 믿어지겠는가? 그것도 최첨단 스텔스 폭격기에 말이다. 미 국방성 DSOP 프로그램 홈페이지에 들어가면 잘 정리된 아키텍처 다이어그램이 하나 등장한다(https://software.af.mil/dsop/ 참고).
이 다이어그램이 뜻하는 바는 명징하다. 군사용 소프트웨어와 관련해 애플리케이션 수명주기를 주에서 일 단위로, 개발 과정을 데브옵스로, 애플리케이션 아키텍처를 마이크로서비스로, 배포와 패키징을 컨테이너(도커와 쿠버네티스)로, 인프라스트럭처를 클라우드로 바꾸는 것이다.
2025년에 초기 배치될 B-21 스텔스 폭격기에는 폭격뿐만 아니라 전투 지휘와 정보 수집까지 포괄하는 다목적 임무가 부여될 예정이며, 이에 대응하기 위해 기능별로 서비스를 격리하고 필요에 따라 적재적소에 배포하는 마이크로서비스 아키텍처를 도입했다고 한다(https://www.theregister.com/2020/06/03/kubernetes_b_21_bomber/). 물론 실제 운영 과정에서 쿠버네티스를 사용한 컨테이너 관리는 기본이다. 군사 부문에서 할 수 있다면 민간 부문에서 하지 못할 이유가 있을까?
이렇듯 마이크로서비스는 급변하는 세계에 대응하기 위한 아키텍처로 주목을 받고 있다. 하지만 뭔가 단순하고 간단할 것 같은 이름에 속아서는 안 된다. 마이크로서비스의 '마이크로'가 실제로는 엄청난 엔지니어링과 도메인 지식을 요구한다는 사실을 알고 나면 허탈감을 느끼게 될 것이다. 전작 『마이크로서비스 아키텍처 구축』을 출간하며 마이크로서비스 전도사로 자리잡은 샘 뉴먼은 마이크로서비스에 대한 대중의 이해를 도우려 했던 자신의 시도가 세간의 사람들로 하여금 은총알로 여겨지는 마이크로서비스에 즉시 올라타야만 할 것 같은 시류에 편승하게 만들었다는 사실을 깨달았다. 따라서 좀 더 현실적인 문제에 접근함으로써, 마이크로서비스 아키텍처를 언제 어떤 경우에 도입해야 할지, 어떻게 해야 기존 레거시 시스템을 망가뜨리지 않고 점진적으로 마이그레이션할 수 있을지, 마이크로서비스 아키텍처에 감춰진 복잡한 문제점은 무엇인지 등을 솔직하게 드러내기 위해 이 책을 집필했다고 서문에서 고백한다. 아마도 마이크로서비스 아키텍처를 도입하려고 시도했거나 이미 도입한 많은 회사는 이 책에 언급된 다양한 상황에 직면했을 가능성이 매우 높으며, 앞으로 마이크로서비스를 검토하는 회사도 상황이 크게 다르지는 않을 것으로 본다.
개인적으로 이 책에서 가장 마음에 드는 부분은 3장 '모놀리스 분할'과 4장 '데이터베이스 분해'다. 3장은 레거시 시스템에서 출발해 마이크로서비스로 가는 여정 중에 참고할 내용을 시원하게 풀어낸다. 레거시 시스템을 완전히 버리고 마이크로서비스를 사용해 처음부터 다시 시작하면 성공 확률이 얼마나 될까? 이 책을 읽고 나면 기존 시스템에서 마이크로서비스로 옮기는 방식이 처음부터 마이크로서비스로 진행하는 방식에 비해 훨씬 위험성도 적고 효과도 좋다는 사실을 깨닫게 될 것이다. 이렇게 3장은 레거시에서 마이크로서비스로 마이그레이션할 때 도움을 주는 패턴을 체계적으로 정리한다. 4장은 마이크로서비스 아키텍처를 구성하는 사람들에게 가장 큰 고민거리를 안겨주는 데이터베이스를 집중적으로 다룬다. 마이크로서비스로 마이그레이션할 때 겪는 어려움은 클라우드로 데이터베이스를 마이그레이션할 때 겪는 어려움과 유사한 점이 많지만, 마이크로서비스에서는 단순한 샤딩을 넘어서 업무별로 데이터베이스를 분할해야 하므로 더 큰 장벽이 기다리고 있다.
이런 어려움으로 인해, 기껏 애플리케이션을 분해해놓고 데이터베이스는 공유해서 사용하는 경우가 얼마나 많은가! 그렇다고 죄책감을 느끼지는 말자. 이 책은 완벽한 마이크로서비스를 추구하는 대신 모듈식 모놀리스만으로도 좋은 성과를 올리는 사례도 보여주므로 정말 급진적인 마이크로서비스로 가야 할지 아니면 관리가 용이한 형태의 모놀리스로 남을지를 고민하는 분들께서도 읽어보시면 위안과 도움을 얻으리라고 생각한다. 아무쪼록 이 책이 마이크로서비스라는 강적을 앞에 두고 고민이 많은 개발자와 관리자들에게 오아시스가 되었으면 좋겠다.
작년에 우연치 않게 마이크로서비스로 다양한 프로젝트를 진행하는 여러 개발자분들과 기술적인 내용을 토론할 기회가 많았었는데, 이 책을 번역하면서 마이크로서비스를 채택하는 과정에서 발생하는 현업의 어려움을 이해하는 데 큰 도움이 되었다. 회의와 토론 과정에서 직간접으로 도움을 주신 여러 개발자분들께 지면을 빌려 감사의 말씀을 드린다.
2018년 11월, 네이버의 일본 자회사 라인(http://linecorp.com/)은 자사의 블록체인인 링크체인의 로드맵을 제시했다. 라인은 블록체인과 블록체인을 연결하는 인터체인(interchain)을 구현한 리니어 네트워크 출시에 이어 2019년에는 완전한 퍼블릭 블록체인을 출시할 계획을 공개했으며, 링크에서 동작하는 분산 애플리케이션의 단계별 온체인(on-chain)화 전략을 다음과 같이 정리했다.
1. 링크체인의 기반 코인인 링크(LINK)를 활용한 사용자 기여 보상
2. 서비스 내 링크 결제와 유틸리티 토큰 기능 제공
3. 아이템과 컨텐츠 가치에 대한 토큰화
이렇게 블록체인에 붙어 있는 분산 애플리케이션의 수를 늘리면서 점차 법정 화폐를 대신해 암호 화폐로 결제와 지불을 가능하게 만들어 나갈 경우 서비스 자체를 토큰화하게 되므로 라인을 중심으로 하는 강력한 생태계를 마련할 수 있기 때문에 다른 서비스 업체들이 어떻게 대응할지 귀추가 주목된다. 어떤 업체가 기존 사업이나 서비스를 블록체인과 결합해 헤게모니를 잡고 나면 경쟁 업체로서는 마땅한 대응 방안을 마련할 수 없기 때문에 블록체인을 파괴적인 기술 혁신의 도화선이라고 보는 전문가들도 있다.
이렇게 급변하는 상황에서 우리는 어떻게 대응해야 할까?
가장 먼저 블록체인이 무엇인지 알아보고, 그다음으로 블록체인이 위력을 발휘하는 분야를 이해하고, 마지막으로 각자 몸담고 있는 사업 분야에 블록체인을 적용할 수 있는 범위와 도입에 따른 장단점이 무엇인지 파악해야 한다.
이를 쉽게 풀어서 설명하기 위해 이 책에서는 가상의 사업을 중심으로 블록체인 기술과 투자 방식을 도입하는 과정을 정리하고 회고하는 독특한 스토리텔링 서술 방식을 택함으로써 기존에 출간된 기술이나 암호화폐 중심의 딱딱한 블록체인 서적과는 다르게 좀 더 독자에게 쉽게 다가갈 것이다. 암호화폐의 부작용에만 초점을 맞추거나 휘황찬란한 장밋빛 전망만을 남발하는 선입견 없이, 실제로 현장에서 사업을 진행하는 하나의 도구로서 블록체인을 바라본다면 또 다른 숨겨진 가능성을 발견할지도 모른다.
이 책에서는 맥락이 빠진 상황에서 블록체인이라는 개념을 외치는 대신에 궁합이 잘 맞아 떨어지는 분야에 블록체인을 도입해야 하는 이유와 함께 사업 관점에서 우수한 실행 능력을 강조하고 싶었다. ICO를 성공리에 진행했음에도 불구하고 몇몇 회사들은 사업이 아니라 자금 모집에 초점을 맞추는 바람에 실질적으로 사용자에게 도움이 되는 제품을 출시하지 못했다. 이런 교훈을 타산지석으로 삼기 위해 블록체인에 대한 이해 부족, 사업 경험 부족, 사람들 사이의 불화와 갈등, 기술 외주로 인한 서비스 실패, 실행 역량 부족 등 프로젝트 실패를 이끈 다양한 이유를 정리해서 기술 기업에 도움을 주는 내용으로 전개할 수도 있었지만, 블록체인 기술로 성공할 수 있다는 가능성을 보여주는 기업의 발자취를 정리해서 기술 변화 과정에 성공적으로 적응한 내용으로 전개하는 편이 더욱 생산적이라는 결론을 내렸고, 그 결과 현재와 같은 책의 모습을 갖추게 되었다.
블록체인을 사업에 어떻게 적용할지 궁금한 경영진은 물론이고, 사업 기획과 마케팅을 맡은 실무진까지도 함께 읽을 수 있도록 복잡한 수식과 용어, 어려운 정치와 경제 이론을 최소로 줄이고 (블록체인) 사업과 (블록체인에서 가장 널리 알려진 ICO라는) 투자 관점에서 이해하기 쉽게 기술하려 노력했다. 그렇다고 해서 블록체인 기술을 알고 싶은 기술 실무진에 대한 배려도 잊지 않았다. 다른 문서나 책에서 살짝 언급하고 지나가는 현장에서 중요한 몇 가지 블록체인 기술 포인트를 구체적으로 잡아 내어 현업 관점에서 의사 결정에 도움이 되는 내용을 실어놓았으므로 블록체인 프로젝트를 전개하는 과정에서 꼭 필요한 기술 지식도 습득할 수 있을 것이다.
하루가 다르게 급변하는 세상에서 ICO도 이미 철 지난 한때의 유행으로 여길 수도 있겠지만, 긍정적인 영향을 주었거나 부정적인 영향을 주었거나에 상관없이 어찌되었든 ICO는 많은 사람들에게 블록체인을 처음으로 인식하게 만든 (긍정적인 면에서) 주인공 또는 (부정적인 면에서) 장본인이므로 기록으로 남길 가치는 충분하다는 생각이다.
모든 기술은 가치 중립적인 특성이 있기 때문에 사람이 만들고 사람이 활용하고 사람이 평가할 뿐이다. 블록체인 기술도 마찬가지다. 앞으로 세상이 어떻게 바뀔지 모르므로 혹시라도 블록체인이 스스로의 가치를 확실히 증명하는 시절이 도래할 때 적극적으로 활용하기 위해 주의 깊게 발전 방향을 지켜볼 필요가 있을 것이다. 블록체인이 어떤 경로를 따라 움직이는지 살펴는 과정에서 이 책이 조금이라도 도움이 되면 더 바랄 나위가 없겠다.
블록체인은 분명 새로운 가능성을 열어주는 매력적인 주제이며 현재의 시장이 요구하는 방향이기도 하다. 하지만 공허한 수사만 앞서는 대신 가장 적합한 기술을 가장 적합한 사업 분야에 적용해서 제대로 된 사업 계획서부터 먼저 만들고, 해당 사업에 가장 적합한 토큰 이코노미와 가장 적합한 투자 방식을 고민해서 블록체인 기술과 사업이 잘 융합된 백서를 만들고 실제 동작하는 서비스나 제품을 성공적으로 출시해야만 전문가와 일반인 모두로부터 블록체인 프로젝트의 참된 가치를 인정받을 수 있을 것이다.
감수를 위해 이 책 초고부터 교정지까지 본문을 여러 차례 반복해서 읽게 되었는데 그때마다 엘라스틱 스택의 각기 다른 핵심 기능과 활용법이 눈에 쏙쏙 들어오는 신기한 경험을 했다. 보통 기술서를 여러 번 읽으면 약간은 지루하다는 생각이 들기 마련인데 이 책은 읽을 때마다 뭔가 중요한 내용을 배우고 있다는 느낌을 받았다. 엘라스틱을 한 번도 접한 적이 없는 개발자뿐만 아니라 어느 정도 엘라스틱에 익숙하다고 생각하는 개발자도 이 책을 손에 들면 감수자의 말에 공감하게 될 것이다.
이 책에서는 모든 것을 포괄적으로 설명하기 위해 중요한 내용과 그렇지 않은 내용을 전반에 여기저기 흩트려 놓는 대신, 철저하게 파레토 법칙에 따라 80% 효과를 얻을 수 있는 20%에 집중한다. 따라서 본문 전개 과정에서 속도감과 응집력이 상당히 높다. 또한 카탈로그에 나온 API나 기능 설명에 그치지 않고 핵심을 빠르게 학습하기 위한 좋은 예제가 설명 뒤에 바로 이어지며, 책 전반에 걸쳐 추상적인 이론을 손에 잡히는 구체적인 사례로 바꿔낸다. 엘라스틱 스택을 언제 어디서 어떻게 잘 활용할 수 있는지 고민하면서 인터넷에 올라온 단편적인 지식을 수집하다 지친 분들이라면 이 책이 갈증을 해소해주는 오아시스처럼 보일 것이다.
본문에도 나오지만 엘라스틱 스택은 설치부터 실제 활용까지 그 사용법이 크게 어렵지 않기 때문에 그냥 곧바로 써봐도 될 것 같다는 생각이 들 수도 있다. 하지만 입문하기 쉽다고 해서 마스터하기도 쉽다고 보기는 어렵다. 엘라스틱 스택은 빅데이터 파이프라인 전체를 구축할 수 있는 강력한 기능을 제공하기 때문에 실제 알아야 할 내용이 매우 많으므로, 사용하면서 배우고, 배우면서 사용하는 능동적인 학습이 필수다. 능동적인 학습 과정에서 큰 도움을 주는 이 책의 주요 특성 중 하나는 목적지향적인 설명이다. 앞뒤 맥락 없이 무조건적으로 이런저런 기능이 있다고 설명하는 대신, 이런저런 일을 하려면 엘라스틱의 어떤 기능을 활용해야 할지를 잘 설명한다. 예를 들어, 유사한 기능이 두 가지 있을 때 정확한 차이점과 구체적인 사용법을 알아야 기능이나 비기능(성능과 저장 공간 절약) 측면에서 원하는 목적을 달성할 수 있는데, 이 책에서는 각각에 대해 의도와 핵심을 설명하고 비교를 통해 상황에 맞는 선택지를 제시한다. 또한 개발 과정을 벗어나 실제 운영 과정에서 고려해야 하는 (정말 양보하기 어려운 필수) 사안에 대해서도 풍부한 그림과 시나리오를 활용해 내부 동작 방식까지 파고들면서 그렇게 해야 하는 이유와 구체적인 지침을 명확하게 정리해준다.
이 책에서 숨겨진 주인공은 바로 엘라스틱 스택 활용 부문에 나오는 프로젝트 삼총사다. 빅데이터 관련 프로젝트를 진행할 때 여러 가지 오픈 소스를 활용해 복잡하게 연결하는 대신 엘라스틱 스택만으로 데이터 수집부터 시각화까지 한 번에 끝내는 비법이 궁금했을텐데, 이 책에서는 예제를 위한 예제가 아닌 캐글/트위터/공공데이터에서 가져온 실제 데이터를 토대로 한국어까지 깔끔하게 처리하면서 지도 위에 시각화하는 전 과정을 압축적으로 보여준다. 이 과정에서 엘라스틱 스택을 구성하는 개별 구성요소를 연결하는 방법뿐만 아니라 부드럽게 연계하기 위한 필터 활용은 물론이고 실제 비즈니스 논리 구현 과정에 필요한 프로그래밍에 이르기까지 빠짐없이 다루므로, 엘라스틱 스택을 제대로 활용하는 유스 케이스나 실무 사례로도 손색이 없다는 생각이다.
저자진이 자신들의 풍부한 현업 실무 경험을 바탕으로 심사숙고해서 선별한 내용을 가득 담은 이 책을 지렛대로 삼아, 아무쪼록 엘라스틱 스택의 풍부한 기능과 강력한 성능을 독자 여러분이 마주치는 현업의 문제를 풀어가는 과정에 적극적으로 활용할 수 있으면 좋겠다.
로버트 C 마틴의 『클린 코드: 애자일 소프트웨어 장인 정신』이 출간된 이후로 깨끗한 코드 작성과 리팩토링에 대한 개발자들의 관심은 나날이 높아지고 있다. 가독성 높은 코드가 제공하는 유지보수 편의성과 기능 확장 가능성은 레거시 코드를 다루는 개발자는 물론, 처음부터 프로젝트를 시작하는 개발자들도 추구해야 하는 소프트웨어의 속성으로 인정받고 있다. 이를 위해 다양한 실천 방법과 우수 사례가 공유되고 있으며, 통합개발환경(IDE)의 발전으로 인해 자동화의 혜택까지 얻을 수 있다. 하지만 이렇게 무르익은 분위기와 환경에서도 뭔가 2% 부족함을 느낀다면 딱히 당신만의 문제는 아니다.
다른 여느 프로그래밍 언어와 마찬가지로 파이썬 역시 입문은 쉽고 마스터하기는 어렵다. 특히 여타 프로그래밍 언어와 비교해 파이썬은 고수준 특성으로 인해 처음 문턱을 넘기가 상대적으로 쉽기 때문에 초보 개발자들은 컴퓨터로 할 수 있는 다양한 가능성에 눈을 뜨게 되지만, 막상 실전에 부딪혀 문제를 풀려고 하면 그제서야 파이썬이 결코 만만하지 않다는 사실을 깨닫고 충격에 휩싸이게 된다. 파이썬 언어의 문제일까? 아니면 복잡한 라이브러리와 프레임워크의 문제인가? 아니면 컴퓨터 하부 지식을 모르는 내 기초 역량의 문제인가? 정말 고수들은 어떻게 파이썬을 사용하고 있으며 그 과정에서 남들은 내가 모르는 파이썬의 어떤 비밀을 알고 있을까?
『클린 코드, 이제는 파이썬이다』는 제목에서 잘 드러나듯이 클린 코드를 파이썬에 적용해서 파이썬다운 코드를 만드는 방법을 소개한다. 기존의 클린 코드 관련 서적과 온라인 문서에서 다루는 내용을 파이썬에 그대로 이식하는 대신, 이 책은 초보 개발자가 우수 개발자로 탈바꿈하는 과정에서 반드시 넘어야 하는 장애물을 파악하고 이를 정석대로 해소하는 방법을 다양한 사례와 팁으로 제시한다는 특징이 있다. 이 책은 전문가처럼 정보를 찾고 명령행을 활용하고, 클린 코드에서 중요하게 생각하는 이름을 지으며, 코딩 스타일과 포매팅, 코드 악취 해소, 효율적인 함수 작성, 주석과 타입 힌트에 대해 파이썬다운 지침을 따르고, 파이썬의 기이한 특징과 함정들을 잘 피하기 위한 실전 팁과 현업의 요령을 소개한다. 또한 컴퓨터 전문 지식을 강화하기 위해 각종 프로그래밍 용어, 반드시 알아야 하는 핵심 버전 관리 방법, 알고리즘 성능 측정에 대한 이론과 도구, 객체지향에 대한 설명도 빼놓지 않는다. 앞쪽에서 습득한 지식을 바탕으로 마지막에는, 간단한 게임을 파이썬다운 객체지향 방식으로 확장해 나가는 방안을 단계별로 제시하므로 점진적으로 발전하고 확장 가능한 소프트웨어 개발에 대한 감을 잡을 수 있도록 배려한다.
이 책이 획기적인 돌파구를 마련해주지는 않을지 몰라도, 매일 조금씩 실력을 높이고 싶은 개발자들에게 동기를 부여하고 출발점을 알려주며 도전에 직면했을 때 두려워하지 않도록 기초를 튼튼하게 다지는 내용으로 매우 알차게 구성되어 있다. 이 책을 읽고, 책에서 배운 내용을 실행해보며, 자신만의 색깔로 바꾸는 과정을 반복하다 보면 어느 순간 소프트웨어 전문 개발자로 거듭난 자신을 발견하게 될 것이다. 아무쪼록 독자 여러분의 개발 여정에서 이 책이 훌륭한 스승이자 좋은 벗이 되면 좋겠다.
- 박재호
LLM 애플리케이션 개발을 논하기에 앞서, LLM 애플리케이션이 사람들의 관심을 끌 수밖에 없는 이유에 대해 생각해 볼 필요가 있다. 현재까지 수많은 기술들이 등장했다 사라져 갔는데, 오늘날에도 여전히 사용되고 있는 주요 기술은 개발이나 사용 패러다임을 크게 발전시켰다는 특징이 있다. 그렇다면 LLM 애플리케이션이 주력으로 자리 잡아 개발자 두뇌 속의 필수 공구상자에 들어갈지를 판단하기 위해, 우선 어떤 변화가 일어나고 있는지를 살펴보면 될 것 같다.
먼저 사용자 쪽의 변화부터 시작하자. 지금도 그렇지만 사람들이 뭔가 지식을 획득하기 위해서는 검색을 염두에 둬야 한다. 사용자가 검색 엔진에 키워드나 단어의 조합을 넣으면 마법처럼 해당하는 문서 목록이 나온다. 초기에는 사람들이 전화번호부처럼 한 땀 한 땀 구성해서 품질을 높였지만, 곧바로 정보의 홍수 시대가 도래하면서 필연적으로 자동화가 진행되었고, 가장 대표적인 알타비스타 계열의 검색 엔진은 검색 결과 목록 순위를 매기는 알고리즘이 뛰어나지 않았기에 수많은 목록을 직접 살펴봐야 했었다. 그러다가 우리가 지금도 크게 의존하고 있는 구글이 등장하면서 첫 페이지만 봐도 원하는 목록을 찾을 수 있도록 검색 품질을 크게 개선했다.
하지만 최근에는 검색이 아니라 질문으로 초점이 옮겨가고 있다. 급격하게 돌아가는 바쁜 현대사회에서 목록을 하나씩 열어보는 행위조차도 부담스러워지고 검색 엔진 최적화를 빙자한 오용 사례로 인해 검색 결과 품질도 과거에 비해 지속적으로 하락하는 경향이 있으므로, 차라리 질문을 던진 다음에 내가 원하는 대답을 얻고 싶어 하는 욕구와 맞아떨어졌다고 볼 수 있다. 챗GPT나 구글 제미나이의 경우를 보면 멀티 모달까지 지원하므로 이미지와 텍스트를 조합해서 원하는 질문을 주고받을 수 있게 됐다.
다음으로 머신러닝과 딥러닝의 변화를 살펴볼 필요가 있다. 생성형 AI와 초거대 언어 모델(이하 LLM)이 등장하기 전까지는 대다수 머신러닝이나 딥러닝 모델은 도메인 전용 모델이었다. 다시 말해, 해당 도메인에서 축적된 데이터를 활용해 예측을 하고 통찰을 할 수 있게 협소한 범위의 문제를 제대로 풀도록 연구 개발이 진행됐다. 물론 딥러닝 세상이 시작될 무렵에 이미 빅데이터, 클라우드, GPU 인프라는 있었지만 이를 범용 목적으로 확장할 기술적이고 경제적인 돌파구를 찾지는 못했던 것이다. 예를 들어, 이미지 분야에서는 MNIST 데이터셋을 활용한 숫자 판단과 CIFAR-10 데이터셋을 활용한 다양한 클래스 판단을 시작으로, 실시간으로 객체의 위치를 파악하고 클래스를 판단할 수 있는 YOLO에 이르기까지 다양한 딥러닝 모델이 등장했지만 모두 이미지 분류에 국한된다.
하지만 생성형 AI가 등장하면서 다양한 작업이 가능한 범용적인 모델로 발전하고 있다. 예를 들어 챗GPT는 일반적인 질문뿐만 아니라 의료나 법률 같은 전문적인 질문에도 상당히 잘 대답하며, 멀티 모달을 지원하는 GPT-4V나 4o 같은 고급 모델인 경우에는 표나 이미지에 대한 질문도 곧잘 대답한다. 또한 복잡한 계산이 필요하거나 그래프 출력이 필요한 경우에는 파이썬 코드를 실행 시점에서 만들어 격리된 환경에서 실행한 결과를 보여주기도 하므로 만능 일꾼처럼 여겨지기도 한다. 생성형 AI는 Q&A, 번역, 분류, 요약, 분석, 문체 변경, 감정 분석과 같이 다양한 사용 사례를 보여주고 있으며, 정보 지원과 의사결정 지원을 넘어서 자율적인 사리 판단을 내리는 수준으로 발전을 거듭하고 있다.
마지막으로, 개발자들이 가장 관심이 많을 법한 개발 자체의 변화를 빠뜨릴 수는 없다. 초창기 프로그래밍은 논리 중심으로 돌아갔다. LISP와 같은 함수형 프로그래밍 언어는 수학적 이론을 바탕으로 인간의 계산 능력에 도전했으며, 포트란을 거쳐 파스칼과 C 프로그래밍 언어로 오면서 절차적 방식이 도입됐고, C++를 거쳐 자바로 오면서 객체지향 기법이 도입됐다. 다른 한편, 데이터를 중심으로 발전이 일어났다. SQL은 구조적인 방법으로 테이블 형태의 정형 데이터를 손쉽게 다루게 만들었으며, 빅데이터 시대에 접어들 면서 정형 데이터뿐만 아니라 반정형과 비정형 데이터까지 폭넓게 다룰 수 있게 됐다.
그러던 중 최근에 생성형 AI가 등장하면서 또 다른 변화의 기류가 감지되고 있다. 컴퓨터에 밀접한 언어가 아니라 사람에 밀접한 언어를 활용해 비즈니스 로직을 구사하는 방법이 생긴 것이다! 프롬프트 엔지니어링이라고도 불리는 이런 새로운 기법은 원하는 결과를 얻기 위해 LLM의 입력을 조율하며, 출력 결과를 조정해서 원하는 결과로 유도하게 만든다. 프롬프트는 사람이 사용하는 언어에 가까우므로 적확성을 담보하기는 어렵지만 반대급부로 유연성과 확장성을 얻을 수 있으므로 기존에 상당히 까다롭던 비즈니스 로직을 손쉽게 구현할 수 있는 계기를 만들어 줬다.
이렇듯이 생성형 AI가 등장하면서 여러 가지 변화가 일어났으므로, 개발자들도 여기에 적응하기 위한 준비가 필요하다. 기존의 웹 브라우저(또는 앱) ―WAS(웹 애플리케이션 서버)―데이터베이스(관계형 또는 NoSQL) 구조로 애플리케이션을 개발하고 있다면, 기업 요구사항에 따른 LLM의 사용 사례를 파악하고 아키텍처를 이에 맞춰 변경하는 작업이 필요하다. 특히 여기서 주목해야 하는 기술은 기업에서 최근 관심이 집중되고 있는 검색 증강 생성(이하 RAG)이다. RAG는 기업 내부의 다양한 문서와 데이터를 임베딩이라는 기술을 활용해 벡터 데이터베이스로 지식 기반을 구축한 다음에 사용자가 질문한 대답과 가장 관련이 있는 문서 조각을 지식 기반으로부터 뽑아내 LLM에게 요약 정리하게 만드는 방법으로 동작하는 애플리케이션이다.
기존의 TF/IDF나 BM25 같은 전통적인 알고리즘에 기반한 검색 방식은 희소 벡터(sparse vector)를 사용해 문장의 단어(키워드)를 인코딩한다면, RAG에서 사용하는 의미(semantic) 검색은 고밀도 벡터(dense vector)를 사용해 단어의 추상적인 의미와 관계를 인코딩하므로 언어 처리에 강점이 있는 LLM과 궁합이 무척 잘 맞는다고 볼 수 있다. RAG는 클로드 섀넌이 1950년대에 주창한 정보 엔트로피 개념을 본격적으로 현실화하는 좋은 사례로 볼 수 있으며, 다양한 의미를 포함하는 정보를 처리하기 위해 임베딩과 LLM이라는 양대 기 술을 적절하게 조합해 최고의 성능을 이끌어 내고 있으므로 개발자들은 이 기술 생태계 자체를 살펴보는 것만으로도 많은 영감을 얻을 수 있을 것이다.
이 책은 LLM의 기본 아키텍처에서 출발해 애플리케이션의 요구사항에 맞춰 LLM을 길들이고 제한된 컴퓨팅 환경에서 동작하게 경량화해서 원활하게 서빙하게끔 기초를 다진 다음에 RAG라는 LLM의 대표적인 애플리케이션을 만드는 방법을 차근차근 설명한다. 여기서 끝나지 않고 실제 운영 과정에서 부딪히는 어려움을 해소하는 방법과 멀티 모달과 더불어 에이전트 같은 고급 주제까지 다룬다. 즉 LLM 시대를 맞이하여 필수적으로 갖춰야 하는 개발 지식을 이론과 실무 양쪽 관점에서 설명하고 있으므로, 새로운 패러다임에 적응하고자 하는 개발자들에게 가뭄의 단비처럼 다가올 것이다. 오늘도 끊임없이 연구 개발에 정진하고 있는 모든 개발자에게 강력하게 추천한다. - 감수의 글