Aggregate & JDBC

2023. 4. 3. 07:58·📘 Backend/Spring
목차
  1. 📘Aggregate
  2. 엔티티 설계
  3. 테이블 설계
  4. Aggregate 객체 매핑
  5. Query Method
  6. 📘JDBC
  7. JDCB API 동작 흐름
  8. Connection Pool (DBCP)
  9. ORM (Object-Relational Mapping) 객체 중심 기술
  10. Spring Data JDBC 적용 순서

📘Aggregate

  • 비슷한 업무 도메인들의 집합
  • Aggregate Root = 각각의 도메인 대표, root의 key를 다른 도메인이 foreign키로 가지고 있음
  • Aggregate Root 선정 기준 = 다른 도메인과 연관성이 있는 도메인 (1:N)
  • 설계중 Aggregate Root역할을 할 엔티티 클래스를 잘 선정해야함

엔티티 설계

  • 1:N의 관계에서 1은 N의 객체를 참조할 수 있도록 List를 멤버변수로 가진다
  • N:N의 관계에서, 1:N - N:1로 변환하도록 N쪽의 객체를 참조하도록 1쪽에서 List를 멤버 변수로 가짐
    ex) private AggregateReference<User, long> userId;
  • 객체 참조 = 테이블에서의 외래키 참조

테이블 설계

  • 각 테이블의 컬럼은 엔티티의 멤버변수와 1:1 매핑됨
  • 테이블의 이름을 SQL의 예약어와 겹치지 않게 설정
  • 1:N의 관계에서 N은 1의 Key를 외래키로 조인한다
  • N:N의 관계에서, 1:N - N:1 관계로 변환하도록 조인테이블을 생성

Aggregate 객체 매핑

  • Spring Data JDBC를 사용하려면 설계한 도메인 엔티티 클래스들의 관계를
    DDD의 Aggregate 매핑 규칙에 맞게 변경해야함
  • * Aggregate 객체 매핑 규칙 *
      1. 모든 엔티티 객체의 status는 Aggregate Root를 통해서만 변경허용
      1. 동일한 Aggregate 내에서의 객체 참조는 엔티티간 객체로 참조
      1. Root - Root 간 참조는 ID로 참조

Query Method

  • find + By + SQL Query
    내부적으로는 테이블의 컬럼명으로 매핑되지만 Spring에선 엔티티의 멤버변수명으로 입력해줘야함
  • 조건 컬럼을 여러개를 지정하고 싶으면 'And' 사용
  • @Query("")를 이용한 동적 쿼리 파라미터를 이용해도 좋지만 일반적으로 쿼리 메소드를 이용하는것을 권장

📘JDBC

JDCB API 동작 흐름

  • JDBC 드라이버 로딩 - DriveManager 클래스 통해서 로딩
  • Connection 객체 생성 - DriverManagerfmf 통해 DB와 연결되는 세션인 객체 생성
  • Statement 객체 생성 - 작성된 쿼리문을 실행하기 위한 객체로, 객체 생성 후 정적 퀴리 문자열을 입력으로 가짐
  • 쿼리 실행 - 생성된 Statement 객체를 이용해서 쿼리 실행
  • ResultSet 객체로부터 데이터 조회 - 실행된 쿼리문에 대한 데이터 Set
  • ResultSet -> Statement -> Connection 순으로 객체 Close

Connection Pool (DBCP)

  • Connection 객체 생성은 리소스를 많이 요구한다.
  • 그래서, 미리 Connection 객체를 생성해두고 DB 연결 요청이 오면 만들어둔 객체 사용
  • 성능 향상
  • 이러한 작업을 해두는 툴을 스프링 부트에선 Default로 HikariCP를 DBCP로 지정

ORM (Object-Relational Mapping) 객체 중심 기술

  • 이전에는 SQL 쿼리 중심의 기술로 SQL 쿼리문이 중심이었지만, 요즘은 객체 중심이라고 하여
    객체를 전달하면 자동으로 SQL문으로 매핑후 DB에서 데이터를 조작할 수 있다.
  • 자바에서 대표적인 ORM 기술은 JPA.

Spring Data JDBC 적용 순서

  • build.gradle 라이브러리 추가
  • application.yml에 DB설정 추가
  • resourse에 sql파일 생성 후 sql script 작성
  • application.yml에 스크립트 파일 매핑
  • DB와 연동할 Entity 생성
  • Repository 생성
  • Service에 Repo를 DI주입
  • Repo에 상속된 crud인터페이스의 메소드를 이용해서 DB작업 수행
저작자표시 (새창열림)

'📘 Backend > Spring' 카테고리의 다른 글

Transaction & AOP 방식 / 분산 트랜잭션  (0) 2023.04.03
JPA & Hibernate 개념  (0) 2023.04.03
Spring Exception Handler & Rest Controller Advice  (0) 2023.04.03
Service Layer  (0) 2023.04.03
정규표현식 (Regex)  (0) 2023.04.02
  1. 📘Aggregate
  2. 엔티티 설계
  3. 테이블 설계
  4. Aggregate 객체 매핑
  5. Query Method
  6. 📘JDBC
  7. JDCB API 동작 흐름
  8. Connection Pool (DBCP)
  9. ORM (Object-Relational Mapping) 객체 중심 기술
  10. Spring Data JDBC 적용 순서
'📘 Backend/Spring' 카테고리의 다른 글
  • Transaction & AOP 방식 / 분산 트랜잭션
  • JPA & Hibernate 개념
  • Spring Exception Handler & Rest Controller Advice
  • Service Layer
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      GStreamer #Pipeline
      React #Markdown
      Lock #Thread #Concurrency
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Aggregate & JDBC
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.