일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- valid
- 스프링컨테이너
- 클린코드
- 인공신경망
- REST API
- 스프링어노테이션
- NullCheck
- 북스터디
- 임팩트커리어스터디
- spring
- 스프링스터디
- 노마드코더
- 스프링프레임워크
- requestbody
- Dao
- 인텔리제이
- 객체지향특징
- 노개북
- 딥러닝
- mysql
- 개발서적
- JPA
- 개발필독서
- Machine Learing
- 머신러닝
- Deep Learning
- IntelliJ
- springboot
- 북클럽
- til
- Today
- Total
dev.jaieve 공부기록
[SpringBoot/Java] JSP를 하다가 JPA를 처음 접하면서 생긴 의문 - JPA의 DTO와 JSP의 DAO의 차이점 본문
[SpringBoot/Java] JSP를 하다가 JPA를 처음 접하면서 생긴 의문 - JPA의 DTO와 JSP의 DAO의 차이점
제이브 2021. 7. 24. 21:20JPA의 DTO와 JSP의 DAO의 차이점
DTO는 Controller와 Service 계층을 이어주는 객체이고,
DAO는 서비스와 DB를 이어주는 객체이다.
때문에 DTO를 사용하는 경우 DB와 연결되는 계층이 필요한데 domain이 그 역할을 맡는다.
이렇게 이해하면 초보자이거나 입문자 입장에서는 Entity == DAO 라고 쉽게 이해할수 있지만
DAO와 domain의 Entity는 의미론적으로 다르기 때문에 같다고 생각해서는 안된다.
DAO는 연결할 DB의 설정정보와 같은 정보들을 갖고 있는 계층이다. 하지만 JPA의 경우 이런 db properties를 application.properties 또는 application.yml이란 파일에 설정해두고 JPA가 알아서 Connection 객체를 생성해서 DB와 연결을 맺는다.
이는 그만큼 추상화가 잘 된 것이고, 개발자가 Spring Framework 의 뒤에서 어떤 일이 일어나는 것인지 잘 모르게 되는 것이라 볼 수 있다.
JSP의 DAO와 비슷한 계층은 JPA의 Repository이다. Repository는 DB 연결 정보 및 쿼리 발행에 관한 객체이기 때문이다. JSP의 DAO와 다른 점은 Class가 아니라 Interface라는 점이다.
Repository가 interface임에도 불구하고 이런 기능이 구현이 되는 이유는 바로, Spring이 내부적으로 프록시 패턴을 사용해서 interface를 구현하는 구현체를 만들어서 주입하고 있기 때문이다.
public interface PostRepository extends JpaRepository<Post, Long> {}
사용자가 repository interface를 생성하고 @Autowired 어노테이션으로 bean을 주입하면
@Service
public class PostService {
@Autowired
private PostRepository postRepository;
...
}
Spring JPA가 어노테이션(@Autowired)가 달린 곳에 repository interface의 구현체를 주입해준다.
요약
DTO : 백에서 클라이언트로 받은 요청에 대한 정보를 바인딩하는 용도로 사용
DAO : 좀 더 큰 범위의 DB 연결을 위한 객체. 디비의 주소, 커넥션 정보 등을 갖는다.
Entity(domain) : 1:1로 DB와 매핑되는 테이블과 같은 객체. 객체 세상에서 DB 테이블을 표현하는 객체. 클라이언트로 받은 요청에 대한 정보를 DB로 저장하기 위한 용도로 사용
'Back > Springboot' 카테고리의 다른 글
[Spring] 스프링 컨테이너란? (0) | 2022.02.19 |
---|---|
[SpringBoot] API 개발시 @RequestBody 객체 와 @Valid 어노테이션 (0) | 2021.07.24 |
[Spring] 빌드 관리 도구, Maven과 Gradle이란 무엇인가? (0) | 2021.07.18 |
[IntelliJ/Spring] 인텔리제이에서 Gradle 프로젝트 시작하기 2 - New Project (0) | 2021.07.18 |
[IntelliJ/Spring] 인텔리제이에서 Gradle 프로젝트 시작하기1 - 환경설정 (0) | 2021.07.18 |