반응형 분류 전체보기297 [오류 처리] Failed to load ApplicationContext Failed to load ApplicationContext SpringBoot 프로젝트에서 TDD 구현 시에 발생하는 에러 관련 내용을 알아보겠습니다. 오류 내용 java.lang.IllegalStateException: Failed to load ApplicationContext 오류 원인 데이터베이스 소스를 구성하지 못해서 나오는 에러이다. Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. 오류 해결 방안 H2, HSQL or Derby 등의 데이터베이스를 추가해줘야한다. 해당 프로젝트에서는 H2 DataBase 의존성을 추가하여 진행하였다. c.. Spring/Issue 2023. 11. 9. 정렬과 페이징 처리 방법과 예시 정렬과 페이징 처리 애플리케이션에서 자주 사용되는 정렬과 페이징 처리는 쿼리 메서드를 작성하는 방법을 기반으로 수행할 수 있다. 기본 쿼리 메서드를 통해서도 가능하다. 기본적인 정렬과 페이징 처리 방법을 알아보겠습니다. 정렬 처리하기 일반적인 쿼리문에서는 정렬을 사용할 때 ORDER BY 구문을 사용한다. 쿼리 메서드도 정렬 기능에 동일한 키워드가 사용된다. // Asc : 오름차순, Desc : 내림차순 List findByOrderByNumberAsc(String name); List findByOrderByNumberDesc(String name); 기본 쿼리 메서드를 작성한 후에 OrderBy 키워드를 삽입한다. 정렬하고자 하는 컬럼과 오름차순/내림차순을 설정하면 정렬이 수행된다. 쿼리 메서드에서.. Book/스프링부트 핵심가이드 2023. 11. 9. Spring Data JPA 쿼리 메서드 개념과 사용 방법 Spring Data JPA 활용 리포지토리 예제를 작성하고, 리포지토리 활용법을 테스트 코드를 통해 알아보겠습니다. JPQL JPQL은 JPA Query Language의 줄임말로써, JPA에서 사용할 수 있는 쿼리를 의미한다. JPQL의 문법은 SQL과 매우 비슷해서 데이터베이스 쿼리에 익숙한 사람들은 쉽게 사용할 수 있다. SQL vs JPQL SQL에서는 테이블이나 컬럼의 이름을 사용한다. JPQL은 엔티티 객체를 대상으로 수행하는 쿼리이기에 매핑된 엔티티의 이름과 필드의 이름을 사용한다는 것이다. 쿼리 메서드 기본 메서드는 식별자 기반으로 생성되기에, 별도의 메서드를 정의해서 사용하는 경우가 많다. 이 때 간단한 쿼리문을 작성하기 위해 사용되는 것이 쿼리 메서드 이다. 쿼리 메서드 생성 쿼리 메.. Book/스프링부트 핵심가이드 2023. 11. 8. JaCoCo를 활용한 테스트 JaCoCo를 활용한 테스트 커버리지를 확인하기 위한 도구 중 가장 보편적으로 사용되는 도구인 JaCoCo에 대해서 알아보겠습니다. JaCoCo란? JaCoCo는 Java Code Coverage 의 약자이다. JUnit 테스트를 통해 애플리케이션의 코드가 얼마나 테스트 되었는지 Line과 Branch를 기준으로 한 커버리지로 리포트한다. JaCoCo는 런타임으로 테스트 케이스를 실행하고 커버리지를 체크하는 방식으로 동작된다. 리포트는 HTML, XML, CSV와 같은 다양한 형식으로 확인이 가능하다. JaCoCo 플러그인 설정 의존성 주입(pom.xml) org.jacoco org.jacoco.cli 0.8.7 플러그인 추가(pom.xml) 1️⃣ 태그 **/ProductServiceImpl.class.. TEST/JaCoCo 2023. 11. 8. 단위 테스트 방법 [part 3 : 리포지토리(Repository)] 적합한 테스트 가이드 레이어(layer)별로 사용하기 적합한 방식의 테스트 가이드에 대해 알아보겠습니다. 그 중에 '리포지토리 객체'를 테스트하는 방법을 알아보겠습니다. 리포지토리 객체의 테스트 리포지토리는 개발자가 구현하는 레이어 중에서 가장 데이터베이스와 가깝다 JpaRepository를 상속받아 기본적인 쿼리 메서드를 사용할 수 있다. 📌 리포지토리 객체의 테스트 코드 작성 시 고려할 사항 findById(), save() 같은 기본 메서드에 대한 테스트는 큰 의미가 없다. 리포지토리의 기본 메서드는 테스트 검증을 마치고 제공된 것이기 때문이다. 데이터베이스의 연동 여부는 테스트 시에 고려해볼 사항이다. 데이터베이스를 연동한 테스트는 테스트 데이터를 제거하는 코드까지 작성하는 것이 좋다. 테스트 데.. TEST/JUnit 2023. 11. 8. 단위 테스트 방법 [part 2 : 서비스(Service)] 적합한 테스트 가이드 레이어(layer)별로 사용하기 적합한 방식의 테스트 가이드에 대해 알아보겠습니다. 그 중에 '서비스 객체'를 테스트하는 방법을 알아보겠습니다. 1️⃣ ProductService 메서드 테스트 class ProductServiceTest { private final ProductRepository productRepository = Mockito.mock(ProductRepository.class); private ProductServiceImpl productService; @BeforeEach public void setUpTest() { productService = new ProductServiceImpl(productRepository); } @Test void getPro.. TEST/JUnit 2023. 11. 8. 단위 테스트 방법 [part 1 : 컨트롤러(Controller)] 적합한 테스트 가이드 레이어(layer)별로 사용하기 적합한 방식의 테스트 가이드에 대해 알아보겠습니다. 그 중에 '컨트롤러 객체'를 테스트하는 방법을 알아보겠습니다. 컨트롤러 객체의 테스트 컨트롤러는 클라이언트로부터 요청을 받아 요청에 걸맞는 서비스 컴포넌트로 요청을 전달한다. 그 결과값을 가공해서 클라이언트에게 응답하는 역할을 수행한다. 즉, 애플리케이션을 구성하는 여러 레이어 중에 가장 웹에 가까이에 있는 모듈이라고 볼 수 있다. ProductController 메서드 package com.springboot.test.controller; import com.springboot.test.data.dto.ChangeProductNameDto; import com.springboot.test.data... TEST/JUnit 2023. 11. 8. JUnit 테스트 코드의 설명과 예제 JUnit 테스트 코드 작성 자바 언어에서 사용되는 대표적인 테스트 프레임워크로서 단위 테스트를 위한 도구를 제공하는 'JUnit'에 대해 알아보겠습니다. JUnit JUnit은 자바 언어에서 사용되는 대표적인 테스트 프레임워크이다. 가장 큰 특징은 어노테이션 기반의 테스트 방식을 지원한다는 것이다. 즉, JUnit을 사용하면 몇 개의 어노테이션만으로 간편하게 테스트 코드를 작성할 수 있다. JUnit을 활용하면 단정문(assert)을 통해 테스트 케이스의 기댓값이 정상적으로 도출되었는지 검토할 수 있다 JUnit의 세부 모듈 1️⃣ JUnit Platform JVM에서 테스트를 시작하기 위한 뼈대 역할을 한다. 테스트를 발견하고 테스트 계획을 생성하는 테스트 엔진(TestEngine)의 인터페이스를 가.. TEST/JUnit 2023. 11. 7. lombok 설정 방법과 주요 어노테이션 lombok 사용 반복되는 코드의 작성을 생략할 때 도와주는 어노테이션인 lombok에 대해 알아보겠습니다. lombok 데이터(모델) 클래스를 생성할 때 반복적으로 사용하는 Getter/Setter 같은 메서드를 어노테이션으로 대체하는 기능을 제공하는 라이브러리이다. lombok 의 장점 어노테이션 기반으로 코드를 자동 생성하므로, 생산성이 높아진다. 반복되는 코드를 생략할 수 있어서 가독성이 높아진다. 롬복을 안다면 간단하게 코드를 유추할 수 있어 유지보수에 용이하다. lombok 의 의존성(dependencies) 생성 Maven(pom.xml) org.projectlombok lombok true Gradle(build.gradle) dependencies { compileOnly 'org.pro.. Book/스프링부트 핵심가이드 2023. 11. 3. Service, Controller 클래스 생성 및 메서드 구현 Service, controller 클래스 생성 및 메서드 구현 애플리케이션에서 핵심 기능을 제공하는 서비스, 비즈니스 로직과 클라이언트 요청을 연결하는 컨트롤러를 생성해보겠습니다. 서비스 클래스 만들기 서비스 레이어에서는 도메인 모델(Domain Model)을 활용해 애플리케이션에서 제공하는 핵심 기능을 제공한다. 핵심 기능을 구현하려면 세부 기능을 정의해야한다. 아키텍처의 한계를 극복하기 위해 아키텍처를 서비스 로직과 비즈니스 로직으로 분리하기도 한다. 도메인을 활용한 세부 기능들은 비즈니스 레이어 로직에 구현하고, 서비스 레이어에서는 기능 등을 종합해서 핵심기능을 전달하도록 구성하는 경우가 대표적이다. DTO 클래스 생성 ProductDto @Getter @Setter @NoArgsConstruct.. Book/스프링부트 핵심가이드 2023. 11. 3. DAO(Data Access Object) 개념과 클래스 구성 DAO 설계 데이터베이스 접근하기 위한 로직을 관리하는 객체인 DAO, 구성하는 방법에 대해 알아보겠습니다. DAO(Data Access Object) 데이터베이스에 접근하기 위한 로직을 관리하기 위한 객체이다. 비즈니스 로직의 동작 과정에서 데이터를 조작하는 기능을 수행한다. 하지만, Spring Data JPA에서 DAO의 개념은 리포지토리(Repository)가 대체한다. DAO 클래스 생성 DAO 클래스는 일반적으로 '인터페이스-구현체' 구성으로 생성한다. DAO 클래스는 의존성 결합을 낮추기 위한 디자인 패턴이며, 서비스 레이어에 DAO 객체를 주입받을 때 인터페이스를 선언하는 방식으로 구성할 수 있다. ProductDao 구성 package com.springboot.jpa.data.dao; .. Book/스프링부트 핵심가이드 2023. 11. 3. JPA Repository 인터페이스 생성과 사용 방법 리포지토리 인터페이스 설계 Spring Data JPA는 JpaRepository를 기반으로 더욱 쉽게 데이터베이스를 사용할 수 있는 아키텍처를 제공한다. 스프링부트로 JpaRepository를 상속하는 인터페이스를 생성하는 방법과 활용하는 방법을 알아보겠습니다. 리포지토리 인터페이스 생성 리포지토리(Repository)는 Spring Data JPA가 제공하는 인터페이스이다. 리포지토리는 엔티티가 생성한 데이터베이스에 접근하는데에 사용한다. package com.springboot.jpa.data.repository; import com.springboot.jpa.data.entity.Product; import org.springframework.data.jpa.repository.JpaReposit.. Book/스프링부트 핵심가이드 2023. 11. 2. 이전 1 ··· 5 6 7 8 9 10 11 ··· 25 다음