본문 바로가기

전체 글

(73)
15,16회_2계층 주소와 이더넷, 이더넷 데이터 전송 방법 유니캐스트: 1대1. 각각의 기기는 유니캐스트 주소를 적어도 한 개 이상 갖고 있다. 이러한 유니캐스트 주소는 유일해야 한다. 브로드캐스트: 1대전체. 모든 기기가 수신처이다. 멀티캐스트: 1대다수. 지정된 복수의 기기로 데이터 통신을 한다. 이더넷에서는 맥주소를 사용한다. 이 맥 주소는 인터페이스에 지정된 고정 주소이다. 통신 중에는 에러를 고칠 수 없다. 따라서 에러가 있는 프레임은 파기되고, 동일 프레임을 다시 송수신한다. 허브는 기본적으로 플러딩을 통해 모든 기기로 데이터를 전송한다. 각각의 기기는 MAC주소를 통해 자신에게 오지 않은 데이터는 파기한다. 이더넷에서는 수신처와 송신처의 MAC주소, 에러 체크 등을 헤더, 트레일러로 붙인다. 되도록 충돌을 막기 위해 CSMA/CD라..
8장_프록시와 연관관계 정리 프록시 1. 프록시 객체에 member.getName()을 호출해서 실제 데이터를 조회한다. 2. 프록시 객체는 실제 엔티티가 생성되어 있지 않으면 영속성 컨텍스트에 실제 엔티티 생성을 요청하는데 이것을 초기화라 한다. 3. 영속성 컨텍스트는 데이터베이스를 조회해서 실제 엔티티 객체를 생성한다. 4. 프록시 객체는 생성된 실제 엔티티 객체의 참조를 Member target 멤버변수에 보관한다. 5. 프록시 객체는 실제 엔티티 객체의 getName()을 호출해서 결과를 반환한다. 프록시의 특징 프록시 객체는 처음 사용할 때 한 번만 초기화된다. 프록시 객체를 초기화한다고 프록시 객체가 실제 엔티티로 바뀌는 것은 아니다. 프록시 객체가 초기화되면 프록시 객체를 통해서 실제 엔티티에 접근할 수 있다. 프록시 ..
7장_고급 매핑 상속 관계 매핑 1. 각각의 테이블로 변환(조인 전략) 장점 테이블이 정규화된다. 외래키 참조 무결성 제약조건을 활용할 수 있다. 저장공간을 효율적으로 사용한다. 단점 조회할 때 조인이 많이 사용되므로 성능이 저하될 수 있다. 조회 쿼리가 복잡하다. 데이터를 등록할 때 INSERT SQL을 두 번 실행한다. 2. 통합 테이블로 변환(단일 테이블 전략) 장점 조인이 필요없으므로 일반적으로 조회 성능이 빠르다. 조회 쿼리가 단순하다. 단점 자식 엔티티가 매핑한 컬럼은 모두 null을 허용해야 한다. 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다. 그러므로 상황에 따라서는 조회 성능이 오히려 느려질 수 있다. 구분 컬럼을 꼭 사용해야 한다. @DiscriminatorColumn을 꼭 설정해야 한다..
6장_다양한 연관관계 매핑 5장에서 언급한 내용이 대부분이다. 다대다 연결은 사용하지 않는데, 왜냐하면 실무에서는 컬럼이 추가될 수도 있는데 이럴 경우 ManyToMany를 사용할 수 없다. 추가한 컬럼들을 매핑할 수 없기 때문이다. 따라서 중간다리 역할을 하는 엔티티를 만들고 다대다 관계를 일대다, 다대일 관계로 만든다. 복합 기본 키 복합키는 별도의 식별자 클래스로 만들어야 한다. equals와 hashCode 메소드를 구현해야 한다. 기본 생성자가 있어야 한다. 식별자 클래스는 public 이어야 한다. @IdClass를 사용하는 방법 외에 @EmbeddedId를 사용하는 방법도 있다. 위와 같이 복합키를 사용하면 ORM 매핑에서 처리할 일이 상당히 많아진다. 복합키를 사용하지 않고 간단히 다대다 관계를 구성하는 방법을 알아..
5장_연관관계 매핑 기초 엔티티는 단방향 관계이지만, 테이블은 양방향 관계이다.(외래키로 서로 참조할 수 있기 때문) 따라서, 엔티티는 서로 다른 단방향 관계 2개로 양방향 관계를 표현한다. 엔티티는 위와 같이 참조를 사용해서 연관관계를 탐색할 수 있는데 이것을 객체 그래프 탐색이라 한다. (테이블은 조인) @ManyToOne @JoinColumn(name="~~") 외래키를 갖고 있는 주인에 위와 같은 어노테이션을 사용한다. 항상 '다'인 부분이 외래키의 주인이다. name 속성의 기본값은 필드명+_+참조하는 테이블의 기본키 컬럼명 @OneToMany(mappedBy="~~") 주인이 아닌 부분은 위와 같은 어노테이션을 사용한다. name 속성의 값은 반대쪽 매핑의 필드 이름이다. 조회 객체 그래프 탐색(객체 연관관계를 사용한..
13,14회_허브, 2계층의 역할과 개요 허브에 케이블로 연결되어 있는 기기는 동일 케이블에 연결되어 있는 것하고 같은 취급을 받게 된다. 문제는, 허브는 수신한 신호에 대해 어떠한 제어도 하지 않는다는 것이다. 허브는 수신한 포트 이외의 모든 포트에 수신한 신호를 송신하는데, 이를 '플러딩'이라 한다. 이 때 충돌이 발생할 가능성이 있다. 충돌을 줄이려면, 충돌 도메인을 작게 만들어야 한다. 정리하자면, 허브는 신호의 증폭과 재생을 수행하고 다수의 컴퓨터를 연결한다. 허브는 신호의 증폭과 재생 이외의 제어는 하지 않으며 플러딩을 한다. 충돌 도메인은 작아야 한다. 2계층의 역할과 개요 1계층에서 다루는 신호와 케이블 등에 따라 2계층의 규격이 달라진다. 2계층이 생각하는 범위는 하나의 허브로 연결되어 있는 범위, 혹은 컴퓨터-라우터, 라우터-..
11,12회_1계층의 역할과 개요, 신호와 충돌 1계층의 역할과 개요 '파이프'인 케이블과 거기로 보내는 신호 등의 규칙에 따라 실제로 상대에게 '데이터'를 전달하는 역할을 한다. 무선, 유선이 있겠지만 유선을 사용하는 경우가 일반적이다. 전기신호를 사용하는 동선과 광신호를 사용하는 광파이버가 있다. 우리가 사용하는 것은 일반적으로 동선 케이블 중 UTP(Unshielded Twist Pair cable)이다. 신호와 충돌 비트를 신호로 바꾸어 케이블에 보냄으로써 상대에게 전한다. 신호의 형태나 전송 방법에 의해 통신속도가 정해진다. 신호는 감쇠, 노이즈/간섭, 충돌 등의 문제가 발생한다. 이를 해결하는 부분은 2계층!
4장_엔티티 매핑 @Entity JPA가 관리한다. 기본 생성자는 필수다.(JPA가 엔티티 객체를 생성할 때 생성자가 없을 경우, 자동으로 기본 생성자를 만든다.) final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 저장할 필드에 final을 사용하면 안된다. @Table 엔티티와 매핑할 테이블을 지정한다. @Table(name="~~~") @Column 객체 필드를 테이블 컬럼에 매핑한다. 속성으로 name, nullable 등이 있다. @Enumerated enum 타입을 매핑할 때 사용한다. EnumType.ORDINAL, EnumType.STRING 이 있다. @Temporal 날짜 타입을 매핑할 때 사용한다. TemporalType.DATE, TemporalType.TIME,..