Gradle이란, 빌드 자동화 시스템이며 우리가 작성한 자바 코드를 설정에 맞게 자동으로 Build해줍니다.
gradle 기반의 빌드 스크립트이며 소스 코드를 빌드하고 라이브러리들의 의존성을 쉽게 관리할 수 있습니다.
개발을 하면서 필요로하는 외부 라이브러리들을 dependencies 부분에 작성하면 Gradle이 해당 라이브러리들을 Maven Repository와 같은 외부 저장소에서 자동으로 다운로드해줍니다.
JUnit은 Java 언어를 위한 테스트 프레임워크로, 소프트웨어 개발에서 단위 테스트를 작성하고 실행하는 데 사용됩니다
2. 지속적 통합 (Continuous Integration):
JUnit은 지속적 통합 환경에서 자주 사용됩니다. CI 도구(예: Jenkins, Travis CI)를 통해 코드가 계속 통합되고 빌드되는 프로세스 중에 테스트를 자동으로 실행할 수 있습니다.
테스트 주도 개발 (Test-Driven Development, TDD):
JUnit은 TDD 방법론을 지원합니다. TDD에서는 테스트를 먼저 작성하고, 그 후에 해당 테스트를 통과시킬 수 있는 코드를 작성하는 방식으로 개발을 진행합니다.
코드 리팩토링:
코드를 리팩토링하면서 시스템의 동작을 확인하기 위해 테스트가 중요합니다. JUnit은 코드 리팩토링을 지원하며, 리팩토링 후에도 테스트를 통과하는지 확인할 수 있습니다.
테스트 결과의 가독성:
JUnit은 테스트 결과를 표준 출력 형식으로 제공하므로, 테스트가 성공했는지 또는 실패했는지를 명확하게 파악할 수 있습니다.
문서화:
테스트 코드는 코드의 예상 동작을 문서화하는 역할을 합니다. JUnit 테스트 코드를 통해 코드의 사용법과 예제를 살펴볼 수 있습니다.
테스트 스위트 및 테스트 그룹:
JUnit은 여러 테스트를 그룹화하고, 테스트 스위트를 통해 여러 테스트를 일괄적으로 실행하는 기능을 제공합니다.
컨트롤러 단위 테스트:
웹 애플리케이션의 컨트롤러(Controller)는 클라이언트의 요청을 처리하고 응답을 생성하는 주요 부분입니다. JUnit을 사용하여 각 컨트롤러 메서드에 대한 단위 테스트를 작성할 수 있습니다. 이 테스트에서는 HTTP 요청을 모방하고, 컨트롤러의 응답을 검증합니다.
서비스 레이어 테스트:
웹 애플리케이션에서는 주로 서비스(Service) 레이어에서 비즈니스 로직을 처리합니다. JUnit을 사용하여 서비스 메서드에 대한 단위 테스트를 작성할 수 있습니다. 이를 통해 각 서비스 메서드가 기대한 대로 동작하는지 확인할 수 있습니다.
리포지토리 테스트:
데이터베이스와 상호 작용하는 리포지토리(Repository) 클래스에 대한 테스트를 작성할 수 있습니다. 테스트에서는 실제 데이터베이스 연결을 사용하지 않고, 메모리 내 데이터베이스나 테스트용 데이터베이스를 사용하여 테스트합니다.
통합 테스트:
JUnit을 사용하여 여러 컴포넌트 간의 통합 테스트를 작성할 수 있습니다. 예를 들어, 실제 데이터베이스와 통합하여 특정 요청이나 기능이 전체 시스템에서 올바르게 동작하는지 확인할 수 있습니다.
Spring MVC 테스트:
Spring MVC 프레임워크를 사용하는 경우, Spring이 제공하는 @SpringBootTest 어노테이션 등을 이용하여 컨트롤러 테스트 및 통합 테스트를 수행할 수 있습니다.
RESTful API 테스트:
RESTful API를 개발하는 경우, JUnit을 사용하여 각 API 엔드포인트에 대한 테스트를 작성할 수 있습니다. Spring MVC의 MockMvc를 활용하여 API 호출을 모방하고 응답을 검증할 수 있습니다.
Java 언어를 위한 코드 작성을 편리하게 해주는 라이브러리입니다. 주로 반복적이고 지루한 코드를 줄여주고, 코드의 가독성을 높여주는 몇 가지 목적으로 사용됩니다.
Getter, Setter, Constructor 등과 같이 일반적으로 반복되는 코드를 자동으로 생성해 줍니다.
@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 이 붙은 필드에 대해 생성자를 생성해 줍니다.