
최근 인공지능 챗봇 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가지를 소개해 드리겠습니다.
테스트 자동화를 적용하기 어려운 이유

테스트 자동화는 많은 장점이 있지만 개발 현장에 적용하기 어려운 이유가 있습니다. 그중 가장 큰 세 가지 이유는 아래와 같습니다.
테스트 자동화를 위한 노력
LG CNS는 소프트웨어 테스트 자동화를 성공적으로 적용하기 위해 세 가지 노력을 했습니다.
그렇다면 LG CNS가 어떻게 테스트 자동화를 적용했는지 단계별 테스트 자동화 기법을 통해 알아보겠습니다.
단계별 테스트 자동화 기법

새로운 IT 기술이 부상할 때마다, LG CNS는 시스템 통합 역량으로 체계적인 소프트웨어 테스트 기법을 현장에 적용했습니다. 앞서 설명한 LG CNS의 사례에 실제로 적용된 테스트 기법 6가지를 알려드리겠습니다.
Static Analysis(정적 분석)는 소스 코드의 구문 오류나 취약성을 분석하는 방법입니다. SonarQube(소나큐브)와 같은 오픈소스 도구나 프로그래밍 언어별로 제공되는 상용 제품을 사용할 수 있습니다. 정적 분석에서 가장 중요한 점은 CI(지속 통합) 도구가 정적 분석을 자동으로 실행하도록 구축하는 것입니다. 담당자가 이를 수동으로 하지 않도록 말입니다. 따라서 정기적인 시간에 따라 자동으로 실행되게끔 하는 것보단, 소스 코드가 변경될 때마다 정적 분석이 동작하게 하는 것이 좋습니다. TypeScript, JavaScript, Python, Rust 등의 현대적 프로그래밍 언어는 다양한 Lint(린트, C언어의 원시 프로그램을 읽어 오류가 있는지 검사하는 프로그램)나 Formatting(포매팅, 플로피 디스크나 하드 디스크에 데이터를 기록할 수 있게 초기화하는 작업) 도구가 있는데요. 이들은 CI 도구와 통합하는 것이 좋습니다.
Unit Test(단위 테스트)는 프로그램의 작은 기능이 의도한 대로 동작하는지 확인하는 시험 방법입니다. 단위 테스트에는 두 가지 종류가 있는데요. 첫 번째는 실제 프로그램을 실행해 사람이 직접 기능을 시험하는 방법입니다. 두 번째는 기능을 구현한 코드에 대응하는 테스트 코드를 작성해 자동으로 시험하는 방법입니다.
LG CNS는 두 번째 방법의 단위 테스트로 자동화를 구현합니다. 단위 테스트는 기능 코드와 함께 작성 및 변경돼야 하며, 기능 코드와 같은 생명 주기를 가집니다. 단위 테스트는 CI 도구와 연동해 소스 코드가 통합될 때마다 자동으로 실행됩니다. 소스 코드는 모든 단위 테스트가 성공된 경우에만 기존 코드와 통합해야 합니다. 만약 실패한 테스트 코드가 통합되면 최종 사용자에게 오류가 전달될 수 있기 때문입니다. 테스트 결과는 CI 도구를 통해 협업 도구에 보고되고 보고서도 자동으로 작성됩니다. 결과는 모두에게 공개돼 구성원 간의 신뢰를 높입니다.
단위 테스트의 효과를 높이기 위해 LG CNS는 2가지 방법을 사용합니다. 첫째는 구성원 간 코드 리뷰를 통해 잘못된 테스트 코드를 제거하고 코드의 질을 개선합니다. 둘째는 코드 커버리지를 설정해 무효한 테스트 작성을 방지합니다. 코드 커버리지는 100%가 아닌 현장의 상황에 맞게 적절한 범위와 수준을 정하고 점진적으로 높여 나가야 합니다. 코드 커버리지는 목표 수준을 반드시 정하고, 목표 수준 미달 시, CI 도구에서 코드 통합을 막아야 합니다.
애플리케이션의 함수나 메소드(Method, 객체지향 프로그래밍 언어에서 클래스 혹은 객체에 소속된 서브 루틴)보다 한 단계 높은 기능(Functionality) 묶음을 ‘모듈’ 또는 ‘컴포넌트’라고 합니다. 하나의 기능을 수행하는 모듈이 정상으로 동작하는지 확인하는 것을 모듈 테스트(Module Test)라고 하는데요. 이때 기능성, 정합성, 결함 존재 여부를 모듈 별로 단독으로 수행하는 것이 핵심입니다. 화면 모듈 테스트는 UI 형태의 테스트가 되며, 서버의 서비스 모듈 테스트는 API(Application Programming Interface, 응용프로그램과 운영체제의 통신을 쉽게 하기 위한 연결 인터페이스) 형태의 테스트가 됩니다. 단위 테스트가 독립적으로 테스트하는 것처럼, 모듈 테스트도 목킹(Mocking, 단위 테스트를 작성할 때 외부에 의존하는 부분을 임의의 가짜로 대체하는 기법)이라는 기법을 사용해 독립적으로 수행합니다. 반대로 스모크 테스트(Smoke Test)는 상호 관련된 모듈이 연결된 채로 테스트를 실행하여 의도한 기능이 정상적으로 동작하는지 확인하는 테스트입니다. 두 가지 테스트에 쓰이는 UI 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 도구에 쉽게 연동할 수 있습니다.
마이크로 서비스 아키텍처는 서버/클라이언트 아키텍처의 발전 형태로 비즈니스 요구 사항을 빠르고 안정적으로 출시하게 해줬습니다. 하지만 마이크로 서비스를 활용한 개발, 테스트, 운영 등 다양한 환경과 배포 상황에 따른 영향도를 파악해야 합니다. LG CNS는 배포 후 서비스가 정상적으로 동작하는지 확인하기 위해 Health Check라는 간단한 테스트 단계를 수행합니다. 이를 통해 배포와 출시에 발생할 수 있는 장애 전파를 막을 수 있습니다. LG CNS의 목표는 CD 도구에 Health Check가 연동돼 모든 서버 배포 시 자동으로 실행되게 하는 것입니다. 마이크로 서비스는 환경별로 순차적으로 배포됩니다. 그러므로 문제가 발생하면 연속해서 배포되지 않아 안전한 개발 절차를 유지할 수 있습니다.
UI Test는 비용과 시간이 많이 드는 항목입니다. UI Test는 심미성과 기능성으로 나눠 생각해야 합니다. 심미성 테스트는 객관적인 기준을 정하기 어렵기 때문에 주로 전문가들이 수동 테스트를 수행합니다. 만약 웹 시스템이라면 웹 접근성 국내 표준 체크리스트를 활용할 수 있습니다. 또한 UI Test는 주요 기능에 초점을 맞추는 것이 중요한데요. 핵심 영역인 로그인 기능, 결제 기능, 송금 기능 등을 우선적으로 자동화하면 시간과 비용을 절약할 수 있습니다. Cypress와 Puppeteer 같은 오픈소스 도구가 현장에서 많이 사용되고 있습니다.
테스트 자동화의 새로운 경험 & 효과

테스트 자동화를 도입하면서 LG CNS는 새로운 경험과 효과를 얻었습니다.
LG CNS는 소프트웨어 자동화 테스트 분야에서 다양한 실험과 경험을 통해 노하우를 축적하고 체계를 수립해왔습니다. 오늘 소개해 드린 것처럼 LG CNS에는 테스트 자동화의 성공 경험을 공유할 수 있는 다양한 프로그램이 준비돼 있습니다. LG CNS와 함께 100% 테스트 자동화를 경험하고 고품질 서비스를 만들어 보시는 건 어떨까요?
● 고품질 서비스를 위한 클라우드 신기술이 필요하다면?
글 ㅣ LG CNS AWS Launch센터 데브옵스자동화팀 추민규 책임
기업명을 두 글자 이상 입력해주세요.
소식을 받아 보시려면 마케팅 정보 활용과 마케팅 정보 수신에 모두 동의해 주셔야 합니다.
제출이 완료되었습니다.
제출이 완료되었습니다.
확인 버튼을 누르시면 자사 홈페이지 홈화면으로 이동됩니다.
요청하신 자료가 이메일로 발송되었습니다.
구독 설정이 저장되었습니다.
잘못된 접근입니다. 정상적인 경로를 통해 다시 시도해 주세요.
검색 중 오류가 발생했습니다. 다시 시도해주세요.
제출에 실패하였습니다.
다시 시도해주세요.
사업자등록번호는 10자리를 입력해주세요.
지원하지 않는 파일 형식입니다.
10MB 이하의 파일만 업로드하실 수 있으며, 최대 10개까지 첨부 가능합니다.
10MB 이하의 파일만 업로드하실 수 있습니다.
파일은 최대 10개까지만 첨부하실 수 있습니다.
업로드 중 오류가 발생했습니다. 다시 시도해 주세요.
파일을 교체하시겠습니까?