목록전체 글 (302)
elevne's Study Note

Proxy 엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. (예를 들어, 회원 엔티티를 조회할 때 연관된 팀 엔티티는 비즈니스 로직에 따라 사용될 수도, 그러지 않을 수도 있다) @Entity @Data public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; } @Entity @Data public class Team { @Id @GeneratedValue @Column(name = "TEAM_ID") private Long id; pri..

Apache Kafka 는 빠르고 확장 가능한 데이터 피드의 분산 스트리밍, 파이프라이닝 및 재생을 위한 실시간 스트리밍 데이터 처리 목적으로 설계된 오픈 소스 분산형 pub/sub 메시징 플랫폼이다. Kafka 는 서버 클러스터 내에서 데이터 스트림을 레코드로 유지하는 방식으로 작동하는 브로커 기반 솔루션이다. Kafka 서버는 여러 데이터 센터에 분산되어 있을 수 있으며 여러 서비스 인스턴스에 걸쳐 레코드 스트림(메시지)을 토픽으로 저장하여 데이터 지속성을 제공할 수 있다. Kafka 는 Producer/Consumer 개념을 사용한다. Publisher/Subscriber 에 각각 매칭된다고 생각하면 된다. Producer 이 Topic 에 이벤트를 보내면 해당 이벤트는 Topic 의 각 Parti..

상속관계 매핑 관계형 데이터베이스에는 객체지향 언어와는 다르게 상속이라는 개념이 없다. 대신 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. ORM 에서 이야기하는 상속관계 매핑은 객체의 상속 구조와 데이터베이스 슈퍼타입 서브타입 관계를 매핑하는 것이다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때에는 3 가지 방법 중 하나를 택할 수 있다. 1. 조인 전략 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용하는 전략이다. 조인 전략을 사용할 때 주의할 점이 있다. 객체는 타입으로 구분할 수 있지만 테이블은 타입의 개념이 없다. 따라서 타입을 구분하는 컬럼을 추가해주어야 한다. @Entity @..

한 프로젝트를 진행할 때 프로젝트에 참여하는 한 개발자는 새로운 기능을 개발, 다른 개발자는 버그를 수정할 수 있다. 동일한 프로젝트를 기반으로 서로 다른 버전의 코드를 만들어낼 수 있다는 뜻이다. 이러한 작업을 위해 Branch 라는 기능이 사용된다. Branch 란 프로젝트 기준 코드인 master 브랜치로부터 독립적인 작업 공간을 만들어주는 기능이다. 여러 개발자가 서로 다른 버전의 코드를 만들 때 서로의 작업에 영향을 주고받지 않기 위해 필요하다. 지금까지 사용한 master 브랜치는 깃에서 기본적으로 제공하는 브랜치이기에 별도로 생성하는 과정 없이도 사용할 수 있었다. master 브랜치는 가장 최근 생성된 커밋을 바라본다. 또, 이전 시간에 알아본 것처럼 HEAD 포인터는 현재 작업하는 곳(브..

Git 으로 관리하는 파일 상태를 이해하기 위해서는 Working Tree (작업트리) 의 개념을 알아야 한다. Working Tree 란 Git 이 관리하는 파일과 관리하지 않는 파일을 구분하고, 관리하는 파일들의 상태를 구분 짓는 영역이다. (Working Tree 에 대한 내용 또한 .git 폴더 내에 저장된다) Working Tree 는 크게 3 가지 영역으로 나뉜다. 첫 번째로는 Working Directory 로, 실제 작업 중인 파일들이 존재하는 영역이다. 두 번째로 Staging Area 가 있는데, 이는 Working Directory 에서 작업 중인 파일 중 Git 이 추적하는 파일들을 식별하는 영역이다. (실제로는 .git 폴더 내의 index 파일에서 관리하는 파일들을 식별한다) 마..

관계형 데이터베이스에서는 정규화된 테이블 2 개로 다대다 관계를 표현할 수 없다. 그래서 보통 다대다 관계를 일대다, 다대일 관계로 풀어내는 연결테이블을 사용한다. 쇼핑 플랫폼을 예시로 생각해볼 수 있다. 회원들은 상품을 주문하고, 상품들은 회원들에 의해 주문된다. 둘은 다대다 관계다. 회원 테이블과 상품 테이블 둘만으로는 이 관계를 표현할 수 없다. 중간에 연결 테이블을 추가해주어야 한다. 그런데 객체는 테이블과 다르게 객체 2 개로 다대다 관계를 만들 수 있다. 예를 들어 회원 객체는 컬렉션을 사용해서 상품들을 참조하면 되고, 반대로 상품들도 컬렉션을 사용해서 회원들을 참조하면 된다. @ManyToMany 를 사용하여 다대다 관계를 편리하게 매핑할 수 있다. @Entity @Getter @Setter..

엔티티는 대부분 다른 엔티티와 연관관계가 있다. 객체는 참조(주소)를 사용해서 관계를 맺고 테이블은 외래 키를 사용해서 관계를 맺게된다. 이 둘은 완전히 다른 특징을 가진다. ORM 에서 가장 어려운 부분이 바로 객체 연관관계와 테이블 연관관계를 매핑하는 일이라고 한다. 단방향 연관관계 연관관계 중 N:1 관계, 다대일 관계를 가장 먼저 이해해야 한다. 회원과 팀의 관계로 이를 알아볼 수 있다. 회원 객체는 Member.team 필드(멤버변수)로 팀 객체와 연관관계를 맺는다. 이는 단방향 관계다. Member.team 필드를 통해 팀을 알 수는 있지만 반대로 팀은 회원을 알 수 없다. 이와는 다르게 회원 테이블과 팀 테이블은 양방향 관계다. 회원 테이블의 TEAM_ID 외래 키를 통해서 회원과 팀을 조인..

JPA 를 사용하며 가장 중요한 일은 엔티티와 테이블을 정확하게 매핑하는 것이라고 한다. @Entity: 테이블과 매핑할 클래스에 붙여준다. 해당 클래스에는 기본 생성자가 필수이며 (파라미터가 없는 public/protected 생성자) final class, enum, interface, inner class 에는 사용할 수 없다. 저장할 필드에는 final 을 사용해서도 안된다. @Table: 엔티티와 매핑할 테이블을 지정한다. 속성 기능 name 매핑할 테이블 이름 catalog catalog 기능이 있는 데이터베이스에서 catalog 매핑 schema schema 기능이 있는 데이터베이스에서 schema 매핑 uniqueConstraints (DDL) DDL 생성 시에 유니크 제약조건을 만든다. ..