본문 바로가기

Spring

Spring 실무에서 자주 쓰는 Util 라이브러리 소개 & 활용 팁

반응형

✅개요

실무에서 개발 생산성을 높이기 위해서는 잘 만들어진 유틸리티 라이브러리를 활용하는 것이 중요합니다.

이 글에서는 스프링 프로젝트에서 자주 사용되는 유용한 유틸리티 라이브러리들을 소개하고, 실제 활용 사례와 함께 상세한 사용법을 알아보겠습니다.

 

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 레퍼런스
반응형