[Spring] 스프링 패키지 구조

rara_kim·2022년 8월 17일
0

Spring

목록 보기
5/20

스프링 패키지 구조

스프링 패키지를 나눌 때 전체적인 그림은 일반적으로 위와 같다. 이렇게 계층을 나누어 관리하면 유지보수하기에 용이하며 디버깅 하기도 쉽다.
(Entity와 DTO에 관해서는 따로 여기에 따로 정리해두었다.)

DAO(Data Access Object)란?

  • DAO는 실제 DB에 접근하는 객체를 말한다.
  • Service와 실제 데이터베이스를 연결하는 역할을 한다.
  • 즉, DB에서 데이터를 꺼내오거나 넣는 역할을 DAO가 담당한다.

JPA의 경우 Repository가 DAO의 역할을 한다고 볼 수 있지만, 그렇다고 DAO와 Repository가 같은 것은 아니다. 

DAO와 Repository의 차이점

  • DAO는 data persistence의 추상화다.
  • Repository는 a collection of objects의 추상화다.

  • DAO는 데이터베이스와 관련이 많으며 Table 중심이다.
  • Repository는 도메인과 관련이 많으며 Arggregate Roots만을 다룬다.

  • DAO는 쿼리를 숨기는 데이터 매핑/액세서 계층이다.
  • Repository는 도메인과 데이터 액세스 사이의 계층으로 데이터를 수집하고 도메인 개체를 준비하는 복잡성을 숨긴다.

  • DAO에서 Repository를 사용할 수 없다.
  • Repository에서는 기본 storage에 접근하기 위해 DAO를 사용할 수 있다.

  • 빈약한 도메인이 있다면 Repository와 DAO는 같은 역할을 한다.
    (빈약한 도메인 모델은 도메인 객체들에 비즈니스 로직이 거의 없거나 아예 없는 소프트웨어 도메인 모델이다.)

1:1 테이블로 매핑되는 DAO와 여러 DAO를 통해 데이터를 가져와 도메인 객체를 만들어 제공하는 것이 Repository의 역할이다.


Controller

Http 요청과 응답을 위한 클래스로서 제일 앞단이라고 볼 수 있다.
@Controller어노테이션을 통하여 Bean에 등록되고 스프링에서 관리된다.

Contoller는 Client의 요청을 DTO의 형태로 받아 Service의 기능을 호출하고, 적절한 응답을 DTO의 형태로 반환하는 역할을 한다.

즉, 요청(Request)과 응답(Response)를 관리하는 계층이라고 생각하면 된다.

Service

Service계층은 DTO를 통해 받은 데이터를 이용해 비즈니스 로직(CRUD의 프로세스 관리, 예외처리 등)을 처리하고, DAO(혹은 Repository)를 통해 DB에 접근하여 데이터를 관리하는 역할을 한다.

@Service어노테이션을 붙이면 스프링에서 관리된다.

Repository(DAO)

Repository는 DB에 접근하는 소스코드를 모아둔 Interface다.

JPA를 사용하면 Repository를 통해 DB에 실제로 접근할 수 있다.
JpaRepository interface를 상속받아서 관리하고자 하는 클래스, ID 필드 타입을 JpaRepository<Entity Class, PK type> 와 같이 넣어주면 자동으로 DB와 CRUD 연결을 할 수 있는 메소드를 생성해준다.

public interface MemberRepository extends JpaRepository<Member, String> {

}

Service와 DB를 연결해주는 역할을 하며, Service 계층에서 Repository를 이용하여 데이터를 관리할 수 있다. 


📚참고
[Spring] 스프링 패키지 구조, DAO, DTO, Entity, Repository 에 대하여, DTO를 사용하는 이유

profile
느리더라도 꾸준하게

0개의 댓글