한컴테크를 통해 한컴의 기술을 공유합니다. 한컴의 프로그래밍, 프레임워크, 라이브러리 및 도구 등 다양한 기술을 만나보세요. 한컴 개발자들의 다양한 지식을 회사라는 울타리를 넘어 여러분과 공유합니다. 한컴이 제공하는 기술블로그에서 새로운 아이디어와 도전을 마주하고, 개발자가 꿈꾸는 미래를 실현하세요.

한컴테크

테스트자동화개발팀을 소개합니다.

시작하며


안녕하세요, 테스트자동화개발팀에서 테스트 자동화 프로그램을 개발하고 있는 입사 1년 차 개발자 박서연입니다. 이 글에서는 테스트와 관련된 개념들을 알아보고, 신설된 테스트자동화개발팀에서의 이야기를 담아보려 합니다.

성능 테스트


성능 테스트란 소프트웨어의 성능 및 확장성을 검증하는 데 사용되는 것으로, 응답시간/처리량/확장성 및 리소스 사용 등을 평가합니다.

아이디어가 좋고, 기능 동작만 성공적이면 웹 서비스가 성공할 수 있을까요? 아래에서는 “네이버 모바일 테스트 이야기” 책에서 언급된 시장 조사 업체 ‘JupiterResearch(https://www.jupiterresearch.com/)’ 및 다양한 설문조사 결과를 통해 성능 테스트의 중요성을 더 자세히 살펴보겠습니다.

웹 성능과 만족도

웹 서비스의 품질이 좋다는 것은 일반적으로 양질의 콘텐츠를 보기 좋게 가공하여 편리하게 사용할 수 있게 제공한다는 뜻입니다. 웹 서비스를 사용하려고 접근했는데 기다리는 시간이 지나치게 길어져 더 이상 참을 수 없어지면 비슷한 기능을 제공하는 다른 서비스를 찾게 됩니다.

시장 조사 업체 ‘JupiterResearch’가 온라인 구매자 천여 명을 대상으로 조사한 결과에 따르면, 웹페이지의 대기 시간이 4초를 넘으면 구매자 가운데 약 28%가 구매를 포기했다고 합니다.

그렇다면 웹 서비스가 얼마나 빨라야 사용자가 만족할까요?

State of the User Experience, Limelight Networks 2014

2014년 1,115명의 소비자를 대상으로 한 Limelight Networks(https://edg.io/)의 설문조사에 따르면, 웹 사이트를 불러오는데 3~5초 이상 걸렸을 경우 80%의 사용자가 사이트를 포기했다고 답했고, 10초가 지나면 소비자 대부분이 사라졌다고 합니다.

모바일 웹 서비스는 어떨까요?

google/soasta research 2017

구글 리서치 자료에 따르면 모바일 웹 사이트 로딩 시간이 3초 이상이면 32%, 5초 이상 90%, 6초 이상 106%, 10초 이상의 경우 123%의 이탈률이 발생했다고 합니다.

사용자들은 웹 서비스의 빠른 응답과 안정성을 기대하며, 만약 이러한 요구사항을 충족시키지 못한다면 경쟁에서 밀릴 수 있습니다. 따라서 성능 테스트는 소프트웨어의 성공과 지속적인 성장을 위한 필수적인 단계 중 하나로, 아이디어와 기능뿐만 아니라 성능 측면도 주의 깊게 고려해야 합니다.

이 외에도 성능 평가는 네트워크 응답성, 서버 요청 처리 속도, 메모리 사용 패턴 등을 고려한 상세한 분석을 포함합니다. 개발자는 이러한 지표를 근거로 문제를 해결하여 성능을 향상하고 사용자 만족도와 브랜드 신뢰도를 높일 수 있습니다.

그럼, 이제 다른 유형의 테스트인 테스트 코드에 대해 살펴보도록 하겠습니다.

테스트 코드


“테스트 코드는 실제 코드 못지 않게 중요하다” – clean code

제가 처음 시도했던 웹 프로젝트 당시, 멘토님의 조언에 따라 TDD(테스트 주도 개발) 방식으로 시작했습니다. 처음에는 테스트 코드 작성이 낯설고 번거로웠으며, 웹 개발 시간을 줄여야 하는 압박으로 테스트의 중요성을 인식하지 못했습니다. 그러나 프로젝트 규모가 커지고 코드가 복잡해지면서 버그 수정과 새로운 기능 추가 시 부작용이 발생할 가능성을 깨달았습니다. 이에 따라 TDD의 가치를 이해하고 멘토님께 감사의 뜻을 표할 수 있었습니다.

웹 개발 중 테스트 코드 작성을 소홀히 하는 경우, 버그를 발견하기 어려워지며, 코드 안정성이 감소하고 유지보수에 어려움이 생길 수 있습니다. 또한, 협업 과정에서도 문제가 발생할 수 있습니다.

그러면 테스트 코드란 무엇이고 어떤 종류가 있을까요?

테스트 코드란?

테스트 코드란 소프트웨어 개발에서 특정 기능, 모듈, 또는 시스템의 동작을 검증하고 테스트하는데 사용되는 코드입니다. 주로 소프트웨어의 품질을 향상하고 버그를 발견하며, 코드의 안정성과 신뢰성을 확보하기 위해 작성됩니다.

테스트 코드는 대상의 범위를 여러 측면에서 검증하기 위해 다양한 유형을 포함하며, 모든 테스트는 기대한 입력과 출력값을 확인합니다. 주로 사용되는 테스트 유형으로는 단위 테스트, 통합 테스트, 그리고 시스템 테스트가 있습니다.

간단히 표로 정리하면 다음과 같습니다.

구분\종류단위 테스트통합 테스트시스템 테스트
범위
  • 코드의 가장 작은 단위인 함수, 메서드 또는 모듈
  • 다양한 모듈, 컴포넌트 또는 서비스 간의 상호작용
  • 전체 소프트웨어 시스템 또는 어플리케이션
목적
  • 개별 코드 단위가 정확히 동작하는지 확인
  • 버그를 신속히 발견
  • 다양한 구성 요소 간의 상호작용 및 통합이 문제 없이 동작하는지 확인
  • 시스템이 모든 요구 사항을 충족하며 예상대로 동작하는지 확인
  • 사용자 시나리오를 기반으로 테스트 수행
실행 주체
  • 코드를 작성한 개발자
  • 통합 테스트 팀 또는 개발자
  • 품질 보증 팀 또는 테스트 팀
실행 주기
  • 코드 변경 후
  • 개발 주기 중
  • 개발 주기의 말 또는 릴리즈 후

Clean Test 작성하기

개발자에게 잘 알려진 clean code 책에서는 깨끗한 테스트는 다음 다섯 가지 규칙을 따른다고 알려줍니다.

출처 : romainbrunie
  • Fast : 테스트 속도가 느리면 자주 돌릴 엄두를 내지 못하고, 초반에 문제를 찾을 수 없어 결국 품질이 망가진다.
  • Independent : 각 테스트가 서로 의존하면 하나가 실패할 때 나머지도 실패하므로 진단이 어려워진다.
  • Repeatable : 테스트는 어떤 환경에서도 반복할 수 있어야 한다.
  • Self-Validating : 테스트는 Bool 값으로 결과를 내야 한다. 성공 또는 실패.
  • Timely : 테스트는 적시에 작성해야 한다.

테스트 자동화


그럼, 테스트자동화개발팀의 핵심인 테스트 자동화란 무엇일까요?

테스트 자동화란?

자동화 테스트와 테스트 자동화의 차이점에 대해 알고 계시나요? 자동화 테스트는 주로 개별 테스트 케이스를 자동으로 실행하는 것을 의미하지만, 테스트 자동화는 테스트 프로세스 전반을 자동화하여 QA 팀이 테스트 활동을 효율적으로 수행할 수 있도록 도와주는 개념입니다.

  • 자동화 테스트 : 동일 테스트를 반복해서 실행하여 수동 테스트에 비해 실행이 쉽고 최소 시간으로 수행이 가능
  • 테스트 자동화 : 자동화 테스트를 포함하며, 여러 테스트를 추적하고 관리하는 프로세스로, 모든 개발 단계에서 품질을 보장하기 위한 지속적 테스트를 진행하는 것

테스트 자동화가 필요한 이유?

테스트 자동화는 지속적인 테스트를 진행하면서 속도, 품질 및 효율성 원칙을 제공하는데 필요합니다.

  • 품질 저하 없이 속도 향상 : 개발자의 만족도를 높이고 빠르게 사용자에게 제공할 수 있음
  • 팀 협업 개선 : 품질에 대한 책임 공유를 통해 팀원 간의 협업을 향상
  • 신뢰성 향상 : 릴리스의 신뢰성 향상
  • 규모 : 독립적 방식의 여러 소규모 팀 속에 일관적인 품질 결과 만듦
  • 보안 : 보안 및 규정 준수를 저해하지 않고 빠르게 이동
  • 고객 만족도 향상 : 신뢰성이 향상되고 사용자 피드백에 대한 빠른 응답이 사용자 만족도를 높일 수 있음

테스트자동화개발팀은 어떤 일을 하나요?


배경

테스트자동화개발팀이 신설되고 팀원이 되었을 때, jest(https://jestjs.io)를 사용한 테스트 코드를 작성하는 업무를 하게 될까? 특정 프로그램을 개발하게 될까? 궁금했었습니다. 두근거리는 마음을 겨우 진정시키고 참석한 첫 미팅에서 팀장님께 자세한 설명을 들을 수 있었습니다.

기존 품질팀에서는 TestProject(https://testproject.io)를 이용하여 자동화를 위한 스크립트화 처리하거나 수동으로 작업을 진행하고 있었습니다. 하지만 TestProject의 유료화에 따라 기존 스크립트 사용이 어려워 졌고 새로운 테스트 자동화 도구를 탐색하던 중 테스트자동화개발팀이 생기게 되었습니다.

또한, 한글과컴퓨터 내 테스트 자동화 시도가 처음이 아니었다는 사실도 알 수 있었습니다. 기존 테스트 자동화가 활성화되지 못하고 있는 이유는 다음과 같았습니다.

  • 개발자 부재로 테스트 프로그램 유지보수 불가: 이전 한글과컴퓨터 내 테스트 프로그램은 개발자의 지원 없이 유지되지 못하였으며, 이에 대한 책임자가 부재했습니다.
  • 테스트 코드 업데이트 어려움: 서비스 업데이트 시 테스트 코드의 수정이 필요했으나, 테스트 코드 작성의 어려움과 업무 부담으로 지속적인 업데이트가 어려웠습니다.
  • 의존도 높은 테스트 프로그램 사용: 기존의 테스트 프로그램(ex. TestProject)은 의존성이 높아, 해당 프로그램을 사용하지 못하게 되면 다른 프로그램 탐색과 테스트 코드 작성에 많은 시간이 소요되었습니다.

따라서 이러한 문제를 극복하고 기존 품질팀의 업무 영향을 최소화하기 위해, 현재 품질팀에서 새롭게 도입한 Katalon Studio(https://katalon.com/katalon-studio)를 최대한 활용할 수 있는 방향으로 테스트 자동화 프로그램을 개발하기로 했습니다.

2023 일정

테스트자동화개발팀 2023년 일정

인수인계 및 설계 단계 (2023.08.01~2023.08.31)

8월에 인수인계 및 1차 POC 계획 수립을 목표로 진행되었습니다. 다양한 의견이 제시되었는데, ‘Katalon과 유사한 프로그램 개발’, ‘실패 사례가 발생하면 자동으로 Jira 이슈로 분류’, ‘키워드만 입력하면 자동으로 테스트 케이스 작성’ 등의 아이디어가 나왔습니다. 이에 따라 프로젝트 목표는 점차 확장되었으나, 현실적인 운영 가능성을 고려해 올해 안에 달성할 수 있는 목표와 장기적인 목표를 구분하여 계획을 수립하게 되었습니다.

긴 회의를 거쳐 테스트자동화개발팀의 1차 POC 핵심 목표는 아래와 같이 구체화하였습니다.

  • 기존 테스트 케이스의 자동화 : 기존에 작성된 시스템 테스트를 자동화하여 효율적인 테스트 작업을 추진하고, 테스트 커버리지를 확대하는 것을 목표로 합니다. 더불어, CI/CD 파이프라인과 통합하여 지속적 통합 및 배포를 실현할 계획입니다.
  • 성능 체크의 자동화 : 성능 테스트를 자동화하여 시스템의 성능을 지속해 모니터링하고 문제점을 신속하게 식별하는 것을 목표로 합니다.
  • 시각적 테스트 관리 : 테스트 자동화 도구를 활용하여 시각적으로 테스트 케이스를 관리하고, 대시 보드를 구축하여 팀원들이 프로젝트 진행 상황을 쉽게 파악할 수 있도록 지원합니다.

이러한 목표를 통해 테스트 환경을 효율적으로 관리하고 소프트웨어 품질을 지속해 향상하는 것이 주요 목표입니다.

1차 POC 기술 검토 및 개발 단계 (2023.09.01 ~ )

본격적인 개발에 들어가기에 앞서, 목표는 정해졌지만 어떤 일부터 시작해야 하는 지에 대한 불확실성과 막연함이 있었습니다. 먼저 tool을 테스트하며 사용법을 익히고 할 수 있는 일들을 탐색하다 보니 팀장님과 개발 리더님의 리드 아래 linux, docker 등 개발 환경 세팅 / grafana, influxdb / Jenkins 등 서로의 할 일이 어느 정도 나눠지기 시작했습니다. 또한, 서로 필요한 일들이 생각나면 Jira에 등록하기 시작하면서 점차 틀이 잡히기 시작했고, 방황하는 시간이 사라지고 점차 편하게 개발에만 몰두할 수 있게 되었습니다.

목표 변경

처음에는 기존에 작성된 테스트 케이스를 자동화하여 실행하는 것이 주요 목표였습니다. 그러나 개발을 진행하며 시간과 리소스 제약을 고려한 결과, 성능 테스트 및 일부 테스트 케이스 검증에 더 중점을 두기로 했습니다.

현재의 개발 흐름은 다음과 같습니다. (2024.04.23 기준 NodeRed에서 Nestjs, Grafana에서 React & Typescript, influxdb에서 mongodb 사용으로 변경되었습니다.)

테스트 자동화 프로젝트 구조

architecture

테스트 자동화 프로젝트 흐름도

flow chart

일정한 시간 간격으로 진행되는 모니터링 작업에서, 결과가 발생하면 자동으로 Grafana report가 생성됩니다. 발생한 실패 사례의 경우, Dooray를 통해 메시지가 전송되며 이를 클릭하면 Grafana 화면으로 이동하게 됩니다. Grafana는 자세한 그래프와 스크린숏을 제공하여 결과를 자세히 검토할 수 있도록 합니다.

사용자는 상시 원하는 서비스에 대한 테스트 또는 성능 테스트 결과를 확인하고 쉽게 검토할 수 있습니다. 또한, 필요한 경우 원하는 테스트를 다시 실행하고 해당 결과를 확인할 수 있습니다.

품질팀은 이러한 절차를 통해 장애를 발견하고 전달하며, 이전의 수동 업무 대비 리포트 확인만으로 업무를 더욱 효율적으로 처리할 수 있습니다.

기대 효과

  • 운영하는 서비스들의 안정성 증가 및 신뢰성 확보
  • 팀원들의 테스트 경험도 증가

  • 다음 프로젝트 기반 구조 확인 및 전체 개발 Flow 경험
  • 테스트 코드와 성능 테스트를 함께 사용하여 소프트웨어의 전반적인 품질을 향상

위의 기대 효과와 같이 다음 프로젝트를 위한 전체 개발 flow 경험을 쌓는 것에 초점을 두고, 성능 테스트와 최소한의 test case만을 바탕으로 테스트 자동화를 개발해 나가고 있습니다.

마치며


지금까지 웹 테스트 개념과 테스트자동화개발팀에 대한 소개를 공유해드렸습니다. 아직 프로젝트가 완전히 마무리되지 않았지만, 2달 동안의 정리를 할 수 있는 좋은 기회가 되었습니다. 물론, 테스트 자동화 서비스를 구축하는 과정에서 초기 계획과 다소 다른 부분이 나타날 수 있겠지만, 안정적이고 효율적인 테스트 자동화 서비스를 제공하기 위해 노력하겠습니다.

신입 개발자로 부족한 부분이 많았지만, 함께 소통하며 처음부터 끝까지 전체 개발 프로세스를 경험할 수 있는 소중한 시간이었고, 많은 고민이 있었던 만큼 좋은 결과가 나오기를 기대해 봅니다.

현재는 웹에 초점을 두고 작업하고 있지만, 오피스 영역으로의 확대도 계획 중에 있습니다. 테스트자동화개발팀에 대해 궁금증이 있으신 분들께 조금이나마 도움이 되었기를 바라며, 저희 팀과 이 프로젝트에 많은 관심과 지지를 부탁드립니다!

모두 행복한 하루 되셨기를 바랍니다.

감사합니다.

icon 출처 : https://icons8.com/icons

Scroll to Top