[워밍업 클럽 4기 - 백엔드] Day16 미션
[인프런 워밍업 클럽 스터디 4기 - 백엔드]
강의 출처 :
Readable Code: 읽기 좋은 코드를 작성하는 사고법
Practical Testing: 실용적인 테스트 가이드
Day16 미션 :
Layered Architecture 구조의 각 레이어별 특징과 테스트 하는 방법을 자기만의 언어로 정리하기.
레이어드 아키텍처(Layered Architecture)
Persistence Layer
특징 : 데이터 접근, 즉
데이터를 저장하거나 조회하는 역할만 담당. 비즈니스 로직 없이 순수하게 CRUD만 처리하는 구조로, 단순하지만 핵심적인 기반이 되는 부분. DB와 직접 맞닿아 있는 만큼 복잡한 로직 없이 깔끔하게 쓰는 게 중요함. 쿼리는 보통 JPA나 QueryDSL을 이용해서 작성하고, 화면에 보여줄 상품 목록 같은 것도 여기서 조건 걸어서 조회함.
테스트 : 작성한 쿼리나 메서드가 의도한 대로 동작하는지 확인하는 게 중심. @DataJpaTest랑 H2 같은 임베디드 DB를 써서 빠르게 테스트할 수 있고, 테스트 환경에서는 DB 상태 초기화도 쉬워서 반복 테스트에 적합함. 복잡한 비즈니스 조건은 없지만, 필터링이나 정렬 조건 누락이 생기기 쉬워서 꼼꼼하게 체크해야 함.
Business Layer
특징 : Persistence와의 상호 작용을 통해 비즈니스 로직을 구현하는 레이어. 예를 들어 주문을 만들거나 재고를 줄이는 등의 서비스 로직이 여기 들어감. 트랜잭션 단위로 묶어서 처리되기 때문에, 예외가 발생했을 때 전체가 롤백되는 구조로 되어 있어야 함. 로직이 복잡해질수록 구조를 명확히 나누는 게 중요함.
테스트 : 핵심 로직 단위로 테스트를 작성하고, 하위 레파지토리는 mock으로 대체하는 경우가 많음. 필요한 경우 통합 테스트로 묶어서 전체 흐름을 점검하기도 함. 조건 분기나 예외 상황이 다양해서 실패 케이스도 같이 검증하는 게 좋음. 동시에 일어나는 재고 차감 같은 동시성 이슈도 고민해야 함.
Presentation Layer
특징 : 외부 요청을 가장 먼저 받는 레이어. 주로 컨트롤러에서 요청 데이터를 받고, 필요한 형식으로 바꿔서 서비스로 넘겨주는 역할. 직접 처리보다는 흐름을 연결해주는 입구 같은 느낌. 입력값 유효성 검사나 간단한 구조 검증은 여기서 해주는 게 일반적이고, 읽기 전용으로 readOnly 옵션을 주는 경우도 있음.
테스트 : WebMvcTest와 MockMvc를 써서 실제 요청처럼 테스트하고, 서비스나 하위 레이어는 mock으로 처리함. 응답 상태 코드, 반환 데이터 구조, validation 실패 케이스까지 다양하게 테스트함. Spring Bean Validation 어노테이션을 사용하여 NotNull, NotBlank 같은 검증도 진행하며, 예외 응답은 @RestControllerAdvice랑 @ExceptionHandler 등 사용하여 처리함.
댓글을 작성해보세요.