지속성 또는 DAO 계층을 개발하는 모범 사례

개ant미·2024년 2월 12일
0

Spring

목록 보기
3/7


저번 포스팅에서는 3계층 구조와 MVC 패턴의 관련성을 알아보면서 어떠한 방식으로 사용할 수 있는지 포스팅을 해보았다. 이번 포스팅에서는 지속성/DAO 계층을 개발하는 동안 따라야할 몇가지 모범 사례들을 살펴 볼것이다.

DAO는 데이터 베이스의 데이터에 접근하기 위해 생성하는 객체이다.

  • 데이터 베이스에 접근하기 위한 로직과 business 로직을 분리하기 위해 사용한다.
  • 간단하게 설명하면, DB에 접속하여 CRUD 작업을 시행하는 클래스이다.

DAO (Data Access Objecr) 패턴은 추상 API를 사용하여 애플리케이션/business 계층을 지속성에서 분리할 수 있는 구조적 패턴이다.


지속성 작업 (CRUD)

이러한 작업을 DAO 계층에서 일반적으로 사용할 수 있도록 모든 테이블에 대해 일반적으로 사용되는 데이터 베이스 테이블 작업이다.

이름기능
Inserting dateCrete
Update dataUpdate
Deleting dataDelete
Retrieing dataSearch


지속성 또는 DAO 개발을 위한 다양한 옵션

  1. Java JDBC
  2. Spring JDBC
  3. ORM Frameworks ( Hibernate, MyBatis etc)
  4. Spring Data ( Spring Data JPA, Spring Data MongoDB, Spring Data REST, Spring Data Elasticsearch etc)

JDBC란?

SQL을 직접 사용하여 JDBC를 다루는 편리한 방법 중 하나.
JDBC를 사용하면 Java 애플리케이션에서 데이터베이스에 접근하여 CRUD를 할 수 있다.

장점

  1. JDBC는 Spring으로 사용할 때 자동으로 포함되는 spring-jdbc라이브러리에 속해있기 때문에 별도의 설정 없이 사용 가능
  2. 템플릿 콜백 패턴을 사용해서 JDBC의 직접 사용할 때 발생하는 대부분의 반복 작업을 대신 처리.
  3. 개발자는 SQL을 작성하고 전달할 파라미터를 정의하여 응답 값을 매핑만 하면 된다
  4. 트랜젝션을 위한 커넥션 동기화, 스프링 예외 변환기를 자동으로 실행

    단점

    SQL을 작성하기 어려움
NO.이름기능
1Java JDBCJava 애플리케이션에서 데이터베이스에 접근하여 CRUD가능
2Spring JDBCSpring Framework에서 제공하는 JDBC 모듈, 과정을 단순화, 유지보수 유리
3ORM FrameworksDB간에 통신시 발생하는 패러다임 불일치 문제를 해결하고자 객체와 관계형 DB 데이터를 자동으로 매핑해주는 기술
4Spring Data기본 데이터 저장소의 특별한 특성을 유지, DB접속을 위한 Spring 기반 프로그래밍 모델을 제공
Spring Data JPA, Spring Data MongoDB, Spring Data REST, Spring Data Elasticsearch...

Spring MVC 3계층 구조

위의 이미지에서 애플리케이션의 3계층 구조를 확인할 수 있다.
이름정의기능
Presentation layer애플리케이션의 user interface애플리케이션의 특징과 데이터를 유저에게 제공한다
Busuness layer (Service layer)애플리케이션의 핵심 기능 포함두 계층간에 전달되는 데이터를 의사결정, 계산, 평가, 처리
Data access layerDB와 상호작용애플리케이션 데이터를 DB에 저장, 수정

지속성 또는 DAO 계층을 개발하는 모범 사례

1. 지속성 또는 DB 관련 코드를 별도의 단계로 구분

ex) 1

USER -> UserDao.java
CUSTOMER -> CustomerDao.java
ROLES -> RolesDao.java
ACCOUNT_DETAILS -> AccountDetailsDao.java

2. 지속성 로직에서는 DAO class의 표를 따라야 한다

  • 모든 테이블마다, 전용 DAO(dedicated DAO) class와 DAO class를 생성은 가독성을 높이기 위함이다( 책임을 전가).

ex) 2

  • USER
    • UserDao.java
    • UserDaoImpl.java
  • CUSTOMER
    • CustomerDao.java
    • CustomerDaoImpl.java
  • ROLES
    • RolesDao.java
    • RolesDaoImpl.java
  • ACCOUNT_DETAILS
    • AccountDetailsDao.java
    • AccountDetailsDaoImpl.java
//이렇게 연관관계가 있다.
public class UserDaoImpl implements UserDao{
	...
}

3. 적어도 테이블당 하나 이상의 Primary key

4. Auditing columns

Auditing columns 이란?
누가 어떤 테이블을 언제 사용하고 언제 어떤 작업을 하는지 기록할 수있는 columns

ex) 4

이름기능
CREATED_DATE생성일
CREATED_BY작성자
UPDATED_DATE수정일
UPDATE_BY수정자

마무리

  • 지속성 작업이 어떤 것이고 어떤 기능이 있나요?
  • 지속성 또는 DAO 계층을 개발하는 모범 사례 4가지는?
  • 왜 Auditing columns를 사용하고 어떤 예시가 있나요?

참고자료

https://iri-kang.tistory.com/5
https://innovation123.tistory.com/69
https://blog.naver.com/pupum/90063795885
https://hackmd.io/@wisdom88/Sk1G7QGH2

profile
지식을 채워가는 습관 만들기

0개의 댓글