DB (16) 썸네일형 리스트형 Real MySQL 5장 트랜잭션과 잠금 5장 트랜잭션과 잠금 이번 장에서는 잠금과 트랜잭션, 트랜잭션의 격리 수준에 대해 살펴본다. 트랜잭션이란? 작업의 완전성을 보장해주는 것이다. => All or Nothing 잠금이란 동시성을 제어하는 기능이고 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다. 격리수준이라는 것은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어디까지 공유하고 차단할 것인지를 결정하는 레벨을 의미한다. 5.1 [[트랜잭션]] 데이터의 정합성 보장해주는 기능이다. 논리적인 작업의 Set이 100% 적용되거나 아무것도 적용되지 않아야 함을 보장해주는 것 5.1.1 MySQL에서의 트랜잭션 InnoDB 스토리지 엔진에서는 트랜잭션을 지원하지만 MyISAM,MEMORY 스토리지 엔진에서는 트랜잭션을 지원하지 않.. 더보기 Real MySQL 4장 아키텍처 4장 아키텍처 MySQL의 서버는 머리 역할을 하는 MySQL 엔진과 손과 발 역할을 하는 스토리지 엔진으로 구분한다. 이 중 스토리지 엔진은 핸들러 API를 만족시키면 누구든 구현하여 사용 가능하다. 대표적인 스토리지 엔진은 InnoDB 스토리지 엔진, MyISAM 스토리지 엔진이 있다. 4.1 MySQL 엔진 아키텍처 4.1.1 MySQL의 전체 구조 MySQL도 다른 RDBMS와 마찬가지로 대부분의 프로그래밍 언어로부터 접근 방법을 지원한다. 이 책에서는 MySQL엔진과 스토리지엔진 영역으로 구분하여 설명하고 이를 합쳐서 MySQL 서버라고 한다. 4.1.1.1 MySQL 엔진 MySQL엔진은 클라이언트 접속 및 쿼리 요청 등을 처리하는 커넥션 핸들러와 SQL파서 및 전처리기, 쿼리의 최적화된 실행.. 더보기 Real MySQL 1장 ~ 3장 1장 소개 1.1 MySQL 소개 스웨덴 TcX회사의 라이브러리에서 시작 => 썬 마이크로시스템즈 => 오라클로 인수됨 라이센스 정책은 5.5 이전에는 엔터프라이즈와 커뮤니티 에디션으로 나뉘지만 둘의 소스코드는 동일했었다. 그 후부터는 기능과 소스코드가 달라졌다. 핵심기능은 동일 5.5, 5.7, 8.0 버전에 이르기까지 오라클에 인수된이후 10년간 많은 변화가 있었다! 1.2 왜 MySQL인가? 오라클 DB에 비교해서 MySQL의 경쟁력은 가격과 비용이다. 최근에는 대형 은행 시스템에서도 MySQL 서버를 사용하고 있을 정도로 MySQL이 안정성 측면에서도 많이 발전했다. 페이스북에서 가진 데이터를 모두 오라클 DB에 저장하면 페이스북은 망할것이다 ㅎㅎ DBMS를 선택할 때 고려할 사항 안정성 성능과 .. 더보기 JPA - 프록시 프록시 프록시 기초 em.find() vs em.getReference() em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 프록시 특징 실제 클래스를 상속 받아서 만들어짐 실제 클래스와 겉 모양이 같다. 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 됨(이론상) 프록시 객체는 실제 객체의 참조(target)를 보관 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 프록시 객체의 초기화 Member member = em.getReference(Member.class, "id1"); member.getName(); 코드 실행 결과 Team team = new .. 더보기 JPA - @MappedSuperclass @MappedSuperclass - 매핑 정보 상속 공통 매핑 정보가 필요할 때 사용(id, name) 주로 BaseEntity를 abstract class로 만들어 사용 상속관계 매핑X 엔티티X, 테이블과 매핑X 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공 조회, 검색 불가(em.find(BaseEntity) 불가) 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장 테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통 으로 적용하는 정보를 모을 때 사용 참고: @Entity 클래스는 엔티티나 @MappedSuperclass로 지 정한 클래스만 상속 가능 Ref : 김영한님 inflearn 강의 더보기 JPA - 다양한 연관관계 매핑 연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 중요성 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A→B, B→A 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음, 둘중 테이블의 외래 키를 관리할 곳을 지정해야 함 연관관계의 주인: 외래 키를 관리하는 참조 주인의 반대편: 외래 키에 영향을 주지 않음, 단순 조회만 가능 다대일 [ N.. 더보기 JPA - 양방향 연관관계와 연관관계의 주인 객체와 테이블 사이의 연관관계 차이 Team, Member의 예시에서 Member → Team, Team → Member 로의 연관관계도 필요하다면 객체, 테이블 설계에서 어떻게 다를까? 테이블 연관관계 테이블 연관관계는 외래키 하나로 해결이 된다. (Team→Member, Member→Team) 양쪽으로 조인이 가능하다. 그러나 객체의 관점에서 바라보면 다르다. 객체 연관관계 Member에서 team에 대한 참조를 갖는것은 물론, Team에서도 Member list에 대한 참조를 선언해줘야 한다. 연관관계의 주인과 mappedBy 객체와 테이블이 관계를 맺는 차이 객체와 테이블이 관계를 맺는 차이를 정리하면 다음과 같다. 객체 연관관계 = 2개 회원 → 팀 연관관계 1개 (단방향) 팀 → 회원 연관관계.. 더보기 JPA - 테이블 지향 모델링 vs 객체 지향 모델링 with jpa 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. 객체를 테이블에 맞추어 모델링 @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "TEAM_ID") private Long teamId; private String name; } @Entity public class Team { @Id @GeneratedValue @Column(name = "TEAM_ID") private Long id; private String name; } 객체를 테이블에 맞추어 모델링을 하면 외래키 식별자를 직접 다뤄야 한다. 객체자.. 더보기 이전 1 2 다음