Hello

Spring 패키지 구조(feat. Controller, DTO, DAO Service, Repository, Entity, Vo)

by 볼빵빵오춘기

왜 패키지를 만들어 사용하는가?

  • 구조적 유지보수성
    패키지를 사용하여 프로젝트를 구조화하면 코드의 가독성과 유지보수성이 크게 향상된다.
    각 패키지에 특정 역할을 부여함으로써 관련된 클래스와 인터페이스를 논리적으로 그룹화할 수 있다.
  • 관심사의 분리
    패키지를 사용하여 역할을 명확히 분리함으로써 코드의 재사용성과 확장성을 높일 수 있다.
    각 계층이 명확한 책임을 가지게 되어 코드 관리가 용이해진다.
  • 의존성 관리
    계층별로 패키지를 분리하면 각 계층 간의 의존성을 명확하게 관리할 수 있다.
    이를 통해 의존성 주입(Dependency Injection) 등을 쉽게 구현할 수 있다.

 

패키지 구조와 각 요소의 역할

스프링 패키지 구조

Controller

  • 클라이언트의 요청을 받아 처리하고, 비즈니스 로직을 호출한 후 결과를 반환.
  • HTTP 요청을 수신하고, 적절한 Service 메서드를 호출하여 응답을 생성.
  • 클라이언트와의 인터페이스를 담당하여 요청 처리 로직을 중앙 집중화.

 

DTO (Data Transfer Object)

  • 데이터를 캡슐화하여 전송하는 객체.
  • 주로 Service와 Controller 간의 데이터 전송에 사용.
  • 데이터를 담아 Service나 Controller로 전달하거나, 그 반대로 전달.
  • 데이터 전송 객체를 사용하여 데이터 구조를 명확히 하고, 데이터 전송 로직을 간결하게 유지.

 

DAO (Data Access Object)

  • 데이터베이스와의 상호작용을 담당하며, CRUD 작업을 처리.
  • 데이터베이스 연결 및 트랜잭션 관리를 포함하여 데이터의 생성, 읽기, 갱신, 삭제 작업을 수행.
  • 데이터 접근 로직을 분리하여 재사용성을 높이고, 데이터베이스 변경 시 영향을 최소화.

 

Service

  • 비즈니스 로직을 수행.
  • Controller와 Repository 사이에서 중재자 역할.
  • 비즈니스 요구사항에 맞는 로직을 구현하고, 필요시 여러 Repository를 호출하여 데이터를 처리.
  • 비즈니스 로직을 중앙화하여 코드의 재사용성을 높이고 유지보수를 용이.

 

Repository

  • 데이터베이스와의 상호작용을 추상화.
  • Spring Data JPA 등을 사용하여 데이터 접근 계층을 구현.
  • CRUD 메서드를 제공하며, 데이터베이스와의 직접적인 상호작용을 처리.
  • 데이터 접근 로직을 쉽게 구현할 수 있도록 지원하며, 데이터베이스의 독립성을 유지.

 

Entity

  • 데이터베이스 테이블과 매핑되는 객체.
  • 데이터베이스 테이블의 각 열(column)을 필드로 가지며, JPA를 통해 영속성 관리.
  • 객체지향적으로 데이터를 관리할 수 있으며, 데이터베이스 스키마와 자바 객체 간의 매핑을 명확히 함.

 

VO (Value Object)

  • 특정 비즈니스 로직에서 사용되는 읽기 전용 데이터 객체.
  • 주로 데이터를 캡슐화하여 이동시키며, 값의 불변성을 유지.
  • 데이터의 일관성을 유지하며, 값의 동등성 비교가 용이.

 

동작 흐름

스프링 패키지 동작 흐름

  • 클라이언트 요청
    클라이언트가 특정 URL로 HTTP 요청을 보냄.
  • Controller
    요청을 수신하고, 적절한 Service 메서드를 호출.
  • Service
    비즈니스 로직을 처리하며, 필요한 경우 여러 Repository를 호출하여 데이터를 가져오거나 조작.
  • Repository
    데이터베이스와 상호작용하여 필요한 데이터를 조회하거나 저장.
  • DAO
    Repository가 데이터베이스와의 상호작용을 추상화. (Spring Data JPA를 사용할 경우 Repository 자체가 DAO의 역할.)
  • Entity
    데이터베이스 테이블과 매핑되어 데이터를 주고받음.
  • DTO
    Controller와 Service 간의 데이터 전송에 사용.
  • VO
    읽기 전용 데이터를 캡슐화하여 비즈니스 로직에서 사용.

 

장점

  • 유지보수 용이
    코드의 모듈화로 인해 유지보수가 쉬워짐.
  • 재사용성 증가
    역할별로 분리된 코드로 인해 재사용이 용이.
  • 확장성
    새로운 기능 추가 시 영향을 최소화.
  • 가독성
    코드의 역할과 책임이 명확히 분리되어 가독성이 높아짐.

 

참고링크

https://code-lab1.tistory.com/201#google_vignette

 

 

 

 

 

 

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기