🎯 JPA의 ID 생성 전략JPA는 직접 할당과 자동 할당을 통해 ID를 생성한다. 먼저, 직접 할당 방식은 @Id 어노테이션을 사용한다. 이 때 다른 어노테이션은 함께 사용하지 않고 기본키를 할당한다.데이터베이스가 아니라 애플리케이션에서 기본 키를 직접 할당한다.@Id@Column(name = "ID")private String id; 기본 키 직접 할당 전략은 em.persist()로 엔티티를저장하기 전에 기본 키를 직접 할당한다.Book book = new Book();book.setId("id1"); // 기본 키 직접 할당em.persist(); 그럼 기본키를 직접 할당하지 않고 데이터베이스에서 생성하주는 값을 사용하려면 어떻게 매핑해야 할까?데이터베이스마다 기본 키를 생성하는 방식이 다르기 ..

🪐 N + 1 문제JPA의 N+1 문제는 연관 관계가 설정된 엔티티를 조회할 경우 조회된 데이터 개수(N)만큼 연관관계의 조회 쿼리가 추가로 발생하는 현상이다.만약, 유저와 게시물 엔티티가 1 : N의 관계를 맺고 있는 경우, 유저를 조회한 후 각 유저마다 게시물을 조회하기 위해 유저의 개수(N)만큼의 쿼리가 더 날아간다.데이터가 얼마 없는 환경에서는 큰 성능 이슈가 없겠지만 실제 업무를 수행하거나 많은 양의 데이터를 조회할 시에는 성능 이슈가 생기게 된다. JPA로 개발 시 성능상 가장 주의해야 하는 것이 N+!문제다. 즉시 로딩 즉시 로딩은 JPQL을 실행할 때 N + 1 문제가 발생할 수 있다. // User.java@OneToMany(mappedBy = "user", fetch = FetchTy..
🗳 ddl-auto 옵션JPA의 구현체 중 하나인 Hibernate가 제공하는 기능 중에 하나로, 데이터베이스 스키마 관리를 제어하는 설정 application.yml이나 application.properties에서 관련 설정이 가능하다. ddl-auto 속성1. none데이터베이스 스키마와 관련된 작업을 수행하지 않는다.실제 운영 환경인 프로덕션 환경에서 주로 사용된다.2. validate애플리케이션 실행 시점에 엔티티와 테이블이 정상적으로 매핑되었는지 확인한다.따로 스키마 변경을 없다.3. update애플리케이션 실행 시점에 엔티티와 테이블 상태를 확인하여(엔티티 매핑과 데이터베이스 스키마 비교) 필요한 경우 스키마를 업데이트한다.기존 데이터는 유지되고, 새로운 엔티티나 변경된 엔티티 필드가 스키마..

intellij에서 JDK의 버전을 변경하는 방법을 알아본다. (본 게시물은 JDK 17버전에 설치되어 있음과 Gradle 사용 및 spring boot 3.2.0 버전 사용을 전제한다.) 1. Project Structure 설정 intellj에 접속한다. File → Project Structure에 들어간다. Project SDK에서 원하는 JDK 버전으로 바꿔주기 위해서 ▼ 모양의 화살표를 누른다. 원하는 JDK 버전을 클릭하고 우측 하단의 Apply를 누른 후 OK 버튼을 누른다. 2. Settings 설정 File → Settings에 들어간다. Build, Execution, Deployment → Build Tools → Gradle에 들어가서 Gradle JVM을 위에서 세팅해준 JDK ..

🥕 profile 이번에 프로젝트를 진행하면서 사용한 개념이 있다. 바로 profile! application.yml파일에 profile별로 구동 환경을 다르게 해서 개발을 진행했다. application.yml spring: config: activate: on-profile: local --- spring: config: activate: on-profile: aws local환경은 local로, 배포 환경은 aws라는 이름을 주었다. 즉, profile은 서버를 실행할 때 환경을 다르게 해주는 방법이다. 나는 local에서는 h2를, aws에서는 rds를 사용했다. local에서 h2를 사용한 이유는 h2는 memory에 데이터를 저장하는 경량 DB이므로 휘발성이다. 즉 우리는 코드에만 집중할 수 ..

🎈 @NotNull vs nullable = false 은 무슨 차이가 있나? 유효성 검사를 프로젝트에 추가하려다가 코드를 보니, @Column(nullable = false, length = 20, name = "name") private String name; 위의 코드를 발견했다. @Column 어노테이션의 nullable 속성이 false로 되어있다. 프로젝트를 실행하면 이렇게 not null의 조건이 붙은채 테이블이 생성된다. 해당 필드를 @NotNull을 붙여서 변경해보자 @NotNull private String name; @PostMapping("/user") public void saveUser(@Valid @RequestBody UserCreateRequest request) { use..
상황 : mariaDB를 사용하여 테이블 구축. JPA의 연관관계에서 외래키 에러 발생 해결 : @Column(name = "user_id") 작성 @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "user_id") private Long id; } @JoinColumn(name = "user_id") @ManyToOne private User user; @GeneratedValue(strategy = GenerationType.AUTO) 어노테이션과 함께 @Id 어노테이션만 사용하여 엔티티의 기본 키를 지정하는 경우, user 테이블의 기본 키 컬럼 이름은 "id"가 된다. 그러나 ..

상황 : springboot '2.7.6'에서 swagger '2.9.2' 추가 시 발생한 에러 해결 : application.yml파일에 밑의 코드 추가 spring: mvc: pathmatch: matching-strategy: ant_path_matcher swagger 연동 성공!
- Total
- Today
- Yesterday
- id생성전략
- 이진탐색
- 동등성
- JPA
- 일급컬렉션
- @Spring
- @NoArgsConstructor
- lowerBound
- NPE
- @ConfigurationProperties
- Thymeleaf
- 자바
- N+1문제
- upperBound
- 티스토리챌린지
- Java
- checkedException
- 오블완
- StreamAPI
- 메인메소드
- Spring
- uncheckedException
- springboot
- 유효성 검사
- @Value
- 생성자
- ddl-auto
- Optional
- null
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |