spring boot를 이용하여 프로젝트를 하게 되었는데
MySQL을 처음 연동해보면서 기록을 남겨보겠습니다...
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.mysql:mysql-connector-j'
우선 build.gradle에 위 2개의 의존성을 추가해준다
📌implementation 과 runtimeOnly 의 차이는 뭘까 궁금증이 들었다!
=> runtimeOnly는 컴파일 시점에는 필요없지만 실행 시점에는 꼭 필요한 라이브러리의 의존성을 추가할 때 사용한다고 한다
DB 연동을 위해서는 resources 디렉토리 안에 있는 application.properties를 설정해줘야 하는데
url은 jdbc:mysql:// [데이터베이스 URL] : [포트 번호] / [데이터베이스 이름]?serverTimezone=UTC 로 입력해준다
밑의 설정들의 경우 차례로
1. spring.jpa.properties.hibernate.show_sql=true
=> Hibernate가 실행하는 SQL 쿼리를 콘솔에 출력하도록 해줌
(쿼리의 실행 내용을 확인할 때 유용)
2. spring.jpa.properties.hibernate.format_sql=true
=> 출력되는 SQL 쿼리를 읽기 쉽게 포맷팅함
(show_sql 옵션과 함께 사용하면 출력된 SQL 쿼리를 잘 포맷하여 가독성을 높여줌)
3. spring.jpa.hibernate.ddl-auto=update
=> 애플리케이션이 시작될 때 Hibernate가 데이터베이스 스키마를 어떻게 처리할지 결정함
- create: 기존 테이블을 삭제하고 새로 생성
=> 개발 환경에서 자주 사용하지만 운영 환경에서는 데이터 손실 방지를 위해 다른 값을 사용하는게 좋음 - update: 기존 테이블을 유지하면서 필요한 경우 테이블을 업데이트
=> 서버 실행시 변경사항 있으면 실행, 테이블 없으면 자동 생성 - create-drop: create와 동일하지만 애플리케이션이 종료될 때 테이블을 삭제
- validate: 테이블이 존재하고 스키마가 엔티티와 일치하는지 확인
=> 일치하지 않으면 오류를 발생시킴 - none: 스키마를 자동으로 생성하거나 변경하지 않음
4. spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
=> Hibernate가 사용할 SQL 방언(Dialect)을 지정하는데 MySQL을 사용하기 때문에 MySQLDialect를 적어줌
(Hibernate가 SQL 쿼리를 생성할 때 데이터베이스의 특성에 맞게 최적화된 쿼리를 생성하는 데 사용)
MySQL 8.0.1이상에서는 MySQLDialect로 사용 (버전 따로 표기 X)
SQL 표준과 다르거나 특정 데이터베이스만의 고유 기능을 JPA에서는 방언(Dialect) 이라고 함
개발할 때 JPA가 제공하는 표준 문법에 맞춰 사용하면 되기 때문에
특정 DB에 의존적인 SQL은 Dialect가 처리해준다.
=> DB가 변경되어도 코드를 변경할 필요없이 Dialect만 바꿔주면 됨
확인을 위해 코드를 작성해야 한다
@RequiredArgsConstructor의 경우 final 필드와 @NonNull이 붙은 필드를 포함한 생성자를 자동으로 생성해주는데
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class Example {
private final String finalField;
private final int finalIntField;
@NonNull
private String nonNullField;
}
위 코드에서 @RequiredArgsConstructor는
public Example(String finalField, int finalIntField, @NonNull String nonNullField) {
this.finalField = finalField;
this.finalIntField = finalIntField;
if (nonNullField == null) {
throw new NullPointerException("nonNullField is marked non-null but is null");
}
this.nonNullField = nonNullField;
}
이 코드를 자동 생성 해준다!
=> 이 어노테이션을 사용하면 생성자 주입을 간단하게 처리할 수 있으며 코드의 가독성과 유지보수성을 높일 수 있다!
이렇게 잘 저장이 되는 것을 확인할 수 있다!
'Backend > Spring' 카테고리의 다른 글
[Spring Boot] Docker를 이용해 EC2에 배포해보기 (4) | 2024.08.27 |
---|---|
[Spring Boot] Custom Exception 설정 (0) | 2024.08.19 |