Backend
home
🌱

11. Spring & JPA 기반 테스트

생성일
2025/02/17 13:29
태그

Layered Architecture → 관심사의 분리

통합 테스트

여러 모듈이 협력하는 기능을 통합적으로 검증하는 테스트
일반적으로 작은 범위의 단위 테스트만으로는 기능 전체의 신뢰성을 보장할 수 없다.
풍부한 단위 테스트 & 큰 기능 단위를 검증하는 통합 테스트

Spring

Library vs Framework

Library - 내 코드가 주체가 되어 필요한 기능이 있는 경우 외부에서 가져올 수 있는 것을 의미
Framework - 이미 동작할 수 있는 갖추어진 틀에서 내 코드가 수동적으로 역할을 하게 됨

Spring의 3대 개념

IoC (Inversion of Control)
객체의 생명주기에 대한 관리를 제3자가 한다(IoC 컨테이너).
DI (Dependency Injection)
AOP (Aspect Oriented Programming)

JPA, ORM

ORM - Object Relational Mapping
객체 지향 패러다임과 관계형 DB 패러다임의 불일치
이전에는 개발자가 객체의 데이터를 한땀한땀 매핑하여 DB에 저장 및 조회 (CRUD)
ORM을 사용함으로써 개발자는 단순 작업을 줄이고, 비즈니스 로직에 집중할 수 있음
JPA - Java Persistence API
Java 진영이 ORM 기술 표준
인터페이스이고, 여러 구현체가 있지만 보통 Hibernate를 많이 사용
반복적인 CRUD SQL을 생성 및 실행해주고, 여러 부가 기능들을 제공함
편리하지만 쿼리를 직접 작성하지 않기 때문에, 어떤 식으로 쿼리가 만들어지고 실행되는지 명확하게 이해하고 있어야 함
Spring 진영에서는 JPA를 한번 더 추상화한 Spring Data JPA 제공
QueryDSL과 조합하여 많이 사용함(타입체크, 동적쿼리)
@Entity, @Id, @Column @ManyToOne, @OneToMany, @OneToOne, @ManyToMany : 일대다 - 다대일 관계로 풀어서 사용

엔티티 설계

다대다 관계는 일대다 - 다대일 관계로 풀어서 진행