QA

QA 기술 스택 정리

stdout 2024. 8. 6. 13:44

수년 여 간의 게임 QA에서 소프트웨어 QA로 이직 후, 기획서의 명세를 바탕으로 진행하던 블랙박스 테스트에서 벗어나

자동화 테스트, CI/CD, 애자일 방법론 등 소프트웨어 QA라는 업무를 진행함에 있어 필요에 의해 학습한 내용들을 정리했습니다.

모든 의견은 개인적인 사견으로, 어떤 때에 활용했고 이럴때 요긴했다. 라는 내용 정도로 생각해주시면 좋겠습니다.

 

※ 사내에서 활용할 소규모 프로젝트를 진행할때만 활용했고, 실제 상용화된 사이트/프로그램에서 사용한 경험은 없는 상태라

    다 년간 여러 상용화 프로젝트를 마치신 전문가분들에 비해 내용이 미비할 수 있습니다.

※ OS

  • Linux
커널까지의 깊은 지식은 거의 필요하지 않으나, 자주 사용하는 리눅스 명령어와 SSH 연결, WSL 등을 알아두면 툴 운용에 있어 요긴하게 사용됨
각종 툴(Jenkins, Redmine, Gitlab 등…)의 설치 및 운용 환경이 보편적으로 리눅스로 진행됨
GUI(그래픽 유저 인터페이스)보다는 텍스트 환경에 익숙해지는 것이 좋음

※ 프로그래밍 언어

  • Python
Selenium, PyTest, Locust 등 파이썬의 여러 테스트 라이브러리를 사용하기위한 기반 지식 요구
테스트용 라이브러리를 활용하여 다양한 테스트 기법을 적용할 수 있도록 for문, while문, if문 등 기본적인 문법 지식부터 BeautifulSoap, Requests 등 웹페이지 관련 라이브러리 지식 습득 필요

※ 네트워크

  • TCP/IP
OSI 7계층 모두가 필요한 경우는 많지않고, IP 및 Port에 대한 지식이 QA 환경(Linux, VM, Docker 등) 구성 간 사용됨
  • Network
NAT, Bridge network, host only network 등 VM을 세팅할때 각 네트워크가 무슨 역할을 하고 어떤 상황에서 무슨 네트워크가 필요한지, 포트 포워딩이 어떤 상황에서 필요한지 등 가상 환경의 네트워크 지식
Public Network과 Private Network의 차이가 무엇이고 개발환경에선 어떻게 활용하는지 습득

※ 테스트 관리도구

  • JIRA
이슈 관리 및 추적, 협업 툴
  • Redmine
JIRA와 비슷한 협업 툴로, 직접 설치 시 무료 이용 가능
처음부터 모든 의존성을 직접 설치하면 어려울 수 있으나, Docker에 공식적으로 배포된 레드마인 이미지나 Bitnami, Easy Redmine 등 쉽게 설치하는 방법도 있음

※ 테스트 자동화 도구

  • Selenium
웹페이지를 자동으로 조작하여 원하는 시나리오를 구현하기 위한 파이썬 라이브러리
headless 기능으로 웹을 실제로 열지않고 가상 환경으로도 원하는 행동이 가능
  • PyTest
파이썬 기본 내장 프레임워크인 unittest보다 다양한 기능을 바탕으로 가장 대중적으로 쓰이는 파이썬 전용 테스트 프레임워크
Selenium과 같이 사용하여 웹페이지에서의 행동에 대한 결과값이 원하는 기대값과 일치하는지 검증할 때 사용 가능

※ 성능 테스트 도구

  • Postman
원래는 API를 테스트하는데 사용하는 툴로, 간단한 부하 테스트는 해당 툴로도 가능하고 대중적으로 여러 기업에서 많이 사용하여 익혀둘 시 포트폴리오에 도움 됨
  • Locust
JMeter, nGrinder 등 다양하고 유명한 성능 테스트 도구들이 있지만, 위에서 공부한 Python을 활용하기 가장 좋은 성능 테스트 도구
성능 테스트에 필요한 기능(유저 수, 시나리오, 모니터링, 결과 추출 등)이 부족하지않게 있고 설치 및 습득이 쉬움

※ CI/CD 툴

  • GitLab
Repository를 활용한 코드 저장 및 공유, 브랜치와 히스토리를 통한 버전 관리 등의 개발자와의 협업에 사용되는 툴
  • Jenkins
GitLab의 산출물을 WebHook으로 전달받아 코드의 변경점이 발생 시 혹은 특정 시간마다 자동으로 빌드가 가능하며, Pipeline 기능을 통해 각 빌드 단계마다 행동을 정의할 수 있음

※ 가상화 도구

  • Docker
VM을 사용하면 OS를 새로 설치해야해서 운용이 무거워지는 것을 해결하기 위해 동일한 OS에서 격리된 컨테이너를 운용할 수 있도록 하는 도구
이미지할때의 상태를 동일하게 보존하여 공유할 수 있어서 동일한 환경에서 테스트를 진행할 수 있도록 도와줌
  • VirtualBox(VM)
하나의 컴퓨터에서 별도 환경으로 완전히 새로운 OS를 설치하여 운용할 수 있도록 해줌
리눅스의 기능만 쓰는 것은 윈도우에서도 WSL을 사용하여 가능하나, WSL을 사용하게되면 윈도우와 겹치게 되는 부분이 있어서 완전한 리눅스 환경이 필요할때 VM을 사용함
  • Vagrant
VM을 쉽게 생성 및 설정하여 배포하는데 사용함
텍스트 형식의 Vagrantfile을 작성하여 원하는 VM 설정(램,CPU,네트워크 등)을 미리 세팅하거나 가상머신 부팅 후의 행동들(특정 프로그램 설치, 명령어 입력 등)도 미리 정의할 수 있음

※ 추가 학습 필요

  • Java (프로그래밍 언어)
Java를 활용한 QA 툴(Postman, JMeter, JUnit)이 다수 존재하여 익혀둘 시 도움 될 것으로 보임
  • Appium (테스트 자동화)
모바일 어플리케이션용 자동화 테스트 라이브러리
  • Kubernetes (가상화 도구)
컨테이너(주로 Docker)가 수십, 수백개가 있을때 이를 편리하게 배포 및 설치 등 운용할 수 있도록 도와주는 컨테이너 오케스트레이션 툴

※ 학습순서

  1. Python (+ Selenium, pytest)
  • 습득 난이도가 비교적 낮은 프로그래밍 언어인 파이썬에 대한 뼈대를 잡으며 코딩에 대한 기본 학습 시작
  • 알고리즘이나 자료구조같은 개발자에게 요구되는 지식보다 테스트 라이브러리를 이것저것 사용해보고, 파이썬 문법을 곁들여 어떤 방식으로 테스트 케이스를 구상할지 생각해보기
  • https://seleniumbase.io/demo_page 에서 구상한 테스트 케이스가 작동하는지 확인
  • ex) Input Slider Control의 값을 바꿨을 때 Progress Bar의 수치가 변경하는지 등…

2) TCP/IP

  • 개발 환경의 네트워크를 어떻게 구상해야할지 추후 QA 툴들을 운용하기 전 선행 학습
  • Private Network가 어떤 방식으로 돌아가는지, 협업 툴들이 네트워크에서 어떻게 돌아가는지
  • NAT, Bridge network, host only network 등 각각 네트워크의 차이 및 활용 방법에 대한 습득

3) Linux (+ VM(+ Vagrantfile))

  • VirtualBox를 통해 리눅스(텍스트 모드)를 설치 및 실행
  • 2번 TCP/IP에서 습득한 지식으로 네트워크 세팅
  • 세팅한 네트워크를 바탕으로 리눅스에서 nginx, apache, node.js 등으로 직접 서버를 띄워보기 (HTML,CSS까지는 안건드려도 되고 진짜 띄워만 봐도 무관)
  • 레드마인, 깃랩, 젠킨스 등 협업 툴들을 VM으로 띄운 리눅스에 직접 설치 및 운용해보기
  • Vagrant를 통해 리눅스 설치 및 네트워크 세팅, 협업 툴 설치까지 모두 자동화 해보기

4) Docker

  • Docker의 가상화 컨테이너 개념 숙지
  • Docker의 Build, Push, Pull 기능을 통해 이미지를 생성 및 공유, 다운하는 방법 습득
  • 격리된 컨테이너에서 동일한 환경으로 테스트를 진행하고 결과를 추출하는 방법까지 자동화
  • Docker-compose를 통 여러 개의 컨테이너를 생성 및 운용해보기

5) GitLab + Jenkins

  • 3번 Linux에서 설치한 깃랩, 젠킨스를 통해 CI/CD 환경 구축
  • 깃랩에서 코드를 커밋했을때 젠킨스에서 자동으로 빌드되도록 환경 구성
  • 자동으로 빌드할때 젠킨스의 파이프라인을 통해 각 단계 별 작업을 추가하기
  • ex) 빌드 시작 시 의존성 앱 설치 > 빌드 중 이슈 발생 시 분기처리 > 빌드 완료 시 배포 및 공유

6) Postman + Locust

  • 직접 구성한 서버를 통해 API 테스트 및 부하 테스트 진행
  • 테스트 케이스 구상 간 Postman을 어떻게 활용할지, Locust의 부하 테스트를 어떤 시나리오로 진행할지 고민해보기