개요
초반 프로젝트 설계 시 알아야할 Spring 패키지 구조를 설명합니다.
Controller
클라이언트와 서버간의 중간 역할을 합니다.
사용자는 Controller를 통해 요청을 보낼 수 있고 서버는 Controller를 통해 요청을 받을 수 있습니다.
Service를 사용해 요청을 처리하고 다시 클라이언트에 넘겨줍니다.
Service
핵심 비즈니스 로직들이 있는곳입니다.
컨트롤러에서 받은 요청을 처리하고 다시 컨트롤러로 넘겨줍니다.
DAO ( Repository )
DB와 직접 통신합니다
DB에 직접 데이터를 조회하거나 수정, 삭제하는 일을 합니다.
DTO
데이터를 전달하는 용도로 사용합니다.
요청용 DTO, 응답용 DTO 가 있습니다.
DAO와 용도가 비슷해보이지만 보안, 확장에 용이합니다.
데이터를 전달하는 용도로 DAO 를 사용하게 될 경우 원하지 않는 데이터도 받을 수 있게 되어 보안적으로 위험합니다.
public class User {
private Long id;
private String username;
private String password; // ← 노출되면 큰일
private boolean isAdmin;
}
이를 방지하기 위해 DTO를 사용합니다.
// Request
public class SignUpRequestDto {
private String username;
private String password;
}
// Response
public class UserProfileDto {
private String username;
private String nickname;
}
확장성 측면에서는 Service 내 비즈니스 로직을 객체에 담아 반환하는 경우 DAO를 사용하게되면 변경이 어렵습니다.
하지만 DTO를 사용해 그 로직 전용 객체를 만들게되면 자유롭게 로직을 작성할 수 있습니다.
레이어 계층형
com.example.roomy
├── controller
│ └── RoomController.java
├── service
│ └── RoomService.java
├── repository
│ └── RoomRepository.java
│ └── ReservationRepository.java
└── dto
└── RoomRequestDto.java
└── ReservationResponseDto.java
Controller, Service, Repository, DTO 별로 분류하여 설계하는 방식입니다
장점으로는 해당 프로젝트의 이해도가 낮아도 디렉터리별로 구분되어있어 파악하기 쉽습니다 소규모 프로젝트에 적합합니다.
단점으로는 프로젝트 규모가 커질 시 모든 역할이 디렉터리별로 모여있어 역할별로 구분하기 어렵습니다.
도메인형
com.example.roomy
├── reserve
│ └── controller
│ └── service
│ └── domain
│ └── dto
├── member
│ └── controller
│ └── service
│ └── domain
│ └── dto
└── main
└── controller
└── service
└── domain
└── dto
소스를 역할별로 구분지어 설계합니다.
장점으로는 역할별로 구분하여 사용되는 소스를 찾기 쉽고 직관적입니다.
단점으로는 프로젝트의 이해도가 낮을경우 처음엔 파악하기 어렵습니다.
'프로젝트 > 01. 강의실 예약 사이트' 카테고리의 다른 글
강의실 예약 사이트 프로젝트 개요 (0) | 2025.04.24 |
---|