반응형
✅개요
실무에서 개발 생산성을 높이기 위해서는 잘 만들어진 유틸리티 라이브러리를 활용하는 것이 중요합니다.
이 글에서는 스프링 프로젝트에서 자주 사용되는 유용한 유틸리티 라이브러리들을 소개하고, 실제 활용 사례와 함께 상세한 사용법을 알아보겠습니다.
1. Apache Commons
■ Commons Lang3
가장 널리 사용되는 유틸리티 라이브러리 중 하나입니다.
implementation 'org.apache.commons:commons-lang3:3.12.0'
주요 기능과 활용 예시
// StringUtils 활용
if (StringUtils.isEmpty(text)) {
// 널 체크와 빈 문자열 체크를 한번에
}
// ObjectUtils 활용
String result = ObjectUtils.defaultIfNull(nullableString, "기본값");
// RandomStringUtils 활용
String randomString = RandomStringUtils.randomAlphanumeric(10);
■ Commons Collections4
컬렉션 관련 유틸리티를 제공합니다.
implementation 'org.apache.commons:commons-collections4:4.4'
활용 예시
// CollectionUtils 활용
if (CollectionUtils.isEmpty(list)) {
// 널 체크와 빈 컬렉션 체크를 한번에
}
// MapUtils 활용
Integer value = MapUtils.getInteger(map, "key", 0); // 기본값 지정
2. Guava
구글이 제공하는 강력한 자바 유틸리티 라이브러리입니다.
implementation 'com.google.guava:guava:31.1-jre'
주요 기능과 활용 예시
// 불변 컬렉션 생성
ImmutableList<String> list = ImmutableList.of("a", "b", "c");
// 멀티맵 활용
Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("fruits", "apple");
multimap.put("fruits", "banana");
// 문자열 처리
String joined = Joiner.on(",")
.skipNulls()
.join(Arrays.asList("a", null, "b")); // 결과: "a,b"
3. Lombok
보일러플레이트 코드를 줄여주는 필수 라이브러리입니다.
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
실무 활용 예시
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserDTO {
private Long id;
private String name;
private String email;
@Builder.Default
private List<String> roles = new ArrayList<>();
}
// 로깅 활용
@Slf4j
public class UserService {
public void processUser(UserDTO user) {
log.info("Processing user: {}", user);
}
}
4. MapStruct
객체 매핑을 위한 유용한 라이브러리입니다.
implementation 'org.mapstruct:mapstruct:1.5.3.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final'
활용 예시
@Mapper(componentModel = "spring")
public interface UserMapper {
UserDTO toDTO(User user);
User toEntity(UserDTO dto);
@Mapping(target = "fullName", source = "name")
@Mapping(target = "emailAddress", source = "email")
UserResponse toResponse(UserDTO dto);
}
5. Vavr
함수형 프로그래밍을 지원하는 라이브러리입니다.
implementation 'io.vavr:vavr:0.10.4'
활용 예시
// Option 활용
Option.of(nullableValue)
.map(this::process)
.getOrElse("기본값");
// Try 활용
Try.of(() -> riskyOperation())
.recover(ex -> handleError(ex))
.get();
6. AssertJ
테스트 코드를 위한 유용한 라이브러리입니다.
testImplementation 'org.assertj:assertj-core:3.24.2'
테스트 코드 예시
@Test
void userTest() {
User user = new User("John", "john@example.com");
assertThat(user)
.hasFieldOrPropertyWithValue("name", "John")
.extracting("email")
.isEqualTo("john@example.com");
assertThat(getUserList())
.hasSize(3)
.extracting("name")
.contains("John", "Jane");
}
✅실무 활용 팁
1. 유틸리티 클래스 만들기
자주 사용하는 기능들을 모아서 유틸리티 클래스를 만듭니다.
@UtilityClass
public class CommonUtils {
public static String maskEmail(String email) {
return StringUtils.overlay(email, "***",
email.indexOf("@") - 3, email.indexOf("@"));
}
public static LocalDateTime toLocalDateTime(String dateStr) {
return Optional.ofNullable(dateStr)
.map(str -> LocalDateTime.parse(str, DateTimeFormatter.ISO_DATE_TIME))
.orElse(null);
}
}
2. 설정 자동화
자주 사용하는 설정을 자동화합니다. Bean으로 등록하여 사용하면, 성능적으로 좋습니다.
@Configuration
public class UtilConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper()
.registerModule(new JavaTimeModule())
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
}
✅마무리
적절한 유틸리티 라이브러리의 활용은 코드의 품질을 향상시키고 개발 생산성을 높여줍니다.
이 글에서 소개한 라이브러리들은 실무에서 검증된 것들이며, 프로젝트의 요구사항에 맞게 선택하여 사용하시기 바랍니다.
✅참고
- Maven Central Repository
- 각 라이브러리의 공식 문서
- Spring Framework 레퍼런스
반응형
'Spring' 카테고리의 다른 글
Spring Security와 JWT 통합: 안전하고 확장성 있는 인증 시스템 구축하기 (1) | 2025.01.24 |
---|---|
REST API 시대, 스프링에서 RESTful API 만드는 방법 – 처음부터 (3) | 2025.01.20 |
스프링 부트와 JPA 연동 완벽 가이드 (3) | 2025.01.18 |
Spring AOP(관점 지향 프로그래밍) 쉽게 이해하기 (1) | 2025.01.16 |
Swagger와 연동한 스프링 REST API 문서 자동화 노하우 (2) | 2025.01.13 |