Java

Lombok(롬복) & JPA 에 대한 간단한 설명, 기본 애너테이션(@) 몇 가지

15호의 개발자 2022. 2. 24. 19:38
반응형

Lombok(롬복) & JPA 에 대한 간단한 설명, 기본 애너테이션(@) 몇 가지

 

 

이전 글

 

[Spring Boot] Post 메소드 사용법 (@PostMapping)

[Spring Boot] Post 메소드 사용법 (@PostMapping) 이 게시글은 아래 글과 이어진 글이다. [Spring Boot] Get 메소드 사용법 (@RequestMapping, @GetMapping, 멀티 파라미터, JSON 리턴) [Spring Boot] Get 메..

unit-15.tistory.com

 


Lombok(롬복)

자바로 코딩을 할 때 가장 힘든 부분 중 하나는, 변수를 선언하고 나서 다음과 같은 것들을 일일이 만들어줘야 한다는 것이다.

  1. 기본 생성자
  2. 모든 매개변수가 들어간 생성자
  3. 각 변수마다 get, set 메서드
  4. 기타 ...

(get, set 메서드의 경우 IntelliJ가 자동으로 만들어주긴 하지만, 생성자의 경우 IntelliJ가 기본으로 만들어주지 않는다.)

이떼 롬복의 어노테이션을 이용하면 get, set 메서드 등을 기본으로 설정해주기 때문에 위와 같은 수고를 쉽게 덜 수 있다.

 

 

 

@Data

자동으로 기본 생성자와 get, set메소드를 만들어주며, equals, hashCode, toString 등도 롬복이 재정의 해준다. 

 

@AllArgsConstructor

모든 매개변수를 가진 생성자를 추가해주는 애너테이션이다.

 


 

JPA (Java Persistent API)

JPA는 ORM(Object Relational Mapping)으로 RDB 데이터베이스의 정보를 객체지향으로 손쉽게 활용할 수 있도록 도와주는 라이브러리이다. Object(자바 객체)와 Relation(관계형 데이터베이스) 둘의 매핑을 통해서 보다 손쉽게 적용할 수 있는 기술을 제공해준다. 개발자가 쿼리에 집중하기 보다 객체에 집중함으로써 조금 더 프로그래밍적으로 많이 활용할 수 있게 해준다.

 

 

롬복에는 JPA와 관련된 애너테이션을 다양하게 제공한다. 이를 이용하면 매우 편하게 코딩을 할 수 있으므로 요즘은 거의 필수로 쓰인다. 아래는 JPA와 관련된 기본적인 롬복 애너테이션 몇 가지이다. 참고로 JPA에는 테이블을 자동으로 생성해주는 기능도 존재한다.

 

Annotation 용도 비고
@Entity 해당 Class가 Entity임을 명시 JPA의 Entity는 DB의 Table과 동일하다고 생각하면 된다.
@Table 실제 DB Table의 이름을 명시 실제 DB 테이블의 이름과 동일하다면 굳이 선언하지 않아도 자동 매핑이 된다.
@Id Index primary key를 명시  
@Column 실제 DB Column의 이름을 명시 선언한 변수명과 실제 DB 컬럼의 이름과 동일하다면 굳이 선언하지 않아도 자동 매핑이 된다.
@GeneratedValue Primary key 식별키의 전략 설정 AUTO, IDENTITY, SEQUENCE, TABLE이라는 네 가지 옵션이 있다. MySQL을 사용하는 경우 IDENTITY로 설정하면 된다.

 

이때, Java에서 변수를 선언할 때는 Camel Case(카멜 케이스)로 선언하지만, DB 컬럼이나 API 통신 규격에서는 주로 Snake Case(스네이크 케이스)를 많이 사용한다. 따라서 실제 DB 테이블명/컬럼명과 동일하다는 의미는 Java에서는 카멜 케이스로 선언한 것과 DB에서는 스네이크 케이스로 선언한 것이 같으면 된다는 의미이다.

 

 

아래는 JPA 롬복 어노테이션을 활용한 코드 예시이다.

import javax.persistence.*;
import java.time.LocalDateTime;

@Data   // 기본 생성자와 변수에 대해 get, set 메서드 생성
@AllArgsConstructor // 모든 매개변수를 가진 생성자도 추가
@NoArgsConstructor  // 파라미터가 없는 생성자 생성
@Entity // Entity임을 선언 (= table)
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String account;

    private String password;

    private String email;

    private String phoneNumber;

    private LocalDateTime registeredAt;

    private LocalDateTime unregisteredAt;

    private LocalDateTime createdAt;

    private String createdBy;

    private LocalDateTime updatedAt;

    private String updatedBy;

}

 

 

선언한 변수명과 실제 DB의 테이블명/컬럼명이 동일하므로 아래와 같이 @Table, @Column 애너테이션으로 매칭시켜주지 않아고 자동 매핑이 된다. (Java 클래스의 경우 Upper Camel Case를 이용한다.)

@Table(name = "user") // 굳이 선언하지 않아도 자동 매핑 시켜줌
public class User {

    @Column(name = "account") // 굳이 선언하지 않아도 자동 매핑 시켜줌
    private String account;

}

 

 

@Repository

따로 쿼리문을 작성하지 않아도 기본적인 인터페이스를 통해 CRUD를 사용할 수 있다. 사용법은 간단하다. 인터페이스를 하나 생성한 후 @Repository 애너테이션을 달아준 후, 이미 개발되어있는 JpaRepository를 상속받으면 된다.

 

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface Repository명 extends JpaRepository<T, ID> {
}
[Generic Parameters]
T: 어떠한 타입의 오브젝트 클래스가 들어갈 것인지 제네릭으로 넘겨주면 된다.
ID: 기본키(Primary key)로 어떤 타입이 들어가있는지를 넘겨주면 된다.

 

 

 

위에 작성해 놓은 User Class를 기반으로 아래의 UserRepository를 만들어 보았다. 

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
// User라는 레파지토리, 기본키인 id가 Long이므로
public interface UserRepository extends JpaRepository<User, Long> {

}

User 클래스의 기본키가 id이고 이는 Long 타입이므로 제네릭으로 받는 두 번째 파라미터에는 Long을 입력하면 된다. 이렇게만 해도 기본적인 CRUD를 할 수 있는 환경이 마련된 것이다.

 

CRUD의 구체적인 실현 방법은 아래 링크를 통해 확인할 수 있다.

 


 

다음 글

 

JpaRepository를 활용한 CRUD 구현 방법 (자세한 설명)

JpaRepository를 활용한 CRUD 구현 방법 (자세한 설명) 이 게시글은 아래 글과 이어지는 글이다. Lombok(롬복) & JPA 에 대한 간단한 설명, 기본 애너테이션(@) 몇 가지 Lombok(롬복) & JPA 에 대한 간..

unit-15.tistory.com

 

 

 

(출처: 패스트캠퍼스 Java & SpringBoot로 시작하는 웹 프로그래밍)

반응형