tao-tech
[Spring]@DataJpaTest, @SpringBootTest 차이
[Spring]@DataJpaTest, @SpringBootTest 차이
2024.08.28@DataJpaTest란?JPA관련 구성 요소에 초점을 맞춘 데이터 액세스 계층 테스트특징Application의 JPA에 필요한 Bean을 로드@Repository 어노테이션을 가진 Bean들을 자동 스캔빠른 테스트 실행 속도데이터 액세스 레이어에 집중하여 구체적인 테스트 가능in-memory embedded DB 사용 가능- @TypeExcludeFiltersApplication 컨텍스트가 생성되는 동안 특정 타입의 빈을 제외시키는 역할을 합니다.DataJpaTypeExcludeFilter를 통해 JPA외의 @Controller, @Service, @Component 등과 같은 어노테이션이 달린 클래스를 컴포넌트 스캔 대상에서 제외시키는 동작을 수행합니다. - @AutoConfigureDataJpa테스..
[Spring]@DataJpaTest를 이용한 테스트코드 작성 deleteAll? deleteAllInBatch?
[Spring]@DataJpaTest를 이용한 테스트코드 작성 deleteAll? deleteAllInBatch?
2024.08.26@DataJpaTest@DataJpaTest 어노테이션은 JPA관련 테스트 설정만 로드합니다.DataSource의 설정이 정상적인지, JPA를 이용하여 데이터를 저장, 수정, 삭제하는지 등의 테스트가 가능하며, 내장형 데이터베이스를 사용하여 실제 데이터베이스를 사용하지 않고 테스트 데이터베이스로 테스트가 가능합니다.(H2, DERBY, HSQLDB) 테스트코드 작성SpringBoot 3.3.3Java21Junit5Spring Data JPA - 테스트코드 환경 구축Entity@Entity@Getter@NoArgsConstructorpublic class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Lon..
[JPA] JPA 영속성 컨텍스트란? 영속성 컨텍스트 개념과 이점
[JPA] JPA 영속성 컨텍스트란? 영속성 컨텍스트 개념과 이점
2024.08.11영속성 컨텍스트영속성 컨텍스트란?엔티티를 영구적으로 저장하는 환경, JPA를 이해하는데 가장 중요한 용어이다.EntityManager.persist(entity) → DB에 저장하는 게 아닌 엔티티를 영속성 컨텍스트에 저장DB저장은 트랜잭션(Transaction)에서 커밋(commit) 시점에 저장된다.영속성 컨텍스트는 논리적 개념이며 눈에 보지 않는다. → 엔티티매니저를 통하여 영속성 컨텍스트에 접근 비영속 (new / transient)영속성 컨텍스트와 전혀 관계없는 새로운 상태// 객체를 생성한 상태 (비영속) JPA와 전혀 관계없는 상태Member member = new Member();member.setid("member1");member.setname("오팔봉");영속상태가 아니므로 영속성 컨..
[JPA] JPA 1차 캐시란? 1차 캐시의 동작원리
[JPA] JPA 1차 캐시란? 1차 캐시의 동작원리
2024.08.061차 캐시란?영속성 컨텍스트 내부에는 엔티티(Entity)를 보관하는 저장소가 있는데 이것을 1차 캐시라고 한다.엔티티 정보를 키 벨류 값으로 가지고 있어 DB에 접근하는 횟수를 줄여 성능상의 이점을 가져온다.엔티티매니저(EntityManager)로 변경, 조회하는 모든 엔티티는 1차 캐시에 저장되며 트랜잭션이 커밋되는 시점에 데이터베이스와 동기화된다. (비교는 PK로 한다.) 좀 더 자세히 동작하는 원리에 대해서 알아보자1차 캐시 동작원리 find를 했을 때 해당 엔티티가 영속성 컨텍스트의 1차 캐시에 존재하고 있을 경우DB조회를 거치지 않고 1차 캐시에 저장되어 있는 엔티티를 반환한다. find를 했을 때 해당 엔티티가 영속성 컨텍스트의 1차 캐시에 존재하지 않을 경우DB를 조회하고 조회한 엔티티..
[Spring] Spring IOC, DI, DL 이란?
[Spring] Spring IOC, DI, DL 이란?
2024.07.27- Spring IOCIOC ( Inversion of Control)란 즉 제어의 역전이다. 제어의 역전이란? 제어권이 역전되다, 기존의 제어방식이 뒤바뀌었다는 것메서드나 객체의 호출작업을 개발자가 결정하는 게 아닌, 외부에서 결정되는 것을 의미한다. 이로 인해 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 되어 가독성, 코드중복, 유지보수를 용이하게 한다.기존객체 생성 → 의존성 객체 생성 → 의존성 객체 메서드 호출스프링 제어의 역전객체 생성 → 의존성 객체 주입 → 의존성 객체 메소드 호출의존성 객체를 직접 생성하지 않고 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입한다. - DIDI (Dependency Infection)란 스프링이 다른 프레임워크와 차별화되어 제공하..
[IntelliJ] IntelliJ Lombok(롬복) 설치, 설정
[IntelliJ] IntelliJ Lombok(롬복) 설치, 설정
2024.07.08- 롬복 (Lombok) 이란?롬복(Lombok)은 자바 클래스 내에서 생성되는 Getter, Setter, toString, 생성자 코드 등의 소스를 어노테이션(Annotation)을활용해 생략함으로써 컴파일 시점에 자동으로 생성해주어 더욱 간결하고 편리하게 만들어주는 라이브러리이다. - 롬복 (Lombok) 설치방법IntelliJ Settings.. → plugin 검색 → marketplace탭에서 Lombok 검색 IntelliJ 2020.03 이후 버전에서는 기본 Plugin으로 Lombok이 설치되어 있다. - Dependency 적용하기Maven 설정https://mvnrepository.com/artifact/org.projectlombok/lombok Maven Repository 사이..
Java - Scanner 클래스 next(), nextLine()의 차이
Java - Scanner 클래스 next(), nextLine()의 차이
2024.05.27next()와 nextLine()의 차이 next()공백( \t ), 엔터( \n )를 기준으로 한 단어 또는 한 문자씩 입력받는다.문자열 내에 엔터( \n ), 공백( \t ) 등은 입력되지 않는다.nextLine()엔터( \n )를 포함한 문자열 전체를 입력받는다.버퍼에 포함된 개행문자를 포함해서 입력받는다.한마디로, next()와 nextLine()은 개행문자의 포함 유무로 나뉜다. 개행문자란?표시 위치를 다음의 행으로 옮기는 데 사용되는 문자. 쉽게 말해 Enter( \n )등 을 의미한다. 예를 들어보자 System.out.print("첫번째 정수를 입력하세요: ");int num1 = scanner.nextInt();System.out.print("연산자를 입력하세요: ");String o..