관리 메뉴

밤 늦게까지 여는 카페

Playwright를 활용한 시뮬레이션 작업 - 짧게 짧게 끊어서! 본문

유용한 툴/테스트 자동화

Playwright를 활용한 시뮬레이션 작업 - 짧게 짧게 끊어서!

Jㅐ둥이 2024. 6. 23. 03:23
반응형

안녕하세요. 이제 벌써 6월이 끝나가고 있습니다. 봄이 지나가고 어느새 본격적인 여름이 시작됩니다.

다들 더위 조심하시면서 건강 잘 챙기시길 바랍니다 ㅎㅎ

 

이번에는 Playwright를 사용하면서 메모리 누수 이슈를 겪었던 경험을 기록하려고 합니다.

Playwright를 어떻게 사용하고 있었고, 왜 문제가 발생했는지 그리고 어떻게 해결했는지 간단하게 정리해 보겠습니다.


TL-DR

  • Playwright를 이용해서 시뮬레이션을 진행하던 중 메모리 누수 및 CPU 성능 문제가 발생함
  • 메모리 누수는 Playwright 이슈로 하나의 테스트 케이스가 오랜 시간 동안 실행되면 메모리 누수가 발생함
    • 조치 방법: 테스트 진행 상황을 파일로 저장하여 테스트를 10분씩 짧게 끊어서 실행하도록 수정함
  • CPU 성능 문제는 Playwright로 실행하는 브라우저 개수가 많은 것이 원인이었음
    • Headless 모드를 사용하면 CPU를 적게 사용하지만 그래도 너무 많은 수의 브라우저는 감당하지 못함
    • Playwright 스크립트를 실행하는 PC를 따로 준비해서 PC 성능 문제 해결함

 

1. 시나리오 시뮬레이션을 위해서 Playwright를 활용

테스트 자동화 툴로 Playwright를 사용하기로 결정하고는 Playwright를 이용해서 해피 케이스부터 테스트했습니다.

테스트 케이스를 만들면서 크롬 브라우저 창 크기, 웹소켓 설정 등 작은 이슈들이 있었지만

Playwright 설정값을 적절하게 수정해서 해결할 수 있었습니다.

 

Playwright를 이용해서 해피 케이스의 테스트 자동화를 성공적으로 마친 이후에 시뮬레이션 작업까지 진행하게 되었습니다.

★ 시뮬레이션?
시뮬레이션은 고객의 환경에 적합한 최적의 제안을 하기 위해 필요한 작업입니다.

현장과 비슷한 환경을 디지털 상으로 구현한 뒤, 고객으로부터 전달받은 데이터를 활용해서 로봇을 사용하면 얼마나 작업 효율이 개선되는지 확인하는 것이죠.

고객이 로봇을 도입했을 때의 손익분기점을 찾는데 큰 도움을 주기 때문에 사업 진행에 매우 중요하다고 생각합니다.

 

시뮬레이션 작업과 Playwright가 무슨 연관이 있을까요?

 

바로 클라이언트들을 Playwright로 조작하는 것입니다.

시뮬레이션을 위한 스크립트를 개발하는 번거로운 작업도 사라지고, 클라이언트를 이용하니 E2E 테스트까지 된다는 장점이 있습니다.

 

그렇다고 장점만 있는 것은 아닙니다.

결과를 얻기까지 실제 작업 시간과 비슷하게 오랜 시간이 걸리며, 시스템이 안정적이지 않다면 도처에서 발생하는 버그 때문에 주어진 일정 안에 결과를 얻지 못할 수도 있습니다.

 

저희들은 지금 단계에서 Playwright를 이용한 시뮬레이션은 아주 효율적이라고 판단했고 금방 결과를 얻을 수 있을 것이라고 생각했습니다...

 

이때까지는...

2. 고난의 시작

저희들이 예상하지 못했던 것은 2가지였습니다.

하나는 시스템이 아직 충분히 안정적이지 않은 것이었고, 나머지 하나는 Playwright 스크립트에도 문제가 있다는 것이었습니다.

 

시스템 버그는 개발팀분들의 도움을 받으면서 하나씩 고쳐나갈 수 있었지만 Playwright 스크립트의 문제는 찾기까지 시간이 비교적 오래 걸렸습니다.

 

로컬 환경에서 시뮬레이션 작업을 실행시켜 놓고 다음 날 돌아오면 아름다운 결과가 나를 반기고 있을 것이라고 생각했지만 에러창뿐이었습니다.

3. 메모리 누수 문제

그래도 힌트가 많은 에러라서 다행이었습니다.

대놓고 메모리가 부족해서 프로세스가 종료되었다는 에러 메시지가 남아 있었습니다.

저를 반겨줬던 에러창ㅠ

 

시스템에도 버그가 많았기에 어떤 부분에서 메모리 누수가 발생했는지 파악하기 위해서

시뮬레이션이 실행되고 있을 때, 다른 모니터에 htop을 띄워두고 어떤 녀석이 문제인지 살펴봤습니다.

  • htop: 리눅스의 시스템 모니터링 툴

결과는 놀랍게도 Playwright의 문제였습니다. Playwright 스크립트의 메모리 사용량이 계속해서 증가하고 있었던 것이죠.

 

찾아보니 하나의 테스트 케이스가 오랜 시간동안 실행되면 메모리 누수가 발생하는 문제가 있었습니다

처음에는 OOM 에러가 발생하기 전에 시뮬레이션 스크립트를 종료하고 재실행하는 것으로 문제를 우회하려고 했지만

시뮬레이션의 진행 상황이 일부 초기화되는 문제가 발생했습니다.

 

결국 시뮬레이션 스크립트가 종료될 때는 진행 상황이 파일에 자동으로 저장되고, 스크립트가 실행될 때에는 파일에 저장된 진행 상황을 불러오도록 스크립트를 수정하여 문제를 해결할 수 있었습니다.

 

4. CPU 성능 문제

메모리 누수 문제를 해결했지만 아직도 시스템의 안정성이 낮다는 문제가 남아 있었습니다.

 

처음에는 '이건 어쩔 수 없지...' 하고 체념하려고 했지만 발생하는 버그의 양상을 보고 이상함을 느꼈습니다.

 

시뮬레이션을 진행하며 제가 겪는 버그들이 시스템의 과도한 부하가 걸렸을 때 발생하는 버그들과 굉장히 유사하다는 것이었습니다.

 

이번에도 htop을 다른 모니터에 켜두고 문제의 원인을 살펴봤고,

시뮬레이션 중간 중간 Playwright 스크립트의 CPU 사용량이 치솟을 때 시스템 버그가 빈번하게 발생하는 것을 찾을 수 있었습니다.

 

브라우저를 headless 모드로 실행해서 CPU 사용량에 대한 걱정은 일체 하지 않고 있었기에 부랴부랴 Playwright용 테스트 PC를 새롭게 준비했습니다.

 

새로운 테스트용 PC에서 Playwright 스크립트를 실행하니 나름 안정적으로 시뮬레이션 결과를 뽑을 수 있었습니다!


Playwright를 사용하면서 겪었던 이슈를 간단하게 정리해봤습니다.

 

당시에는 작업이 진전되지 않아서 정말 답답했는데 정리하고 보니 간단한 문제들이었네요 ㅋㅋㅋ쿠ㅠ

 

Playwright를 사용하시는 분들에게 조금이라도 도움이 되기를 바라며 글을 마칩니다.

반응형