Lombok을 사용해야 할까?

김정훈·2021년 5월 5일
1

Lombok이란?

롬복 프로젝트는 오픈 소스 라이브러리다.

" 당신의 편집기에 자동적으로 연결되고 당신의 Java를 빠르게 만들어주는 Java 라이브러리입니다. 클래스에 완전한 작성기가 있는 주석, 로그변수 자동화등을 사용하여 다른 getter 또는 동일한 메소드를 다시 작성하지 마십시오." - Lombok Project

기존의 클래스에 메소드를 주입하기 위해 자바 파일을 컴파일 할 때 주석 처리 단계에서 추상 구문 트리를 수정하는 필수 메소드를 생성한다.

Lombok의 사용 이유

lombok은 모델 /데이터 객체의 보일러 플레이트 코드를 줄이기 위해 사용한다. 결합비용에 의한 기존 구현의 보일러플레이트 코드 감소와 비표준 공정의 이용에 의한 알 수 없는 리스크를 해소할 수 있는 솔루션이다.

장점은 코드 축소이다. 생성자나 setter, getter를 넣는 것이 아닌 메타 정보를 추가하는 것이다. 또한 clean code. 읽기 쉽게 만들 수 있다. 생성자, setter, getter 생성으로 인해 길어지는 것을 방지한다.

설치법

워낙 인터넷에 많이 돌아다녀서 생략한다.

Lombok의 사용하지 말아야 할 이유

1. IDE지원

Lombok을 지원하는 IDE는 인텔리J, 이클립스 뿐

2. 한계

자바 컴파일러에 밀접하게 묶여있다. 주석 프로세서 API는 컴파일 중에만 새 파일 생성(기존 파일의 수정이 아닌)을 허용하므로 롬복은 그 API를 자바 컴파일러를 수정하기 위한 진입점으로 사용한다. 불행이도, 컴파일러의 이러한 수정은 공개 API를 많이 사용한다. 컴파일러를 업그레이드를 하면 깨질 수 있다.

3. JDK 변경 후에 깨질 수 있는 비표준적 접근법

4. 롬복 사용시, 모든 계층이 롬복에 의존하게 된다.

1. 롬복 진화의 추가 단계가 무엇인지 모른다. 다음 주요 버전은 역호환성을 깨야 할 수 있고, 의존성을 업그레이드 할 수 없게 되며 앞으로 유지되는 것을 멈출 낡은 의존성을 사용하도록 강요하게 될 수 있다.

2. 버그 발생 시. 분리된 모듈이 아닌 전체 애플리케이션에 걸쳐 나타날 수 있다는 것을 의미한다. 3. 유료화 전환이 된다면?

5. 코드 축소가 가능하지만, @Autowired로 대체 할 수 있다. 위험한 점은 복잡성을 감춘다.

6. 그외

  • 롬복 중단시, 롤백에 오랜 시간이 걸림.
  • 모든 사람이 롬복 플러그인이 필요
  • 기타 등등...

"전혀 해킹이야. 비공개 API 사용. 주제넘은 주조(Javac에서 실행되는 주석 프로세서가 JavacAnotationProcessor의 인스턴스를 얻게 된다는 것을 알고 있음)는 AnnotationProcessor(인터페이스)의 내부 구현이며, 이는 라이브 AST에서 사용되는 몇 가지 추가 방법을 가지고 있다. 일식에서는 거의 틀림없이 더 심각하다. – 일식 문법과 파서 클래스에 코드를 주입하기 위해 자바 에이전트가 사용되는데, 물론 완전히 공개되지 않은 API로 완전히 금지되어 있다. 롬복이가 표준 API로 하는 일을 할 수 있었다면 나도 그렇게 했을 텐데, 넌 할 수 없어. 하지만 그 가치를 위해 나는 자바 1.6에서 실행되는 일식 v3.5용 일식 플러그인을 개발했고, 아무런 변화 없이 자바 1.5에서 실행되는 일식 v3.4에서도 작동했기 때문에 완전히 깨지기 쉬운 것은 아니다." - 라이니에 즈위츠루트(Lombok Project 설립자 중 1인)

결론

Lombok이 문제만 있는 것은 아니고, 분명한 장점인 "코드 축소"라는 점이 존재한다. 하지만, 그와 필적할 문제도 존재한다. 사용 시, 주의 깊은 판단 후 사용을 추천하지만. 최근 글이 거진 사용유도보다 문제점에 대한 글이 많은 것으로 보아 추천은 하지 않는다.

Lombok을 사용을 하려면, 간단한 프로젝트 시, 편리성을 위해 사용을 추천하지만. '프로젝트 내 모든 버전'의 변경을 하지 않을 것.이란 전제를 추가해야 할 것 같다.

대체할 만한 라이브러리로 AutoValue나 Immutables가 있다고 한다. 하지만, 사용하지 않아서 추천은 따로 하지 않는다.

출처

lombok 홈페이지 : https://projectlombok.org/

lombok api https://projectlombok.org/api/index.html

롬복의 사용이유 및 사용하지 말아야 할 이유

https://www.vogella.com/tutorials/Lombok/article.html

https://objectcomputing.com/resources/publications/sett/january-2010-reducing-boilerplate-code-with-project-lombok

https://stackoverflow.com/questions/4589184/what-are-the-risks-with-project-lombok

https://artofcode.wordpress.com/2018/12/18/dont-use-lombok/

https://medium.com/@vgonzalo/dont-use-lombok-672418daa819

https://levelup.gitconnected.com/be-careful-with-lombok-2e2edfc01110

https://www.baeldung.com/intro-to-project-lombok

https://blogg.itverket.no/to-lombok-or-not-to-lombok/

https://ppbruna.medium.com/why-you-should-not-use-lombok-f7556662e8c3

작성한 곳
https://www.notion.so/kaysworkspace/Lombok-c6f0fed85953477480b5df73a5e3a621

profile
Newbie Developer

0개의 댓글