안녕하세요 오늘부터 날씨가 30도까지 올라가는걸 보니 이제 진짜 여름이네요. 이제 곧 다시 주말이네요. 빨리 주말이 와서 놀고싶은 마음이 굴뚝같지만 그래도 할 일은 끝내야겠죠? 저번 시간에는 CSP를 마지막으로 웹 보안 지식에 대한 내용을 마무리했습니다. 그와 동시에 직접 HTTPS와 도메인 설정을 하면서 학습했던 것을 실제로 적용하는 시간까지 가졌습니다. 이번 시간에는 테스트에 대한 학습을 진행할 예정입니다. 두 편으로 구성되어 있으며 이후에는 CI/CD를 설명할 것 같네요. 거기까지 설명하고나면 진짜 얼마 안남았네요.
자, 그럼 테스트에 대한 학습을 시작해보겠습니다.
기능을 구현하는 것도 중요하지만 구현한 기능이 의도한 대로 동작하는지 확인하는 과정 역시 중요합니다. 개발 중에는 Postman으로 API를 직접 호출하며 동작을 확인할 수 있지만, 서비스가 커질수록 모든 기능을 매번 직접 확인하기는 어렵습니다.
이때 필요한 것이 테스트입니다.
테스트가 필요한 이유
프로젝트를 진행하다 보면 회원가입, 로그인, 게시글 작성, 댓글 작성처럼 여러 기능이 서로 연결됩니다. 처음에는 정상적으로 동작하던 기능도 다른 기능을 수정하는 과정에서 예상하지 못한 오류가 발생할 수 있습니다.
테스트는 이러한 문제를 미리 확인하기 위한 과정입니다. 단순히 "코드가 실행된다"를 확인하는 것이 아니라 입력값에 따라 기대한 결과가 나오는지 검증하는 역할을 합니다.
테스트
테스트는 코드가 의도한 대로 동작하는지 검증하고, 변경으로 인한 오류를 빠르게 발견하기 위한 과정입니다.
확인하는 범위에 따라 여러 종류로 나눌 수 있습니다. 대표적으로 단위 테스트, 통합 테스트, 기능 테스트가 있습니다.
단위 테스트
단위 테스트는 가장 작은 단위의 코드를 검증하는 테스트입니다. 일반적으로 하나의 메서드나 클래스 단위로 테스트하며, 외부 의존성을 최대한 제외하고 특정 로직이 의도한 대로 동작하는지 확인합니다.
예를 들어 회원가입 기능에서 "이미 존재하는 이메일이면 예외가 발생해야 한다"는 로직이 있다면 해당 Service 메서드만 대상으로 테스트할 수 있습니다.
즉, 단위 테스트는 빠르게 실행할 수 있고, 특정 로직의 문제를 좁은 범위에서 찾기 쉽다는 장점이 있습니다.
통합 테스트
통합 테스트는 여러 계층이나 구성 요소가 함께 동작하는지 확인하는 테스트입니다. 단위 테스트가 메서드나 클래스에 집중한다면 통합 테스트는 Controller, Service, Repository, Database 등이 서로 연결되었을 때 정상적으로 동작하는지 확인합니다.
예를 들어 회원가입 API를 호출했을 때 Controller가 요청을 받고, Service에서 검증 로직을 수행한 후 Repository를 통해 데이터베이스에 저장되는 흐름을 확인할 수 있습니다.
즉, 통합 테스트는 실제 서비스 흐름에 가까운 검증이 가능하지만 단위 테스트보다 실행 속도가 느리고 테스트 환경 구성이 더 복잡할 수 있습니다.
기능 테스트
기능 테스트는 사용자의 관점에서 하나의 기능이 정상적으로 동작하는지 확인하는 테스트입니다. 내부 코드 구조 보다는 "사용자가 특정 기능을 수행했을 때 기대한 결과가 나오는가"에 초점을 둡니다.
예를 들어 사용자가 회원가입 요청을 보냈을 때 정상적으로 계정이 생성되고, 이후 로그인까지 가능한지 확인하는 방식입니다.
즉, 기능 테스트는 실제 사용 시나리오를 기준으로 기능의 정상 동작 여부를 확인하는 데 유용합니다.
테스트 비교 표
| 구분 | 확인 범위 | 주요 관심사 | 예시 |
| 단위 테스트 | 메서드, 클래스 | 특정 로직이 맞는가 | 이메일 중복이면 예외 발생 |
| 통합 테스트 | 여러 계층의 연결 | Controller-Service-Repository 흐름이 맞는가 | 회원가입 API 호출 후 DB 저장 |
| 기능 테스트 | 사용자 기능 단위 | 사용자가 기대한 기능이 동작하는가 | 회원가입 후 로그인 기능 여부 |
Postman 테스트와 자동화 테스트의 차이
저는 프로젝트를 진행하면서 Postman을 통해 API가 정상적으로 동작하는지 자주 확인했습니다. Postman 테스트는 개발 중 빠르게 요청과 응답을 확인하기에 유용합니다.
하지만 기능이 많아질수록 모든 API를 매번 직접 호출해서 확인하기는 어렵습니다. 또한 기존 기능을 수정했을 때 다른 기능이 깨졌는지 사람이 직접 확인해야 한다는 한계가 있습니다.
반면 테스트 코드는 한 번 작성해두면 반복해서 실행할 수 있고, 코드 변경 이후에도 기존 기능이 정상적으로 동작하는지 빠르게 확인할 수 있습니다.
이번 시간에는 테스트가 필요한 이유와 종류들의 차이를 정리했습니다. 테스트는 단순히 오류를 찾기 위한 과정이 아닌 코드 변경 이후에도 기능이 안정적으로 유지되는지 확인하기 위한 장치입니다. 저 역시 Postman 외에는 제대로 사용하지 못해서 이번 기회 늘려볼 생각입니다.
다음 시간에는 실제 백엔드 프로젝트에서 테스트 코드를 작성할 때 사용하는 JUnit, Mockito, MockMvc의 역할과 기본적인 테스트 작성 흐름에 대해 알아보겠습니다. 수고하셨습니다.
'백엔드 공부' 카테고리의 다른 글
| CI/CD(1) - CI/CD란 무엇인가? (0) | 2026.05.18 |
|---|---|
| 테스트(2) - 테스트 코드 (0) | 2026.05.15 |
| 웹 보안 지식(6) - 콘텐츠 보안 정책 (0) | 2026.05.13 |
| 웹 보안 지식(5) - OWASP 보안 취약점 (0) | 2026.05.12 |
| 웹 보안 지식(4) - CORS (0) | 2026.05.11 |