그저 내가 되었고
🌱Spring 프로젝트 설계 순서 본문
개인 공부 정리용
틀린 정보 있을 확률이 적지 않습니다
❨❨설계 순서❩❩
entity -> dto -> repo -> service -> controller
❨❨계층 설계 예시❩❩
1. Repository
- Product: 관심 상품 테이블(얘만 db에 저장됨)
- ProductRepository: 관심 상품 조회, 저장
- ProductRequestDto: 관심 상품 등록하기
- ProductMypriceRequestDto: 관심 가격 변경하기
- ItemDto: 검색 결과 주고받기
2. Service
- ProuctService: 관심 상품 가격 변경
3. Controller
- ProductRestController: 관심 상품 컨트롤러
- SearchRequestController: 검색 관련 컨트롤러
❨❨API 흐름도❩❩
6) controller/ProSurveyController.java
||
4) model/service/EmergencySurveyDomainService.java
(getEmergencySurvey, save)
(Model/service는 자주 사용되는 함수를 별도로 관리하기 위한 model 전용 service)
⥥
5) service/EmergencySurveyService.java
||
2) dto/survey/EmergencyRegisterSurvey.java
(EmergencyInformation & EmergencyContents)
||
2) dto/request/UpdateEmergencySurveyRequest.java
||
3) model/repository/EmergencySurveyRepository.java
(각 테이블에 매핑되는 객체. 해당 레포에서 정의된 쿼리로 spring data jpa 사용)
(var patientInfo = patientRepository.findById(patientId);
⥥
2) dto/response/GetEmergencySurveyResponse.java
2) dto/response/UpdateEmergencySurveyResponse.java
⥥
1) model/dao/EmergencySurvey.java
❨❨스프링 CRUD 흐름 정리❩❩
1. 폼에서 DB 커넥션 / MYSQL / MYBATIS LIB 적용
2. MYSQL DB 생성
3. root-context.xml에서 DB 연결 설정
4. DB기초공사(Mybatis-config.xml 및 mapper.xml 생성)
5. VO 생성(VO (Value Object) : DB의 정보를 객체화 시키는 용도)
6. Mapper.xml 작성
7. DAO Interface/DAOImpl 작성 (DAO (Data Access Object) : 데이터 접근 객체 )
서비스 <-> DAO <-> Mapper
8. service / serviceImpl 작성 (Service : 유지보수와 로직프로세스를 유연하게 처리하기 위한 중간 단계.)
(controller -> service(interface) -> ServiceImpl -> dao)
9. 게시판 목록 페이지 구현 (list.jsp(jstl) -> boardController)
10. 등록 페이지 구현 (regist.jsp -> boardController(get / post 두가지 방식 구현)
(post는 service호출/redirect 호출 : 글쓰기 작업 완료 후 DB 전송 및 list.jsp에 구현)
11. 조회 페이지 구현 (read.jsp -> boardController)
12. 수정/삭제 페이지 구현 (modify.jsp -> boardController (get/post방식) / 삭제 작성(post방식))
❨❨실제 프로젝트 설계 예시❩❩
➱ 회사 코드로 공부하다가 블로그로 옮겨 적으면서 클래스 이름, 객체 이름 등을 마구 수정해서(..) 이대로 하시면 굴러가지 않을 확률이 매우매우매우 큽니다!!!!
1. model - dao
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
@EntityListeners(AuditingEntityListener.class)
@Table(name = "pickmin_friends")
public class pickminFriends {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long surveyUuid;
Long userId;
String contents;
@CreatedDate
LocalDateTime createAt;
@LastModifiedDate
LocalDateTime updateAt;
}
create table pickmin_friends
(
survey_uuid bigint auto_increment
primary key,
user_id bigint null,
contents varchar(500) null,
update_at datetime null,
create_at datetime null
)
2. dto - pickminFriends
@Data
@Builder
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class pickminFriends {
String name;
String level
String location;
String pickmins;
}
3. dto - request - UpdatePickminFriendsRequest(얘가 포스트 바디로 들어온다)
@Data
@Builder
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UpdatePickminFriendsRequest {
Long userId;
PickminFriends pickminFriends; //이게 위의 dto-pickminFriends
}
4. dto - response - GetPickminFriendsResponse
@Data
@Builder
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class GetPickminFriendsResponse {
Integer rc;
Long userId;
Long uuid;
FriendDetailInfo friendDetailInfo;
PickminFriends pickminFriends;
LocalDateTime updateAt;
}
5. dto - response - UpdatePickminFriendsResponse
@Data
@Builder
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UpdatePickminFriendsResponse {
Integer rc;
Long uuid;
6. model - repository - PickminFriendsRepository
@Repository
public interface UpdatePickminFriendsRequest extends JpaRepository<PickminFriends, Long> {
Optional<PickminFriends> findByUserId(Long accountId);
}
7. model - service - PickminFriendsDomainService
@Service
@AllArgsConstructor
public class PickminFriendsDomainService {
private final PickminFriendsRepository pickminFriendsRepository;
public Optional<pickminFriends> getPickminFriends(Long accountId) {
return pickminFriendsRepository.findByUserId(accountId);
}
public pickminFriends save(pickminFriends data) {
return pickminFriendsRepository.save(data);
}
}
8. service - PickminFriendsService
9. controller - FriendsController
'개발 > Spring' 카테고리의 다른 글
🌱Spring:: 'DI'란?(Dependency Injection, 의존성 주입) (0) | 2023.06.02 |
---|---|
🌱Spring/LOMBOK:: @NOARGSCONSTRUCTOR , @ALLARGSCONSTRUCTOR , @REQUIREDARGSCONSTRUCTOR / DI (0) | 2023.05.11 |
🌱Spring 패키지 구조(Entity, DTO, DAO, Controller, Service, Repository) + DTO를 굳이 사용하는 이유 (0) | 2023.04.11 |
🌱실무에서의 Spring 프로젝트 폴더 설계(by. 우아한형제들 기술이사 김영한 개발자님) (0) | 2023.04.11 |
🌱Spring Data JPA 기본 사용법 (0) | 2023.04.11 |