Lombok 제거 후 겪은 체감 변화와 자바 코딩의 본질적 가치
개발을 하다 보면 당연하게 쓰던 도구가 문득 짐처럼 느껴질 때가 있죠? 사실 자바 개발자에게 Lombok(롬복)은 공기 같은 존재라, 이걸 걷어낸다는 생각 자체가 굉장히 번거롭고 비효율적으로 다를 수 있습니다.
저 역시 개발 현장에 있으면서 롬복의 편리함에 중독되어 있었는데요. 최근 대규모 프로젝트의 유지보수 효율과 2026년 최신 자바 환경의 변화를 고려해 일부 모듈에서 롬복을 직접 코드로 전환해 봤습니다. 단순히 코드가 길어지는 수준을 넘어, IDE의 성능 체감부터 컴파일 시점의 안정성까지 생각보다 큰 차이가 있더라고요.
왜 멀쩡한 롬복을 걷어내고 직접 코드를 짜기 시작했을까?
가장 큰 이유는 '불투명성'이었습니다. 롬복은 마법처럼 코드를 줄여주지만, 내부적으로 어떻게 동작하는지 직관적으로 확인하기 어렵게 만들 때가 많거든요. 특히 신입 사원들이나 협업 과정에서 어노테이션 하나가 불러오는 사이드 이펙트를 놓치는 경우가 빈번해졌습니다.
솔직히 말씀드리면, Getter/Setter를 일일이 만드는 게 귀찮은 건 맞습니다. 하지만 직접 코드로 구현했을 때 얻는 명확성은 그 귀찮음을 상쇄하고도 남더군요. 이건 마치 자동세차만 하다가 오랜만에 손세차를 하면서 차의 미세한 흠집을 발견하는 느낌과 비슷합니다.

Lombok 사용 vs 직접 구현: 실무 관점의 상세 비교
직접 롬복을 제거해 보며 느낀 지표들을 정리해 봤습니다. 단순히 개인적인 느낌이 아니라, 실제 빌드 타임과 디버깅 시 소요된 시간을 기준으로 한 비교입니다.
| 비교 항목 | Lombok 사용 시 | 직접 구현(Plain Java) |
|---|---|---|
| 개발 속도(초기) | 매우 빠름 (어노테이션 기반) | 보통 (IDE 제너레이터 활용) |
| 디버깅 가시성 | 낮음 (바이트코드 확인 필요) | 매우 높음 (중단점 설정 용이) |
| 컴파일 속도 | 약간 느림 (Annotation Processing) | 빠름 (표준 자바 컴파일) |
| 유지보수 안정성 | 라이브러리 의존성 위험 존재 | 독립적이고 안정적임 |
표를 보면 확실히 초기 개발 속도는 롬복이 압승이지만, 유지보수와 안정성 면에서는 직접 구현이 유리함을 알 수 있습니다. 직접 해보니 대형 프로젝트일수록 컴파일 타임의 미세한 차이가 모여 전체 빌드 성능에 꽤 큰 영향을 주더라고요.
직접 코드로 짰을 때 느끼는 예상치 못한 이점들
Lombok을 제거하면 소스 파일의 줄 수가 늘어납니다. 하지만 이게 무조건 나쁜 걸까요? 제가 직접 경험하며 느낀 진짜 이점은 다른 곳에 있었습니다.
- 디버깅의 쾌적함: 특정 필드에 값이 들어가는 순간을 잡고 싶을 때, Setter에 브레이크 포인트를 바로 걸 수 있다는 게 얼마나 편한지 모릅니다. 롬복은 이게 참 까다롭죠.
- 비즈니스 로직의 투입: 단순 세터가 아니라 값의 유효성을 검사하거나 특정 포맷으로 변환해야 할 때, 롬복 설정값을 만지는 것보다 직접 메서드를 수정하는 게 훨씬 직관적입니다.
- 라이브러리 버전 갈등 해소: 가끔 자바 버전이나 스프링 부트 버전이 올라갈 때 롬복이 발목을 잡는 경우가 있습니다. 직접 짠 코드는 자바 그 자체라 버전업 스트레스가 제로에 가깝습니다.
개인적으로는 IDE의 인덱싱 속도가 빨라진 게 가장 만족스러웠습니다. 어노테이션 프로세서가 돌지 않으니 대규모 엔티티를 열 때 버벅임이 확연히 줄어들더군요.
롬복 없이 생성자 주입은 어떻게 하나요?
롬복의 @RequiredArgsConstructor를 쓰다가 직접 코드를 짜면 가장 귀찮은 게 스프링의 생성자 주입입니다. 하지만 2026년 기준, 최신 IDE(IntelliJ 등)는 필드만 선언하면 'Alt+Enter' 한 번으로 생성자를 완벽하게 만들어줍니다.
오히려 생성자를 직접 눈으로 확인하면서 어떤 의존성이 주입되는지 명확히 인지하게 되어, 객체 지향적인 설계(SRP 원칙 준수 등)를 고민하는 계기가 되기도 합니다. 의존성이 너무 많아지면 생성자가 비대해지니 "아, 이 클래스가 너무 많은 일을 하고 있구나"라고 바로 느낄 수 있는 경고 장치가 되는 셈이죠.
롬복을 포기하지 못하겠다면? 상황별 현명한 선택 가이드
무조건 롬복이 나쁘다는 건 아닙니다. 상황에 맞춰 유연하게 사용하는 능력이 진짜 고수의 실력이겠죠. 제 경험을 바탕으로 기준을 정해봤습니다.
- 롬복 사용 추천: 소규모 토이 프로젝트, 빠른 프로토타입 제작, 단순한 DTO가 수백 개인 경우.
- 직접 구현 추천: 핵심 비즈니스 로직이 담긴 엔티티(Entity), 엄격한 보안과 안정성이 필요한 금융권 시스템, 레거시 시스템과의 연동이 잦은 환경.
최근에는 자바 17 이상에서 제공하는 Record 타입을 적극 활용하는 것도 좋은 대안입니다. 롬복 없이도 불변 데이터를 아주 깔끔하게 처리할 수 있거든요. 직접 구현의 안정성과 롬복의 간결함을 동시에 잡는 묘수라고 할 수 있습니다.
결국 도구는 도구일 뿐입니다. 롬복이 주는 '편리함' 뒤에 숨겨진 '불투명성'을 인지하고, 필요할 때는 과감하게 순수 코드로 돌아갈 줄 아는 결단력이 필요합니다. 처음엔 손가락이 조금 고생하겠지만, 그만큼 여러분의 코드는 더 단단해질 거예요. 오늘 한번 자주 쓰는 엔티티 하나만 롬복을 걷어내고 직접 구현해 보세요. 생각보다 많은 게 보이기 시작할 겁니다.
Java 21 레코드를 DTO로 쓸 때 반드시 체크해야 할 3가지 주의점과 해결법
Java 21 레코드를 DTO로 쓸 때 생기는 의외의 복병과 해결책자바 개발자로 살면서 보일러플레이트 코드 때문에 스트레스받던 시절, Java 14에서 맛보기로 나왔던 Records는 정말 구원 투수 같았습니다.
byteandbit.tistory.com
'Back-end & 알고리즘' 카테고리의 다른 글
| JPA 연관관계 지옥에서 탈출하기: 복잡성을 줄이는 실무 설계 원칙 (0) | 2026.05.08 |
|---|---|
| 코딩테스트 시간 초과 해결하는 이분탐색(Binary Search) 접근 순서와 설계 팁 (0) | 2026.05.07 |
| Java 21 레코드를 DTO로 쓸 때 반드시 체크해야 할 3가지 주의점과 해결법 (0) | 2026.04.25 |
| DFS와 BFS 차이, 17년 차 개발자가 딱 정해드리는 상황별 선택 기준 (0) | 2026.04.23 |
| 백준 문제 유형 파악이 안 돼서 시간 버리고 있다면? 알고리즘 분류 숨은 의도 찾는 법 (0) | 2026.04.22 |