전체 글
-
@ParameterizedTest☕️ java 2023. 10. 25. 01:19
Test 코드를 작성하는 도중 실패 케이스마다 실패 테스트 메서드를 만들다보니 중복되는 코드도 많아지고 이로 인해 코드의 양이 많아지는 문제가 발생했다. 이런 문제를 해결하기 위해 @ParameterizedTest 를 사용해 해결하고자 알아보게 되었다. 📌 Parameterized Test 💡 Parameterized Test - 다른 인수로 여러번 테스트를 실행하는 것을 가능하게 한다. - @Test 대신 @ParameterizedTest 를 사용한다. - 최소 하나의 source 어노테이션을 붙여주어야 한다. 💡 다양한 Source 종류들 1️⃣ ValueSource @ParameterizedTest @ValueSource(strings = {"beomsic", "beom"}) void valueSo..
-
👀 Unit Test 네이밍 컨벤션☕️ java 2023. 10. 24. 15:31
테스트 코드를 작성하는 도중 테스트 메서드의 네이밍을 어떤식으로 해야 보기 좋고 직관적일지 고민하게 되었다. 자주 사용되는 자바 테스트 네이밍을 찾아서 그 중 하나를 사용하고자 한다. 💡네이밍을 하는 몇 가지 추천 방법 테스트명은 특정한 필요조건을 명시한다. 테스트명에는 기대되는 Input이나 상태, 그에 상응하는 결과값을 포함할 수 있다. 테스트명은 워크플로우와 아웃풋을 명시하는 선언이나 사실들로 나타내야 한다. 테스트명에는 테스트 메서드나 클래스의 이름을 포함할 수 있다. 🧩 네이밍 예시 📕 메서드명_테스트하고자하는상태_예상되는결과 - ex) isAdult_AgeLessthan18_False - 단점: 메서드 이름이 바뀌면 테스트명을 변경해주어야 한다. 📕 메서드명_예상되는결과_테스트하고자하는상태 -..
-
일급 컬렉션☕️ java 2023. 10. 24. 02:56
🧑🏻💻 이동욱님의 글을 보고 공부용으로 정리했습니다. ⭐ 일급 컬렉션 Collection을 Wrapping 하면서, 그 외 다른 멤버 변수가 없는 상태를 일급 컬렉션이라 한다. Map map = new HashMap(); map.put("1", "A"); map.put("2", "B"); map.put("3", "C"); public class GameRanking { private Map ranks; public GameRanking(Map ranks) { this.ranks = ranks; } } 🌟 Wrapping의 이점 비지니스에 종속적인 자료구조 Collection의 불변성 보장 상태와 행위를 한 곳에서 관리 이름이 있는 컬렉션 1️⃣ 비지니스에 종속적인 자료구조 📖 숫자 야구의 2가지 조건 ..
-
🧪 JMH (Java Microbenchmark Harness)☕️ java 2023. 10. 23. 13:49
자바에서 제공하는 Random 함수에 대해 공부하는 과정에서 java.util.Random 과 java.util.concurrent.ThreadLocalRandom 의 성능을 비교해보고자 JMH라는 개념을 도입하고자 공부를 하게 되었다. ⭐ JMH 📍 JMH(Java Microbenchmark Harness)는 openjdk에서 만든 라이브러리이다. - JVM 상에서 실행되는 코드의 성능을 측정하기 위한 벤치마크 도구이다. 📍 성능 측정 코드 실행 시간 메모리 사용량 GC 활동 등등 ⇒ 측정하고 수행하여 실행 결과에 대한 통계를 제공한다. 📖 벤치마크 (Benchmark) 컴퓨터 시스템, 소프트웨어, 하드웨어 등의 성능을 측정하고 비교하기 위해 사용되는 표준화된 기준이나 테스트 🔍 Annotation 1..
-
🆚 Random 함수 비교☕️ java 2023. 10. 23. 12:36
숫자야구 프로그램을 만들면서 Java에서 제공하는 Random 함수들이 어떤 것들이 있는지 궁금하고 어떤 것을 사용해야할지 궁금했다. 1️⃣ java.util.Random 💡 java.util 패키지에 있는 Random 클래스를 사용하는 방법 - 인스턴스를 생성해서 사용 🖥️ 사용 2가지 객체 생성 방법 기본 생성자를 사용하는 방법 long 타입의 시드를 인자로 받는 생성자를 사용하는 방법 // 기본 생성자 Random random = new Random(); // long 타입의 시드를 인자로 받는 생성자 Random random = new Random(10); // 난수 범위 지정 int randomNumber = random.nextInt(max - min) + min; ⚠️ 주의할 점 long 타..
-
🍀 MongoDB - QueryDsl with Spring🌱 spring 2023. 5. 30. 14:44
프로젝트를 진행하는 도중 여러 조건을 통해 mongoDB에 있는 데이터를 조회하는 기능이 필요했다. 이에 따라 복잡한 쿼리를 쉽게 작성하기 위해 QueryDsl을 적용해보고자 했다. 📌 QueryDSL 💡 QueryDSL은 정적 타입을 이용해 SQL과 같은 쿼리를 생성할 수 있도록 해주는 오픈소스 프레임워크 JPQL을 Java 코드로 작성할 수 있도록 하는 라이브러리 🧑💻 Query DSL 설정 📖 build.gradle plugins { id "com.ewerk.gradle.plugins.querydsl" version '1.0.10' } ... dependencies { ... implementation group: 'com.querydsl', name: 'querydsl-mongodb', vers..
-
⚠️ WebFlux Error 처리🌱 spring/🍀 webflux 2023. 5. 1. 13:39
📌 Functional Level 💡 Error Handling 1. onErrorReturn Reactive Stream에서 Error가 발생했을 경우 정해진 Fallback value를 리턴 public final Flux onErrorReturn(T fallbackValue); public final Flux onErrorReturn(Class type, T fallbackValue); public final Flux onErrorReturn(Predicate
-
🐱 Tomcat🌱 spring 2023. 3. 12. 01:41
🐱 Tomcat 스프링 부트에서는 기본적으로 내장 서버로 톰캣을 사용한다. 📖 내장 서버(Embedded server)를 사용하는 이유 애플리케이션을 더 쉽게 개발하고 배포할 수 있도록 도와준다. 개발 및 테스트 용이 내장 서버를 사용하면 별도의 WAS를 설치하거나 구성할 필요가 없다. 따라서, 애플리케이션을 개발 및 테스트하는데 훨씬 용이 애플리케이션 개발 과정에서 코드를 수정하면 서버를 다시 시작해 변경 사항을 반영할 수 있다. 단일 패키지 배포 내장 서버를 사용 시, 애플리케이션과 서버가 단일 패키지로 묶여 있어 애플리케이션을 쉽게 배포할 수 있다. 서버를 설치하거나 구성하는데 필요한 복잡성이 줄어들고 배포 프로세스가 간소화된다. 높은 이식성 내장 서버를 사용하면 애플리케이션을 다른 환경으로 이식하..