데이터베이스 8

[용어 정리] DAO, DTO, VO, Mapper, Repository, Entity

개요 회의에 들어가면 저를 포함해서 DAO와 Repository, DTO와 VO를 혼용해서 사용하는 사람들이 많습니다. 이번 기회에 위 용어들의 개념을 정리하면서 차이점을 명확하게 짚고 가고자 합니다. * 출처에 남긴 블로그 및 유튜브를 많이 참고했습니다. 보다 자세한 내용은 출처를 확인해 주시면 감사하겠습니다! Entity DB 테이블을 표현하는 객체 (실제 DB와 매핑되는 객체) DB 테이블 내 모든 칼럼을 필드로 갖는 클래스로 비즈니스 로직을 갖는 메서드를 선언 가능 엔티티의 가장 큰 특징은 식별자를 가진다는 것 식별자 외 필드 데이터가 변경된다고 하더라도 식별자는 동일하기 때문에 해당 객체가 다른 객체가 되는 것은 아님 후술 하겠지만 VO와 Entity의 차이점은 Entity의 경우 식별자가 있지..

DB/개념 정리 2023.11.06

[JPA] JPQL 추가 정리

개요 지난 게시글(https://jaimemin.tistory.com/1997)에 이어 아래의 JPQL 개념에 대해 정리해보겠습니다. 경로 표현식 Fetch Join 엔티티 파라미터 Named 쿼리 벌크 연산 1. 경로 표현식 엔티티의 getter와 동일한 개념 ex) SELECT e.id FROM Employee e e.id와 같이 .을 찍어 객체 그래프를 탐색하는 것을 경로 표현식이라고 함 경로 표현식은 3가지 종류가 존재 상태 필드 단일 값 연관 필드 컬렉션 값 연관 필드 1.1 상태 필드(state field) 단순히 값을 저장하기 위한 필드 (e.name과 같은 필드) 경로 탐색의 끝 즉, 이후에 더 이상 점을 찍을 수 없음 ex) SELECT e.name, e.age FROM Employee ..

DB/JPA 2021.10.18

[JPA] @MappedSuperclass

개요 사내 컨벤션으로 테이블마다 공통적으로 필요한 매핑 정보가 있을 수 있습니다. 예를 들자면, 데이터 생성 정보 혹은 데이터 수정 정보 같은 경우 운영할 때 필수적으로 필요한 정보이기 때문에 거의 모든 테이블에 해당 정보와 관련된 칼럼이 존재합니다. 위와 같은 케이스에서 DB 입장에서는 각각 다른 속성이지만 객체 입장에서는 공통 속성이므로 Entity마다 똑같은 필드를 넣는 것은 상당히 비효율적입니다. 이때 등장하는 개념이 @MappedSuperclass이며 이번 게시글에서는 @MappedSuperclass 어노테이션에 대해 알아보겠습니다. @MappedSuperclass 부모 클래스를 상속받는 자식 클래스에 매핑 정보만 제공하며 속성을 같이 쓰고 싶을 때 적용 @MappedSuperclass는 상속관..

DB/JPA 2021.09.07

[JPA] 상속관계 매핑

개요 객체에는 상속이라는 개념이 있지만 관계형 데이터베이스에는 상속관계가 없습니다. 객체지향 언어인 Java를 사용하는 프레임워크에서 JPA를 적용하기 위해서는 객체 상속과 유사한 구조를 구현해야 하는데 마침 RDBMS는 객체 상속과 유사한 모델링 기법인 슈퍼타입/서브타입 구조를 제공합니다. 따라서, 이번 게시글에서는 객체의 상속, 구조와 DB의 슈퍼타입/서브타입 관계를 매핑하는 상속관계 매핑에 대해 알아보겠습니다. 1. 상속관계 매핑 상속관계 매핑은 슈퍼타입/서브타입 논리 모델을 실제 물리 모델로 구현하는 방법이며 아래와 같이 크게 3가지가 있습니다. 조인 전략 (JOINED) 싱글 테이블 전략 (SINGLE_TABLE) 구현 클래스마다 테이블 전략 (TABLE_PER_CLASS) 상속관계 매핑 관련된..

DB/JPA 2021.09.07

[JPA] 다양한 연관관계 매핑

개요 기존 포스팅(https://jaimemin.tistory.com/1900)에 이어 아래의 연관관계 매핑에 대해 알아보겠습니다. 다대일 [N:1] 일대다 [1:N] 일대일 [1:1] 다대다 [N:M] 1. 다대일 [N:1] 앞선 게시글(https://jaimemin.tistory.com/1900)에서 주로 다룬 내용 가장 많이 사용하는 연관관계 다대일 양방향 정리 복습을 하자면 Foreign Key가 있는 쪽이 연관관계의 주인 다, 즉 Many 쪽을 무조건 연관관계의 주인으로 지정 이론상 연관관계의 주인 쪽에만 연관관계를 맺은 객체를 넣어주면 되지만 순수한 객체 관계를 고려했을 대는 양쪽 객체에 모두 값을 입력해주는 것이 맞음 (테스트 케이스 작성 시 훨씬 수월해짐) 2. 일대다 [1:N] 다대일의 ..

DB/JPA 2021.08.31

제 39회 SQLD 합격 후기

SQLD는 총 2과목이 있는데 아래와 같습니다. 1. 데이터 모델링의 이해 (20점) 2. SQL 기본 및 활용 (80점) 저는 컴퓨터공학과 전공자이기 때문에 전공 관련자를 기준으로 후기를 남기겠습니다. 문제 유형 총 50문제 (각 문제당 2점) 1과목: 객관식 10문제 2과목: 객관식 32문제 + 주관식 8문제 합격기준 우선, SQLD를 합격하기 위해서는 총점 60점 이상을 취득해야 하며, 각 과목 과락을 면하기 위해서는 과목 당 40% 이상을 취득해야 합니다. 1과목이 20점 밖에 되지 않기 때문에 2과목을 집중적으로 공부하시는 분들이 많이 계신데 오히려 1과목에서 과락을 면하지 못해 총점은 60점을 넘었지만 탈락하시는 분들도 적지 않다고 들었습니다. 개인적으로 SQL 기본 및 활용 파트는 데이터베이..

[DEV] 기록 2020.12.31

데이터베이스) DBMS 키 정리

회사 동기가 캠퍼스 리크루팅 때 모의 면접을 진행하면서 질문받은 내용을 정리해보겠습니다. 질문 내용: Candidate Key, Super Key, Primary Key에 대해 설명해보세요. 저는 질문 내용과 함께 키의 정의, 키의 필요성 그리고 보다 다양한 키에 대해서도 정리해보겠습니다. 각 키에 대한 예시는 키에 대한 개념을 설명한 뒤 예시 테이블을 통해 설명드리겠습니다. Key DBMS 키는 테이블 내 튜플(행)을 식별하기 위한 단일 속성 혹은 속성들의 집합을 말합니다. Key가 필요한 이유 1. 앞서 언급했듯이 키는 테이블 내 튜플을 식별해주는 역할을 합니다. 실제 서비스를 개발할 때, 테이블 내 수많은 데이터가 있을 수 있고 심지어 동일한 데이터들이 여러 개 들어있을 수도 있습니다. 키는 테이블..

면접 준비 2020.06.10

데이터베이스 쿼리 실행 순서

회사를 직접적으로 언급할 수는 없지만 데이터베이스 쿼리 실행 순서를 질문받은 적 있습니다. 코딩 테스트 난이도 정도의 쿼리 작성에는 어느 정도 자신이 있었지만 실행 순서는 한 번도 생각해본 적이 없어 당황하다가 면접관님의 도움으로 겨우 풀었던 기억이 나네요. 그래서 오늘은 쿼리 실행 순서를 정리해보고자 합니다. 1. FROM 과 JOIN 데이터 셋의 총양을 결정하기 위해 FROM 절과 JOIN 문이 먼저 실행됩니다. 여기에는 서브쿼리도 포함되며, 서브 쿼리가 실행될 때 모든 행(row)과 열(column)을 포함하는 임시 테이블이 생성될 수 있습니다. * 서브쿼리(Subquery): 쿼리 내에 있는 쿼리 (WHERE, FROM, SELECT 절 안에 들어가는 쿼리를 통칭하여 서브 쿼리라고 합니다.) 2...

면접 준비 2020.06.07