BackEnd/Spring Boot 48

JPA 기본 log사용하기

JPA 쿼리 로그 출력 설정하기 JPA를 사용할 때, 개발 중에 쿼리 로그를 확인하면서 디버깅하는 것은 매우 유용한 기능입니다. MyBatis와는 달리 JPA는 기본적으로 쿼리 로그에 파라미터를 대체하여 출력하지 않습니다. 그러나 몇 가지 설정을 통해 보기 편하게 로그를 구성할 수 있습니다. 이번 글에서는 완벽하게 구성된 JPA 쿼리 로그를 확인하는 방법을 알아보겠습니다. 완성된 Query 확인 하는법 Show-JPA-Query-Log application.yml 파일 수정하기 아래와 같이 application.yml 파일을 수정하여 JPA 쿼리 로그 출력을 설정할 수 있습니다: 좀더 다양한 설정을 테스트 해보고 더 최상의 환경설정이 있는지 연구해 보겠습니다. spring: jpa: show-sql: t..

BackEnd/Spring Boot 2023.06.11

JPA Entity여러 경우 적용_1

소개 JPA-적응기1에 작성된 내용을 기반으로 작성하였으며 이후 총 정리 및 사용 후기 등을 JPA-적응기2에 올릴 생각입니다. 또한 추후에 어떤 기술을 추가로 사용 해볼것인지도 같이 작성하겠습니다. 개발 환경 개발 소개 : JPA-적응기1 ERD : JPA-e-commerce GitHub : jpa-e-commerce DDL과 Entity 비교 예시들은 기본 Entity, 공통 Entity, 멀티키 Entity 만 작성 되어 있고 그외에는 Github 로 들어가서 확인해 주시면 감사하겠습니다. common 공통으로 들어가는 Column은 상속 받아 사용한다. 다른 방법으로 @Embeddable 을 사용하여 변수 처럼 사용 할수있다. Entity // 다른 Entity에서 사용시 "extends Comm..

BackEnd/Spring Boot 2023.06.11

JPA @Column 옵션

@Column 옵션 name (String) 데이터베이스 테이블에서 열의 이름을 지정합니다. 기본적으로 필드의 이름과 동일하게 매핑됩니다. unique (boolean) 해당 열의 값이 고유해야 하는지 여부를 지정합니다. 기본값은 false입니다. nullable (boolean) 해당 열의 값이 null 허용 여부를 지정합니다. 기본값은 true입니다. length (int) 문자열 열의 최대 길이를 지정합니다. 문자열 타입에만 적용됩니다. precision (int) 숫자 열의 전체 자릿수를 지정합니다. 숫자 타입에만 적용됩니다. scale (int) 숫자 열의 소수점 자릿수를 지정합니다. 숫자 타입에만 적용됩니다. insertable (boolean) 해당 열이 INSERT 작업에 참여해야 하는지 ..

BackEnd/Spring Boot 2023.06.10

JPA 테스트 환경 구축

테스트 환경 구축 JPA를 사용하더라도 Controller, Service를 테스트를 해야 하고 이를 위해 테스트 환경을 구축 하였고 이를 정리한 내용입니다. 테스트 구축 순서 테스트 구축시 환경 프로젝트 구조 src └───test ├───java │ └───com │ └───jpa │ └───test │ └───service │ ServiceTest.java │ └───resources application-test.yml Dependency dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-..

BackEnd/Spring Boot 2023.06.10

JPA GenerationType 속성

작성 계기 JPA를 공부 하면서 코드를 작성하던중 GenerationType.AUTO를 사용 하였습니다. 뭔가 auto_increments 가 적용 될거 같아서 사용하였지만 DB에 "hibernate_sequence" 테이블이 생성 되었습니다. (Mysql을 사용 하였습니다.) 그래서 뭐지 하다가 GenerationType 속성에 대해서 알아 보게 되었고 간단 하게 나마 정리 한 내용을 작성 하게 되었습니다. GenerationType이란? GenerationType은 JPA에서 엔티티의 주키(primary key)를 생성하는 방법을 지정하는 열거형(Enum)입니다. AUTO DB 에 따라 설정 변경됩니다. 예를 들면 Mysql은 AUTO_INCREMENTS, ORACLE : SEQUENCE 등으로 설정..

BackEnd/Spring Boot 2023.06.09

JPA의 ddl-auto 속성과 그 특징

ddl-auto 옵션 JPA를 사용할 때, ddl-auto라는 속성을 설정하여 데이터베이스의 스키마(DATABASE SCHEMA)와 JPA 엔티티 클래스의 매핑을 자동으로 처리할 수 있습니다. 설정 방법 application.yml OR appliaction.properties 에 "spring.jpa.hibernate.ddl-auto : 옵션" 을 작성하여 사용한다. 옵션 내용 create-drop 운영 환경 : DEV 동작 시점 : 애플리케이션 실행 시 및 종료 시 동작 내용 : 실행 : 기존의 동일한 이름의 테이블이 존재하면 테이블 삭제 후 생성 종료 : 스키마 삭제 update 운영 환경 : QA 동작 시점: 애플리케이션 실행 시 동작 내용: 데이터베이스 스키마 업데이트 (변경된 부분만 반영) c..

BackEnd/Spring Boot 2023.06.09

JPA 적응기_1

개요 이 글은 JPA를 테스트 하기 위하여 E-commerce 컨셉으로진행하며 JPA(Java Persistence API)를 여러 상황에서 사용한 경험을 공유 할려고 합니다. 목표 JPA JPA를 Spring Boot에 적용 하며 가독성 높은 코드 구성 엔티티 매핑 조회와 검색 트랜잭션 관리 성능 최적화 데이터베이스 설계 최대한 RDS에서 여러 상황이 나올수 있도록 구성 테이블 구조, 관계 설정, 인덱싱 등을 포함 구성 GIT 현재 셋팅 중이니 추후 코드를 참고해 주시면 감사하겠습니다. GITHUB : jpa-e-commerce Mysql sql문은 실시간으로 변경 될수 있으며 계속 해서 변경할 예정입니다. 최근 SQL 및 RDS구조는 ERD _CLOUD_ECOMMERCE 를 참고 해주시면 감사하겠습니..

BackEnd/Spring Boot 2023.05.21

JPA란?

JPA 란? 자바 언어를 위한 ORM (Object-Relational Mapping) 표준 스펙입니다 JPA 특징 Entity 객체에 특정 어노테이션을 선언하면 DB에 자동으로 맵핑 된다. ORM 제공 DB간의 변환, 영속성 관리, 쿼리 작성을 ORM으로 제공된다.] 영속성 : 객체를 메모리에서 DB에 저장 하거나 DB에서 메모리로 로드 하여 객체로 변환 Transaction 관리 애플리케이션의 데이터 변경 작업을 트랜잭션 단위로 묶어서 일관성과 안정성을 유지 할수 있따. 커밋, 롤백을 사용하여 DB상태를 유지 할수있다. 객체 그래프 탐색 연관된 객체들을 탐색 하고 접근 하는 과정 지연 로딩(Lazy Loading) : 연관된 엔티티를 실제로 사용 할때 까지 로딩을 지연 시킨다. 필요한 엔티티만 로딩 ..

BackEnd/Spring Boot 2023.05.21

영속성 이란?

작성 계기 JPA에서 영속성이라는 개념이 중요 하다고 생각한다. 그래서 영속성에 관한 내용만 따로 간단하게 나마 정리를 한다. 영속성 이란? 내가 이해한 영속성은 이러하다. 객체를 메모리에서 DB에 저장 하거나 DB에서 메모리로 로드 하는 과정 메모리 메모리는 JVM Heap Memory에 저장이 된다. 1차 캐쉬 Request 가 종료되면 삭제 된다. 2차 캐쉬 Request가 종료 되면 삭제 되지 않는다. 종료 시점을 설정할수있다. DB에서 데이터를 가져올때 캐쉬에 저장 되며 로직 실행중에 같은 데이터가 필요하면 DB에 접근이 아니라 캐쉬에서 먼저 가져와 데이터를 변경한다. 1차 캐쉬 & 2차 캐쉬 장단점 1차 캐쉬 장점 JVM Heap 메모리에 위치 하여 접근 속도가 빠르다. 동일한 Transact..

BackEnd/Spring Boot 2023.05.21

JPA Entity 작성_1 (공통, 같은 테이블)

1. 공통 Entity JPA를 사용하면 데이터베이스의 테이블과 자바 객체를 매핑할 수 있습니다. 때로는 여러 개의 엔티티에서 공통으로 사용되는 필드를 가지는 공통 엔티티를 만들고 싶을 수 있습니다. 이러한 상황에서는@MappedSuperclass 사용하여 공통 엔티티를 생성할 수 있습니다. @MappedSuperclass public class CommonEntity { @Column private Date registDate; @Column private Date modDate; } 2. 같은 테이블에서 ID를 설정 할때 보통 카테고리나 댓글을 만들때 대댓글, 부모 카테고리를 선언하기도 하는데 같은 테이블 내에서 선언한다. 이를 위해 아래와 같이 선언하면된다. @Entity @Table(name = ..

BackEnd/Spring Boot 2023.05.15