본문 바로가기

Spring

(65)
[JPA] generate-ddl과 ddl-auto 차이 generate-ddl과 ddl-auto는 모두 JPA와 Hibernate에서 데이터베이스 스키마 관리를 제어하는 설정이지만, 사용하는 맥락과 동작이 다릅니다. 1. generate-ddl개요기능: JPA의 표준 속성으로, Hibernate와 같은 JPA 구현체가 데이터베이스 스키마를 생성할지 여부를 제어합니다.값: true 또는 falsetrue: 애플리케이션이 시작될 때 JPA 구현체가 엔티티 정의에 따라 데이터베이스 스키마를 생성합니다.false: 데이터베이스 스키마를 생성하지 않습니다.기본값: false//예시spring: jpa: generate-ddl: true특징generate-ddl은 단순히 스키마 생성 여부를 결정하는 옵션입니다.JPA 표준에 정의되어 있으며 Hibernate 외에..
[JPA] hibernate.ddl-auto hibernate.ddl-auto는 Hibernate가 데이터베이스 스키마를 어떻게 관리할지 결정하는 중요한 설정입니다 주요 값과 동작1. none동작:Hibernate는 데이터베이스 스키마와 관련된 어떤 작업도 수행하지 않습니다.기본값으로 설정되면 스키마 변경 없이 데이터베이스와 애플리케이션 간의 매핑만 처리합니다.사용 사례:데이터베이스 스키마를 수동으로 관리하며, 애플리케이션에서 변경이 필요 없을 때.2. create동작:애플리케이션 시작 시 기존 데이터베이스 스키마를 모두 삭제하고 새로 생성합니다.기존 데이터 및 테이블이 모두 삭제됩니다.사용 사례:초기 개발 단계에서 데이터베이스 구조를 자주 변경할 때.테스트 환경에서 새로운 구조를 매번 생성해야 할 때.주의:기존 데이터를 모두 삭제하므로 프로덕션 ..
[JPA] Spring JPA 관련 yml 설정의 주요 항목 1. generate-ddl설명:데이터베이스 스키마를 애플리케이션의 엔티티(Entity) 모델을 기반으로 자동 생성할지 여부를 설정합니다.DDL은 테이블 생성 및 수정과 같은 데이터베이스 구조 정의를 나타냅니다.값:true: 엔티티를 기반으로 데이터베이스 스키마를 자동 생성합니다.false: 스키마를 생성하지 않습니다. (기본값)주의:이 설정은 Hibernate 또는 JPA 구현체에 따라 동작하며, 데이터베이스에 직접 영향을 미칩니다.프로덕션 환경에서는 일반적으로 false로 설정합니다.2. hibernate.ddl-auto설명:Hibernate가 데이터베이스 스키마를 어떻게 관리할지 설정합니다.주요 값:none: 스키마 자동 생성 비활성화.create: 애플리케이션 시작 시 기존 스키마를 삭제하고 새로..
[JPA] spring.jpa.properties.hibernate.dialect spring.jpa.properties.hibernate.dialect는 Hibernate에서 사용하는 Dialect를 지정하는 설정입니다. 이 설정은 Hibernate가 특정 데이터베이스와 상호작용할 때 적합한 SQL 문법과 기능을 사용하는 데 필요합니다. Dialect란?Dialect는 데이터베이스 벤더마다 다른 SQL 문법 및 기능을 추상화하여 Hibernate가 데이터베이스와 독립적으로 작동할 수 있게 해주는 개념입니다.예를 들어, MySQL, PostgreSQL, Oracle 등의 데이터베이스는 LIMIT, OFFSET, 쿼리 함수 등에서 서로 다른 문법을 사용합니다.Hibernate Dialect는 이런 차이를 해결하기 위해 데이터베이스별로 제공되며, 각 데이터베이스의 문법 및 최적화된 쿼리를..
[JPA] 영속성 컨텍스트(Persistence Context) 영속성 컨텍스트(Persistence Context)는 JPA에서 매우 중요한 개념으로, 엔티티(Entity) 객체를 관리하고 영속성을 유지하는 1차 캐시 역할을 하는 저장소입니다. 이를 통해 데이터베이스와 애플리케이션 간의 효율적인 상호작용을 지원합니다. 1. 영속성 컨텍스트란?JPA에서 **엔티티 매니저(EntityManager)**가 관리하는 논리적인 저장 공간.애플리케이션과 데이터베이스 사이에서 엔티티 객체를 캐싱하여 데이터 변경 및 조회를 관리. 엔티티 객체의 생명 주기(lifecycle)를 관리함.2. 엔티티의 생명 주기엔티티 객체는 다음 4가지 상태를 가질 수 있습니다: 1) 비영속(Transient)영속성 컨텍스트와 전혀 관계가 없는 상태. 단순히 new 키워드로 생성된 상태. 데이터베이스..
[JPA]@ManyToOne 필드에 @ToString.Exclude 붙이는 이유 @ManyToOne 필드에@ToString.Exclude를 붙이는 이유는 양방향 관계에서 발생할 수 있는 순환 참조(Circular Reference) 문제를 방지하기 위해서입니다.  1. 문제의 원인: 순환 참조 JPA의 양방향 매핑에서 부모-자식 관계를 가지는 두 엔티티는 서로를 참조하게 됩니다. 예를 들어, Parent는 Child 목록을 가지고 있고, Child는 다시 Parent를 참조하는 구조가 있을 수 있습니다. 이 상태에서 toString()을 호출하면, 한 엔티티의 toString()이 다른 엔티티의 toString()을 호출하는 무한 루프가 발생할 수 있습니다.@Entitypublic class Parent { @Id @GeneratedValue(strategy = Gener..
[JPA] JPA에서 관계를 매핑할 때 사용하는 어노테이션 JPA에서 관계를 매핑할 때 사용하는 어노테이션들에는 @OneToMany, @OneToOne, @ManyToOne, @ManyToMany가 있습니다. 이 어노테이션들은 엔티티 간의 관계를 정의하는 데 사용되며 데이터베이스 설계와 객체 모델 간의 연결을 제공합니다.  1. @OneToOne 의미: 두 엔티티 간의 1:1 관계를 나타냅니다.특징: - 주로 @JoinColumn을 사용해 외래 키를 설정합니다. - 양방향 관계를 설정하려면 양쪽 엔티티에 어노테이션을 추가하고 mappedBy 속성을 사용합니다.예시:@Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; ..
[JPA]@ToString.Exclude @ToString.Exclude는 Lombok 라이브러리에서 제공하는 어노테이션입니다. 이는 @ToString 어노테이션과 함께 사용되며, 객체를 문자열로 변환할 때(ToString 메서드 생성 시) 특정 필드를 제외하도록 설정할 수 있습니다. 주요 기능무한 순환 참조 방지:엔티티 간 양방향 관계가 있는 경우, @ToString 메서드에서 무한 순환 참조가 발생할 수 있습니다.예를 들어, A가 B를 참조하고 B가 다시 A를 참조하는 경우, toString() 호출 시 무한 루프에 빠질 수 있습니다.이 경우 @ToString.Exclude를 사용하여 순환 참조 문제를 방지합니다.필드 제외:toString() 메서드 출력에서 특정 필드를 제외할 수 있습니다.예를 들어, 비밀번호와 같은 민감한 데이터를 출력에..