백엔드 개발 (18) 썸네일형 리스트형 JPA의 핵심 : '연관관계' 정리 JPA란? JPA : 객체 - ERD 매핑에 있어 발생하는 패러다임 불일치 해결을 위해서 사용 연관 관계 연관 관계 : 개발자가 선택하는 관계 설정법으로, 비즈니스 로직, 요구사항에 따라서 그때그때 더 적절한 관계를 고른다 연관관계 정의 규칙 3가지 방향 : 단방향 OR 양방향 연관관계의 주인 : WHEN 양방향 -> 연관관계에서 관리 주체가 되는 쪽 다중성 : 다대일(多 : 1) , 일대다(1 : 多) , 일대일(1 : 1) , 다대다 (多 : 多) 연관관계 정의 규칙 中 1번째 - 방향 단방향 양방향 - DB 테이블 : 외래키(FK) 1개를 가지고 양쪽에 있는 테이블을 조인(JOIN)이 가능하다. 그래서 DB 자체는 양방향, 단방향을 굳이 따지지 않는다 하지만 HOWEVER!!!!!!!!! - 객체 .. 05. [Mybatis에서 JPA로] 기능 목록 정리 및 엔티티 설계 기능 목록 회원 기능 회원 가입 회원 로그인 / 로그아웃 회원 조회 호텔 예약 기능 호텔 예약 주문 호텔 예약 조회 호텔 예약 취소 공지사항 공지사항 글 등록 공지사항 글 조회 공지사항 글 수정 공지사항 글 삭제 기타 요구사항 호텔 객실 잔여 객실(재고) 관리 필요 호텔의 종류는 서울 지역으로 국한됨 호텔을 카테고리로 구분 할 수 있다 (카테고리 고민..어떤 카테고리로 묶을것인가..) 도메인 모델과 테이블 재설계 회원은 여러 호텔 예약을 할 수 있다. 그리고 한 번 주문할 때 여러 호텔(상품)을 선택할 수 있다. (장바구니에 담아서 한꺼번에 결제 가능) 회원 : 주문의 관계는 '1 : 多 관계' 주문 : 호텔(상품)의 관계는 '多 : 多 관계' -> ERD DB에서나 엔티티에서도 다대다 관계는 거의 사용.. JPA의 여러가지 기능 JPA와 CRUD 생산성 - JPA와 CRUD 저장 : jpa.persist(member) 조회: Member member = jpa.find(memberid) 수정 : member.setName("변경할 이름") 삭제 : jpa.remove(member) 유지보수 - 기존 : 필드 변경시 모든 SQL 수정 👉JPA : 필드만 추가하면 됨, SQL은 JPA가 처리 So, 유지보수성이 훨씬 좋아짐 JPA와 패러다임의 불일치 해결 04. [Mybatis에서 JPA로] 프로젝트 환경설정 목차 프로젝트 생성 의존성 추가 sources 파일 추가 프로젝트 생성 기존의 프로젝트는 이런 구조로 폴더가 구성되어 있어서, 새롭게 Spring Initializr에서 생성할 때도 이와 같은 구조로 프로젝트를 생성하고 싶었다. 일단, Gradle - Groovy, Language - Java, SpringBoot - 3.2.2, Package - Jar, Java - 17로 세팅해주었다. 그리고 Project MetaData를 설정해야하는데, 기존의 프로젝트와 폴더 조직 순서가 같았어야 했기 때문에 이 부분을 굉장히 신중하게 설정했다. Group : com.boot Artifact : hotel Name : hotel Package name : com.boot.hotel이 되도록 이렇게 세팅했다. 의존.. JPA - 영속성 컨텍스트가 뭐죠? 영속성 컨텍스트 : 요약 더보기 1. Java는 DB에 바로 다이렉트 접근이 불가하지만, 영속성 컨텍스트는 DB로 다이렉트 접근이 가능하다. 2. Java가 DB에 CRUD하는 일련의 모든 정보를 영속성 컨텍스트에서 확인할 수 있다. 3. Java는 항상 영속성 컨텍스트를 통해서 DB에 데이터를 저장하고, DB는 DB에 있는 데이터를 영속성 컨텍스트를 통해서 Java로 전달한다. 4. 영속성 컨텍스트에 있는 모든 일들은 자동으로 처리가 된다. (너무 신기하다!) 영속성 컨텍스트의 개념 영속성 컨텍스트라는 말 자체가 감이 안오기 때문에 영속성 / 컨텍스트 말을 뜯어서 정의해보겠다. 영속성 : 데이터를 영구적으로 저장하는 성질 -> Spring Boot에서는 데이터를 영구적으로 저장하는 것이 DB에서 가능하.. 03. [Mybatis에서 JPA로] JPA를 쓰고싶은 이유 & 목표 김영한 강사님의 스프링부트 + JPA 조합 강의를 듣다보니, 신세계가 열린 기분이었다. 뭐랄까.. 한 줄 한 줄 코딩을 배운 느낌이 아니라, 전반적인 큰 그림을 보게 된 기분이었다. 그렇게 느끼게 된 게 JPA와의 조합으로서 열리는 무한대의 응용세계였다. 나는 팀프로젝트에서나 실무에서 테스트 코드를 적어본 적이 없었고, 도메인 단위의 설계를 생각하면서 개발에 임해본 적이 없는 것 같다. 그리고 성능 개선에 너무 관심이 많았는데, 이를 어떻게 실현해야할지 감이 안잡혔었다. JPA를 배우다보니, 영속성 컨텍스트, 영속성 컨텍스트 관리, @Transactional, 1차 캐시 등등을 알게 되고, 성능 개선을 어떠한 방법으로 하면 되겠구나!가 감이 잡혀서 JPA를 직접 나의 프로젝트에 적용하여 마이그레이션을 하.. 1. JPA 활용해서 테이블 생성하기 application.yml 파일에서 jpa: hibernate: ddl-auto: create를 설정했기 때문에 1. 제일 먼저 drop하고 -> drop table if exists cascade / 만약 있는 테이블이 있으면 날려버리고 2. 그다음에 create를 하고 -> create table member ~ 3. Member 클래스는 @Entity 어노테이션으로 인해 엔티티 객체로 설정이 되고, Member 클래스 안에 있는 각 필드 id, username은 데이터베이스의 테이블의 열이자 컬럼으로서 설정이 된다. JPA - @Transactional 어노테이션 왜 쓰는걸까?.... Transaction이란? DB에서 상태변화의 한 주기를 뜻하는데, 난 이 설명보다 하나의 일처리를 안전하게 보장해주는 것으로 이해하는 게 더 쉽고 빨랐다. 우리가, 흔히 아는 rollback과 commit이 트랜잭션 제어 언어인 것이다. 모든 작업이 성공해서 DB에 정상 반영하는 것을 commit이라고 하고, 작업 중 하나라도 빠그라져서 다시 되돌리는 것을 rollback이라고 한다. (마치 회귀물 드라마가 생각난다..!) 트랜잭션은 4가지를 꼭 보장해야만 하는데 이를 ACID라고 함 A : '원자성'(Atomicity) - 트랜잭션 안에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나 아니면 모두 실패해야한다 ex. ATM에서 돈을 이체하거나 돈을 뽑을 때, 내가 돈을 입금하는 과정에 있.. 이전 1 2 3 다음