SW/Gradle

Gradle: Java 웹 애플리케이션 테스트, JUnit, Mockito, JaCoCo, SonarQube, Jenkins 활용법, 방법, 예제

얇은생각 2025. 2. 22. 07:30
반응형

웹 애플리케이션을 개발할 때, "이게 제대로 작동하는 걸까?"라는 고민, 한 번쯤 해보셨죠? 코드가 엉키면 예상치 못한 버그가 터지고, 유지보수도 엄청 힘들어질 수 있어요. 그래서 테스트는 필수입니다! 오늘은 Java 웹 애플리케이션을 보다 쉽고 효율적으로 테스트하는 방법을 알려드릴게요. JUnit과 Mockito를 활용한 단위 테스트 작성법부터, JaCoCo와 SonarQube를 이용한 코드 커버리지 분석, 그리고 Jenkins를 활용한 자동화까지! 제가 직접 겪었던 시행착오와 팁도 함께 소개할 테니, 부담 없이 읽어주세요. 😊

 


 

Gradle: Java 웹 애플리케이션 테스트, JUnit, Mockito, JaCoCo, SonarQube, Jenkins 활용법, 방법, 예제

 

JUnit과 Mockito로 단위 테스트 쉽게 하기

JUnit과 Mockito, 꼭 필요할까요?

개발하면서 "내 코드, 정말 제대로 동작하는 거 맞아?"라고 의심해본 적 있으시죠? JUnit은 Java에서 가장 많이 쓰이는 테스트 프레임워크고, Mockito는 외부 의존성을 쉽게 가짜(Mock)로 만들어서 테스트를 편하게 해주는 도구예요. 둘을 함께 쓰면, 서블릿이나 컨트롤러 같은 웹 애플리케이션의 핵심 부분을 간단하게 테스트할 수 있답니다.

 

필요한 라이브러리 추가하기

테스트를 시작하려면 프로젝트에 필요한 라이브러리를 추가해야 해요.

 

Maven을 사용 중이라면?

<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>4.0.0</version>
        <scope>test</scope>
    </dependency>
</dependencies>

 

Gradle을 사용 중이라면?

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testImplementation 'org.mockito:mockito-core:4.0.0'
}

 

서블릿 테스트, 생각보다 간단해요!

서블릿 테스트할 때 제일 헷갈리는 부분이 HTTP 요청과 응답이죠. Tomcat 같은 웹 컨테이너가 자동으로 처리해주는 걸 직접 다루려면 복잡할 수 있는데, 다행히 Mockito를 쓰면 이걸 쉽게 가짜로 만들 수 있어요.

import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.RequestDispatcher;

public class MyServletTest {

    private MyServlet myServlet;

    @Mock private HttpServletRequest request;
    @Mock private HttpServletResponse response;
    @Mock private RequestDispatcher dispatcher;

    @BeforeEach
    void setUp() {
        MockitoAnnotations.openMocks(this);
        myServlet = new MyServlet();
    }

    @Test
    void testDoGet() throws Exception {
        when(request.getRequestDispatcher("/home.jsp")).thenReturn(dispatcher);

        myServlet.doGet(request, response);

        verify(request).getRequestDispatcher("/home.jsp");
        verify(dispatcher).forward(request, response);
    }
}

 

이제 doGet 메서드가 /home.jsp로 정상적으로 포워딩되는지 확인할 수 있어요. 어렵지 않죠?

 


 

JaCoCo로 코드 커버리지 체크하기

JaCoCo는 코드가 얼마나 테스트되고 있는지 보여주는 강력한 도구예요. 테스트를 작성했다고 끝이 아니라, 실제로 코드의 어느 부분이 실행되고 있는지도 확인해야 하거든요.

 

Gradle에서 JaCoCo 설정하기

build.gradle 파일에 JaCoCo 플러그인을 추가하세요.

plugins {
    id 'jacoco'
}

test {
    useJUnitPlatform()
    finalizedBy jacocoTestReport
}

jacocoTestReport {
    dependsOn test
    reports {
        xml.required = true
        html.required = true
    }
}

 

JaCoCo 리포트 실행하기

테스트 커버리지 보고서를 만들려면 아래 명령어를 실행하면 돼요.

gradle test jacocoTestReport

 

결과는 build/reports/jacoco/test/html/index.html에서 확인할 수 있어요.

 


 

SonarQube로 코드 품질 점검하기

SonarQube는 보안 문제, 코드 스멜(Code Smell), 유지보수성을 분석해주는 툴이에요. 간단히 말해, "내 코드가 얼마나 깔끔하고 유지보수하기 쉬운가?"를 평가하는 거죠.

 

SonarQube 설치하고 설정하기

SonarQube는 공식 사이트에서 다운로드 후 실행하면 돼요.

./sonarqube/bin/linux-x86-64/sonar.sh start

 

Gradle에서 SonarQube 설정하기

build.gradle 파일에 아래 설정을 추가하면 됩니다.

plugins {
    id 'org.sonarqube' version '4.0.0'
}

sonarqube {
    properties {
        property "sonar.projectKey", "MyJavaProject"
        property "sonar.host.url", "http://localhost:9000"
        property "sonar.login", "admin"
        property "sonar.password", "admin"
    }
}

 

SonarQube 분석을 실행하려면 다음 명령어를 입력하세요.

gradle sonarqube

 


 

Jenkins로 자동화까지!

Jenkins는 CI/CD 자동화 도구로, 반복적인 빌드와 테스트를 자동으로 실행해 줘요. 귀찮은 작업은 컴퓨터에게 맡기고, 개발에 집중하면 됩니다!

 

Jenkins 설치하기

Jenkins는 공식 사이트에서 다운로드하고 실행하면 돼요. Gradle과 SonarQube 플러그인을 추가하면 활용도가 더욱 높아져요.

 

Jenkins 파이프라인 만들기

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/your-repo.git'
            }
        }
        stage('Build & Test') {
            steps {
                sh './gradlew test'
            }
        }
        stage('Code Coverage') {
            steps {
                sh './gradlew jacocoTestReport'
            }
        }
        stage('Static Analysis') {
            steps {
                sh './gradlew sonarqube'
            }
        }
    }
}

 


 

마무리

JUnit, Mockito, JaCoCo, SonarQube, 그리고 Jenkins까지! 이 툴들을 잘 활용하면, 개발이 훨씬 더 편하고 안정적이 될 거예요. 혹시 궁금한 점이 있거나 더 알고 싶은 내용이 있다면, 댓글로 남겨 주세요! 같이 고민하고 해결해봐요. 😊

반응형