이 글은 '스프링 부트 핵심 가이드 - 스프링 부트를 활용한 애플리케이션 개발 실무' 책을 통해 학습한 내용을 정리한 글입니다.
06장. 데이터베이스 연동
ORM (Object-Relational Mapping)
객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 데이터를 변환하고 연결하는 기술
ORM은 개발자가 관계형 데이터베이스와 상호 작용하기 위해 SQL 쿼리를 직접 작성하는 대신, 객체 지향 프로그래밍 언어에서 사용하는 클래스와 객체를 활용하여 데이터베이스를 조작할 수 있도록 도와준다.
ORM의 장점과 단점
- 장점
- 데이터베이스 쿼리를 객체지향적으로 조작할 수 있다.
- 재사용 및 유지보수가 편리하다.
- 데이터베이스에 대한 종속성이 줄어든다.
- 단점
- ORM만으로 온전한 서비스를 구현하기에는 한계가 있다.
- 애플리케이션의 객체 관접과 데이터베이스의 관계 관점의 불일치가 발생한다.
JPA (Jakarta Persistence API)
자바에서 ORM을 구현하기 위한 표준 인터페이스
하이버네이트 (Hibernate)
자바에서 가장 널리 사용되는 ORM 프레임워크
JPA 표준의 구현체로서, 객체와 관계형 데이터베이스 간의 매핑을 처리하고 데이터베이스 작업을 추상화하는 기능을 제공한다.
Spring Data JPA
CRUD 처리에 필요한 인터페이스를 제공하며, 하이버네이트의 엔티티 매니저를 직접 다루지 않고 레포지토리를 정의해 사용한다.
- 데이터베이스에 테이블을 생성하기 위해 직접 쿼리를 작성할 필요가 없다.
- 엔티티에 데이터베이스에 쓰일 테이블과 column을 정의하여 테이블을 생성한다.
import javax.persistence.*;
@Entity
@Getter
@Setter
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
}
- @Entity : 해당 클래스가 엔티티임을 명시하는 어노테이션
- @Table : 클래스의 이름과 테이블의 이름을 다르게 지정해야 하는 경우에 필요 @Table(name = "이름")
- @Id : @Id 어노테이션이 선언된 필드는 테이블의 primary key 역할
- @GeneratedValue : 일반적으로 @Id 와 함께 사용되며, 해당 필드의 값을 어떤 방식으로 자동 생성할지 결정할 때 사용
- AUTO : 기본 설정값, 기본값을 사용하는 데이터베이스에 맞게 자동 생성
- IDENTITY : 기본값 생성을 데이터베이스에 위임하는 방식
- SEQUENCE : @SequenceGenerator 어노테이션으로 식별자 생성기를 설정하고 이를 통해 값을 자동 주입 받음
- TABLE : 어떤 DBMS를 사용하더라도 동일하게 동작하기를 원할 경우 사용, 식별자로 사용할 숫자의 보관 테이블을 별도로 생성, @TableGenerator 어노테이션으로 테이블 정보를 설정
- @Column : 별다른 설정을 하지 않을 때는 사용하지 않고, 필드에 몇 가지 설정을 더할 때 사용 (ex. unique column 으로 설정)
- @Transient : 엔티티 클래스에는 선언되어 있는 필드지만 데이터베이스에서는 필요 없을 경우 사용
Repository
interface 형식으로 생성되며 쿼리를 직접 작성하지 않고 메서드 이름으로 데이터베이스를 조작할 수 있다.
Repository 메서드 생성 규칙
- FindBy : SQL 문의 where 절 역할을 수행하는 구문. findBy 뒤에 엔티티의 필드값을 입력해서 사용
ex) findByname(String name) - AND, OR : 조건을 여러개 설정하기 위해 사용
ex) findByNameAndEmail(String name, String email) - Like/NotLike : SQL 문의 like와 동일한 기능. 특정 문자를 포함하는지 여부를 조건으로 추가한다. 비슷한 키워드로 Containing, Contains, isContaing이 있다.
- StartsWith/StartingWith : 특정 키워드로 시작하는 문자열 조건을 설정
- IsNull/IsNotNull : 레코드 값이 Null이거나 Null이 아닌 값을 검색
- True/False : Boolean 타입의 레코드를 검색할 때 사용
- Before/After : 시간을 기준으로 값을 검색
- LessThan/GreaterThan : 특정 값(숫자)을 기준으로 대소 비교를 할 때 사용
- Between : 두 값(숫자) 사이의 데이터를 조회
- OrderBy : SQL 문의 order by와 동일한 기능
- countBy : SQL 문의 count와 동일한 기능
Swagger API
RESTful API 문서화를 위한 오픈 소스 프레임워크
- API 문서 자동화 : API의 엔트포인트, 요청 및 응답 모델, 파라미터, 헤더 등에 대한 정보를 문서로 제공한다.
- 인터랙티브 API 콘솔 : API 사용자가 문서를 보고 직접 API를 테스트할 수 있다.
- API 테스트 : API 개발자가 자동으로 생성된 인터페이스를 사용하여 API를 테스트할 수 있다.
- 클라이언트 코드 생성 : 클라이언트 개발자는 API를 호출하는데 필요한 코드를 자동으로 생성하여 개발 생산성을 향상시킬 수 있다.
롬복(Lombok)
반복적이고 번거로운 작업을 줄여주고, 코드의 가독성을 향상시키는 기능을 제공하는 라이브러리
- Getter와 Setter 메서드를 자동 생성 : @Getter, @Setter
- 생성자 자동 생성 : @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
- toString(), equals(), hashCode() 자동 생성 : @ToString, @EqualsAndHashCode
- 불변(Immutable) 객체 생성 : @Value, 읽기 전용 필드와 해당 필드에 대한 Getter 메서드만 생성
- 빌더 패턴 지원 : @Builder
'북 스터디 > 스프링 부트 핵심 가이드' 카테고리의 다른 글
[스프링 부트] 09장. 연관관계 매핑 (0) | 2023.06.18 |
---|---|
[스프링 부트] 08장. Spring Data JPA 활용 (0) | 2023.06.11 |
[스프링 부트] 04장 ~ 05장 (0) | 2023.05.28 |
[스프링 부트] 02장. 개발에 앞서 알면 좋은 기초 지식 (0) | 2023.05.21 |
[스프링 부트] 01장. 스프링 부트란? (0) | 2023.05.21 |
이 글은 '스프링 부트 핵심 가이드 - 스프링 부트를 활용한 애플리케이션 개발 실무' 책을 통해 학습한 내용을 정리한 글입니다.
06장. 데이터베이스 연동
ORM (Object-Relational Mapping)
객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 데이터를 변환하고 연결하는 기술
ORM은 개발자가 관계형 데이터베이스와 상호 작용하기 위해 SQL 쿼리를 직접 작성하는 대신, 객체 지향 프로그래밍 언어에서 사용하는 클래스와 객체를 활용하여 데이터베이스를 조작할 수 있도록 도와준다.
ORM의 장점과 단점
- 장점
- 데이터베이스 쿼리를 객체지향적으로 조작할 수 있다.
- 재사용 및 유지보수가 편리하다.
- 데이터베이스에 대한 종속성이 줄어든다.
- 단점
- ORM만으로 온전한 서비스를 구현하기에는 한계가 있다.
- 애플리케이션의 객체 관접과 데이터베이스의 관계 관점의 불일치가 발생한다.
JPA (Jakarta Persistence API)
자바에서 ORM을 구현하기 위한 표준 인터페이스
하이버네이트 (Hibernate)
자바에서 가장 널리 사용되는 ORM 프레임워크
JPA 표준의 구현체로서, 객체와 관계형 데이터베이스 간의 매핑을 처리하고 데이터베이스 작업을 추상화하는 기능을 제공한다.
Spring Data JPA
CRUD 처리에 필요한 인터페이스를 제공하며, 하이버네이트의 엔티티 매니저를 직접 다루지 않고 레포지토리를 정의해 사용한다.
- 데이터베이스에 테이블을 생성하기 위해 직접 쿼리를 작성할 필요가 없다.
- 엔티티에 데이터베이스에 쓰일 테이블과 column을 정의하여 테이블을 생성한다.
import javax.persistence.*;
@Entity
@Getter
@Setter
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
}
- @Entity : 해당 클래스가 엔티티임을 명시하는 어노테이션
- @Table : 클래스의 이름과 테이블의 이름을 다르게 지정해야 하는 경우에 필요 @Table(name = "이름")
- @Id : @Id 어노테이션이 선언된 필드는 테이블의 primary key 역할
- @GeneratedValue : 일반적으로 @Id 와 함께 사용되며, 해당 필드의 값을 어떤 방식으로 자동 생성할지 결정할 때 사용
- AUTO : 기본 설정값, 기본값을 사용하는 데이터베이스에 맞게 자동 생성
- IDENTITY : 기본값 생성을 데이터베이스에 위임하는 방식
- SEQUENCE : @SequenceGenerator 어노테이션으로 식별자 생성기를 설정하고 이를 통해 값을 자동 주입 받음
- TABLE : 어떤 DBMS를 사용하더라도 동일하게 동작하기를 원할 경우 사용, 식별자로 사용할 숫자의 보관 테이블을 별도로 생성, @TableGenerator 어노테이션으로 테이블 정보를 설정
- @Column : 별다른 설정을 하지 않을 때는 사용하지 않고, 필드에 몇 가지 설정을 더할 때 사용 (ex. unique column 으로 설정)
- @Transient : 엔티티 클래스에는 선언되어 있는 필드지만 데이터베이스에서는 필요 없을 경우 사용
Repository
interface 형식으로 생성되며 쿼리를 직접 작성하지 않고 메서드 이름으로 데이터베이스를 조작할 수 있다.
Repository 메서드 생성 규칙
- FindBy : SQL 문의 where 절 역할을 수행하는 구문. findBy 뒤에 엔티티의 필드값을 입력해서 사용
ex) findByname(String name) - AND, OR : 조건을 여러개 설정하기 위해 사용
ex) findByNameAndEmail(String name, String email) - Like/NotLike : SQL 문의 like와 동일한 기능. 특정 문자를 포함하는지 여부를 조건으로 추가한다. 비슷한 키워드로 Containing, Contains, isContaing이 있다.
- StartsWith/StartingWith : 특정 키워드로 시작하는 문자열 조건을 설정
- IsNull/IsNotNull : 레코드 값이 Null이거나 Null이 아닌 값을 검색
- True/False : Boolean 타입의 레코드를 검색할 때 사용
- Before/After : 시간을 기준으로 값을 검색
- LessThan/GreaterThan : 특정 값(숫자)을 기준으로 대소 비교를 할 때 사용
- Between : 두 값(숫자) 사이의 데이터를 조회
- OrderBy : SQL 문의 order by와 동일한 기능
- countBy : SQL 문의 count와 동일한 기능
Swagger API
RESTful API 문서화를 위한 오픈 소스 프레임워크
- API 문서 자동화 : API의 엔트포인트, 요청 및 응답 모델, 파라미터, 헤더 등에 대한 정보를 문서로 제공한다.
- 인터랙티브 API 콘솔 : API 사용자가 문서를 보고 직접 API를 테스트할 수 있다.
- API 테스트 : API 개발자가 자동으로 생성된 인터페이스를 사용하여 API를 테스트할 수 있다.
- 클라이언트 코드 생성 : 클라이언트 개발자는 API를 호출하는데 필요한 코드를 자동으로 생성하여 개발 생산성을 향상시킬 수 있다.
롬복(Lombok)
반복적이고 번거로운 작업을 줄여주고, 코드의 가독성을 향상시키는 기능을 제공하는 라이브러리
- Getter와 Setter 메서드를 자동 생성 : @Getter, @Setter
- 생성자 자동 생성 : @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
- toString(), equals(), hashCode() 자동 생성 : @ToString, @EqualsAndHashCode
- 불변(Immutable) 객체 생성 : @Value, 읽기 전용 필드와 해당 필드에 대한 Getter 메서드만 생성
- 빌더 패턴 지원 : @Builder
'북 스터디 > 스프링 부트 핵심 가이드' 카테고리의 다른 글
[스프링 부트] 09장. 연관관계 매핑 (0) | 2023.06.18 |
---|---|
[스프링 부트] 08장. Spring Data JPA 활용 (0) | 2023.06.11 |
[스프링 부트] 04장 ~ 05장 (0) | 2023.05.28 |
[스프링 부트] 02장. 개발에 앞서 알면 좋은 기초 지식 (0) | 2023.05.21 |
[스프링 부트] 01장. 스프링 부트란? (0) | 2023.05.21 |