소프트웨어는 항상 요구사항을 만족해야하며, 이는 유기적으로 변합니다. QA(Quality Assurance)를 진행하는 다양한 방법을 알아봅시다.
큰 규모의 프로젝트에서는 최대한 테스트를 자동화하기 위한 시스템을 만드는 것이 중요하다.
비즈니스 로직 및 요구사항이 맞게 동작하는지 검증하는 테스트
@Test
void whenValidId_thenUserShouldBeFound() {
User found = userService.findUserById(1L);
assertEquals("spring", found.getName());
}
개별 기능이나 매서드 단위의 검증이며, 그 외의 의존성은 Mocking 처리하여 필요한 부분만 검증한다.
예시 도구) JUnit, Mockito
실제 DB나 외부 API 등과 연동해서 여러 컴포턴트 간의 연결 및 상호작용을 테스트한다.
예시 도구) @SpringBootTest, Test Container
시스템 테스트(System Test)라고도 한다.
mockMvc.perform(post("/users").content("{...}").andExpect(status().isOk());
실제 사용자 관점에서 전체 시스템을 순차적으로 테스트한다.
실제로 전체 유저 시나리오를 테스트한다.
예시 도구) MockMvc, RestAssured
자동화가 현실적으로 불가능하거나 효율성 이슈가 있는 부분을 사람이 직접 검사하는 방법.
당연히 규모가 커짐에 따라 지속 테스트가 어렵기에 자동화가 권장된다.
비스니스 로직을 제외한 품질(성능, 보안, 확장성 등) 확인

아래와 같은 성능 지표들을 검사하는 테스트
서버 성능의 주요 요소
| 성능 요소 | 지표 설명 | 예시 도구 |
|---|---|---|
| 응답 시간 | API 응답속도 (ms) | JMeter, Gatling, Spring Actuator, Prometheus, Grafana |
| 처리량 (Throughput) | 초당 처리 요청 수 (RPS/TPS) | JMeter, Gatling, Locust, Prometheus, Grafana |
| 자원 사용률 | CPU, 메모리, 디스크 사용 (%) | Prometheus, Grafana, AWS CloudWatch, top, htop |
| 지연 시간 (Latency) | DB 쿼리/내부 호출 시간 (ms) | Spring Actuator, DB Slow Query Log, Grafana, serverStatus(MongoDB) |
| 오류율 | 에러 발생 비율 (%) | JMeter, Gatling, AWS CloudWatch, Sentry, Grafana |
보안 취약점 진단 테스트
예시 도구) OWASP ZAP, Burp Suite
코드 자체의 오류, 취약점, 스타일, 복잡도 등 품질 요소를 사전 탐지
예시 도구) PR 검수자가 직접 검사, SonarQube, Checkstyle, PMD, FindBugs 등
핵심 기능만 빠르게 확인하는 테스트 기법.
제품이 비즈니스 요구사항을 충족하고 있는지 테스트하는 기법
예시 도구) Cucumber(스크립트·Gherkin 기반)
https://www.youtube.com/watch?v=u6QfIXgjwGQ
https://www.youtube.com/watch?v=Jv2uxzhPFl4
https://www.youtube.com/watch?v=YaXJeUkBe4Y
https://en.wikipedia.org/wiki/Software_testing