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
'👩🏻💻 About 프로그래밍 > spring' 카테고리의 다른 글
MVC (0) | 2024.07.08 |
---|---|
DTO vs VO, DTO와 VO의 차이점, 언제 VO를 사용하고 언제 DTO를 사용하는가? (0) | 2024.07.08 |
스프링부트 구조 및 각 단계별 역할 (0) | 2024.07.08 |
스프링 부트 버전별 지원 기간 (0) | 2024.07.03 |
스프링 프레임워크 vs 스프링 부트 (1) | 2024.06.14 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기