🚨오늘 오전 11시, 90% 쿠폰 선착순🚨

[인프런 워밍업 클럽 3기] BE 클린코드&테스트 - 3주차 발자국

[인프런 워밍업 클럽 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)

  • 목적:

    1. 쿼리가 의도대로 작동하는지 검증

    2. 향후 변경 가능성 대비

  • 어노테이션

    • @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 분리 등으로 확장 가능

댓글을 작성해보세요.

채널톡 아이콘