본문 바로가기

코딩/인사이트

라이브러리 사용에 대한 좋은 인사이트

https://better-dev.netlify.app/java/2020/10/26/compare_objectmapper/

 

Object Mapper 성능 비교

Object Mapper와의 만남 세상에 수많은 라이브러리들이 존재한다. ‘이런게 불편한데.. 이런걸 구현해주는 라이브러리가 없을까?’ 있다. 우리가 생각하기에 ‘필요한’, ‘있으면 좋겠다’ 싶은

better-dev.netlify.app

java의 DTO-entity변환에서 자주 사용하는 라이브러리인 ModelMapper와 MapStruct의 성능에 대한 글이다.

ModelMapper는 reflection으로 복사를 처리해서 성능이 안좋다. 추천하지 않는다고 함. 어노테이션 기반의 MapStruct를 사용하도록 하자.

 

라이브러리를 사용할 때 다들 이거 쓴다던데? 하고 쓰는게 아니라 기술에 대해 정확히 이해하고 사용해야한다라고 말하는 점이 인상깊었다. 사실 ModelMapper이런 애들은 java코드로 충분히 사용가능하다. 귀찮아서 그렇지...

라이브러리를 사용하고 싶으면 충분한 시간을 들여서 라이브러리와 구현 기술을 이해하고 사용하자!!

다들 ModelMapper를 사용한다고 해서 기술에 대해 이해도 못한 채로 사용하고 있었는데 빼고 순수 java코드로 짜야겠다...(매우 귀찮긴함...)

 

사실 라이브러리는 다 편리함이고 비용이 크지 않은 선에서 순수 java로 해결할 수 있으면 그렇게 하는게 좋다고 생각됨.

예를 들어 스프링에서 사용하는 것도 빈에 등록해서 사용해도 되지만 단순 라이브러리 형태라면 스프링 빈보다는 static으로 사용하는게 더 좋을 수 있다.

 

작업 비용이 크게 차이나지 않는다면 레이어의 밑단의 기술로만(레이어 밑단 = 순수 java, 레이어 = spring framework) 해결할 있다면 하는게 좋은 것 같다.

 

#

아래와 같이 Jackson에서 objectMapper를 사용할 때 빈에 등록해서 사용하지 않았다. 따로 Mapper 클래스를 하나 만들어서 사용하고 있다. 단위 테스트 할 때도 빈을 로드하지 않고 사용할 수 있고 여러 모로 편하다는게 느껴짐.  

public class Mapper {
    public static ObjectMapper objectMapper= new ObjectMapper();
    static {
        objectMapper.registerModule(new JavaTimeModule());//jackson에서 LocalDateTime을 처리하기 위함. 의존성 넣어줘야 쓸 수 있다.
    }
}