항해99 - JPA/Lombok 정리

Dasole Kwon·2022년 5월 22일
0

항해99

목록 보기
11/47

JPA란?
JPA (Java Persistence API)는 자바 진영의 ORM(Object-Relational Mapping) 기술 표준

  • JPA를 사용하는 것은 마치 Java Collection에 데이터를 넣었다 빼는 것처럼 사용할 수 있게 만든 것이다.
  • JPA가 제공하는 API를 사용하면 객체를 DB에 저장하고 관리할 때, 개발자가 직접 SQL을 작성하지 않아도 된다.
  • JPA가 개발자 대신 적절한 SQL을 생성해서 DB에 전달하고, 객체를 자동으로 Mapping 해준다.
  • JPA는 내부적으로 JDBC API를 활용하는데, 개발자가 직접 JDBC API를 활용하면 패러다임 불일치, SQL 의존성 등으로 인해 효율성이 떨어진다.
  • 이 때, JPA를 활용한다면 모든 SQL에 대해 개발자 대신 JPA가 자동으로 해결해 준다는 점에서 생산성을 크게 높인다
  • 현재 자바 진영의 ORM 기술 표준으로, 인터페이스의 모음이다. 즉, 실제로 동작하는 것이 아니다. JPA 인터페이스를 구현한 대표적인 오픈소스가 Hibernate라고 할 수 있다.

Lombok이란 무엇인가?

  • Lombok 이란 Java 라이브러리로 반복되는 getter, setter, toString .. 등의 반복 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리. Lombok을 이용하면 Getter, Setter, Equlas, ToString 등과 다양한 방면의 코드를 자동완성 시킬 수 있다.

Lombok 자주 사용하는 어노테이션:

  • @Getter와 @Setter: 자동으로 getter 메소드와 setter 메소드를 생성해주는 어노테이션
  • @NoArgsConstructor : 기본 생성자를 만들어주는 어노테이션
  • @AllArgsConstructor : 모든 필드 값을 사용하는 생성자를 만들어주는 어노테이션
  • @RequiredArgsConstructor : final 이나 @NonNull 인 필드 값만 파라미터로 받는 생성자를 만들어주는 어노테이션
  • @EqualsAndHashCode 어노테이션은 클래스에 대한 equals 함수와 hashCode 함수를 자동으로 생성
  • @ToString 어노테이션은 클래스의 변수들을 기반으로 ToString 메소드를 자동으로 완성시켜준다. 출력을 원하지 않는 변수가 있다면 해당 변수에 @ToString.Exclude 을 붙여주면 제외할 수 있다.
    @Data 어노테이션을 사용하면 @Getter, @Setter, @ToString, @EqualsAndHashCode, RequiredArgsConstructor를 모두 사용할 수 있지만 사용하는 것은 지양. 왜냐하면 무분별하게 Setter가 남용될 수 있기 때문에,변경하면 안되는 값이 변경될 수 있는 가능성이 생겨 객체의 안전성을 보장할 수 없기 때문.
  • @Builder 어노테이션을 사용하면 해당 클래스의 객체 생성에 Builder 패턴을 적용시켜준다. 모든 변수들에 대해 build를 원하면 클래스 위에, 특정 변수만을 build하기 원하면 생성자를 작성하고 그 위에 @Builder 어노테이션을 붙여준다.

Lombok 장점:
어노테이션 기반의 코드 자동 생성을 통한 생산성 향상
반복되는 코드 다이어트를 통한 가독성 및 유지보수성 향상
Getter, Setter 외에 빌더 패턴이나 로그 생성 등 다양한 방면으로 활용 가능

Lombok의 한계:
:Lombok을 지원하는 IDE는 인텔리J, 이클립스 뿐이며, 자바 컴파일러에 밀접하게 묶여있다. 주석 프로세서 API는 컴파일 중에만 새 파일 생성(기존 파일의 수정이 아닌)을 허용하므로 롬복은 그 API를 자바 컴파일러를 수정하기 위한 진입점으로 사용한다. 불행이도, 컴파일러의 이러한 수정은 공개 API를 많이 사용한다. 컴파일러를 업그레이드를 하면 깨질 수 있다.
- 롬복 진화의 추가 단계가 무엇인지 모른다. 다음 주요 버전은 역호환성을 깨야 할 수 있고, 의존성을 업그레이드 할 수 없게 되며 앞으로 유지되는 것을 멈출 낡은 의존성을 사용하도록 강요하게 될 수 있다.
- 버그 발생 시. 분리된 모듈이 아닌 전체 애플리케이션에 걸쳐 나타날 수 있다는 것을 의미한다.
- 롬복 중단시, 롤백에 오랜 시간이 걸림.
- 모든 사람이 롬복 플러그인이 필요

출처: https://mangkyu.tistory.com/78 [MangKyu's Diary]
출처: https://dev-coco.tistory.com/86 [슬기로운 개발생활😃]
출처: https://cheershennah.tistory.com/183

0개의 댓글