본문 바로가기

TIL20

[자바] JUnit을 이용한 단위 테스트 JUnit이란 자바의 대표적인 단위 테스트를 하는 프레임워크이다. JUnit의 버전 중 하나인 JUnit5와 AssertJ 라이브러리가 사용되는데 AssertJ는 자바 테스트를 돕기 위해 다양한 문법을 지원한다. Assert 구문테스트에서 기대값과 출력값을 비교하는 구문은 Assert이다. 변수 타입의 종류가 다양하기 때문에 여러 종류의 Assert 구문을 지원하고 있다.메서드내용assertEquals(expected, actual)두 객체의 equals 결과가 참인지 검사한다.assertTrue(actual)계산 결과가 참인지 검사한다. assertFalse(actual) 계산 결과가 거짓인지 검사한다.assertNotNull(actual) 계산 결과가 null이 아닌지 검사한다.assertNull(a.. 2024. 5. 16.
[자바] 단위 테스트(unit test) 알아보기 TDD란 Test Driven Development의 약자로 테스트 주도 개발을 말한다. 테스트를 먼저 만들어 이를 통과하기 위한 코드를 짜는 것. 즉, 만드는 과정에서 테스트를 작성하고 그걸 통과하는 것을 만들고 반복하면서 제대로 동작하는 것에 대한 피드백을 받는 것이다. 테스트의 종류로는 단위 테스트와 통합 테스트가 있다. 단위 테스트(Unit Test)단위 테스트는 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트이다. 모듈이란 애플리케이션에서 하나의 기능 또는 메서드라고 이해하면 된다. 즉, 단위 테스트는 애플리케이션을 구성하는 하나의 기능이 올바르게 동작하는지를 독립적으로 테스트하는 것이다. 통합 테스트(Integration Test)통합 테스트는 모듈을 통합하는 과정에서 모듈.. 2024. 5. 16.
[자바] equals() & hashCode() 재정의 알고리즘을 풀던 중 Node라는 class를 만들어 set에 넣어 contains 메서드를 이용해 비교하려고했다. 객체를 비교하기 위해서는 클래스에 equals와 hashCode 메서드를 재정의해야했다. static class Node { int a; int b; public Node(int a, int b) { this.a = a; this.b = b; }}public static void main(String[] args) throws IOException { Node left = new Node(1, 2); Node right = new Node(1, 2); System.out.println(Objects.equals(left, righ.. 2024. 5. 16.
[자바] Stream API Stream API자바8부터 Stream API와 람다식 등을 지원하면서 자바를 이용해 함수형으로 프로그래밍할 수 있게 API를 제공해주고 있다. Stream API는 데이터의 종류에 상관없이 같은 방식으로 데이터를 처리할 수 있어 재사용성을 높일 수 있다. Stream API는 원본 데이터를 변경하지 않고, 일회용으로 한번 사용하면 재사용이 불가능하다. 또한, 내부 반복으로 작업을 처리하는 특징이 있다. Stream API를 사용하지 않은 경우에는 다음과 같이 배열과 리스트를 만들고 사용했다.String[] arr = {"Dog", "Cat", "Penguin", "Lion"};List list = Arrays.asList(arr);// 정렬: 원본 데이터가 정렬됨Arrays.sort(arr);Coll.. 2024. 5. 14.
[스프링] [JPA] Querydsl 방언 사용하기 MySQL의 FullText Search를 Querydsl을 이용하여 적용하는 방법을 찾아봤다. DialectJPA를 사용하면 데이터베이스의 문법을 잘 알지 못해도 hibernate가 설정한 데이터베이스의 쿼리로 바꿔준다. 이 일을 해주는 것이 Dialect이다. application.properties에 사용하는 DB의 dialect가 설정되어 있다.spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect FullText Search는 Dialect에 등록된 함수가 아니었고, 따로 커스텀하여 사용해야 한다. 설정1. CustomDialect 생성import org.hibernate.dialect.MySQL8Dialect;public class .. 2024. 5. 12.
[데이터베이스] [MySQL] 전문 검색(FullText Search) 전문 검색(FullText Search)컬럼에서 키워드로 검색하기위한 방법이다. 단어에서 일부만 일치하는 내용을 검색할 수 있다. 일부만 검색하는 경우에도 FullText인덱스를 사용할 수 있기 때문에 Like문을 이용한 조회보다 더 빠른 검색이 가능하다.  인덱싱 방식인덱싱 방식으로는 Stopword방식과 N-gram방식이 있다. StopwordStopword방식은 내용을 공백, Tab, 문장 기호를 구분자로 하며, 사용자가 정의한 문자열을 구분자로 할 수도 있다. 공백을 기준으로 나눈 단어들을 저장하여 완전히 일치한 단어만 결과에 포함된다. 예를 들어 테이블에 다음과 같이 저장이 되어있다고 하자. 1. 우리 집 강아지는 복슬강아지 2. 우리집 강아지는 복슬강아지 3. 우리집강아지는복슬강아지 "우리"이.. 2024. 5. 12.
[트러블슈팅] More than one row with the given identifier was found 에러내용ERROR 1092 --- [nio-8080-exec-1] c.r.d.api.service.drug.DrugServiceImpl : More than one row with the given identifier was found: 18304, for class: com.roller.doc.db.entity.DrugDesc; nested exception is org.hibernate.HibernateException: More than one row with the given identifier was found: 18304, for class: com.roller.doc.db.entity.DrugDesc 해결OneToOne으로 매핑 시켜놨는데 테이블 조회 시 연관된 테이블에 중복 데이터가 있.. 2024. 5. 12.
[자바] Math.floorDiv & Math.floorMod 내용"음수 % 양수" 의 값이 음수로 나와 양수로 바꿔줄 필요가 있었다. Math클래스의 floorMod라는 연산을 찾았다.public static int floorMod(int x, int y) { return x - floorDiv(x, y) * y;}floorMod를 타고 들어가보니 floorDiv에 대해 먼저 알아야 했다. public static int floorDiv(int x, int y) { int r = x / y; // if the signs are different and modulo not zero, round down if ((x ^ y) floorDiv는 "x / y"의 몫을 구하는데 x와 y의 부호가 다를 경우 처리하는 로직이 여기에 있다. `(x ^ y).. 2024. 5. 11.
[트러블슈팅] CORS 설정 시 allowedOrigins 에러 에러 내용When allowCredentials is true, allowedOrigins cannot contain the special value "*"since that cannot be set on the "Access-Control-Allow-Origin" response header.To allow credentials to a set of origins, list them explicitly or considerusing "allowedOriginPatterns" instead. 해결스프링부트 버전 2.4.0부터 allowedOrigins에 `\*`을 추가할 수 없다. allowedOrigins는 특정 도메인만 받을 수 있다. `.allowedOrigins` 대신 `.allowedOrigin.. 2024. 5. 11.
[알고리즘] 에라토스테네스의 체 - JAVA 내용에라토스테네스의 체는 소수를 찾는 방법 중 하나이다. 1. 2부터 자기 자신을 제외한 2의 배수를 모두 지운다. 2. 남아있는 수 중 3은 소수이므로 3을 제외한 3의 배수를 모두 지운다. 3. 남아있는 수 중 5는 소수이므로 5를 제외한 5의 배수를 모두 지운다. 4. 위의 과정을 반복한다. 코드// N까지의 소수를 구하기 위한 배열boolean[] prime = new boolean[N + 1];// 소수를 false라고 하자// 0과 1은 소수가 아니므로 trueprime[0] = prime[1] = true;// 2부터 자신의 배수를 지운다for (int i = 2; i * i 2024. 5. 11.