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 : 일대다 - 다대일 관계로 풀어서 사용
엔티티 설계
•
다대다 관계는 일대다 - 다대일 관계로 풀어서 진행