728x90
반응형
SMALL

전체 글 219

[JPA] Part 8. 상속관계 매핑

이제 상속관계를 매핑하는 법도 알아보자. 왜냐하면 객체는 상속을 받을 수 있으니까. 우선은 관계형 데이터베이스는 상속 관계가 없다. 대신 슈퍼타입 서브타입 관계라는 모델링 기법이 있고 그 기법이 객체 상속과 유사하다. 그래서, 상속관계 매핑을 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑해 보는 것이 주제다. 위 그림에서 ITEM이라는 테이블이 있고 그 테이블이 가지는 컬럼을 모두 동일하게 가지는 3개의 테이블 Album, Movie, Book이 있다고 가정해 보자. 이 경우 데이터베이스에서는 3가지 전략으로 테이블을 구성할 수 있다. 조인 전략 단일 테이블 전략 구현 클래스마다 각 테이블 전략 조인 전략 조인 전략은 상위 테이블인 ITEM의 기본키를 각 테이블이 기본키이자 외래키로 가지는 방..

[JPA] Part 7. 다대일, 일대다, 일대일, 다대다

이 전 포스팅까지는 단방향, 양방향에 대해서 알아보았는데 결론은 테이블 관점은 방향이란 게 없고 자식 테이블에 외래키가 존재하며 그 외래키를 통해 부모 테이블과 조인하여 원하는 데이터를 얻어내거나 반대로 부모 테이블은 본인의 PK를 이용해서 자식 테이블의 외래키와 조인하여 원하는 데이터를 얻을 수 있고 객체 관점은 단방향 또는 양방향 연관관계라는 게 존재하며 양방향 연관관계는 사실 단방향 두 개를 의미하며 설계할 때 양방향이 단 하나도 없어도 애플리케이션에 전혀 문제가 없다는 것. 단방향으로 설계를 끝내고 필요하면 양방향 연관관계를 추가할 것이 결론이었다. 이제는 연관관계를 매핑할 때 ManyToOne, OneToMany, OneToOne, ManyToMany 관계에 대해서 알아보려고 한다. ⭐️ Man..

[JPA] Part 6. 객체 지향형 모델링, 단방향 양방향 연관관계 주인

데이터베이스와 자바의 객체를 매핑하는 것을 이전 시간에 공부했는데 데이터베이스와 자바의 객체는 한 가지 이질적인 부분이 있다. 데이터베이스는 한 테이블에서 다른 테이블을 참조할 때 외래키를 이용하여 어떤 레코드를 참조하는지만 표현하는 반면, 객체 지향적이란 건 객체가 다른 객체를 참조할 수 있어야 객체 지향적이라고 할 수 있다. 객체 지향적인 설계가 복잡하고 어려운 내용인것 같다. 공부하고 공부해도 모자란 부분이 이 부분인 것 같지만 한 가지 확실한 건 다음과 같은 설계가 객체 지향적이라고 볼 순 없을 것 같다. Member Entity package org.example.domain; import javax.persistence.*; @Entity public class Member { @Id @Gen..

[H2]: Database "xxx/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-224] 90149/90149

이제 H2 Database가 버전이 올라가면서 데이터베이스가 없는 경우 자동으로 데이터베이스를 만들어주지 않는다. 그래서 콘솔에서 다음과 같은 에러를 볼 수 있다. 정말 간단하게 해결할 수 있는데, 우선 데이터베이스를 만들고자하는 경로는 나같은 경우 다음과 같다. "~/h2/test" 이 경로에 "test"라는 데이터베이스를 만들거면 해당 경로에 이런 파일 하나를 만들어주면 된다. "test.mv.db" // ~/h2 touch test.mv.db 그러고 다시 Connect를 해보면 정상적으로 데이터베이스 접근할 수 있다.

Troubleshooting 2023.10.18

[JPA] Part 5. 객체와 테이블 매핑

이제 JPA에서 역시 제일 중요한 부분 중 하나인 객체와 테이블 매핑에 대해서 알아보자. 이 부분은 복잡한 내용은 없고 간단하게 어노테이션을 이용해서 객체를 테이블과 매핑할 수 있다. Member Entity package org.example.entity; import javax.persistence.*; import java.time.LocalDateTime; @Entity @Table(uniqueConstraints = { @UniqueConstraint(name = "UniqueName", columnNames = { "name" }), @UniqueConstraint(name = "UniqueEmail", columnNames = { "email" }) }) public class Member ..

[JPA] Part 4. 영속성 컨텍스트

영속성 컨텍스트는 JPA에서 가장 중요한 개념 중 하나이다. 이 PersistenceContext를 이해해야만 JPA를 이해할 수 있다고 봐도 무방하다. 공부하는데 도움을 받은 김영한 강사님의 "자바 ORM 표준 JPA 프로그래밍" 추천합니다. 출처: https://www.inflearn.com/course/ORM-JPA-Basic/dashboard 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 초급자를 위해 준비한 [웹 개발, 백엔드] 강의입니다. JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자 www.inflearn.com 엔티티 매니저 팩토리와 엔티티 매니저 우선 영속성 컨텍스트를 알기..

[JPA] Part 3. JPA를 뿌리부터 시작해보기

JPA를 진짜 깊게 이해하기 위해 아예 순수 JPA 세팅부터 시작해 보려고 한다. 내가 처음 JPA를 사용했을 때 느꼈던 것보다 훨씬 진짜 훨씬 더 많은 내용이 JPA에 있었는데 지금이라도 깊게 공부하게 되서 다행인거 같다. 우선 프로젝트를 Maven 기반으로 시작해보자. pom.xml 현재 정말 아무것도 없는 상태에서 pom.xml 파일 하나만 있는 상태다. 이 파일에서 필요한 두 가지가 있는데 하나는 hibernate, 하나는 h2database dependency다. 4.0.0 org.example hello-jpa 1.0-SNAPSHOT 18 18 org.hibernate hibernate-entitymanager 5.6.15.Final com.h2database h2 2.2.224 딱 두개의 D..

[Spring] Integration Test 코드 예시

DB와 연동된 서비스 로직의 코드를 테스트할 필요가 반드시 생기는데, 이렇게 서비스 로직뿐 아니라 DB와 연동성도 정상적으로 이루어지는지까지 확인하는 테스트를 일반적으로 통합테스트 (Integration Test)라 한다. Spring에서 통합테스트 하는 방법은 굉장히 간단하다. @SpringBootTest, @Transactional 어노테이션을 사용하면 된다. package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemberRepository; import org.junit.jupiter.api.Test; import org.springframework.be..

[Spring] 컴포넌트 스캔과 자동 의존관계 설정

Spring을 사용하면 중요하게 알아두어야 할 것이 '컴포넌트 스캔'이란 단어다. 이게 무엇인지 공부한 내용을 작성해보고자 한다. 우선 Spring 코드를 보면 이런 어노테이션이 많이 보인다. @Service @RequiredArgsConstructor public class FileStoreImpl implements FileStore {} @Slf4j @RestController @RequiredArgsConstructor @RequestMapping("/api/v1/file") public class FileController {} @Service, @RestController, @Controller, @Component, @Repository 등 자주 보이는 어노테이션이 있는데 이게 무얼 의미하는..

[Gradle]: java.lang.UnsupportedClassVersionError: org/springframework/boot/gradle/plugin/SpringBootPlugin has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class f..

회사에서 새로운 프로젝트를 진행할 때 이번엔 Maven말고 Gradle을 사용해보고 싶어서 로컬에서는 아무 문제가 없었는데 물리서버에 코드를 옮기고 빌드할 때 이러한 에러가 발생했다. java.lang.UnsupportedClassVersionError: org/springframework/boot/gradle/plugin/SpringBootPlugin has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0 이 에러 내용만을 읽어봤을 땐 현재 사용하는 JRE가..

Troubleshooting 2023.10.13
728x90
반응형
LIST