분류 전체보기(116)
-
JaCoCo와 애노테이션: 자바 테스트 커버리지의 한계 이해하기
JaCoCo 란? JaCoCo는 Java 코드의 커버리지를 체크하는 라이브러리입니다. 여기서 코드의 커버리지란 내 테스트 코드가 내 코드의 몇 퍼센트를 보증하냐!라고 생각하시면 편합니다. 테스트코드를 돌리고 그 커버리지 결과를 눈으로 보기 좋도록 html이나 xml, csv 같은 리포트로 생성합니다. 그리고 테스트 결과가 내가 설정한 커버리지 기준을 만족하는지 확인하는 기능도 있습니다. 최근 이러한 JaCoCo를 활용해 코드의 품질을 높이려는 노력을 하던 와중에 특이한 점을 찾았습니다. 특이점 JaCoCo 를 통해 테스트의 커버리지를 측정하던 와중 테스트 코드를 작성했는데도 커버리지가 카운팅이 되지 않는 부분을 발견했습니다. 다음은 문제의 코드입니다. @Test @DisplayName("updatePo..
2024.01.08 -
JUnit5 테스트 메서드는 왜 public 이면 안될까?
최근 코드 품질을 올리고 싶어 IDE에 SonarLint을 설치했더니 다음과 같은 경고를 받게 됐다. 요는 테스트 메서드에서 public 접근 제어자를 없애라라는 경고이다. 필자가 아는 지식은 JUnit 이 실행시에 테스트 메서드를 Reflection API로 뜨기 위해서 public 접근 제어자가 필수라고 알고 있었다. JUnit 5 제작자 왈 public 일 필요는 없지만, private 이면 안된다! 일반적으로 public 제어자는 기술적인 모종의 이유가 아닌 이상 쓰지 말아라 [출처] : https://junit.org/junit5/docs/current/user-guide/#writing-tests-classes-and-methods 요약하자면 우리 JUnit 5 팀은 "Less is more"..
2024.01.08 -
JDK 21과 Gradle 호환성 에러: 원인 분석과 실질적 해결 방안
문제 상황 최근 Oracle OpenJDK 21을 사용하여 프로젝트를 구축하던 중, 예상치 못한 에러가 발생했습니다. 아래는 해당 에러의 스크린샷입니다. Unsupported class file major version 알고 가는 기본 개념 1. Gradle 이란 무엇인가? Gradle helps teams build, automate and deliver better software, faster. [출처] : https://gradle.org Gradle은 "Build 자동화 도구"로 정의될 수 있습니다. 간단히 말해, 소프트웨어 개발 과정에서 반복되는 빌드 작업을 자동화하여 개발자가 더 빠르고 효율적으로 소프트웨어를 제작할 수 있게 돕습니다. 2. 그렇다면 Build 란? build is the p..
2023.12.21 -
EC2 메모리 문제 해결과 Elastic IP 적용: 인스턴스 유형 변경 후 IP 문제 극복기
상황 어제 EC2에 Spring Boot와 MySQL을 실행시키려 하니 다음과 같은 에러가 나왔습니다. 이유는 OOM(Out Of Memery) Killer 가 mysql.service를 죽였다는 것. 사실 이럴만도 한 게 기존에 쓰던 EC2의 스펙이 t4g.nano였습니다. 이 EC2 인스턴스의 스펙은 대략 다음과 같습니다 AWS Gravition Processor(CPU) 2 개와 메모리 500MB짜리입니다. 여기서 주요 문제는 메모리 용량입니다. 현재 지금 돌아가고 있는 EC2의 RSS(실제 사용하는 물리 메모리양)를 보면 mysql 은 396MB, Spring Boot는 222MB 인걸 확인할 수 있습니다. (상황 종료 후의 spring boot, mysql을 확인한 것입니다.) 심지어 mysql..
2023.12.20 -
Java @Scheduled: 매시 정각에 실행되는 Cron 표현식 테스트하기
배경 @Transactional @Scheduled(cron = "0 0 * * * *") public void updatePopularPosts() { // 새로운 상위 10개 게시물 추출 List top10Posts = postRepository.findTop10Posts(); // 기존의 data 삭제 popularPostRepository.deleteAllInBatch(); // 변환 후 새로운 data 삽입 List popularPosts = convertToPopularPost(top10Posts); popularPostRepository.saveAll(popularPosts); } 위 함수에 대한 테스트 코드를 작성해보려 하다 이런 글을 쓰게 되었습니다. 테스트의 목적은 매 정시에 함수가 실..
2023.12.20 -
테스트 띠띠ㅣ디ㅣ디ㅣ딛ㄹ딸깍? postman 으로 '띡띡딸깍' 하기
현재 다음과 같은 작업을 진행 중에 있습니다. 💡 데이터베이스에 1억 건이 있을 때 나의 가련한 API의 성능(반응시간)은 어느 정도 나올까? 현재 조회 쿼리는 인덱스도 뭐도 없고 단순한 형태의 CRUD 의 조회용 쿼리이기 때문에 1억 건에서 데이터를 뽑는 데는 실제로 오래 걸릴 것입니다. // 실제 사용하는 오늘의 코드 @Override public List findAllDTOs(Integer offset, Integer limit) { return queryFactory .select(new QPostDbDTO( post.id, post.title, post.content, post.member.name, post.isDeleted, post.reg_date )) .from(post) .orderBy..
2023.11.30