RE:ISC프로젝트 2-(프로젝트 설정)폴더 구조 정리
MVC패턴 사용
우선 MVC패턴을 사용하면서, 도메인형 구조를 사용하기로 한 이유는 다음과 같다.
- 도메인 관련 코드를 한 곳에 응집하여, 가시성이 좋음
- 프로젝트에 직접 참여자가 두명, 그것도 한명은 프로젝트 전체를 이끌면서 코드의 수정 및 검사만 담당할 것이므로 프로젝트의 이해도가 낮아 구조 파악이 어려울 염려 없음
- 그 둘중에 부족한 사람인
내
가 개인프로젝트 위주의 작업을 하다보니, MVC패턴+도메인형 구조에 익숙함
src/java/config
향후 내용이 추가될 가능성이 있으나, 현재 프로젝트에서는 Firebase관련 설정 파일이 들어감
- 주요 내용: credentialsFile(파이어베이스 인증파일)/databaseUrl변수
src/java/project
프로젝트에 대한 설정을 담당할 곳이다.
이전에 작성한 코드에서는 project와 전역 장비 방 장비를 모두 한 곳에 등록했으나, 가독성에 문제가 있어서 전역 등록(장비 포트)만 project안에 넣을지 따로 넣을지는 팀을 리드하는 개발자분과 상의해봐야할 것 같다.src/java/project/service
기존에 한번 코드를 작성한 결과 프로젝트 관리에 대한 폴더는 생각보다 service에 dao를 합체해도 한정된 규모여서인지 가독성에 문제가 없었다.
그래서 이곳에 들어갈 함수 내용은 다음과 같다. - 1.deleteProject(유저 이름,프로젝트 명)
유저의 이름과 프로젝트명을 인자로 받는 함수로, 파이어베이스 상에서의 데이터 삭제를 담당한다. - 2.addProject(유저 이름, 프로젝트명, 가게이름, 프로젝트버전)
프로젝트 생성시 파이어베이스 상에서 데이터를 생성한다.
이때 자료가 등록된 시간도 함께 저장하는데, 이 부분은 인자로 받지 않고, 그때그때 데이터 등록시점의 LocalDateTime+원하는 형태로 포멧팅을 하기로 했다. - 3.modifyProject(유저이름,프로젝트명,가게이름,프로젝트 버전)
프로젝트의 수정을 담당하는 함수로, 데이터가 등록될 때에 LocalDateTime과 포멧팅을 통해 수정된 일시도 함께 표시 가능하도록 하였다. - 4.getAllProject(유저명)
로그인 이후 모든 프로젝트명을 한꺼번에 카드뷰나 대쉬보드 형태로 띄워주기 위해 사용하는 함수로, 단순히 불러오는 역할만을 해야한다.src/java/project/view
- 프로젝트 홈
- 각각의 프로젝트를 만들기 이전, 프로젝트 추가 카드뷰(혹은 버튼)의 경우 동적인 UI이므로 view에 작업
- 프로젝트 세팅
- 각각 프로젝트 생성 이후 프로젝트 수정/삭제/전역 장비 등록/포트 등록/ 방 설정과 같은 모든 프로젝트에게 동일한 카드뷰 생성 UI
- 각각 프로젝트 생성 이후 프로젝트 수정/삭제/전역 장비 등록/포트 등록/ 방 설정과 같은 모든 프로젝트에게 동일한 카드뷰 생성 UI
- 이때 widget클래스(카드뷰 설정) content를 선택적으로 두어 설명이 필요한 곳과 아닌 곳들을 나누어둔다.
src/java/project/controller
- 프로젝트 홈
- model객체에게 데쉬보드의 제목 전달
- 기존에 이미 등록된 프로젝트가 있다면, 그 목록들 역시 띄워줄 수 있도록 모델에게 전달
- model객체에게 데쉬보드의 제목 전달
- 프로젝트 삭제
- 프로젝트 삭제시에는 기존 프로젝트명을 model객체에게 넘겨줌
- 이후 model에서 기존의 이름과 사용자가 입력한 이름이 맞는지 확인한 뒤에 db가 실행
- 프로젝트 삭제시에는 기존 프로젝트명을 model객체에게 넘겨줌
- 프로젝트 수정
- 기존 코드에서는 dto에 ReadProject라는 프로젝트에 필요한 내용물들을 게터와 세터로 관리하고, getMapping단계에서 서비스 로직을 통해 파이어베이스에 이런 이름을 가진 프로젝트가 있는지 조회하는 방식이었음
- 그러나, 이렇게 할 경우 mvc패턴이 잘 적용된 예시도 아니며 컨트롤러에서 모든 코드를 관장해버리는 문제가 발생
- 새로운 코드에서는 이곳에는 model에서 가져온 ReadProject가 null이면 오류를 띄우고, 그 외의 상황에서는 간단하게 화면을 return하도록 해주었다.
- 기존 코드에서는 dto에 ReadProject라는 프로젝트에 필요한 내용물들을 게터와 세터로 관리하고, getMapping단계에서 서비스 로직을 통해 파이어베이스에 이런 이름을 가진 프로젝트가 있는지 조회하는 방식이었음
댓글남기기