코드스테이츠 수강 11주차 3일차~12주차 1일차에는 Spring Data JDBC에 대해 배웟다.
실습 위주라서 이거를 어캐 써야하나... 싶어서 그냥 안쓸려다가 개념만 쓰기로 했다.
(실습코드를 올리기에는 너무 길고 많다. / 일부분 생략하면, 이 글을 보고 실습이 불가능하다. / 아마 핵심적인 부분만 코드로 보여주는게 나을 것 같다.)
1. JDBC란?
JDBC(Java Database Connectivity)는 JAVA 기반 "애플리케이션 코드레벨"에서 사용하는 데이터를 데이터 베이스에 저장, 업데이트를 수행하거나, "데이터베이스"에 저장된 데이터를 JAVA 코드레벨에서 사용할 수 있도록 해주는 표준사양이다.
요약하면 JAVA코드 < - JDBC - > 데이터베이스 이렇게 둘다 사용 가능하게 중간다리 역할을 해준다고 생각하면 된다.
표준사양이라는 말이 생소할수 있는데, "그냥 기본 탑재된 기능, 우리는 이 기능을 파악해서 사용하기만 하면 된다." 이런식으로 기억하자
JDBC의 동작 흐름
JDBC라는게 그냥 데이터베이스를 자바에서 보게 해주는 역할로 생각하면 이해가 쉽다.
그런데 그냥 API형태로 휙 던져주는게 아니고, JDBC 드라이버를 거쳐서 데이터베이스로 통하게된다.
JDBC 드라이버는 데이터베이스와 통신을 담당하는 인터페이스로, 오라클, MS SQL, MySQL 등에서도 각 개발환경에 맞는 JDBC 드라이버를 구현해서 제공한다.
JDBC API 사용 흐름
JAVA 코드상에서 JDBC API를 사용하는 일반적인 흐름이다.
- JDBC 드라이버 로딩 : 사용하고자 하는 JDBC 드라이버를 로딩한다
- Connection 객체 생성 : JDBC 드라이버가 정상적으로 로딩되면 DriverManager를 통해 데이터베이스와 연결되는 세션(Session)인 Connection 객체를 생성
- Statement 객체 생성 : Statement 객체는 작성된 SQL 쿼리문을 실행하기 위한 객체로써 객체 생성 후에 정적인 SQL 쿼리 문자열을 입력으로 가짐
- Query 실행 : 생성된 Statement 객체를 이용해서 입력한 SQL 쿼리 실행
- ResultSet 객체로부터 데이터 조회 : 실행된 sql 쿼리문에 대한 결과 데이터 셋
- ResultSet, Statement 객체, Connection 객체 Close : JDBC API를 통해 사용된 객체들은 사용 후 사용순서의 역순으로 Close 해준다.
Connection Pool 이란?
JDBC API를 사용할때, 데이터베이스 연결을 위해서 Connection 객체를 생성한다.
그런데, 이게 뭐 할때마다 객체를 생성하고, 지우고 또 생성하고... 이러면 자원 낭비가 심하다.
그렇게 때문에, 애플리케이션 로딩 시점에 Connection 객체를 생성해놓고, 필요할때마다 가져다 쓸 수 있도록 담아 둔 것을 Connection Pool 이라고 한다.
2.DDD(Domain Driven Design)란?
DDD(Domain Driven Design)란 도메인 주도 설계를 뜻한다.
이거로 뭐하냐고? 그냥 일종의 설계 기법이다.
그냥 뭐 더 잘만들어보자 하고, 만드는 "방식" 을 어느정도 틀을 잡아놓은거다.
이거 안지킨다고 애플리케이션 동작 안하고 컴파일 안되고 하지는 않는다.
하지만, 성능, 생산성, 안정성에서 뛰어난 애플리케이션을 만들기 위해서는 구현보다 설계의 영향이 더 크다.
이 설계를 더 완성도 있게, 생산성 있게 하기 위해서는 DDD 설계 기법을 따르는 것이다.
** DDD를 써야 우수하다! 는 아니다. 그런데, 우리가 배우는 Spring Data JDBC는 DDD와 밀접한 관련이 있기 때문에 DDD에 대해 알고 있어야 한다.
도메인(Domain) 이란?
도메인(Domain)은 영역을 뜻하는데, 애플리케이션에서 도메인은 비즈니스적인 어떤 업무 영역 이라고 보면 된다.
회사에서 직무특성에 따라 그에 맞는 사원을 배치 하는것 처럼
직무나 업무에 대한 이해도가 높을 수록 적절한 직원을 배치 하여 효율을 높이는 것 처럼, 애플리케이션에서도 해당 업무(도메인)에 대해 잘 알고 있어야 완성도 높은 애플리케이션을 만들 수 있다.
도메인은 애플리케이션 상의 업무(기능)의 한 영역!
애그리거트(Aggregate) 란?
애그리거트는 비슷한 역할을 하는 도메인의 묶음이라고 보면 된다.
만약 배달 어플을 만든다고 치면, 회원정보, 주문로직, 음식정보, 결제 시스템 등이 탑재되어야 한다.
이것들은 대표적인 큰 덩어리고, 그 안에 회원이면 회원정보 + 회원 포인트 등등 내부에서 필요한 정보나 기능을 또 모아놓고 사용한다.
이때 큰 분류로 기능(도메인)을 분류하여 구분해놓은것을 애그리거트(Aggregate)라고 한다.
위의 사진에서 애그리거크는 총 4개(회원, 주문, 음식, 결제)가 된다.
애그리거트 루트 (Aggregate Root)란?
애그리거트 루트(Aggregate Root)는 애그리거트에서 가장 대표되는 속성을 가진 도메인이라고 생각하면 된다.
회원 애그리거트에서는 회원정보가 메인이니 회원정보가 애그리거트 루트가 된다.
이런식으로 주문은 - 주문정보
결제 - 결제정보
음식 - 음식정보
가 애그리거트 루트가 된다.
위의 그림처럼, 대표도리는 속성이 애그러거트 루트가 된다.
예를 들어 주문에 대한 데이터를 얻고 싶으면 먼저 주문정보를 가져와야 안의 주문자 정보, 음식 정보 등을 조회 할 수 있는 것 처럼 말이다.
이전에 데이터베이스를 배울 때 테이블에 대해 배웠는데, 애그리거트 루트는 테이블 키(key)의 역할을 한다.
한 애그리거트에서 에그리거트 루트는 부모 테이블, 나머지는 자식 테이블이 된다.
고로, 애그리거트 루트는 해당 테이블에서 기본키가 되고, 다른 테이블에서 특정 에그리거트를 불러올 때 애그리거트 루트를 외래키로 사용하여 불러오게 된다.
뒤에 후속해서 이러한 요소를 이용해서 엔티티 클래스를 정의하거나 서비스 레포지토리를 구현하는 실습을 진행 했었는데, 모두 기술하는건 현실적으로 무리가 있다...
핵심 내용만 블로그에 일단 작성하는 거로..
'백엔드 > 코드스테이츠 수강' 카테고리의 다른 글
코드스테이츠 수강_15주차_4일차_인증, 보안 기초 (1) | 2022.11.17 |
---|---|
[회고]코드스테이츠 수강_15주차_3일차 부스트캠프 3달 경과 (1) | 2022.11.16 |
코드스테이츠 수강_11주차_1~2일차_Spring MVC 서비스 계층, 예외처리 (1) | 2022.10.25 |
코드스테이츠 수강_10주차_5일차_Spring MVC(API계층_DTO) (0) | 2022.10.24 |
코드스테이츠 수강_10주차_4일차_Spring MVC, Controller (API계층) (0) | 2022.10.20 |