Test

Test

nGrinder를 활용한 API 서버 부하 테스트

📌 개요 개발을 하다 보면 단순히 어떤 기능을 구현하는 것에만 집중할 때가 있다. 필자도 이전까지는 주어진 요구사항에 맞춰 기능을 구현하는 것에만 집중했었다. 하지만 서비스를 운영하다 보니 기능을 제공하는 것만큼이나 중요한 것이 제품 퀄리티라고 느껴졌다. 내가 개발한 기능이 요구사항대로 정확하게 동작하는지, 응답시간이 너무 길어서 사용자가 불편해하진 않는지 등등 실제 사용자 입장에서 생각해보며 지속적으로 개선해 나가는 과정이 필요하다고 생각하게 되었다. 이와 같은 부분들을 검증할 수 있는 도구가 '테스트'이고 이것이 테스트가 중요한 이유이다. 요구사항을 충족하는지에 대한 부분은 단위, 통합, 인수 테스트 등을 통해 검증할 수 있다. 테스트는 요구사항을 작성한 하나의 '문서'라고 불리는 만큼 다양한 상황에..

Test

M2 MAC OS 업데이트 이후 발생한 Embedded Redis 실행 오류

문제 상황 평소처럼 로컬에서 테스트를 돌리는데 갑자기 수많은 테스트가 깨졌다. Embedded Redis 관련된 문제였는데, 예외 메시지가 단순히 Can't start redis server. Check logs for details 여서 처음엔 뭐가 문제인지 가늠할 수 없었다. (자세한 내용은 로그를 확인하라는데 로그를 제대로 찍어줘야 보죠..) 그래서 embedded redis 코드를 까보기 시작했는데 버전이 업데이트 되면서 MAC_OS_X 도 지원하는 모습을 확인할 수 있었다. 나는 M2 환경에서 테스트를 수행한 것이기 때문에 크게 문제가 되지 않을 것이라고 생각했다. 그래서 embedded redis 코드에 대해 열심히 디버깅 해본결과.. 다음과 같이 arch에 x86_64가 바인딩되는 모습을 확..

Test

Embedded Redis로 외부 환경에서 Redis Test 하기

개요 프로젝트를 진행하면서 다양한 테스트 코드를 작성하고 있다. 우리 팀은 각종 인증번호, Refresh Token 저장용도로 Redis 를 사용하고 있었다. Redis를 사용하는 API에 대한 테스트를 작성하고 PR을 올렸는데 CI 에서 테스트가 실패하는 문제가 발생했다. 에러 로그를 통해 Redis를 사용하는 테스트가 모두 실패했다는 것을 확인할 수 있었다. 테스트 실패 원인에 대해 생각해보니 Actions에서 연결할 Redis 노드가 없다는 것을 알아차리게 되었다. 문제 상황 다음은 프로젝트의 환경별 데이터베이스 의존성에 대해 나타낸 것이다. 프로젝트에서 사용하고 있는 데이터베이스는 Redis와 RDBMS 이다. 로컬 환경에서는 In-Memory DB 인 H2와 Docker로 Redis 컨테이너를 ..

Test

@SpringBootTest 에서 테스트 격리하기

개요 E2I팀은 RestAssured 프레임워크를 사용하여 인수 테스트를 작성하고 있다. Member 테이블과 관련된 테스트 작성 도중 개별적으로 수행했을 땐 성공하던 테스트가 여러 테스트를 함께 돌렸을 때 깨지는 현상을 발견하였다. 보통 이런 경우는 테스트간 환경 분리가 제대로 되지 않아서 발생할 확률이 크다. 이전 테스트에서 수행했던 내역이 남아, 다른 테스트에 영향을 끼치는 것이다. 원인 분석 바로 원인을 분석하기 위해 에러 메시지를 확인해본결과, 쿼리를 실행할 때 문제가 발생한다는 것을 알 수 있었고 디버깅해본 결과, Member Entity를 저장하는 로직에서 UndeclaredThrowableException이 발생하는 것을 확인할 수 있었다. UndeclaredThrowableExceptio..

Test

RestAssured로 REST API 테스트하기

🔹 개요 E2I 백엔드 팀은 MVC의 각 계층별로 다음과 같이 테스트를 작성하고 있었다. - Controller: 단위 테스트 (Mocking) - Service: 단위, 통합 테스트 (Mocking, SpringBootTest) - Repository: 단위, 통합 테스트 (DataJpaTest, SpringBootTest) Controller 계층의 테스트를 단위 테스트로 작성한 이유는 Service 계층에서 이미 통합 테스트를 작성하고 있었기 때문에, Controller Layer에서는 들어오는 값에 대한 Validator만 제대로 동작하면 실제 API가 동작하는데에도 문제가 없을 것이라 생각했기 때문이다. 하지만, 프론트와 API를 연동하는 과정에서 개발 당시에 생각하지 못했던 다양한 문제가 발생..

Test

[JUnit] @ParameterizedTest 로 경계값 테스트하기

개요 특정 조건에 따라 분기하는 기능이 있을 때, 해당 조건에 대한 경계값 테스트를 작성하여 테스트의 신뢰도를 높일 수 있습니다. 경계값 테스트란, 어떤 조건의 경계에 해당하는 값을 테스트하여 특정 조건일 때 기능이 원하는 대로 동작하는지 확인하기 위해 작성하는 테스트입니다. 예를 들어 어떤 물건을 한 번에 주문할 수 있는 수량이 2개라고 했을 때, 2개를 주문하면 주문에 성공하고 3개를 주문하면 주문에 실패하는 테스트를 작성할 수 있습니다. 이와 같이, 테스트를 작성하다보면 동일한 검증 코드에서 여러 값에 대해 테스트를 수행해야 할 경우가 생깁니다. 이번 포스팅에서는 다음의 문자열 검증 유틸 클래스를 통해 @ParameterizedTest에 대해서 설명해보겠습니다. public abstract clas..

KAispread
'Test' 카테고리의 글 목록