Web

    EP6. 연관관계 매핑 (실전예제)

    테이블 구조 객체 구조 Member에서 orders 가 있는것이 객체지향적으로 좋은 설계는 아니다. 잘못된 설계이다. 회원의 주문목록을 보기위해서 상식상 멤버에 orders가 있어야된다고 생각이 되지만, Order의 Member를 이용해도 충분히 가능하다. 애플리케이션을 개발할때는 최대한 단방향 매핑으로 끝내자. 양방향이 필요한 경우 : 비즈니스 상에서 Order를 볼때 OrderItem까지 한번에 같이 보고싶은 경우 양방향 연관관계를 걸어준 객체 코드 Member ... @OneToMany(mappedBy = "MEMBER_ID") private List orders = new ArrayList(); ... Order ... @OneToMany(mappedBy = "ORDER_ID") private L..

    EP5. 연관관계 매핑

    예제로 연관관계 매핑 해보기 단방향 연관관계 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다. 객체지향 모델링 Member class 의 teamId는 멤버가 어느 팀에 속해있는지 알려주는 변수이다. teamId는 테이블에서 FK에 해당된다. 그리고 Table 에서는 Member 와 TEAM 이 다대일 관계라는 것을 표현한다. 모델링코드 package hellojpa; import javax.persistence.*; import java.math.BigDecimal; import java.util.Date; @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") privat..

    EP4. 요구사항 분석과 기본 매핑

    실전 예제로 요구사항 분석과 기본 엔티티 매핑을 해보았다. 기본 엔티티 매핑을 위한 도메인 모델 회원은 여러번 주문할 수 있다. -> 일 대 다 주문할때 여러 상품을 선택할 수 있다. -> 일 대 다 같은 상품이 여러번 주문될 수 있다. -> 다 대 일 테이블 설계 엔티티 설계 엔티티 클래스 코드 Member package jpabook.jpashop.domain; import javax.persistence.*; @Entity @Table() public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String name; private String city; private String str..

    EP3. 영속성 컨텍스트, 엔티티 매핑

    em.flush(); 를 하면 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화 한다. (sql저장소에 있던 sql문들이 db로 날아간다.) 영속성 컨텍스트를 비우는 것은 아님! 커밋을 실행하면 : flush()를 자동호출한다. ( = 쿼리가 db로 날아간다 ) JPQL을 실행하면 : flush()를 자동호출한다. ( = 쿼리가 db로 날아간다 ) 준영속 상태 : 한번 영속상태였다가 비영속상태가 되었을 때. 영속 -> 준영속 em.detach() : 특정 엔티티만 준영속 상태로 전환 em.clear() : 영속성 컨텍스트를 완전히 초기화 em.close() : 영속성 컨텍스트를 종료 영속성 컨텍스트의 이점 1차 캐시 동일성 보장 쓰기 지연 변경감지 지연로딩 엔티티 매핑 객체 : @Entity 테이블 : ..

    EP2. JPA 기본동작과정과 내부동작방식

    JPA 기본 동작 과정 Entity Manager Factory 에서 Entity Manager 를 만들고 Transaction 안에서 Entity Manager를 이용해 객체와 테이블을 매핑, 수정, 삭제를 할 수 있다. 객체 수정시에 member.setId(1L); 을 해주고 em.persist(member); 를 해주지 않아도 수정해준다.! JPA 내부 동작 방식 JPA에서 가장 중요한 2가지 1. 객체와 RDB 매핑 (ORM) 2. 영속성 컨텍스트 (내부 동작) 영속성 컨텍스트 : entity manager에 등록 (정확히는 아니지만 지금은 이렇게 이해해도 괜찮다고 한다.) em.persist(entity); 를 해주면 바로 sql이 날아가는 것이 아닌 영속성 컨텍스트에 그냥 등록만 된다. sql..

    EP1. JPA 개념과 개발환경 세팅

    요즘 시대는 객체지향프로그래밍과 관계형데이터베이스가 대부분이다. 그래서 아래 2가지 문제가 생긴다. 1. SQL 의존적인 문제 2. 객체 vs 관계형 DB 의 패러다임 불일치 ( 객체 -> SQL, SQL -> 객체 무한변환..) 객체와 관계형 데이터베이스의 차이 객체 데이터베이스 상속 있음 없음 연관관계 참조를 통해 가져오기 가능 join을 통해 가져와야함 데이터베이스와의 연동을 객체지향프로그래밍 원리에 맞추려고 하면 할 수록 자바의 객체와 SQL의 객체의 차이때문에 더 복잡해지기 시작했다. 객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수는 없을까? -> JPA 등장 JPA : Java Persistence API 자바 진영의 ORM 기술 표준 ORM : Object-Relational Mapprin..

    [boot+jpa실전 1] 1. 스프링부트 프로젝트 생성

    start.spring.io (스프링 부트 스타터 접속) 원하는 버전과 프로젝트 이름, 라이브러리를 선택한다. 압축해제 후 인텔리제이로 open 한다.

    스프링 기초 정리

    목차 객체지향이란? 좋은 객체지향이란? (객체지향 설계 5가지 원칙) IoC, DI @Component, @ComponentScan 스프링 컨테이너를 통해 Bean을 가져오는 것이 좋은이유 싱글톤 @Configuration @ComponentScan @Component @Autowired 다양한 의존관계 주입 방법 옵션처리 수정자주입말고 생성자 주입을 선택하는 이유 lombok 조회대상 빈이 2개 이상일때 해결방법 3가지 @Autowired 필드 명 매칭 @Qualifier 등록 @Primary annotation 직접 만들기 조회한 빈이 모두 필요할 때 수동 빈 등록은 언제 사용해야 될까? 업무로직 빈 기술지원 빈 다형성을 적극 활용할 때 빈 생명주기 콜백 스프링 빈의 전체적인 라이프 사이클 사용 전에..

    웹 스코프 java.lang.IllegalStateException 에러 해결방법

    - 에러내용 : No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expos..

    IoC, DI 용어정리

    IoC, DI 도 스프링 개발자 오픈톡방이나 스프링 이야기가 나올 때마다 자주 보이던 용어들이었다. 당시에 궁금해서 구글에 검색했을땐 IoC : 제어의 역전 DI : 의존관계 주입 이라고 나오는 결과들만 보고서 이해가 안되어 그냥 넘어갔던 것들이다. IoC (Inversion of Control) 제어의 역전 IoC (제어의 역전) 의 사전적 정의 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 말한다. 말 그대로 기존에 프로그램의 제어흐름을 직접 제어하던 것을 외부에서 관리하도록 역전 시킨다는 것을 말한다. 하지만 이해하기 쉽게 코드를 이용해 설명해 볼 것이다. 코드에 대한 배경지식을 먼저 설명하자면, MemberRepository 인터페이스는 MemoryMemberReposi..