저번 포스팅에서는 3계층 구조와 MVC 패턴의 관련성을 알아보면서 어떠한 방식으로 사용할 수 있는지 포스팅을 해보았다. 이번 포스팅에서는 지속성/DAO 계층을 개발하는 동안 따라야할 몇가지 모범 사례들을 살펴 볼것이다.
DAO는 데이터 베이스의 데이터에 접근하기 위해 생성하는 객체이다.
- 데이터 베이스에 접근하기 위한 로직과 business 로직을 분리하기 위해 사용한다.
- 간단하게 설명하면, DB에 접속하여 CRUD 작업을 시행하는 클래스이다.
DAO (Data Access Objecr) 패턴은 추상 API를 사용하여 애플리케이션/business 계층을 지속성에서 분리할 수 있는 구조적 패턴이다.
이러한 작업을 DAO 계층에서 일반적으로 사용할 수 있도록 모든 테이블에 대해 일반적으로 사용되는 데이터 베이스 테이블 작업이다.
이름 | 기능 |
---|---|
Inserting date | Crete |
Update data | Update |
Deleting data | Delete |
Retrieing data | Search |
JDBC란?
SQL을 직접 사용하여 JDBC를 다루는 편리한 방법 중 하나.
JDBC를 사용하면 Java 애플리케이션에서 데이터베이스에 접근하여 CRUD를 할 수 있다.장점
- JDBC는 Spring으로 사용할 때 자동으로 포함되는 spring-jdbc라이브러리에 속해있기 때문에 별도의 설정 없이 사용 가능
- 템플릿 콜백 패턴을 사용해서 JDBC의 직접 사용할 때 발생하는 대부분의 반복 작업을 대신 처리.
- 개발자는 SQL을 작성하고 전달할 파라미터를 정의하여 응답 값을 매핑만 하면 된다
- 트랜젝션을 위한 커넥션 동기화, 스프링 예외 변환기를 자동으로 실행
단점
SQL을 작성하기 어려움
NO. | 이름 | 기능 |
---|---|---|
1 | Java JDBC | Java 애플리케이션에서 데이터베이스에 접근하여 CRUD가능 |
2 | Spring JDBC | Spring Framework에서 제공하는 JDBC 모듈, 과정을 단순화, 유지보수 유리 |
3 | ORM Frameworks | DB간에 통신시 발생하는 패러다임 불일치 문제를 해결하고자 객체와 관계형 DB 데이터를 자동으로 매핑해주는 기술 |
4 | Spring Data | 기본 데이터 저장소의 특별한 특성을 유지, DB접속을 위한 Spring 기반 프로그래밍 모델을 제공 |
Spring Data JPA, Spring Data MongoDB, Spring Data REST, Spring Data Elasticsearch... |
이름 | 정의 | 기능 |
---|---|---|
Presentation layer | 애플리케이션의 user interface | 애플리케이션의 특징과 데이터를 유저에게 제공한다 |
Busuness layer (Service layer) | 애플리케이션의 핵심 기능 포함 | 두 계층간에 전달되는 데이터를 의사결정, 계산, 평가, 처리 |
Data access layer | DB와 상호작용 | 애플리케이션 데이터를 DB에 저장, 수정 |
ex) 1
USER -> UserDao.java
CUSTOMER -> CustomerDao.java
ROLES -> RolesDao.java
ACCOUNT_DETAILS -> AccountDetailsDao.java
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{
...
}
Auditing columns 이란?
누가 어떤 테이블을 언제 사용하고 언제 어떤 작업을 하는지 기록할 수있는 columns
ex) 4
이름 기능 CREATED_DATE 생성일 CREATED_BY 작성자 UPDATED_DATE 수정일 UPDATE_BY 수정자
https://iri-kang.tistory.com/5
https://innovation123.tistory.com/69
https://blog.naver.com/pupum/90063795885
https://hackmd.io/@wisdom88/Sk1G7QGH2