코딩과 결혼합니다

[영화 예매 웹사이트] Spring boot 패키지 구조 본문

코딩과 매일매일♥/영화예매

[영화 예매 웹사이트] Spring boot 패키지 구조

코딩러버 2024. 6. 12. 22:12
728x90

개요

영화 예매 웹사이트 프로젝트를 진행하며, 시작하기 전에 패키지 구조를 어떻게 구성하면 좋을지 알아보고 선택하고자 함.

패키지 구조에는 정답은 없으며 용어에 대한 이해와 유지보수에 초점을 두고 설계하는 것을 목표로 한다.


용어

DAO

= Date Access Object

DB와 프로그램 사이를 연결해 주는 다리 역할. 프로그램이 데이터 베이스에 데이터를 저장하거나 읽어올 때, 직접 하는 대신에 DAO를 통해서 한다. DB에 접근하지 위한 로직 & 비즈니스 로직을 분리하기 위해 사용

class BookDAO {
    void saveBook(Book book) {
        // 책을 데이터베이스에 저장하는 코드
    }
    
    Book getBookById(int id) {
        // 데이터베이스에서 책을 가져오는 코드
        return new Book();
    }
}

 

DTO

= Date Access Object

데이터를 여러 부분으로 나누어 전달하는 대신, DTO 하나로 묶어서 한 번에 전달한다.

로직을 가지지 않는 순수한 데이터 객체(getter & setter만 가진 클래스)이다.

class BookDTO {
    String title;
    String author;
    int price;
    
    // 여기서 getter와 setter를 사용해 데이터를 옮김
}

 

VO

=Value Object

값을 저장하고 그 값을 변경하는 객체. 주로 여러 속성을 하나로 묶어서 사용하는데, 그 값이 한 번 설정되면 변하지 않음.

read-Only 특징을 가지고 있다. (DTO와 유사하지만 VO는 getter만 가진 클래스)

class AddressVO {
    final String street;
    final String city;
    
    AddressVO(String street, String city) {
        this.street = street;
        this.city = city;
    }
    
    // 값은 생성자에서 설정되고 변경되지 않아
    // 예시 : 주소 - 보통 변하지 않고 그대로 사용된다.
}

계층형 구조

각 계층을 패키지로 나누어 관리한다. 각 계층의 역할이 명확해지고, 코드의 가독성과 유지보수성이 좋아진다.

src/
│
├── presentation/
│   └── UserController.java
│
├── business/
│   └── UserService.java
│
└── data/
    └── UserDAO.java

도메인형 구조

각 도메인 모델을 중심으로 패키지를 나누어 관리한다. 도메인 관련 코드가 한 곳에 모여 있어 관리가 쉽다.

src/
│
├── user/
│   ├── User.java
│   ├── UserService.java
│   └── UserDAO.java
│
└── order/
    ├── Order.java
    ├── OrderService.java
    └── OrderDAO.java

계층형 구조로 패키지 구조 결정

프로젝트의 규모가 크지 않기 때문에 전체적인 구조를 빠르게 파악할 수 있는 계층형 구조를 선택한다.

(도메인형 구조로 간다면 오히려 너무 많은 파일들로 쪼개질 것 같다.)