Backend 17

[PostgreSQL] Logical Replication로 데이터 Migration하기

개요PostgreSQL의 Logical Replication 기능을 사용하여 다른 PostgreSQL DB로 데이터 Migration 하기  Logical Replication이란?Logical Replication은 PostgreSQL의 데이터베이스 간에 특정 테이블의 변경 사항을 동기화할 수 있는 기능이다. 기존의 Physical Replication과 달리, 테이블 단위(또는 테이블 그룹 단위)로 데이터 변경 사항을 추출하여 이를 다른 PostgreSQL 서버에 전송한다. 이를 통해 전체 데이터베이스가 아닌 일부 테이블만 복제할 수 있다. Logical Replication은 WAL (Write-Ahead Logging)을 decoding하여 테이블의 변경 사항을 추출하는 방식으로 동작한다. Pos..

오라클 19c 설치 (REHL 8) with RPM

요구사항 프로젝트 수행 중 AWS에 있는 RDS를 설치형 RDB로 변경해서 진행해야하는 요구사항이 있었다. 우리가 사용하는 RDS는 MariaDB인데, 고객사가 보안정책 상 Oracle을 사용해야한다 해서 설치하게 되었다. (JPA만세) 우여곡절이 정말 많았던 설치. Oracle은 처음이여서 처음보는 에러와 난관에 2~3일은 걸린 듯하다. 나중에 내가 다시 보기위해 포스트를 한다. 만약 처음부터 설치하고 싶은 사람은 Docs 참고하길 바란다. 백엔드 개발자라면 DB설치도 할 수 있어야한다고 생각한다 1. REHL 8에서 누락된 compat-libca1, compat-libstdc++-33 패키지 설치 yum install -y http://mirror.centos.org/centos/7/os/x86_64..

AWS RDS(MariaDB), MongoDB 운영 데이터를 개발로 이관하기

요구사항 AWS에 구성된 MariaDB(RDS), MongoDB 운영DB 데이터를 개발로 이관(백업)하자 제약사항 MariaDB(운영)는 Private Subnet에 존재해서 로컬에서 직접 접근이 불가하다. MariaDB(개발, 운영)은 RDS로 서비스 중이므로 서버 명령어를 직접적으로 실행시킬 수 없다. 이관 시 새로운 스키마/DB를 개발 DB에 미리 생성하고, 생성한 스키마/DB에 운영 데이터를 이관해야한다. 작업 시작 빠르게 처리해야만 하는 Task여서 여러가지 방법을 비교하거나 고려하지는 못했다. 더 좋은 방법이 있을 것 같지만, Task를 진행하는 순간에는 아래 방법이 가장 빠르다고 판단했다. 나는 운영DB에서 데이터를 로컬로 백업한 다음, 다시 개발 DB에 넣어주는 플로우를 선택했다. (모든 ..

MariaDB 명령어 정리 (테이블/유저/백업/복구)

테이블 관리 [테이블 생성] create database 디비명; [테이블 삭제] SET FOREIGN_KEY_CHECKS = 0; /*foreingkey 제약조건 비활성화*/ set @tables = null; select group_concat(table_schema, '.', table_name) into @tables from information_schema.tables where table_schema = '스키마명'; set @tables = concat('drop table ', @tables); prepare stmt from @tables; execute stmt; deallocate prepare stmt; SET FOREIGN_KEY_CHECKS = 1; /*foreingkey 제약..

[JPA/Java Persistence API] 값 타입

[우아한형제들 김영환님의 인프런 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 수강하고 정리한 내용입니다] 학습목표 기본값 타입 임베디드 타입(복합 값 타입) 값 타입과 불변 객체 값 타입의 비교 값 타입 컬렉션 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자(PK, Id)로 지속해서 추적 가능 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가능 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, L..

Backend/JPA 2021.06.06

[JPA/Java Persistence API] 프록시와 연관관계

[우아한형제들 김영환님의 인프런 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 수강하고 정리한 내용입니다] 학습목표 프록시 즉시 로딩과 지연 로딩 지연 로딩 활용 영속성 전이 : CASCADE 고아 객체 영속성 전이 + 고아 객체, 생명주기 프록시 A엔티티와 B엔티티 간 연관관계가 있다고 가정하자. 만약 A엔티티를 조회할 때, B엔티티의 값을 같이 조회해야 할까? 아래의 Member와 Team이 있다. 이 둘은 다대일 연관관계가 있는 상태다. Member @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String name; @ManyToOne @JoinColum..

Backend/JPA 2021.06.03

[JPA/Java Persistence API] 고급매핑

[우아한형제들 김영환님의 인프런 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 수강하고 정리한 내용입니다] 학습목표 상속관계 매핑 @MappedSuperclass 상속관계 매핑 관계형 데이터베이스는 상속 관계가 없다 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 (ISA) 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 상속관계 매핑 종류 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 -> 조인전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 주요 어노테이션 Inheritance(starategy = InheritanceType.XXX) JOINED : 조인전략 SI..

Backend/JPA 2021.06.03

[JPA/Java Persistence API] 다양한 연관관계 매핑

[우아한형제들 김영환님의 인프런 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 수강하고 정리한 내용입니다] 학습목표 연관관계 매핑 시 고려사항 3가지 다대일[N:1] 일대다[1:N] 일대일[1:1] 다대다[N:M] 연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany (X) 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 방향이란 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 * 양뱡향은 객체 입장에서는 단방향 2개 연관관계의 주인 테이블은 외래 키 하나로 두 테이블의 연관관계를 맺음..

Backend/JPA 2021.05.30

[JPA/Java Persistence API] 엔티티 연관관계

[우아한형제들 김영환님의 인프런 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 수강하고 정리한 내용입니다] 학습목표 객체와 테이블 연관관계의 차이 이해 객체의 참조와 테이블의 외래 키 매핑 방향(Direction) : 단방향, 양방향 다중성(Multiplicity) : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다 연관관계의 주인(Owner) : 객체 양뱡향 연관관계에서, 두 객체의 외래 키를 관리하는 관점 이해 엔티티 연관관계 관계형 DB에서는 관계를 외래 키로 표현. 외래 키만 가지고 있으면 두 테이블 중 어느 쪽의 데이터든 간에 한 번에 조회 가능. 그러나 객체는 레퍼런스를 활용하여 연관되어있는 객체를 참조함. DB와 객체에서 오는 패러다임 차이를 극복하기 위해 사용하는 것이 ..

Backend/JPA 2021.05.23

[JPA/Java Persistence API] 엔티티 매핑

[우아한형제들 김영환님의 인프런 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 수강하고 정리한 내용입니다] 엔티티 매핑 자바에서 사용하는 엔티티와 데이터베이스에서 관리하는 데이터 간의 관계를 매핑하는 것 엔티티와 데이터베이스 간 매핑 객체와 테이블 매핑 필드와 컬럼 매핑 기본 키 매핑 연관관계 매핑 객체와 테이블 매핑 @Entity @Entity 어노테이션이 붙으면 JPA가 관리한다는 뜻 기본 생성자 필수 final 클래스, enum, interface, inner 클래스 사용 X DB에 저장할 필드에는 final 키워드 사용 X @Entity public class Member { @Column @Id private Long id; } @Table @Table은 엔티티와 매핑할 테이블 지정 na..

Backend/JPA 2021.05.16