회의를 거쳐 프로젝트의 진행 방식을 결정하였고 그에 맞춰 설계를 하였습니다. 도메인 기반 모델 패키지 구조를 사용한 DDD(Domain Driven Design) 방식을 채택하였고 예외처리는 Global로 처리 하는 등 전반적인 프로젝트 기획을 작성하였습니다.
전반적인 설계를 끝낸 후에는 각자 맡은 부분에 대해 상세히 요구사항 정의서를 작성하였습니다. 사용자 친화적 관점으로 바라보며 필요한 기능들에 대해 구현해야할 사항들을 나열하였습니다.
전체적인 웹의 디자인과 서비스의 컨셉을 위해 UI 디자인 툴인 Figma를 활용하였습니다. 명확하지 않았던 부분들을 실시간 동시 편집으로 확인하며 UI concept, UI detail 등을 추가할 수 있었습니다.
이전에는 직접 표를 만들어 이미지 형식으로 저장해 두었지만 프로젝트의 규모가 커짐에 따라 직접 작성한 표로 Database를 관리하기는 어렵다고 판단하였습니다.
데이터베이스 모델링 설계를 위해 전체적으로 보기 쉬우며 변수명과 타입 등을 한 번에 작성할 수 있는
ERD-CLOUD를 사용하였습니다. 포괄적이었던 연관 관계도 DB를 작성하면서 뚜렷해졌고 각자 맡은 부분을 간결하게 작성하여 빠르게 끝낼 수 있었습니다.
DB 설계 이후에는 각자 맡은 분야에 대해 Rest API 규칙에 따라 명세를 작성했습니다. 클라이언트와 서버의 통로인 URI와 http method , FE, BE 개발 간 필요한 Request, Response 기준을 작성하였습니다. 요청, 응답에 관한 정보들을 한눈에 볼 수 있었고, 추가할 사항이 있을 때에도 쉽게 수정과 삭제가 가능하여 효율적으로 사용하기에 좋았습니다.
진행하는 동안 Git을 관리하고 ISSUE를 해결하는 과정에서도 공통으로 지켜야할 것들은 규칙을 정해 원활하게 의사소통하려 노력하였습니다. 네이밍 규칙을 따르는 것부터 스크럼 시간에 코드리뷰를 진행하자는 것까지 전반적인 것들을 조율한 후 프로젝트를 진행하였습니다.
그럼에도 불구하고 언제나 변동사항은 발생할 수 있기에 유연하게 대처하고자 참고, 변동사항 탭을 만들었습니다. 유용한 참고 사이트들과 놓치기 쉬운 변동사항들을 기록하여 관리하였습니다.
- Daily Scrum
- 칸반보드
하루에 2번 오전, 오후 스크럼을 통해 전체적인 프로젝트의 진행사항을 확인하였고 오류나 막히는 부분이 있을 때에 함께 해결하고자 하였습니다. 칸반보드를 통해 스스로의 진행사항을 기록하였고 필요한 경우, 오후 스크럼 시간에 코드리뷰도 진행하여 서로의 코드에 대해서도 알아보는 시간을 가지기도 하였습니다.
가독성을 높이기 위해 커밋메시지를 형식에 따라 통일하여 작성하였습니다. 무엇에 관한 것인지 알기 쉬워 코드리뷰를 남기는 데에도 더욱 도움이 되었습니다.
처음에는 코드리뷰를 하는 것이 검사 맡는 것 같아 숙제로 느껴지기도 하였지만 코드 품질을 향상하고 버그를 사전에 방지하고자 꼭 필요한 과정이라고 생각하였습니다. 궁금한 것을 질문하고 더 효율적으로 개선할 수 있는 부분을 찾아 피드백을 주며 서로의 코드를 개선해 나갈 수 있었습니다.
GitHub - teawan-Noh/eventcafecloud
97번 issue를 처리한 Pull Request
코드리뷰를 통해 발견하지 못한 오류나 해결할 사항이 있을 경우 ISSUE를 활용해 말머리와 라벨을 달아 기록하였습니다. 해결한 후에는 Pull Request 시에 언급하여 ISSUE를 닫을 수 있고, 따로 답글을 달아 해결방안을 공유할 수 있는 것도 좋았습니다.
비슷한 오류가 생겼을 때에 다른 팀원이 활용하기 좋았을 뿐만 아니라 ISSUE의 흐름에 따라 프로젝트를 진행하며 개선 사항 및 버그를 추적하여 정교한 코드를 구현할 수 있었습니다.
<프로젝트 중 참고한 블로그>
머스태치 문법
ER다이어그램 작성법
도메인 패턴 연관관계
DTO 변환위치
스페이스 클라우드 ERD cloud
VO
좋은 entity 설계를 위한 개념
entity 설계 프로그램
jumptojava
Transactional 사용법
DTO로 엔티티 데이터 묶어서 보내기
다중 이미지 파일 받기
회원가입 API 명세
stream, map
assertJ
assertThat 사용법
# application.yml 에 추가 (jpa, tyhmleaf)
# 쿼리 찍어보기
logging:
level:
org:
hibernate:
type:
descriptor:
sql: trace