SonarQube란?SonarQube는 클린 코드를 구현하기 위한 정적 코드 분석 도구이다. 🤔 정적 코드 분석 vs 동적 코드 분석정적 코드 분석은 코드가 실행되기 전 소스 코드 또는 바이너리 코드를 분석해 코드를 직접 실행하지 않고 코드의 구조, 문법, 스타일, 잠재적인 버그, 코드 복잡도, 보안 취약점 등을 분석한다. 정적 코드 분석은 코드 실행 없이도 오류를 조기에 발견할 수 있는 장점이 있으나, 코드의 실제 실행 환경에서 발생하는 런타임 오류나 메모리 누수와 같은 동적인 문제는 감지할 수 없다는 단점이 있다. 동적 코드 분석은 코드를 실제로 실행하는 동안 수행되는데, 프로그램을 실행하면서 그 동작을 모니터링하고, 런타임에서 발생할 수 있는 메모리 누수, 성능 문제, 예외 처리, 보안 문제 등을..
전체 글
이전에 CI/CD 환경을 구축할 때 헤매느라 실행이 실패하는데 메인 브랜치에 푸시해야만 실행 결과를 확인해야 해서 커밋 내역이 이번 프로젝트에서 다시 Github Actions을 사용할 일이 생겨 이번에는 act라는 오픈소스를 통해 로컬 환경에서 Github Actions 스크립트를 테스트해보려고 한다. 사전 설치Docker 설치Act 오픈소스는 도커 기반으로 돌아가는 커맨드이기 때문에 도커 환경설정이 필요하다.Mac 기준 dockerdocs에서 Docker.dmg를 다운로드하여 설치한다.만약 도커를 이전에 설치한 적이 없었다면 설치 후 What is a container?을 누르면 welcome-to-docker 컨테이너가 생기고 Containers 탭에서 이를 확인할 수 있다. Act 설치맥의 경우..
테스트 데이터 생성 시단위 테스트를 작성할 때, 테스트마다 필요한 데이터를 생성하는 코드를 반복적으로 생성해야하는 경우가 많다.예를 들어, 여러 테스트에서 User가 필요하다면 해당하는 테스트 데이터가 필요한 테스트마다 매번 User 엔티티를 생성해야 하는 경우가 많았다. 이러한 반복되는 코드는 가독성을 떨어뜨리기 때문에, 이를 재사용할 수 있다면 반복되는 코드를 제거하고 유지보수성이 좋은 코드가 될 수 있을 것이다. Test Fixture란?테스트 픽스처는 소프트웨어 테스트에서 특정 테스트를 실행하기 전에 준비되어야 하는 고정된 상태의 환경을 의미한다. public enum UserFixture { USER("user@gmail.com", "password1!", "userNickname", 0L..
🌱 문제 상황2024.07.24 - [Back-end] - [Spring Boot] 멀티모듈에 JaCoCo + JaCoCo Report Aggregation 적용하기 [Spring Boot] 멀티모듈에 JaCoCo + JaCoCo Report Aggregation 적용하기macOSIntelliJ IDEAJava 17Spring Boot 3.xGroovy📄 JaCoCoJaCoCo 플러그인 적용JaCoCo :: Maven Plugin에서 JaCoCo의 최신 버전을 확인할 수 있다.처음에는 build.gradle에 JaCoCo 태스크를 설정했으나, 너무 복잡해져서 별도chaewsscode.tistory.com이전에 멀티모듈 + JaCoCo Report Aggregation을 사용하여 테스트 커버리지를 확인..
🌱 문제 상황멀티모듈 프로젝트 테스트를 하던 중 도메인 모듈에서 @DataJpaTest를 사용하니 아래와 같은 에러가 발생했다.java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test @DataJpaTest를 사용할 때, 스프링 부트는 애플리케이션이 어떻게 시작될지에 대한 정보를 제공하는 @SpringBootApplication 또는 @SpringBootConfiguration이 붙은 클래스를 통해 하위 패키지를 @ComponentScan 및 @EntityScan 등의 작업을..
gradle 파일을 나누게 된 이유이전에 Spring REST Docs 의존성을 추가하면서 전체적인 빌드 설정과 문서화 프로세스가 복잡해지기 시작했다. 그런데 이번에 JaCoCo 의존성을 추가하면서 코드 커버리지 분석 및 보고서 생성 과정이 추가되었고, 이로 인해 빌드 스크립트의 복잡성이 더욱 증가했다. 이러한 상황에서 Gradle 파일을 기능별로 나누어 각 설정을 독립적으로 관리하는 것이 필요하다고 생각하게 되었다. chaewsstore (root)├── chaewsstore-admin │ └── build.gradle├── (생략)├── gradle│ ├── asciidoc.gradle│ └── jacoco.gradle│├── build.gradle└── settings.gradleroo..
macOSIntelliJ IDEAJava 17Spring Boot 3.xGroovy📄 JaCoCoJaCoCo 플러그인 적용JaCoCo :: Maven Plugin에서 JaCoCo의 최신 버전을 확인할 수 있다.처음에는 build.gradle에 JaCoCo 태스크를 설정했으나, 너무 복잡해져서 별도로 jacoco.gradle 파일을 생성하여 스크립트를 작성하였다.// build.gradleapply from: 'jacoco.gradle'// jacoco.gradlesubprojects { apply plugin: 'jacoco' // Jacoco Plugin 추가 jacoco { toolVersion = '0.8.12' // reportsDir = ${project.r..
🌱 문제 상황현재 내 프로젝트는 이렇게 멀티모듈로 구성되어 있다.admin 모듈과 app 모듈은 애플리케이션을 실행하는 모듈이며, core.domain 모듈 패키지에 있는 Entity를 모두 스캔하여 Bean으로 등록해야 한다. @SpringBootApplication@ComponentScan(basePackages = {"com.chaewsstore.core.domain"})public class AdminApplication { public static void main(String[] args) { SpringApplication.run(AdminApplication.class, args); }}AdminApplication 클래스에 선언되어 있는 @SpringBootApp..
1. JMeter 구성요소Thread Group스레드(가상의 사용자) 설정 및 관리SamplersFTP, HTTP, SMPT 등 다양한 요청 유형 선택 가능Logic Controllers요청을 묶어 시나리오화한 것하나의 Logic Controller에 여러 HTTP 요청 Samplers들을 순차적으로 담아 사용자의 실제 사용 시나리오와 유사하게 테스트 환경 구성 가능Listeners그래프, 테이블 등 여러 형태로 테스트 결과 시각화해서 보여줌Configuration Elements테스트 환경에 적용될 기본값과 변수 설정ex) HTTP 요청 테스트 시 헤더에 토큰을 담거나 쿠키에 세션을 담아 로그인된 사용자의 요청으로 만들 수 있음 2. JMeter 설치JMeter 홈페이지에서 zip 파일을 다운받는다.파..