Spring

Gradle, Lombok

계양 꿀주먹 2024. 2. 22. 01:44

Gradle

Gradle이란, 빌드 자동화 시스템이며 우리가 작성한 자바 코드를 설정에 맞게 자동으로 Build해줍니다.

build.gradle

gradle 기반의 빌드 스크립트이며 소스 코드를 빌드하고 라이브러리들의 의존성을 쉽게 관리할 수 있습니다.


개발을 하면서 필요로하는 외부 라이브러리들을 dependencies 부분에 작성하면 Gradle이 해당 라이브러리들을 Maven Repository와 같은 외부 저장소에서 자동으로 다운로드해줍니다.

jUnit

JUnit은 Java 언어를 위한 테스트 프레임워크로, 소프트웨어 개발에서 단위 테스트를 작성하고 실행하는 데 사용됩니다

jUnit을 사용하는 이유

  1. 자동화된 테스트:
    JUnit은 테스트를 자동화하여 개발자가 코드 변경 사항을 빠르게 확인할 수 있게 합니다. 자동화된 테스트는 소프트웨어의 안정성과 신뢰성을 향상시키며 버그를 빨리 찾아내고 수정할 수 있도록 도와줍니다.

2. 지속적 통합 (Continuous Integration):
JUnit은 지속적 통합 환경에서 자주 사용됩니다. CI 도구(예: Jenkins, Travis CI)를 통해 코드가 계속 통합되고 빌드되는 프로세스 중에 테스트를 자동으로 실행할 수 있습니다.

  1. 테스트 주도 개발 (Test-Driven Development, TDD):
    JUnit은 TDD 방법론을 지원합니다. TDD에서는 테스트를 먼저 작성하고, 그 후에 해당 테스트를 통과시킬 수 있는 코드를 작성하는 방식으로 개발을 진행합니다.
  2. 코드 리팩토링:
    코드를 리팩토링하면서 시스템의 동작을 확인하기 위해 테스트가 중요합니다. JUnit은 코드 리팩토링을 지원하며, 리팩토링 후에도 테스트를 통과하는지 확인할 수 있습니다.
  3. 테스트 결과의 가독성:
    JUnit은 테스트 결과를 표준 출력 형식으로 제공하므로, 테스트가 성공했는지 또는 실패했는지를 명확하게 파악할 수 있습니다.
  4. 문서화:
    테스트 코드는 코드의 예상 동작을 문서화하는 역할을 합니다. JUnit 테스트 코드를 통해 코드의 사용법과 예제를 살펴볼 수 있습니다.
  5. 테스트 스위트 및 테스트 그룹:
    JUnit은 여러 테스트를 그룹화하고, 테스트 스위트를 통해 여러 테스트를 일괄적으로 실행하는 기능을 제공합니다.

웹 개발에서 활용하는 예시

  1. 컨트롤러 단위 테스트:
    웹 애플리케이션의 컨트롤러(Controller)는 클라이언트의 요청을 처리하고 응답을 생성하는 주요 부분입니다. JUnit을 사용하여 각 컨트롤러 메서드에 대한 단위 테스트를 작성할 수 있습니다. 이 테스트에서는 HTTP 요청을 모방하고, 컨트롤러의 응답을 검증합니다.
  2. 서비스 레이어 테스트:
    웹 애플리케이션에서는 주로 서비스(Service) 레이어에서 비즈니스 로직을 처리합니다. JUnit을 사용하여 서비스 메서드에 대한 단위 테스트를 작성할 수 있습니다. 이를 통해 각 서비스 메서드가 기대한 대로 동작하는지 확인할 수 있습니다.
  3. 리포지토리 테스트:
    데이터베이스와 상호 작용하는 리포지토리(Repository) 클래스에 대한 테스트를 작성할 수 있습니다. 테스트에서는 실제 데이터베이스 연결을 사용하지 않고, 메모리 내 데이터베이스나 테스트용 데이터베이스를 사용하여 테스트합니다.
  4. 통합 테스트:
    JUnit을 사용하여 여러 컴포넌트 간의 통합 테스트를 작성할 수 있습니다. 예를 들어, 실제 데이터베이스와 통합하여 특정 요청이나 기능이 전체 시스템에서 올바르게 동작하는지 확인할 수 있습니다.
  5. Spring MVC 테스트:
    Spring MVC 프레임워크를 사용하는 경우, Spring이 제공하는 @SpringBootTest 어노테이션 등을 이용하여 컨트롤러 테스트 및 통합 테스트를 수행할 수 있습니다.
  6. RESTful API 테스트:
    RESTful API를 개발하는 경우, JUnit을 사용하여 각 API 엔드포인트에 대한 테스트를 작성할 수 있습니다. Spring MVC의 MockMvc를 활용하여 API 호출을 모방하고 응답을 검증할 수 있습니다.

Lombok

Java 언어를 위한 코드 작성을 편리하게 해주는 라이브러리입니다. 주로 반복적이고 지루한 코드를 줄여주고, 코드의 가독성을 높여주는 몇 가지 목적으로 사용됩니다.

Getter, Setter, Constructor 등과 같이 일반적으로 반복되는 코드를 자동으로 생성해 줍니다.

주요 Annotation

@Data

import lombok.Data;

@Data
public class Person {
    private String firstName;
    private String lastName;
    private int age;
}

Getter, Setter, equals, hashCode, toString을 자동으로 생성합니다. 모든 필드를 다루기 위해 사용됩니다.

@Getter / @Setter

@Getter
@Setter
public class Person {
    private String firstName;
    private String lastName;
    private int age;
}

개별적으로 Getter 또는 Setter를 생성합니다.

@NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor

@NoArgsConstructor
@AllArgsConstructor
public class Person {
    private String firstName;
    private String lastName;
    private int age;
}

No-argument 생성자, 모든 인자를 받는 생성자, 필수 인자만을 받는 생성자를 생성합니다.

@Builder

@Builder
public class Person {
    private String firstName;
    private String lastName;
    private int age;
}

빌더 패턴을 사용하여 객체를 생성할 수 있도록 해줍니다.

@Value

@Value
public class Person {
    private final String firstName;
    private final String lastName;
    private final int age;
}

불변(Immutable)한 클래스를 생성합니다. Setter를 생성하지 않고 final 필드를 가지게 됩니다.

@Slf4j

@Slf4j
public class MyClass {
    public void myMethod() {
        log.info("Logging with Lombok!");
    }
}

SLF4J Logger를 생성하여 로깅을 편리하게 사용할 수 있도록 합니다.

@RequiredArgsConstructor

@RequiredArgsConstructor
public class RequiredArgsConstructorControllerExample {

  private final FirstService firstService;
  private final SecondService secondService;
  private final ThirdService thirdService;
  
  ...
}

초기화 되지않은 final 필드나, @NonNull 이 붙은 필드에 대해 생성자를 생성해 줍니다.