본문 바로가기

분류 전체보기

(214)
자바 ORM 표준 JPA 프로그래밍 - 기본(김영한) _ 프록시와 연관관계 관리 'Member → Team' 다대일 매핑일 때 Member를 조회하면 Team도 조회해야 할까? 프록시 em.find() : DB를 통해서 실제 엔티티 객체 조회 em.getReference() : DB 조회를 미루는 가짜(프록시) 엔티티 객체 조회 [프록시 특징] 실제 클래스를 상속받아 만들어짐 (타입 체크 시 주의, '==' 비교는 실패함, 'instance of' 사용할 것) 실제 클래스와 겉 모양이 같음 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 됨 (이론상) 프록시 객체는 실제 객체의 참조(target)를 보관 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 영속성 컨텍스트에 찾는 엔티티가 이미 있으면 em.getReference()를 호출해도 실제 ..
자바 ORM 표준 JPA 프로그래밍 - 기본(김영한) _ 고급 매핑 상속관계 매핑 RDB는 상속 관계를 구현할 수 없음 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체의 상속과 유사 슈퍼타입, 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 → 조인 전략 통합 테이블로 변환 → 단일 테이블 전략 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 [주요 어노테이션] @Inheritance(strategy=InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name="DTYPE") @DiscriminatorValue("XXX") [조인 전략] 장점 테이블 정규화 외래키 참조 무결성 제약조건 ..
자바 ORM 표준 JPA 프로그래밍 - 기본(김영한) _ 연관관계 매핑 예제 시나리오 회원과 팀이 있다 회원은 하나의 팀에만 소속될 수 있다 회원과 팀은 다대일 관계다 테이블에 맞춘 객체 모델링의 문제점 Member 엔티티에서 Team 엔티티를 참조하지 않고 Team에 대한 외래키(teamId)를 그대로 사용 객체 그래프를 탐색할 수 없고, Member 조회를 통해 얻은 Team 객체 식별자로 다시 DB를 조회해야 함 객체를 테이블에 맞추어 모델링하면 객체 간의 협력 관계를 만들 수 없다 단방향 연관관계 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; private int age; @ManyToOne @JoinColum..
자바 ORM 표준 JPA 프로그래밍 - 기본(김영한) _ 엔티티 매핑 엔티티 매핑 @Entity, @Table : 객체와 테이블 매핑 @Column : 필드와 컬럼 매핑 @Id : 기본 키 매핑 @ManyToOne, @JoinColumn : 연관관계 매핑 @Entity @Entity가 붙은 클래스(Entity)는 JPA가 관리함 기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스는 안 됨 저장할 필드에 final 사용하면 안 됨 속성 기능 기본값 name JPA에서 사용할 Entity 이름을 지정한다. 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. 클래스 이름을 그대로 사용 @Table 속성 기능 기본값 name 매핑할 테이블 이름 Entity 이름을 사용 catalog..
자바 ORM 표준 JPA 프로그래밍 - 기본(김영한) _ 개념 정리 객체와 관계형 데이터베이스의 차이 상속 연관관계 데이터 타입 데이터 식별 방법 주의사항 EntityManagerFactory는 하나만 생성해서 애플리케이션 전체에서 공유 EntityManager는 스레드 간에 공유하면 안 된다(사용하고 버려야 함) JPA의 모든 데이터 변경은 트랜잭션 안에서 실행 영속성 컨텍스트 영속성 컨텍스트는 논리적인 개념 EntityManager를 통해서 영속성 컨텍스트에 접근한다 [영속성 컨텍스트의 이점] 1차 캐시 : 반복 가능한 읽기(repeatable read) 등급의 트랜잭션 격리 수준을 DB가 아닌 애플리케이션에서 제공 동일성(identity) 보장 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind) : 트랜잭션 커밋 순간 DB에 SQL을 ..
Apache Kafka 2.8 - Introduction 원문: https://kafka.apache.org/documentation/#introduction Apache Kafka Apache Kafka: A Distributed Streaming Platform. kafka.apache.org Event streaming이란 무엇인가? Event streaming(이하 이벤트 흐름)은 인간의 몸에 있는 중추 신경계에 대응되는 디지털 세계에서의 개념이다. 이 개념은 'always-on' 세계의 기술적 기초가 된다. always-on 세계의 비즈니스는 점점 더 소프트웨어에 의해 정의되고 자동화된다. 또한 그런 비즈니스에서의 소프트웨어 사용자들은 더 소프트웨어화된다. 기술적으로 말하자면, 이벤트 흐름은 다음과 같은 일을 해낸다. 이벤트가 흐르는 형태를 가진 DB..
코딩테스트 준비(알고리즘 공부) 커리큘럼 자료구조 = 식재료 , 알고리즘 = 요리 식재료가 있어야 요리를 한다. 자료구조부터 공부하고 알고리즘 공부하자! 1. 자료구조 공부 순서 A. Array B. List a. ArrayList b. vector c. LinkedList (simple / doubly / double-ended / circular) d. Stack (array / list) e. Queue (array / list / priority / deque / circular) C. HashMap D. Tree (simple / binary-search / segment) E. Heap (max / min) F. Graph (array / list) G. HashSet ※ 볼드체로 표시한 것은 코테에서 특히 중요한 자료구조들이다. 2..
최신 브라우저의 내부 살펴보기 4 - 컴포지터가 사용자 입력을 받았을 때 원문 작성일: 2019.04.30 원문: https://d2.naver.com/helloworld/6204533 컴포지터가 사용자 입력을 받았을 때 이 글에서는 사용자 입력(input)을 받았을 때 컴포지터가 어떻게 부드러운 상호작용이 이루어지게 하는지 알아보겠다. 브라우저 관점에서 입력 이벤트 '입력 이벤트(input event)'라는 말을 들었을 때 입력란에서 일어나는 값 입력이나 마우스 클릭만 생각할 수 있다. 하지만 브라우저의 관점에서 입력이란 모든 사용자의 제스처를 의미한다. 마우스 휠을 스크롤하는 것, 화면을 터치하거나 마우스 포인터를 화면 위에 올리는 것도 입력 이벤트이다. 사용자 제스처가 발생했을 때 가장 먼저 제스처를 수신하는 것은 브라우저 프로세스이다. 브라우저 프로세스는 제스처가 어디..