[CS 스터디] Spring,테스트

한주영·2023년 5월 14일
0

CS

목록 보기
15/19

프록시

프록시란?

'대신하다'의 의미를 가지고 있으며 동작을 대신해주는 가짜객체 개념
스프링에서의 초기화를 지연
트랜잭션을 적용하는 등의 부가기능을 추가할때
프록시 기술을 사용한다

프록시의 사용

JPA의 Hibernate 지연 로딩 구현
-> 지연로딩을 하려면 연관된 엔티티의 실제데이터가 필요할때까지 조회를 미뤄야 한다.
->지연로딩을 사용하는 연관관계자리에 프록시 객체를 주입하여 실제 객체가 들어있는 것처럼 동작하도록 한다.

실제 객체의 상속본
-> 프록시가 실제 객체를 상속한 타입을 가지고 있기때문에 가능하다
->프록시 객체는 실제 객체에 대한 참조를 보관하여 실제 객체의 메서드를 호출한다

고아객체

JPA에서의 고아객체는 상위객체 또는 엔티티와 더이상 연결 되지 않는
영구객체를 나타낸다.
두 엔티티간의 관계가 끊어지거나 제거되고 자식 엔티티가 부모 엔티티에
대한 참조없이 남아있을때 발생할수있다.

응용프로그램에서 데이터 불일치 및 오류로 이어 질 수있다.

ex) 고아 지식 엔티티에 여전히 부모엔티티의 외래키참조가 포함되어있지만
부모 엔티티가 더이상 존재하지않는 경우 자식 엔티티에 접근하려고하면
예외가 발생할수있다.

고아 객체를 방지하려면 적절한 CasCade를 유형을 사용하여
엔티티간의 관계를 적절하게 관리하는 것이 중요하다.

단방향/양방향 매핑

매핑

객체가 관계향 데이터베이스에 연결되고 저장되는 방식을 나타낸다

단방향

두 엔티티간의 관계가 존재하지만 관계는 한 방향으로만 탐색할수있는 매핑을
의미한다.
한 엔티티에는 다른 엔티티에 대한 참조가 있지만
다른엔티티에는 첫번째 엔티티에 대한 참조가 없다.

양방향

단방향 매핑보다 유연하고 강력하다
설정 및 유지관리에 더 많은 작업이 필요하다
두 엔티티는 관계를 인식해야한다 또한 관계가 변경될때 적절하게
참조를 업데이트 해야한다

N+1문제

JPA를 사용하여 관계형 데이터베이스에서 데이터를 검색할때 발생할수있는 성능문제
하위 엔티티에 대한 일대다 관계 또는 다대일 관계가 있는 N개의 상위
엔티티를 검색하는 쿼리가 연결된 하위 엔티티를 검색하기 위해
N개의 추가 쿼리를 생성하여 총 N+1개의 쿼리가 생성될때 발생

ex) 주문 목록 및 관련 광고항목을 검색하는 애플리케이션이 있다고 생각했을때 쿼리가 100개의 주문을 검색하고 각 주문에 10개의 라인 항목이 있는경우
총 1001개의 쿼리가 실행된다
즉 100개의 주문을 검색하는 쿼리1개와 주문과 연결된 라인 항목을 검색하는 추가 쿼리 100개가 실행된다.

대규모 데이터 세트 또는 느린 데이터베이스 연결을 처리할때 애플리케이션 성능에 상당한 영향을 미칠수있다
->네트워크 트래픽이 증가하고 메모리 사용량이 증가하며 쿼리 실행시간이
길어질수있나는 단점이있다.

해당문제를 개선하거나 피하려면
단일 쿼리에서 상위엔티티와 함께 하위 엔티티를 검색하는 것이 중요하다.

테스트

DDD(Domain-Driven Design)

DDD원칙을 따르는 소프트웨어 애플리케이션 테스트를 하는데 사용됨.
애플리케이션 설계에서 도메인 모델의 중요성을 강조하는 소프트웨어 개발접근방식
목표는 응용프로그램이 제대로 설계되고 도메인 모델이 올바르게 구현되어있는지 확인하는 것이다.

DDD테스트 기술
1.도메인 모델 테스트
2.응용프로그램 서비스 테스트
3.애플리케이션 계층 테스트
4.지속성 계층 테스트
5.행동중심 개발(BDD)
6.테스트 주도 개발(TDD)

TDD(Test-Driven Development)

실제 코드를 작성하기 위해 테스트 작성을 먼저 강조하며 하는 소프트웨어 개발 방법론이다

TDD개발의 순서
1.테스트 작성
2.테스트 실행
3.코드 작성
4.테스트 다시 실행
5.코드 리팩토링

Junit4 vs Junit5

JUnit은 널리 사용되는 Java 애플리케이션용 오픈 소스 테스트 프레임워크

JUnit4

JUnit4는 JUnit 프레임워크의 이전 버전이며 수년 동안 널리 사용되었음

JUnit4의 주요 기능

테스트 메서드는 @Test로 주석 처리됨
어설션은 Assert 클래스에서 제공.
매개변수화된 테스트는 @Parameters 주석을 사용하여 지원.
@RunWith 주석을 사용하여 테스트 스위트를 생성할 수 있다.

JUnit5

JUnit5는 JUnit 프레임워크의 최신 버전

JUnit5의 주요 기능

테스트 메서드는 JUnit4에서와 마찬가지로 @Test로 주석 처리.
어설션은 다양한 어설션 메서드를 포함하는 어설션 클래스에 의해 제공.
매개변수화된 테스트는 @ParameterizedTest 주석을 사용하여 지원.
@SelectPackages 및 @SelectClasses 주석을 사용하여 테스트 스위트를 생성할 수 있다.
동적 테스트는 @TestFactory 주석을 사용하여 런타임에 생성할 수 있다.
의존성 주입은 @ExtendWith 주석 및 다양한 확장 지점을 사용하여 지원한다.

profile
백엔드개발자가 되고싶은 코린이:)

0개의 댓글