아마존웹서비스(AWS) 양호철 솔루션즈 아키텍트

아마존웹서비스(AWS) 양호철 솔루션즈 아키텍트
아마존웹서비스(AWS) 양호철 솔루션즈 아키텍트

[아이티데일리] 바야흐로 생성형 AI(Generative AI)의 시대다. GPT 모델의 등장 이후, 우리 삶 속의 다양한 인공지능들이 부각되며 많은 변화를 겪고 있다. 생활 속 다양한 분야의 전문가들이 대체될 것이라는 우려와 함께, 새로운 산업혁명이자 패러다임의 변화라는 기대감이 공존하고 있다. 우리 IT 전문가들은 이미 다양한 인공지능 서비스와 기능들을 활용해 왔기에, 개발자들에게 있어 생성형 AI는 기존 인공지능과 어떤 차이점이 있을지 궁금해할 것이다.

생성형 AI는 기존 인공지능 기술과는 다른 새로운 패러다임이다. 기존 인공지능은 주어진 데이터에서 패턴을 학습해 분류하거나 예측하는 등 다소 단순한 결과를 만들어내는 역할을 수행했지만, 생성형 AI는 자연어, 비정형 데이터 등으로부터 대화, 이미지, 동영상, 음악 등 다소 복잡하고 또 새로운 콘텐츠를 생성할 수 있다.

생성형 AI의 핵심 기술은 대규모 언어모델(Large Language Model; LLM)이다. LLM은 수많은 파라미터를 가진 심층 신경망 모델로, 방대한 양의 텍스트 데이터를 학습해 자연어의 패턴과 의미를 내재화한다. LLM은 주어진 프롬프트에 대해 문맥을 파악하고, 확률적 모델링을 기반으로 새로운 텍스트를 생성할 수 있다.

기존에는 각 기업이 목적에 맞게 인공지능 모델을 직접 학습시키고 활용하는 방식이었지만, LLM은 엄청난 컴퓨팅 자원이 필요하므로 일반 기업에서 독자적으로 구축하기 어렵다. 따라서 소위 빅테크 기업에서 제공하는 LLM을 활용하거나, 공개된 모델을 필요에 따라 미세조정(fine-tuning)해 각자의 비즈니스 모델에 맞게 조정해 사용할 수 있다.

본 기고문에서는 개발자들이 이러한 생성형 AI를 실제 업무에서 활용할 수 있도록, 소프트웨어 개발 수명주기(Software Development Life Cycle; SDLC)를 기준으로 개발자들의 소프트웨어 개발과 생성형 AI의 활용 방안을 살펴보고자 한다.

소프트웨어 개발 수명 주기는 우수한 품질의 소프트웨어를 설계, 개발 및 테스트하는 데 사용되는 구조화된 프로세스를 의미하며, 계획, 설계, 구현, 테스트, 그리고 운영 및 유지보수의 다섯 단계로 구성된다. 운영 단계에서 발생되는 데이터를 바탕으로 다시 새로운 기능 혹은 서비스의 계획 단계가 시작된다.

1. 계획(Planning)

개발자가 본격적으로 투입되는 것은 요구사항의 구현(implementation) 단계일 것이다. 하지만 계획 및 요구사항 분석 단계에서도 개발팀의 개입이 필요하다.

우선 다양한 도구 활용을 통해 생산성을 향상시킬 수 있다. 새로운 서비스나 상품을 기획할 때에 생각보다 많은 시간을 자료 정리, 적절한 이미지 탐색, 레퍼런스 확보 등에 사용한다. 또한 가상의 사용자를 페르소나로 지정하여 새로운 이야기를 만들어내곤 한다. 생성형 AI는 다양한 종류의 문서를 취합하고 하나의 인사이트를 발견하는 데 활용될 수 있다. 또한 이미지 생성 도구들을 활용하면, 목적에 맞는 이미지를 하나하나 찾지 않고도 유의미한 샘플 이미지 또는 디자인을 생성할 수 있다.

본문의 이미지는 스테이블 디퓨전(Stable Diffusion) 모델에게 “실시간 야구 중계 애플리케이션의 디자인”을 프롬프트로 요청한 결과다. 글로 구성된 기획서보다 이렇게 디자인을 공유하게 되면 개발자, 디자이너 모두 소통을 위한 업무 속도가 빨라질 것이다.

기획 업무 외에도, 프로토타입 개발에도 생성형 AI를 활용할 수 있다. 단순한 기능을 시연하려 할 때도 생각보다 많은 전문 인력들이 투입된다. 단순한 프롬프트만으로 프로토타입을 위한 소스코드를 작성할 수 있으며, 이를 통해 개발팀의 많은 개입 없이도 기획 단계에서 프로토타입의 시연이 가능하다. 또는, API 문서를 LLM에 전달하고 이를 바탕으로 간단한 애플리케이션을 개발하도록 할 수 있다ⅳ.

사용자 데이터의 분석을 위해 아마 많은 전문가들을 투입하고 비용을 할애하고 있을 것이다. 특히 데이터의 시각화를 위해 BI(Business Intelligence) 툴을 사용해 데이터를 인사이트로 빠르게 전환시키기 위해 노력할 것이다.

BI 전문가들은 이미 AI가 만들어주는 대시보드에 익숙할 것이다. BI 툴들은 다양한 기업에서 선호되는 형태를 기준으로 대시보드를 제공하고 있다. 여기에서 한 걸음 나아가, 이제 생성형 AI를 통해 자연어를 쿼리로, 쿼리를 통해 데이터를 추출해 주고 있다. 데이터 과학자들과 BI 전문가들은 이제 그들의 언어로, 툴에 대한 기술 지원 없이도 원하는 형태의 결과를 도출할 수 있다. (안타깝게도, 아직은 영어가 더 유리하다.)

2. 설계(Design)

제공된 기획안에 맞춰 아키텍트의 설계가 시작된다. 단순한 서비스나 유지보수의 경우 한 두 장 정도의 기획서가 전달되지만, 대규모 시스템에 대한 개발이 진행될 때에는 한 번에 읽고 이해하기 어려운 정도의 문서가 전달된다. 때로는 여러 기획안을 동시에 고려하며 하나의 시스템으로 통합해야 할 상황이 생기기도 한다.

제공된 기획안과 컴플라이언스 문서 등을 하나의 지식 기반(knowledge base)으로 만들고 인공지능에게 질의하는 간단한 검색 엔진을 구축할 수 있다. 검색 증강 생성(RAG, Retrieval Augmented Generation)이라는 기술을 활용하면 내가 가진 문서를 문맥 중심으로 검색해 적절한 답변을 생성해 준다. 생성형 AI에게 부족한 고유 데이터를 지식 기반을 통해 제공해 주고, 기존 검색의 한계인 문맥 검색과 결과 생성을 생성형 AI에게 맡기면 지식 기반을 근거로 한 결과물을 만들어준다. 최근 RAG에 관해 수많은 연구가 진행되고 있고, 보다 높은 정확도와 활용을 위한 기술들이 고급 RAG(Advanced RAG) 형태로 공개되고 있다.

또한 애플리케이션의 한 부분으로 LLM을 활용할 수도 있다. 수많은 비정형 데이터를 분석하고 그 내용을 추론하는 애플리케이션을 직접 개발하는 것은 매우 많은 비용을 필요로 한다. 나스닥(Nasdaq)의 금융수사팀인 베라핀(Verafin)은 생성형 AI를 활용해 수많은 은행에서 발생되는 비정형 데이터들을 분석, 통합해 수사관들에게 금융 범죄 의심 데이터를 전달한다.


3. 구현(Implementation)

이제 본격적으로 개발팀이 투입되는 시기다. 다양한 경험과 전문성을 가진 개발팀은 앞서 정의된 기획서와 제공되는 설계 문서에 따라 코드로 이를 작성한다.

이제는 많은 개발자들이 코드 어시스턴트(code assistant)의 도움을 받는다. 코드 어시스턴트들은 다양한 언어를 학습하고 질문에 적합한 코드 조각(code snippet)을 생성해 제공한다.

동료가 작성한 코드에 대해 이해가 필요할 때에도 생성형 AI는 부족한 주석을 대체해줄 수 있다. 아래의 테스트 및 통합 단계에서도 소개하겠지만, 해당 기능에 대한 테스트 코드의 생성을 요청할 수도 있다. 생성된 테스트 코드를 통해 작성된 소스코드의 동작을 이해하고 비즈니스 로직에 맞게 재사용하거나 리팩토링 할 수 있게 된다.

생성형 AI를 활용한 코드리뷰 또한 도입을 검토해 볼 수 있다. 작성된 코드의 목적, 최적화, 보안 취약성 등을 분석할 수 있도록 프롬프트를 작성하고 파이프라인 내에 포함시킬 수 있다.

이러한 코드 어시스턴트의 활용은 전체적인 개발 속도를 향상시킬 수 있겠지만, 동시에 많은 개발자들의 기본기를 약하게 만들 수도 있다. 언제나 강한 힘에는 강한 책임이 따르기 마련이고, 우리가 현재 어디에 집중해야 할지, 어떤 수준의 도움을 받는 것이 적절한지에 대한 깊은 고민이 필요하다.

또한 사람의 실수와 AI의 환각 양쪽 모두의 위험성을 검토해야 한다. 사람은 실수를 하고, 실수를 줄이기 위해 자동화를 한다. AI는 잘못된 결과물을 발생시킬 수 있기 때문에 그 결과물이 의도에 맞는 것인지 끊임없이 검증해야 한다.


4. 테스트(Test)

올해 초 자바(Java)의 아버지 제임스 고슬링(James Gosling) 전 아마존(Amazon) 기술 고문이 한국에 방문했다. (현재는 은퇴했다.) “생성형 AI 시대가 많은 코드를 만들어내고 개발자들에게 영향을 주고 있다. 앞으로 개발자들은 어떻게 해야 할까?”라는 질문에, 그는 “서비스의 본질인 비즈니스 로직은 직접 작성하되, 테스트 코드의 작성을 도움 받는 것이 좋을 것 같다”고 조언했다.

규모가 크고, 복잡한 애플리케이션일수록 테스트 코드의 작성이 중요하다. 테스트 코드는 주석이나 문서와 달리 소스코드와 통합되며, 동시에 다른 개발자들과 의사소통하기에 가장 좋은 도구다. 하지만 테스트 코드는 비즈니스 로직에 비해 중요도가 낮고, 작성하는 데에 시간이 많이 필요하다. 최근 IDE에서는 생성형 AI 툴이 플러그인으로 제공되며, 비즈니스 로직에 대한 테스트 코드 작성을 요청하면 손쉽게 테스트 코드가 생성된다.

테스트 주도 개발(Test-driven Development; TDD)이 훌륭한 철학에도 불구하고 현실적인 벽에 부딪힌 것은 대부분의 개발자들이 비즈니스 로직을 만들기에도 충분히 바빠 테스트 코드를 작성하기 어렵다는 점과, 실제 소스코드 없이 훌륭한 테스트 코드만을 작성하는 것이 의외로 쉽지 않다는 점 때문이다. TDD를 위한 기본 테스트 코드의 경우에도 생성형 AI 도구를 통해 테스트 코드의 초고를 받을 수 있다.


5. 배포 및 운영(Deployment & Maintenance)

소스코드를 작성하는 것으로 개발자의 업무가 끝나는 것은 아니다. 서비스가 라이브 단계에 들어가면서부터 사용자와 팀의 새로운 요구사항 반영, 운영 상황에서 발생하는 문제들에 대한 트러블 슈팅, 보안 취약성 해결 및 새로운 프레임워크의 적용 등 많은 업무가 여러분을 기다리고 있다.

먼저 트러블슈팅 단계에 대해 들여다보자. 문제가 발생하면 오류 로그와 그 시간대의 트래픽을 수집하고, 기존 코드의 변경점들을 살펴본다. 우리가 작성한 오류 로그의 경우 즉각적으로 인지할 수 있지만, 대부분은 프레임워크 또는 런타임에서 오류를 발생시킨다. 오류 스택을 타고 들어가며 비즈니스 로직을 파악할 수도 있지만, 스택 트레이스(stack trace)와 오류 메시지를 통해 1차적인 트러블슈팅 또한 가능하다.

런타임 및 프레임워크의 혁신 속도는 전보다 훨씬 빨라졌다. 예를 들어 자바 LTS 버전은 8버전에서 11버전까지 4년의 기간이 소요됐지만, 현재 21버전은 17버전 이후 2년 만에 발표됐다. (물론 자바의 라이선스 정책 변경 등도 중요한 이유다.)

점차 많은 라이브러리의 지원 종료(end-of-support) 이슈가 발생되고 구버전의 보안취약성이 이슈가 되는 만큼, 최신 버전으로의 마이그레이션은 더욱 잦아지지만 이는 많은 인력을 필요로 한다.

최근 코드 어시스턴트들은 이러한 런타임 버전 업그레이드를 자동화해 제공하고 있다. 높은 비용과 잦은 패치 등으로 인해 점차 쌓여가는 기술부채를 없애기 위해, 생성형 AI의 도움을 받아 과제를 경감할 수 있다.

소프트웨어 개발 생명주기를 기준으로 개발자들이 생성형 AI를 활용할 수 있는 상황들을 소개했다. 단계를 중심으로 설명하다 보니 다소 경직된, 예를 들어 폭포수 모델과 같은 형태로만 적용 가능할 것이라 생각할 수 있겠지만, 이 소프트웨어 개발 생명주기 원칙은 애자일 개발 방법론에서도 활용할 수 있다. 폭포수 모델에서는 대규모 프로세스 모델을 기준으로 단계를 나눠 개발하지만, 애자일 모델에서는 개발 라이프 사이클을 더 작은 부분으로 나누게 되고, 이를 증분 및 반복하는 과정을 거치게 된다. 애자일 프로세스를 가속화하기 위해 생성형 AI를 활용할 수도 있다. 예컨대, 데일리 스크럼에 대한 요약을 챗봇으로 제공하거나, 다양한 사용자 데이터를 시각화 하기 위해 생성형 AI를 사용하는 방법 등이 있겠다.

단순 작업, 반복 작업, 지루하고 싫어하는 일들을 AI 도구들을 통해 자동화하고 해결한다면 우리는 보다 새로운 혁신과 제품 그 자체에 도전하고 집중할 수 있을 것이다. 이미 변화는 시작되었고 산업의 발전 속도는 더욱 빨라질 것이다.

‘은빛 총알은 없다(No silver bullet)’는 오랜 격언처럼 생성형 AI도 만병통치약이 될 수는 없다. 생성형 AI와 인공지능에 대한 절대적인 믿음보다는, 각각의 메커니즘에 대해 이해하고 활용할 수 있는 도구들을 적극적으로 활용해 비즈니스에 역량을 집중할 수 있는 환경을 준비하면 좋을 것이다.

 

참조

ⅰ) AI시대 본격화에 대비한 산업인력양성 과제 -인공지능 시대 일자리 미래와 인재양성 전략 https://eiec.kdi.re.kr/policy/domesticView.do?ac=0000182786

ⅱ) 생성형 AI란 무엇인가요? https://aws.amazon.com/ko/what-is/generative-ai/

ⅲ) 소프트웨어 개발 생명주기(SDLC)란 무엇인가요? https://aws.amazon.com/ko/what-is/sdlc

ⅳ) Langchain – Interacting with APIs https://python.langchain.com/v0.1/docs/use_cases/apis/

ⅴ) Amazon QuickSight 생성형 비지니스 인텔리전스 (Generative BI) 기능 발표https://aws.amazon.com/ko/blogs/korea/announcing-generative-bi-capabilities-in-amazon-quicksight/

ⅵ) Hugging Face - RAG Evaluation https://huggingface.co/learn/cookbook/en/rag_evaluation

ⅶ) 17 (Advanced) RAG Techniques to Turn Your LLM App Prototype into a Production-Ready Solution https://towardsdatascience.com/17-advanced-rag-techniques-to-turn-your-rag-app-prototype-into-a-production-ready-solution-5a048e36cdc8

ⅷ) AWS re:Invent 2023 - How to deliver business value in financial services with generative AI https://www.youtube.com/watch?v=W4Xd8mPqqKU

ⅸ) Test Driven Development with Amazon Q Developer https://community.aws/content/2freQx3PAGvuHlULJ2kJ57WP34E

ⅹ) Which Version of JDK Should I Use? https://whichjdk.com/

ⅺ) Upgrade your Java applications with Amazon Q Code Transformation https://aws.amazon.com/ko/blogs/aws/upgrade-your-java-applications-with-amazon-q-code-transformation-preview/

ⅻ) Software Development Life Cycle AGILE vs Traditional Approaches http://ku-fpg.github.io/files/agile-traditional.pdf

저작권자 © 아이티데일리 무단전재 및 재배포 금지