![[인프런 워밍업 클럽 3기] BE 클린코드&테스트 - 3주차 발자국](https://cdn.inflearn.com/public/files/blogs/76476da7-4b91-4915-b1e2-9e7c0a2806be/스크린샷 2025-03-16 오후 11.53.00.png)
[인프런 워밍업 클럽 3기] BE 클린코드&테스트 - 3주차 발자국
💡 강의 핵심 내용 정리
💻Practical Testing
✅ 레이어드 아키텍처 (Layered Architecture)
목적: 관심사 분리 → 책임을 나누고 유지보수 용이하게
4계층 구성: Presentation → Business → Persistence → Infrastructure
✅ Spring & JPA 핵심 개념
Library vs Framework
Library: 내가 주도
Framework: 프레임이 주도 (내 코드는 수동적으로 참여)
Spring 핵심 개념
IoC: 객체 생명주기 관리
DI: 외부에서 의존성 주입
AOP: 핵심 로직과 공통 관심사 분리 (Spring은 프록시 기반)
JPA / ORM
ORM: 객체 <-> 관계형 DB 간 불일치 해결
JPA: Java 진영 ORM 인터페이스 (Hibernate 사용 많음)
✅ Persistence Layer 테스트
역할: 순수 Data 접근 (비즈니스 로직 X)
목적:
쿼리가 의도대로 작동하는지 검증
향후 변경 가능성 대비
어노테이션
@DataJpaTest
: JPA 관련 Bean만 등록 (가볍고 빠름)@ActiveProfiles("test")
: 테스트용 프로파일 적용
✅ Business Layer 테스트 (Service)
역할: 비즈니스 로직 구현, Persistence Layer와 상호작용
테스트 방식: 통합 테스트 (
@SpringBootTest
)주의:
@Transactional
남용 주의 → 서비스에 선언된 트랜잭션 유무를 놓칠 수 있음JPA의 변경감지
save
,delete
는 내부적으로@Transactional
적용되어 변경 감지 작동
✅ Presentation Layer 테스트 (Controller)
역할: 외부 요청의 진입 지점 / 파라미터 검증
테스트 방식
@WebMvcTest
: 컨트롤러 중심 테스트 (다른 레이어는@MockBean
사용)MockMvc
: HTTP 요청/응답 흐름을 시뮬레이션
✅ @Transactional(readOnly = true) 활용
용도: 읽기 전용 트랜잭션 → 변경감지 비활성화 → 성능 향상
CQRS 설계 패턴
명령(Command) / 조회(Query) 분리
서비스 분리, API URL 분리, DB Master-Slave 분리 등으로 확장 가능
댓글을 작성해보세요.