Spring & Spring boot 32

[Springboot] 테스트 코드 - 8 - Repository Unit Test 리포지토리 단위 테스트

본 포스팅은, 단위 테스트 (Unit Test) 와 관련된 내용입니다.작성된 내용 외에도 다양한 방법이 있으며, 정답은 없습니다.1. 리포지토리 단위 테스트2. 테스트 코드3. GitHub SpringBoot 환경에서 전체적인 비즈니스 로직이 정상적으로 동작하는지 테스트 하기 위해서는 통합 테스트를 해야 하고, 각 모듈을 테스트 하고 싶다면, 단위 테스트를 진행해야 한다.일반적인 Spring MVC 를 사용하는 구조라면, 일부 레이어에서만 단위 테스트를 수행하는게 무의미하거나 어려운 경우가 많다.하지만! Mock 객체를 활용하여, 하위 레이어와 무관하게 동작하도록, 레이어 별 단위 테스트 코드를 작성해보도록 하겠다.  앞서 JPA Example 에서 작성한 소스를 기반으로 작성된 포스팅이며,Control..

[Springboot] 테스트 코드 - 7 - Service Unit Test 서비스 단위 테스트

본 포스팅은, 단위 테스트 (Unit Test) 와 관련된 내용입니다.작성된 내용 외에도 다양한 방법이 있으며, 정답은 없습니다.1. 서비스 단위 테스트2. 테스트 코드3. GitHub SpringBoot 환경에서 전체적인 비즈니스 로직이 정상적으로 동작하는지 테스트 하기 위해서는 통합 테스트를 해야 하고, 각 모듈을 테스트 하고 싶다면, 단위 테스트를 진행해야 한다.일반적인 Spring MVC 를 사용하는 구조라면, 일부 레이어에서만 단위 테스트를 수행하는게 무의미하거나 어려운 경우가 많다.하지만! Mock 객체를 활용하여, 하위 레이어와 무관하게 동작하도록, 레이어 별 단위 테스트 코드를 작성해보도록 하겠다.  앞서 JPA Example 에서 작성한 소스를 기반으로 작성된 포스팅이며,Controlle..

[Springboot] 테스트 코드 - 6 - Controller Unit Test 컨트롤러 단위 테스트

본 포스팅은, 단위 테스트 (Unit Test) 와 관련된 내용입니다.작성된 내용 외에도 다양한 방법이 있으며, 정답은 없습니다.1. 컨트롤러 단위 테스트2. 테스트 코드3. GitHub SpringBoot 환경에서 전체적인 비즈니스 로직이 정상적으로 동작하는지 테스트 하기 위해서는 통합 테스트를 해야 하고, 각 모듈을 테스트 하고 싶다면, 단위 테스트를 진행해야 한다.일반적인 Spring MVC 를 사용하는 구조라면, 일부 레이어에서만 단위 테스트를 수행하는게 무의미하거나 어려운 경우가 많다.하지만! Mock 객체를 활용하여, 하위 레이어와 무관하게 동작하도록, 레이어 별 단위 테스트 코드를 작성해보도록 하겠다.  앞서 JPA Example 에서 작성한 소스를 기반으로 작성된 포스팅이며,Controll..

[Springboot] 테스트 코드 - 5 - Mockito

1. Mockito ?2. Mockito 특징 [Mockito ?]Mockito 는 JAVA 에서 사용하는 Mock Framework 이다.흔히 Mockup 에서 사용하는 Mock 과 동일한 의미로, 주로 단위 테스트 작성 시 사용되며, 의존성 주입(DI)나 테스트 환경에서의 객체를 가짜로 생성하고 테스트 과정에서 맡을 동작을 정의하여, 실제 구현 없이 테스트를 수행할 수 있도록 도와준다.단, 단위 테스트 이후 단계에서 사용하는 것은 무의미한 부분이 있다. Mockito 의 주요 기능은 다음과 같다.모의 객체 생성테스트에서 사용할 객체를 가짜로 생성할 수 있다.테스트 중, 의존하는 객체를 실제 구현 대신 Mock 객체로 대체하여 테스트 대상 코드와 모의 객체 간의 상호작용을 검증한다.메서드 호출 설정 (..

[Springboot] 테스트 코드 - 4 - Assertion 단정문

1. Assertion2. Jupiter Assertion 3. Jupiter Assertion Methods 테스트 코드 작성에 앞서,JUnit 라이브러리와 함께 사용할 수 있는 Jupiter Assertion 에 대해 알아보자. [ Assertion ]Jupiter Assertion 라이브러리를 알아보기에 앞서, Assertion 의 개념부터 정리해보자.어설션(Assertion)은 프로그래밍과 소프트웨어 테스트에서 코드의 특정 조건이나 상태를 검증하기 위한 문장을 의미한다.어설션을 사용하여 프로그램이 예상한 대로 동작하는지 확인하고, 그렇지 않은 경우 오류를 발생시켜 디버깅과 문제 해결을 쉽게 할 수 있다. - 코드 검증특정 조건이 참(true)이어야 하는 상황에서 이를 검증한다.예를 들어, 메서드의..

[Springboot] 테스트 코드 - 3 - JUnit5

1. JUnit ?2. JUnit 모듈3. 테스트 환경 설정 [JUnit]JUnit 의 J 는 Java의 약자로, JUnit 은 자바에서 활용되는 대표적인 테스트 프레임워크이다.단위 테스트(Unit Tests)뿐 아니라, 통합 테스트(Integration Tests)를 할 수 있는 기능을 제공한다.JUnit 의 특징으로는 다음과 같은 내용이 있다.몇 개의 어노테이션만 활용하여 간편하게 테스트 코드를 작성할 수 있다.단정문(Assert)를 통하여 테스트 케이스의 기댓값이 정상적으로 도출됐는지 검토할 수 있다.또한, 현 시점 사용되는 JUnit 5 버전에서는 다음과 같은 기능이 제공된다.JUnit 5는 확장 가능한 모델을 제공하여, 사용자 정의 확장을 쉽게 추가할 수 있다. 커스텀 확장은 @ExtendWit..

[Springboot] 테스트 코드 - 2 - TDD 테스트 주도 개발이란?

최근, TDD를 지향하는 프로젝트가 꽤 많이 보이는 것 같다.분명한 장점이 존재하는 개발 방법론이지만, 프로세스 변경에 따른 비용 증가 등의 문제를 해결해야 한다.1. TDD?2. TDD 개발 주기3. TDD 의 효과 [TDD]최근, TDD를 지향하는 프로젝트가 꽤 많이 보이는 것 같다.분명한 장점이 존재하는 개발 방법론이지만, 프로세스 변경에 따른 비용 증가 및 생산성 저하 등의 문제를 해결해야 한다. TDD 는 Test - Driven - Developement 의 약자로 '테스트 주도 개발' 이라는 의미를 가지고 있다.TDD 는 반복 테스트를 이용한 소프트웨어 개발 방법론테스트 코드를 먼저 작성하고, 테스트를 통과하는 코드를 작성하는 과정을 반복하는 소프트웨어 개발 방식애자일(Agile) 방법론 ..

[Springboot] 테스트 코드 - 1 - 테스트 개요

1. Test 의 중요성2. Test 방법3. Test 코드 작성 방법[Test 의 중요성]최근들어 애플리케이션을 개발할 때, 테스트 코드로 로직을 확인하는 과정이 더 중요하게 여겨지고 있다.특히, CI/CD 파이프라인 구축에 있어, 테스트 코드 작성은 매우 중요하다.개발 과정에서 문제를 미리 발견할 수 있다.리팩토링의 리스크가 줄어든다.애플리케이션을 가동해서 직접 테스트하는 것보다 테스트를 빠르게 진행할 수 있다.하나의 명세 문서로의 기능을 수행한다.몇 가지 프레임워크에 맞춰 테스트 코드를 작성하면 좋은 코드를 생산할 수 있다.코드가 작성된 목적을 명확하게 표현할 수 있으며, 불필요한 내용이 추가되는 것을 방지한다. [Test 방법]단위 테스트 - Unit Tests테스트 대상의 범위를 기준으로, 가장..

[Springboot] springdoc 을 사용하여 Swagger 설정하기 - 2

1. API 명세2. Schemas 명세 Springdoc OpenAPI 는 다양한 어노테이션을 활용해 API 문서를 쉽게 생성하고 관리할 수 있도록 해준다. 다음과 같은 Get API 기준으로 각종 어노테이션을 적용해보자. @GetMapping public ResponseEntity getProduct(Long number) { ProductResponseDto productResponseDto = productService.getProduct(number); return ResponseEntity.status(HttpStatus.OK).body(productResponseDto); }[API 명세]컨트롤러에 적용하는 어노테이션에 대해 알..

[Springboot] springdoc 을 사용하여 Swagger 설정하기 - 1

1. Swagger ?2. springdoc - springfox3. Setting [Swagger ?]API를 개발함에 있어, 명세 관리는 필수이다.해당 API가 어떤 로직을 수행하는지 설명하고, 이 로직을 수행하기 위해 어떤 값을 필요로 하며, 이 로직의 결과로는 어떤 값이 생성되는지를 정리한 자료가 있어야 API를 사용함에 있어 불편이 줄어들 수 있기 때문이다. 이런 API 명세는 개발 과정에서 지속적으로 업데이트 해주어야 하며, 매우 번거롭고 많은 시간이 소요되는 업무이다.이러한 불편함을 줄여주는 Swagger 프로젝트에 대해 알아보자.[springdoc - springfox]스프링부트 환경에서 Swagger 를 사용할 수 있는 대표적인 라이브러리로는 Springfox 와 Springdoc 이 있..