본문 바로가기

블로그

LG CNS 기술블로그 DX Lounge에서 최신 IT 소식을 만나보세요!

클라우드

테스트 자동화로 고객만족 100% 이끌어낸다

2023.03.29

최근 인공지능 챗봇 ChatGPT가 화제입니다. ChatGPT는 미국 샌프란시스코에 위치한 오픈 AI에서 2022년 11월 30일에 출시한 서비스인데요. 단 두 달 만에 누적 사용자 1억 명을 돌파했으며, 사용 만족도 또한 높게 나타났습니다.

오픈 AI는 어떻게 이런 짧은 시간 내 전 세계에 고품질의 AI 서비스를 선보일 수 있었을까요? 그 비결은 끊임없는 서비스 개선과 테스트에 있을 것입니다. 이번 글에서는 고객이 만족하는 높은 품질의 서비스를 계속 유지할 수 있는 ‘테스트 자동화’에 대해 소개하겠습니다. LG CNS의 테스트 자동화 적용 사례부터 다양한 기법까지! 고품질의 서비스를 위한 100% 테스트 자동화 적용에 대해 자세히 알아보겠습니다.

LG CNS의 테스트 자동화 적용 사례

LG CNS는 최신 DX 기술을 적용한 IT 시스템 구축을 통해 고객에게 최적의 가치를 전달합니다. 클라우드 기술을 활용해 CI/CD(Continuous Integration/Continuous Delivery, 지속 통합과 배포)와 테스트 자동화를 애자일(Agile, 급변하는 환경과 상황에 맞춰 빠르고 유연하게 일하는 방식) 개발 방식으로 제공하고 있는데요. 이제 IT 시스템 구축에 있어 테스트 자동화는 선택이 아닌 필수입니다. 여기서 테스트 자동화란 테스트 실행뿐만 아니라 이와 관련된 프로세스를 자동화하여 일련의 테스트 활동을 수행하는 것을 말합니다. 이를 위해서는 CI/CD 도구가 필요하며, 자동화 테스트 도구나 프레임워크로 작성된 테스트 케이스가 CI/CD와 연결되어야 합니다. CI/CD 도구는 테스트를 실행하고 결과를 보고하며, 그 결과에 따라 이후 단계를 자동으로 결정합니다. 그럼 실제로 LG CNS가 테스트 자동화를 적용한 성공 사례 3가지를 소개해 드리겠습니다.

  • 첫째, 2020년 초에 출시된 LG 방문 예약 서비스 사례입니다. 해당 시스템은 LG그룹 방문객에게 간편하고 친절한 서비스와 강화된 보안성을 제공하는 서비스입니다. 클라우드 기술, 지속 통합과 배포, 테스트 자동화, 애자일 개발 문화를 결합한 대표 사례입니다.
  • 둘째, LG CNS의 서비스형 소프트웨어(SaaS, Software as a Service) 플랫폼인 SINGLEX(싱글렉스)도 테스트 자동화의 성공 사례입니다. 5개 개발팀이 2주마다 새로운 기능을 만들고 통합했습니다. 배포하기 전, 테스트를 자동화해 높은 품질의 기능을 출시할 수 있었습니다.
  • 셋째, 2022년 LG CNS는 국내 B사의 NFT(Non-Fungible Token, 대체 불가능 토큰) 플랫폼 구축 프로젝트에 참여했습니다. LG CNS는 테스트 자동화를 통해 변화에 빠르게 대응할 수 있었는데요. 최종 소비자 요구사항의 변화에 맞춰 동작하는 기능을 계속해서 개발했습니다. 그리고 안정적인 기능 출시를 위해 테스트 자동화를 활용했습니다.

테스트 자동화를 적용하기 어려운 이유

[그림1] 빌드 횟수에 따른 매뉴얼 테스트와 테스트 자동화의 비용 (출처: smartbear)

테스트 자동화는 많은 장점이 있지만 개발 현장에 적용하기 어려운 이유가 있습니다. 그중 가장 큰 세 가지 이유는 아래와 같습니다.

  • 첫째, 장기적 효과를 위해 초기 투자가 필요합니다. 단기적으로는 수동 테스트보다 시간과 비용이 더 들 수 있습니다.
  • 둘째, 기술과 지식이 요구됩니다. 테스트 자동화를 하려면 관련된 도구와 프레임워크(Framework, 소프트웨어의 구체적 기능에 해당하는 부분의 설계와 구현을 재사용할 수 있도록 제공하는 소프트웨어 환경), 관련 기법과 기술을 알아야 합니다.
  • 셋째, 의사소통과 협업이 필수입니다. 테스트 자동화는 개발팀, 관리 조직, 고객 등이 함께 해야 하는 일입니다. 그러므로 조직 내에서 의사소통과 협업이 부족하면 고객의 요구사항이나 기대치에 맞지 않거나 역할이 명확하지 않아 문제가 생길 수 있습니다.

테스트 자동화를 위한 노력

LG CNS는 소프트웨어 테스트 자동화를 성공적으로 적용하기 위해 세 가지 노력을 했습니다.

  • 첫째, LG CNS의 경영진과 실무진이 적극적으로 의사소통했습니다. LG CNS는 IT 기술과 산업 트렌드의 변화에 대한 도전과 혁신을 추구하고 있습니다. 이를 위해 경영진은 새로운 개발 방법론과 현대적 기술을 빠르게 적용하도록 실무진을 지원했습니다. 또한 시스템 개발에서는 애자일 방법론, 클라우드 기술, 테스트 자동화, 지속적인 통합과 배포를 기본적으로 채택하기로 했습니다.
  • 둘째, LG CNS는 지속해서 첨단 기술과 지식을 학습했습니다. 개발팀은 전문 기술과 지식을 보유한 인재들로 구성했습니다. 현대적 IT 기술에 익숙하지 않은 직원들도 LG CNS의 교육 제도와 프로그램을 활용해 역량을 강화할 수 있었습니다. 고객들 역시 LG CNS의 다양한 프로그램을 이용해 기술 역량을 향상할 수 있었습니다.
  • 셋째, LG CNS는 의사소통과 협업을 위한 환경을 조성했습니다. Confluence, JIRA, Zoom, Microsoft Teams, Slack 등의 협업 도구를 활용해 실시간으로 소통하고 작업을 빠르게 진행했습니다. 애자일 방법론을 적용해 요구사항이 변해도 빠르게 개발하고 피드백을 받아 테스트 자동화를 유지할 수 있도록 했습니다.

그렇다면 LG CNS가 어떻게 테스트 자동화를 적용했는지 단계별 테스트 자동화 기법을 통해 알아보겠습니다.

단계별 테스트 자동화 기법

[그림2] LG CNS의 단계별 테스트 자동화 기법

새로운 IT 기술이 부상할 때마다, LG CNS는 시스템 통합 역량으로 체계적인 소프트웨어 테스트 기법을 현장에 적용했습니다. 앞서 설명한 LG CNS의 사례에 실제로 적용된 테스트 기법 6가지를 알려드리겠습니다.

  • Static Analysis

Static Analysis(정적 분석)는 소스 코드의 구문 오류나 취약성을 분석하는 방법입니다. SonarQube(소나큐브)와 같은 오픈소스 도구나 프로그래밍 언어별로 제공되는 상용 제품을 사용할 수 있습니다. 정적 분석에서 가장 중요한 점은 CI(지속 통합) 도구가 정적 분석을 자동으로 실행하도록 구축하는 것입니다. 담당자가 이를 수동으로 하지 않도록 말입니다. 따라서 정기적인 시간에 따라 자동으로 실행되게끔 하는 것보단, 소스 코드가 변경될 때마다 정적 분석이 동작하게 하는 것이 좋습니다. TypeScript, JavaScript, Python, Rust 등의 현대적 프로그래밍 언어는 다양한 Lint(린트, C언어의 원시 프로그램을 읽어 오류가 있는지 검사하는 프로그램)나 Formatting(포매팅, 플로피 디스크나 하드 디스크에 데이터를 기록할 수 있게 초기화하는 작업) 도구가 있는데요. 이들은 CI 도구와 통합하는 것이 좋습니다.

  • Unit Test

Unit Test(단위 테스트)는 프로그램의 작은 기능이 의도한 대로 동작하는지 확인하는 시험 방법입니다. 단위 테스트에는 두 가지 종류가 있는데요. 첫 번째는 실제 프로그램을 실행해 사람이 직접 기능을 시험하는 방법입니다. 두 번째는 기능을 구현한 코드에 대응하는 테스트 코드를 작성해 자동으로 시험하는 방법입니다.

LG CNS는 두 번째 방법의 단위 테스트로 자동화를 구현합니다. 단위 테스트는 기능 코드와 함께 작성 및 변경돼야 하며, 기능 코드와 같은 생명 주기를 가집니다. 단위 테스트는 CI 도구와 연동해 소스 코드가 통합될 때마다 자동으로 실행됩니다. 소스 코드는 모든 단위 테스트가 성공된 경우에만 기존 코드와 통합해야 합니다. 만약 실패한 테스트 코드가 통합되면 최종 사용자에게 오류가 전달될 수 있기 때문입니다. 테스트 결과는 CI 도구를 통해 협업 도구에 보고되고 보고서도 자동으로 작성됩니다. 결과는 모두에게 공개돼 구성원 간의 신뢰를 높입니다.

단위 테스트의 효과를 높이기 위해 LG CNS는 2가지 방법을 사용합니다. 첫째는 구성원 간 코드 리뷰를 통해 잘못된 테스트 코드를 제거하고 코드의 질을 개선합니다. 둘째는 코드 커버리지를 설정해 무효한 테스트 작성을 방지합니다. 코드 커버리지는 100%가 아닌 현장의 상황에 맞게 적절한 범위와 수준을 정하고 점진적으로 높여 나가야 합니다. 코드 커버리지는 목표 수준을 반드시 정하고, 목표 수준 미달 시, CI 도구에서 코드 통합을 막아야 합니다.

  • Module & Smoke Test

애플리케이션의 함수나 메소드(Method, 객체지향 프로그래밍 언어에서 클래스 혹은 객체에 소속된 서브 루틴)보다 한 단계 높은 기능(Functionality) 묶음을 ‘모듈’ 또는 ‘컴포넌트’라고 합니다. 하나의 기능을 수행하는 모듈이 정상으로 동작하는지 확인하는 것을 모듈 테스트(Module Test)라고 하는데요. 이때 기능성, 정합성, 결함 존재 여부를 모듈 별로 단독으로 수행하는 것이 핵심입니다. 화면 모듈 테스트는 UI 형태의 테스트가 되며, 서버의 서비스 모듈 테스트는 API(Application Programming Interface, 응용프로그램과 운영체제의 통신을 쉽게 하기 위한 연결 인터페이스) 형태의 테스트가 됩니다. 단위 테스트가 독립적으로 테스트하는 것처럼, 모듈 테스트도 목킹(Mocking, 단위 테스트를 작성할 때 외부에 의존하는 부분을 임의의 가짜로 대체하는 기법)이라는 기법을 사용해 독립적으로 수행합니다. 반대로 스모크 테스트(Smoke Test)는 상호 관련된 모듈이 연결된 채로 테스트를 실행하여 의도한 기능이 정상적으로 동작하는지 확인하는 테스트입니다. 두 가지 테스트에 쓰이는 UI Test와 API Test 기법은 하기에 설명 드리겠습니다.

  • API Test

스마트폰의 보급으로 서버는 iOS, Android, TV, PC 등 다양한 단말기를 지원하게 됐습니다. 이로써 서버/클라이언트 아키텍처는 IT 시스템의 표준이 됐습니다. 특히 RESTful API(두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하도록 해주는 인터페이스)가 서버와 클라이언트 간 통신 표준으로 사용되고 있는데요. 따라서 클라이언트 없이 서버의 API를 테스트하는 것이 매우 중요해졌습니다. 이를 API Test라고 부르며, 이는 실제로 배포된 서버 기능을 실행하는 테스트입니다. API Test는 코드 수준에서 실행하는 단위 테스트와는 다릅니다. 즉, 서버가 구동만 돼 있으면 의도한 기능을 언제든 시험할 수 있죠. 따라서 API Test를 하려면 구동된 서버가 필요합니다. LG CNS의 클라우드 기술과 컨테이너 기술은 이를 어디서든 가능하게 해줍니다. 많은 테스트를 수행하면 수행할수록 고품질 서비스를 지속적으로 출시할 수 있어, API Test 도구로는 Postman이 주로 사용됩니다. Insomina나 Apache JMeter도 사용할 수 있습니다. LG CNS의 목표는 API Test를 CI 도구에 연동해 서버 기능이 추가되거나 변경될 때마다 실행할 수 있게 하는 것입니다. Postman은 Newman이라는 Command line(커맨드 라인, 텍스트 기반 응용 프로그램) 도구를 이용하면 CI 도구에 쉽게 연동할 수 있습니다.

  • Health Check

마이크로 서비스 아키텍처는 서버/클라이언트 아키텍처의 발전 형태로 비즈니스 요구 사항을 빠르고 안정적으로 출시하게 해줬습니다. 하지만 마이크로 서비스를 활용한 개발, 테스트, 운영 등 다양한 환경과 배포 상황에 따른 영향도를 파악해야 합니다. LG CNS는 배포 후 서비스가 정상적으로 동작하는지 확인하기 위해 Health Check라는 간단한 테스트 단계를 수행합니다. 이를 통해 배포와 출시에 발생할 수 있는 장애 전파를 막을 수 있습니다. LG CNS의 목표는 CD 도구에 Health Check가 연동돼 모든 서버 배포 시 자동으로 실행되게 하는 것입니다. 마이크로 서비스는 환경별로 순차적으로 배포됩니다. 그러므로 문제가 발생하면 연속해서 배포되지 않아 안전한 개발 절차를 유지할 수 있습니다.

  • UI Test

UI Test는 비용과 시간이 많이 드는 항목입니다. UI Test는 심미성과 기능성으로 나눠 생각해야 합니다. 심미성 테스트는 객관적인 기준을 정하기 어렵기 때문에 주로 전문가들이 수동 테스트를 수행합니다. 만약 웹 시스템이라면 웹 접근성 국내 표준 체크리스트를 활용할 수 있습니다. 또한 UI Test는 주요 기능에 초점을 맞추는 것이 중요한데요. 핵심 영역인 로그인 기능, 결제 기능, 송금 기능 등을 우선적으로 자동화하면 시간과 비용을 절약할 수 있습니다. Cypress와 Puppeteer 같은 오픈소스 도구가 현장에서 많이 사용되고 있습니다.

테스트 자동화의 새로운 경험 & 효과

[그림 3] DevOps 소프트웨어 개발 주기와 지속적 테스트 위치 (출처: globalapptesting)

테스트 자동화를 도입하면서 LG CNS는 새로운 경험과 효과를 얻었습니다.

  • 첫째, 새로운 서비스 개발에 자신감을 갖게 됐습니다. LG CNS가 만든 코드와 기능 통합에 확신을 가질 수 있었기 때문입니다. 테스트 자동화는 코드 변경 시마다 실행돼 결과를 즉시 알려주기 때문에 혹여 잘못될까 걱정할 필요가 없었습니다.
  • 둘째, 구성원 간의 신뢰와 믿음을 증진시켰습니다. CI/CD 도구를 도입하면 코드 변경 시마다 전체 테스트 코드를 자동으로 실행하고 실패하면 통합과 배포를 중단합니다. 테스트 결과 리포트와 로그(Log, IT에서 발생되는 모든 정보를 시간에 따라 남겨둔 데이터)도 즉시 확인할 수 있었습니다. 이는 시스템 개선을 위한 다양한 시도와 실험을 안심하고 시도할 수 있게 했으며, 구성원 간의 신뢰를 높이는 효과를 가져왔습니다.
  • 셋째, 비즈니스 가치에 집중할 수 있었습니다. 테스트 자동화가 일상화되면 전체 시스템을 테스트하는데 따로 시간을 쓰지 않아도 됩니다. 대신 비즈니스 요구사항 구현과 기능 개선에 더 많은 시간을 할애해 고객에게 고품질의 서비스를 제공할 수 있었습니다.

LG CNS는 소프트웨어 자동화 테스트 분야에서 다양한 실험과 경험을 통해 노하우를 축적하고 체계를 수립해왔습니다. 오늘 소개해 드린 것처럼 LG CNS에는 테스트 자동화의 성공 경험을 공유할 수 있는 다양한 프로그램이 준비돼 있습니다. LG CNS와 함께 100% 테스트 자동화를 경험하고 고품질 서비스를 만들어 보시는 건 어떨까요?

고품질 서비스를 위한 클라우드 신기술이 필요하다면?

글 ㅣ LG CNS AWS Launch센터 데브옵스자동화팀 추민규 책임

챗봇과 대화를 할 수 있어요