전체 글(79)
-
deleteAll()보다 deleteAllInBatch()가 더 권장되는 이유가 뭐야?
deleteAll vs deleteAllInBatch deleteAll() : SimpleJpaRepository()에 오버라이딩되어 있으며, MyBatis, JdbcTemplate 등 기술에 상관없이 사용가능하다. 또, deleteAll()이 실행되면, findAll()의 결과로 얻은 리스트를 순회하며, 데이터를 한개씩 삭제함. 즉, N개의 데이터가 존재하면 N개릐 DELETE쿼리가 실행된다. -> 테스트 실행시간이 오래 걸림. deleteAllInBatch() : 테이블에 있는 데이터를 전부 지우는 DELETE쿼리가 실행된다. 즉, 데이터 크기와 관계없이 한번의 쿼리로 clear가 가능함. package org.springframework.data.jpa.repository.support; @Repo..
2024.01.15 -
기본 생성자를 추가할때, AccessLevel을 PRIVATE이 아닌 PROTECTED를 하는 이유는?
@NoArgsConstructor(access = AccessLevel.PROTECTED) 기본 생성자를 추가할때, AccessLevel을 PRIVATE이 아닌 PROTECTED를 하는 이유는? @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) // 기본생성자를 생성하되, 접근수준을 protected로 하자! @Entity public class Product extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String productNumber; } @NoArgsConstructor(access = AccessLeve..
2024.01.12 -
Spring시 알아야할 기초개념
Library VS Framework - 라이브러리 - 내 코드(초록색박스)가 주체가 됨 - 프레임워크 - 내 코드가 수동적임 Spring IOC(Inversion of Control) - 객체의 생명주기를 제3자(IoC컨테이너)가 관리해줌 DI(Dependency Injection) - 컨테이너가 주입해준 객체를 사용한다. AOP(Aspect Oriented Programming) - 로깅 등 공통적으로 사용되는 기능을 분리하여 관리 참조 블로그 : https://programforlife.tistory.com/107#google_vignette ORM - 객체 지향 패러다임과 관계형 DB 패러다임의 불일치 - ORM을 사용함으로써 개발자는 비즈니스 로직에 집중할 수 있다. JPA Java진영의 ORM..
2024.01.12 -
What's BDD?
DisplayName 한 문장으로 작성 및 행위에 대한 결과까지 작성하길 권고함. 도메인용어를 사용하기 음료 1개 추가 테스트 음료 1개를 추가하면 주문 목록에 담긴다. (권장) 특정 시간 이전에 주문을 생성하면 실패한다. 영업 시작 시간 이전에는 주문을 생성할 수 없다. (권장) BDD (Behavior Driven Development) given : 시나리오 진행에 필요한 모든 준비과정 (값, 객체 등) when : 시나리오 행동 진행 then : 시나리오 진행에 대한 결과 검증
2024.01.12 -
어떤 상황이 주어질때의 테스트코드는 어떻게 작성하는게 좋을까?
RequiredArgsConstructor란? 생성자 주입 final 혹은 @NotNull이 붙은 필드를 기반으로 생성자를 자동으로 만들어줌 한번 의존성을 주입받은 객체는 프로그램이 끝날때까지 변하지 않음(불변성) JUnit5 단위테스트를 위한 테스트프레임워크 AssertJ 테스트코드 작성을 원활하게 돕는 테스트라이브러리 메서드 체이닝 지원(.이용해서 계속 작성하는 것) //assertEquals - JUnit에 있는 메소드 assertEquals(americano.getName(), "아메리카노"); //assertThat - AssertJ에 있는 메소드 assertThat(americano.getName()).isEqualTo("아메리카노"); AssertJ에서 제공하는 예외를 위한 메소드 - ass..
2024.01.12 -
싱글톤 패턴이 객체 지향에 위반이 된다는데? 왜?
싱글톤 패턴은 객체의 인스턴스를 한개만 생성되게 하는 패턴으로, 메모리,데이터 공유 측면에서 이점이 있다. 하지만 그렇다고 해서 무조건 좋은 것이 아니다. 여러 클래스의 인스턴스에서 싱글톤 인스턴스의 데이터에 동시에 접근하게 되면 동시성 문제가 발생하기 때문 ! 결론 : 싱글톤 패턴은 안티패턴으로 불릴 만큼 단독으로 사용한다면 객체 지향에 위반되는 사례가 많다. 스프링 컨테이너 같은 프레임워크의 도움을 받으면 싱글톤 패턴의 문제점들을 보완하면서 장점의 혜택을 누릴 수 있다. 실제로 스프링 빈은 컨테이너의 도움을 받아 싱글톤 스콥으로 관리되고 있다. 프레임워크 도움없이 싱글톤 패턴을 적용하고 싶다면, trade-off를 잘 고려하여 사용하는 것이 좋다고 한다. 기초 구현 방식 public class Set..
2024.01.12