
워밍업 클럽 4기 - 백엔드 Day 16
수정내역
썸네일 추가
과제
1. Persistence Layer
데이터를 읽고 쓰는 기능, 즉 DB와 직접 연결되는 창구 역할을 합니다.
데이터 저장, 조회, 수정, 삭제 같은 순수한 CRUD 작업만 담당해야 하며, 복잡한 계산이나 로직은 포함되면 안 됩니다.
어떻게 테스트?
JPA 기반의 Repository를 중심으로 테스트합니다.
@ActiveProfiles
를 사용해 테스트 전용 DB를 따로 두어 테스트실제 데이터를 저장하고 불러오면서 동작을 검증합니다.
예: 특정 조건으로 조회 시 원하는 값이 정확히 나오는지 확인
@DataJpaTest 사용시 자동으로 롤백 (@Transactional)
포인트
빠르게 테스트하고 싶으면
@DataJpaTest
순수하게 CRUD에 집중해야 하므로, 로직이 들어있다면 오히려 잘못된 구조일 수 있음
2. Business Layer
비즈니스 로직을 담는 곳입니다.
예를 들어 “결제를 하면 재고가 줄어야 한다” 같은 업무 흐름을 구현하는 레이어며
트랜잭션 보장과 동시성을 고민해야한다.
어떻게 테스트?
@SpringBootTest
또는@ServiceTest
등으로 전체 흐름을 확인할 수 있는 환경 구성필요한 데이터는 테스트 전 직접 저장하거나 Mock 처리
경계값 테스트
given-when-then
구조로 시나리오 기반 테스트 작성
포인트
이 레이어는 트랜잭션이 중요한 레이어이므로, 롤백 여부도 테스트 대상
핵심은 “이 비즈니스 흐름이 내가 기대한 대로 잘 작동하느냐”임
3. Presentation Layer
웹 요청(HTTP 등)을 처음으로 받아들이는 입구입니다.
컨트롤러에서 파라미터를 검증하고, 서비스에 요청을 위임하며, 응답을 구성합니다.
즉, 입력과 출력의 인터페이스 역할을 합니다.
어떻게 테스트?
단위 테스트처럼 접근
컨트롤러만 띄우고, 내부 서비스나 레포지토리는 Mock 처리
MockMvc
,@WebMvcTest
등을 이용해 REST API 요청/응답을 검증validation, 상태 코드, JSON 응답 구조를 확인
포인트
복잡한 로직보다 “입력값에 따라 어떤 응답이 나오는가”에 집중
실제 호출 흐름이 아니라 API 인터페이스가 잘 동작하는지만 보자
과제 회고
각 레이어마다 역할이 다르기 때문에,
그에 맞는 테스트 전략과 도구도 달라져야 한다는 걸 이번에 확실히 느꼈습니다.
Persistence는 DB를 잘 다루는지
Business는 로직 흐름이 맞는지
Presentation은 입력과 출력이 잘 연결되는지
댓글을 작성해보세요.