양방향 매핑 시 가장 많이 하는 실수 연관관계의 주인에 값을 입력하지 않음 Member member = new Member(); member.setUsername("member1"); em.persist(member); Team team = new Team(); team.setName("TeamA"); team.getMembers().add(member); em.persist(team); Member의 TEAM_ID의 값이 NULL → 연관관계 주인이 Member에 있는 team → Team에 있는 members는 가짜 매핑 → 읽기 전용 → JPA에서 업데이트 할 때 사용하지 않는다. 연관관계의 주인에 값 넣어줘야 한다. Team team = new Team(); team.setName("TeamA")..
목표 객체와 테이블 연관관계의 차이 이해하기 객체의 참조와 테이블의 외래 키 매핑하기 용어 이해 (방향 - 단방향, 양방향) (다중성- 다대일, 일대다, 일대일, 다대다) (연관관계의 주인 - 객체 양방향 연관관계는 관리 필요) 연관관계가 필요한 이유 → 객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원(N)과 팀(1)은 다대일 관계다. 객체를 테이블에 맞추어 모델링 객체를 테이블에 맞추어 데이터 중심으로 모델링하면 협력관계를 만들 수 없다. 테이블은 외래키로 조인을 사용해서 연관된 테이블을 찾는다. 객체는 참조를 사용해서 연관된 객체를 찾는다 → 테이블과 객체 사이에 간격 존재 객체지향 모델링 단방향 매핑 M..
MVC 구조 Request -> Router -> Controller -> Service/Provider -> DAO -> DB DB -> DAO -> Service/Provider -> Controller -> Router -> Response Spring boot Request(시작) / Response(끝) ⇄ Controller(= Router + Controller) ⇄ Service (CUD) / Provider (R) ⇄ DAO (DB) Router 외부에서 요청을 받아 URI와 매핑된 Controller에 전달 Controller Request를 Service/Provider에게 넘겨주고 응답 형식적 Vaildation(값, 길이 등) -> DB를 거치지 않고 요청 데이터의 유효 여부 검증..
RESTful API 구성 요소 자원(resource) : URI 행위(verb) : HTTP Method 표현(representations) : HTTP Message Body 1. URI -> 정보의 자원을 표현, 명사, 복수형 사용 GET /users/1 2. 자원에 대한 행위는 HTTP Method(POST, GET, PUT, DELETE)로 표현 POST /users/sign-up POST /users/log-in GET /users URI 설계시 주의 1. 마지막에 슬래시(/) 포함 x 2. underbar(_) 대신 dash(-) 사용 3. 소문자 사용 -> 대소문자에 따라 다른 리소스로 인식하기 때문 4. 행위는 포함하지 않음 HTTP Method GET과 DELETE는 body X POS..
객체와 테이블 매핑 @Entity - @Entity가 붙은 클래스 → JPA가 관리하는 엔티티 - JPA를 사용하여 테이블과 매핑할 클래스는 필수! 주의 - 기본 생성자 필수 (파라미터가 없는 public or protected 생성자) - final 클래스, enum, interface, inner 클래스 사용 x 속성 : name - JPA에서 사용할 엔티티 이름을 지정 (기본값 : 클래스 이름) @Table 엔티티와 매핑할 테이블 지정 name → 매핑할 테이블 이름 : @Table(name = “MBR”) 데이터베이스 스키마 자동 생성 DDL을 애플리케이션 실행 시점에 자동 생성 테이블 중심 → 객체 중심 데이터베이스 방언을 활용하여 데이터베이스에 맞는 적절한 DDL 생성 이렇게 생성된 DDL은 ..
JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑 영속성 컨텍스트 엔티티 매니저 팩토리와 엔티티 매니저 영속성 컨텍스트 “엔티티를 영구 저장하는 환경” 논리적인 개념, 눈에 보이지 않음 EntityManager.persist(entity); → DB에 저장하는 것이 아니라 영속성 컨텍스트에 저장 EntityManager를 생성하면 영속성 컨텍스트가 1:1로 생성 → EntityManager 안에 영속성 컨텍스트가 보이지 않는 공간에 생김 엔티티의 생명주기 비영속 (new/transient) 영속성 컨텍스트와 관계없는 새로운 상태 객체를 생성한 상태 - 세팅만 한 상태 Member member = new Member(); member.setId(100L); member.setName("Hell..
Hello JPA - 프로젝트 생성 h2 데이터베이스 설치 및 실행 http://www.h2database.com/ hibernate ORM 5.3.10 설치 spring과 엮여서 실행할 때 라이브러리 버전 선택 spring → PROJECTS → Spring Boot 에서 내가 사용할 spring 버전을 보고 org.hibernate의 버전과 궁합 맞추기 Hibernate. Everything data. maven으로 Java 프로젝트 만들기 (jdk 1.8 사용) (Ctrl + Alt + Shift + S → 프로젝트의 SDK 버전 변경) pom.xml에 라이브러리 추가 4.0.0 org.example ex1hellojpa 1.0-SNAPSHOT org.hibernate hibernate-entity..
강의 목표 - 객체와 테이블 설계 매핑, JPA 내부 동작 방식 이해 객체와 테이블을 잘 생성하고 매핑하는 것의 중요성 SQL 중심적인 개발의 문제점 데이터베이스 세계의 주도권 - 관계형 DB (Oracle, MySQL) 무한 반복, 지루한 코드, 패러다임의 불일치의 문제 관계형 DB를 쓰는 상황에서 SQL에 의존적인 개발을 피하기 어렵다. 패러다임의 불일치의 문제 관계형 DB와 객체가 나온 사상이 다르다. → 현실적인 대안은 관계형 DB 자바 컬렉션에 넣을 때는 문제가 단순하지만, 관계형 DB에 넣고 빼낼 때 SQL 매핑 작업이 번잡함. 객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수 없을까? → JPA JPA - Jave Persistence API - 자바 진영의 ORM 기술 표준 ORM - Ob..