본문 바로가기

Just Do

(82)
RS) IP(Internet Protocol) IP(Internet Protocol) IP의 역할 지정한 IP 주소(IP address)에 데이터 전달 패킷 이라는 통신 단위로 데이터 전달 IP 패킷 현재 나의 IP(출발지IP, 목적지 IP, 기타 …) 등의 정보를 가진 상태로 구성되어 있다. 위와 같이 이루어진 정보를 토대로 패킷을 인터넷 망에 던진다. 인터넷은 규약이 미리 정해져있기 때문에 노드에서 타고타고 목적지 IP로 도달하게 된다. 목적지에서는 메시지를 받았다는 응답 메시지를 패킷을 통해서 만들어서 노드를 통해 다시 출발지 IP쪽으로 전달한다. IP 프로토콜의 한계 내가 친구한테 던질 떄 출발지 → 목적지로 갈때와 목적지에서 다시 출발지로 올때 서로 다른곳으로 전달될 수 있다. 비연결성 내가 생성해서 만든 패킷을 받을 대상이 없거나, 서비스..
RS) 프록시와 연관관계 프록시 기초 em.find() vs em.getReference() em.find() : 데이터베이스를 통해 실제 엔티티 객체 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 하이버네이트가 내부적으로 라이브러리를 사용해서 가짜 엔티티 객체를 준다 프록시 특징 실제 클래스를 상속 받아서 만들어짐 하이버네이트가 내부적으로 라이브러리를 사용해서 만든다. 그러다보니 실제 클래스와 겉모양이 같다. 사용하는 입장에서는 구분하지 않고 사용하면 된다. 프록시 객체는 실제 객체의 참조(Target)을 보관한다. 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. 프록시 객체는 처음 사용할 때 한번만 초기화 프록시 객체를 초기화 할 때, 프록시 객체가 실제 엔티티로 ..
RS) MappedSuperclass 매핑 정보 상속(상속관계X) @MappedSuperclass 공통 매핑 정보가 필요할 때 사용 상속관계 매핑이 아니다. 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공 직접 생성해서 사용할 일이 없기 때문에 추상클래스로 사용하길 권함 테이블이랑은 관계없고 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할 ex) 등록일, 수정일, 등록자, 수정자 같은 전체에 공통으로 적용되어야 할 정보들.. @Entity 클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속 가능 JPA에서는 Extends를 쓰려면 @Entity라는 어노테이션이 있거나 @MappedSuperclass가 있어야 한다. @Entity를 적었을 경우는 상속관계를 하기 위해서 쓴다. @MappedSuperclass는 공통적인 속성만 상속..
RS) 상속관계 매핑 테이블에서의 상속관계와 객체에서의 상속관계 관계형 데이터베이스는 상속관계가 없다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체에서의 상속이랑 유사 디비 입장에서 객체에서의 상속관계처럼 만들 수 있는 여러가지 전략이 있다. 조인전략(JOINED) @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn 어노테이션을 통해 DTYPE을 넣어줄 수 있고 위의 그림에서 ALBUM, MOVIE, BOOK의 엔티티 명이 Default로 들어간다. 위의 컬럼은 안넣어줘도 상관없지만, 넣어주는 것이 좋다. (DTYPE이 ALBUM때매 들어온건지 MOVIE때문인지 등을 분별할 수 있기때문에) 자식들에는 @DiscriminatorValue를 써줘야 한다. ..
RS) 다대다 관계 테이블에서의 다대다 관계 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없음 연결 테이블을 통해서 다대일 관계로 풀어야 한다. 객체에서의 다대다 관계 객체는 컬렉션(List)을 사용해서 객체2개로 다대다 관계가 가능하다. @ManyToMany 사용하여 연관관계를 지을 순 있다. @JoinTable로 연결은 가능하다. 다대다 매핑의 한계 편리해 보이지만 실무에서 사용해서는 안된다. 연결 테이블이 단순히 연결만 하고 끝나지 않는다. ex) 주문시간, 수량 같은 데이터가 들어올 수 있음 다대다 한계 극복 연결 테이블용 엔티티를 추가한다. (연결 테이블을 엔티티로 승격) @ManyToMany → @OneToMany, @ManyToOne으로 나눠서 연관관계를 짓는다. 연결 테이블의 PK는 ..
RS) 연관관계 매핑시 주의할 점 다중성 매핑시 대칭성이 있다고 생각하자 다대다 관계는 실무에서는 사용하지 말아야 한다. (대체방법 필요) 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany 단방향, 양방향 테이블 외래 키 하나로 양쪽으로 조인 가능 → 방향 개념이 없음 외래키 하나로 두 테이블이 연관관계를 맺음 객체 참조용 필드가 있는 쪽으로만 참조 가능, 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향 객체 양방향 관계는 참조가 2군데있음 둘중에 테이블의 외래 키를 관리하는 쪽을 지정하고 연관관계의 주인으로 설정하고 지정해야함 주인의 반대쪽은 외래 키를 업데이트하는 데에 영향을 주지 않고, 조회만 가능하다. 다대일 단방향 관계 가장 많이 사용하는 연관관계 외래..
RS) 양방향 연관관계와 연관관계 주인2 양방향 매핑시 가장 많이 하는 실수 (연관관계의 주인에 값을 입력하지 않음) Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setName("member1"); //역방향(주인이 아닌 방향)만 연관관계 설정 team.getMembers().add(member); em.persist(member); 객체지향적으로 생각해 봤을 때에도 양방향 관계를 맺는 양쪽에다가 다 값을 넣어주는 것이 맞다. 단순하게 생각하면 양방향 관계일 경우에는 양쪽에다가 다 값을 넣어주면 된다. // team.getMembers().add(member); // em.flush(); // em.clear..
RS) 양방향 연관관계와 연관관계의 주인 JPA에서 크게 중요한 두가지 포인트를 꼽자면.. 영속성 컨텍스트의 메커니즘 이해와 양방향 연관관계와 연관관계의 주인이 어려운 부분이다! 양방향 매핑 코드를 통해 양방향 매핑에 대해서 집어보고 이해하자 // Member에서 Team으로 가는 것은 오케이 // 그렇다면 Team에서 Member로 가는 것은?? 불가능 Team findTeam = findMember.getTeam(); findTeam.getMember() // Team에서 Member로 가는 것은 불가능하다. System.out.println("findTeam = " + findTeam.getName()); 위 그림에서 테이블 연관관계는 양방향으로 연관관계가 달라져도 그림이 달라질 게 전혀 없다. 테이블 연관관계에서는 JOIN을 통해 서로간..