목록전체 글 (261)
당니의 개발자 스토리
양방향 연관관계와 연관관계의 주인 1- 기본자 이번에는 이제부터가 진짜입니다.아까 말씀드린 jpa계의 포인터라고 할 수 있는 양방향 연관관계랑 연관관계 주인에 대해서 설명을 드릴 건데요. 한번 잘 들으시면 어렵진 않은데 진짜 잘 들어야 합니다.JPA에서 나머지 부분은 사실 제가 생각할 때 그렇게 어렵지 않은데 딱 어려운 두 가지가 앞 전에 설명드린 영속성 컨텍스트에 대해서 메커니즘을 이해하는 거고, 또 하나가 양방향 연관관계와 연관관계 주인. 특히 연관관계 주인 이 부분이 다른 책들로 공부하기 힘들어요.왜냐하면 객체랑 테이블 이 두 개가 패러다임 차이가 있거든요. 연관된 애들을 찾을 때 객체는 참조라는 걸 사용을 하고, 테이블은 외래키를 가지고 조인을 활용하는데 이 둘 간에 차이가 뭔지랑 차이에서 오는 ..
단방향 연관관계이번 시간에는 연관관계 맵핑에 대해서 알아보겠습니다.연관관계 맵핑 기초 시간인데요. 이전 시간에 알아봤던 것처럼 뭔가 테이블에 맞춰서 Foreign Key를 그대로 가져오면서 설계하는 방식이 아니라, 정말 member.getItem이나, 누가 주문했는지 member.getMember 이런 식으로 연관관계를 쭉쭉 맺어서, 좀 더 객체지향스럽게 어떻게 설계하는지 알아보는 첫 번째 시간이고요. 객체랑 관계형 DB랑의 어떤 패러다임의 차이에서 오는 것 중에서 이게 제일 어려운 내용입니다. 이전에 기본 맵핑 이런거 보면 사실 되게 쉽잖아요. 그냥 일대일로 맵핑하면 되니까.근데 여기서는 객체가 지향하는 패러다임과 관계형 DB가 지향하는 패러다임이 다르기 때문에 이 둘 간에서의 차이에서 오는 좀 극심한..
실전 예제 1 - 요구사항 분석과 기본 매핑이번에는 실전 예제 첫 시간입니다.요구사항 분석과 기본 맵핑입니다. 이번에 저희가 처음으로 엔티티 맵핑에 대해서 배웠기 때문에 이거에 대해서 조금 더 복잡한 예제를 통해서 어떻게 맵핑 되는지 알아보겠습니다.먼저 요구사항 분석인데요. 회원은 상품을 주문할 수 있고 주문 시 여러 상품을 선택할 수 있다. 이런 요구사항이 있구요.기능은 회원을 관례하고 상품을 등록하고 주문할 수 있고 이런 기능들이 있는 간단한 샘플입니다. 기본적인 굉장히 단순한 쇼핑몰 이라고 보시면 될 것 같구요.도메인 모델을 분석을 해보면,아까 본 요구사항을 가지고 이제 뭘 만들어 볼 거에요. 회원은 여러 번 주문할 수 있다. 하나의 회원이 여러 번 주문할 수 있다. 주문과 상품의 관계. 주문할 때..
기본 키 매핑기본 키 맵핑에 대해서 알아보겠습니다.기본 키 맵핑은 내용이 어렵진 않은데 데이터베이스에서 기본 키 맵핑을 어떤 식으로 하는지 알고 계셔야 돼요.우선 기본 키 맵핑은이겁니다.제가 좀 쉽게 하기 위해서 나머지는 이제 다 지워버릴게요.그래서 기본 키 맵핑은 이겁니다.그리고 사용할 수 있는 annotation은 크게 두 가지가 있습니다. @Id랑 @GeneratedValue 자 이제 하나씩 설명을 드릴게요.'내가 Id를 직접 할당할 거야' 그러면 이번에는 Id를 String으로 바꾸겠습니다.String으로 바꾸고,타입이 바꼈으니까 Getter, Setter 만들어줄게요.그 다음에 Id를 예를 들어서 ID_A 라고 저장하고 실행해 보겠습니다.이렇게 됐고, 데이터베이스를 보면,id가 ID_A, nam..
필드와 컬럼 매핑필드와 컬럼 맵핑에 대해서 알아보겠습니다.JPA에서 엔티티랑 테이블 맵핑하는 것은 사실 별게 없죠. 근데 필드랑 컬럼은 좀 다양합니다. 예를 들면 자바에는 Enum 타입도 있고 그러니까요.제가 이 예시를 해보기 위해서 요구사항을 한번 해보겠습니다.회원은 일반 회원과 관리자로 구분해야 된다. 회원 가입일과 수정일이 있어야 한다. 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다. 뭐 이런 게 있어요.그러면 제가 시간 관계상 이거를 복붙을 해보겠습니다.import를 하고,그 다음에 RollType을 Enum class로 만들고,그냥 일반 USER랑 ADMIN 두 개만 만들죠.그리고 Member의 getter, setter과 @Table도 지우고 이제 설명드리겠습니다.자..
데이터베이스 스키마 자동 생성자 그 다음에 갑자기 데이터베이스 스키마 자동 생성이 갑자기 나왔어요.이걸 왜 먼저 설명 드리냐면, 사실 'id, name 같은 컬럼은 어떻게 매핑 해요?' 이걸 먼저 설명 드려야 되는데, 이거 하기 전에 지금 하려는 걸 먼저 설명 드려야 좀 편한게 있어서 먼저 설명드리겠습니다.jpa가 사실 이 매핑 정보만 보면, 어떤 쿼리를 만들어야 될지, 어떤 테이블 인지 다 알 수 있잖아요. 그래서 jpa 에서는 뭘 지원하냐면 아예 애플리케이션 로딩 시점에 db 테이블을 생성하는 기능도 지원을 해줍니다.물론 이런건 운영에서 쓰시면 안되구요. 내가 개발 단계나, 로컬 pc에서 개발하거나 이럴 때 좀 도움이 됩니다.그래서 이 애플리케이션 실행 시점에 insert into 같은 테이블이 생성..
객체와 테이블 매핑이번 시간에는 엔티티 매핑에 대해서 알아보겠습니다.JPA에서 제일 중요하게 봐야 되는 두 가지 중 하나는 영속성 컨텍스트나 어떤 JPA의 내부 동작 방식과 같은, JPA가 내부적으로 어떤 메커니즘으로 동작하는지 그런 메커니즘적인 측면이랑 실제 설계적인 측면, 그러니까 객체랑 관계형 데이터베이스를 어떻게 매핑을 해서 쓰는지, 이건 정적인 측면이죠.이 매핑이 정말 중요하고, 이번 시간에는 entity mapping에 대해서 알아보겠습니다.목차를 간단하게 말씀드리면 객체랑 테이블을 어떻게 매핑 하는지 설명드릴 거고, 그 다음에 데이터베이스 스키마를 자동 생성해주는 걸 알아보고요. 그 다음에 데이터베이스의 어떤 컬럼이랑 객체 필드 이걸 매핑 하는 거랑 pk, 기본 키를 어떻게 매핑 하는지, 그..
정리자 그래서 이제 이번 시간에 공부했던 것을 한번 정리해 보겠습니다.이번 시간에는 정리를 할 건데, 지금까지 영속성 컨텍스트라는 것에 대해서 알아봤구요.그 다음에 JPA에서 가장 중요한 것 두 가지, 맵핑하는 것과 영속성 컨텍스트.하나는 정적인 맵핑 과정이고 하나는 실제 동작하는 메커니즘을 설명하는 거죠. 그래서 JPA의 가장 내부 구조랑, 내부가 동작하는 방식에 대해서 알아본 겁니다.그 다음에 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻이라는 거고요.그 다음에 사실 이 영속성 컨텍스트는 눈에 보이는 개념이 아니에요. 대신에 엔티티 매니저를 통해서 영속성 컨텍스트에 접근하는데,지금 우리가 일반적으로 쓰는 환경에서는 엔티티 매니저를 생성하면 그 안에 영속성 컨텍스트가 있다 라고 보시면 됩니다...