시작 단계의 체크리스트
들어가며¶
프로젝트를 시작할때 해야하는 작업의 목록을 정리해보자.
체크리스트¶
사실상 고정인 항목들
- VCSversion control system -
git - process - agile
- dev/framework - spring
//아직 나한태는...
1. Version Management¶
-
remote git repository
- github
- gitlab
-
git-commit strategy
- git-flow
- github-flow
- custom
main
dev
feature
- how to write commit messages
-
Pull/Merge Request strategy
- github
- Create a merge commit
- Squash and merge
- Rebase and merge
- gitlab
- Merge commit
- Merge commit with semi-linear history
- Fast-foward merge
- Pull/Merge Requset Approval rule
- github
-
Release strategy
2. Issue Tracking¶
- Issue tracking system
- JIRA
- youtrack
- gitlab
3. Dev Process¶
참고자료
- 로버트 C. 마틴 `『클린 애자일』 정리 링크
- waterfall vs agile
- sprint cycle
- 1 week
- 2 week
- else
4. Communication¶
참고 자료
- 비동기적 커뮤니케이션 - 링크
- tools
- kakaotalk
- discord
- slack
- notion
- gather
5. Dev (on Backend Server with Spring framework)¶
1. Architecture (in 하나의 코드베이스)¶
참고 자료
- 이동욱님(조졸두) - 계층형 아키텍처
- 톰 홈버그 -
『만들면서 배우는 클린 아키텍쳐』정리 링크 - 톰 홈버그 - Let's build components, not layers by Tom Hombergs @ Spring I/O 2022
- Layered Architecture
- Hexagonal Architecture
- Component based Architecture
2. Language¶
java LTSLong Term Support
- 별 다른 이유가 없으면 - Java 11 이 아직은 일반적인 선택
- Record 등 Java 15 이상의 기능을 활용하고 싶으면 - Java 17
- spring 6.0/ spring boot 3.0 이상의 기술을 활용하고 싶으면 - Java 17
- kotlin
3. Build System¶
- maven
- gradle(groovy/kotlin dsl)
- 별 다른 이유가 없으면 gradle - 점점 더 많이 사용하고 간결하다.
6. Style¶
1. Linter (a.k.a. Static Code analysis)¶
- sonarl lint
- checkstyle
7. Test (with Junit5.0~)¶
Test 관련 도구 들
- ArchUnit - 아키텍처 (계층별 참조/ 네이밍 룰/ 어노테이션 작성 방식 등)를 단위 테스트로 검증 하는것을 도와주는 라이브러리/프레임워크
- Fixture Monkey - 픽스쳐를 랜덤하게 생성하는 것을 도와주는 라이브러리
- assertJ - junit 보다 개선된 방식(자칭,타칭)의 검증 dsl 을 제공하는 라이브러리
- test container - 테스트 시작/종료시 도커 컨테이너를 제어해서 실제 활경과 테스트 환경의 일치를 도와주는 라이브러리
- newman - 스크립트를 이용해 postman 을 실행/검증해주는 프로그램/ api 테스트 자동화를 위해 사용함
1. 일반적인 작성 스타일¶
-
junit stylevsassertj style- 일반 검증 -
assertXXX()vsassertThat() - 예외 검증 -
assertThrowsvsassertThatExceptionOfType
- 일반 검증 -
2. Layerwise Test Sterategy¶
참고 링크
- 만배클아 - 7장 아키텍쳐 요소 테스트하기
테스트?
- 테스트를 어디까지 얼마나 작성해야 하는가는 분명히 정리/합의 해야 하는 부분
- 모든 계층에 대한 테스트를 작성한다고 생각하고 본인의 경험을 기준으로 일반적인 가이드라인을 작성함
- Spring Container 의 도움을 받는 테스트를
(계층별) 통합 테스트, POJO 와 mocking 만을 이용한 테스트를단위 테스트라고 지칭함
전략 1 - 간단 버전
Controller Layer- 통합 테스트Service(a.k.a. application) Layer- 단위 테스트Domain Layer- 단위 테스트Persistence(a.k.a. DAO/Repository) Layer- 통합 테스트
전략 2 - 더 빡센 버전
8. Namings & Ubiquitous Language(a.k.a. Metaphor)¶
네이밍과 관련된 좋은 글¶
최범균님 - 『도메인 주도 설계 시작하기』 발췌
- 코드를 작성할 때 도메인에서 사용하는 용어는 매우 중요하다.
- 정리된 용어를 문서화하고 도메인 모델의 주석으로 남기는 것은 좋은 습관
StatusorState?TypeorKind? 심지어 발음 나는 대로Gubun도 가능
알맞은 영단어를 찾는 것은 쉽지 않은 일이지만 시간을 들여 찾는 노력을 해야한다. 그렇지 않으면 코드는 도메인과 점점 멀어진다. -p.59
UL 과 관련된 글들¶
- MSA 에서 유비쿼터스 언어(보편 언어)의 중요성 on Medium/jus0997
9. Documentation¶
어디에?
- github/gitlab wiki
- or 자동화 with asciidoc (or other choices)
api specification 어디에?
- 개발 전 및 논의 단계 에서 - notion/github/gitlab wiki 등
- 코드를 통해서 구성하는 방식 - swagger/restdocs
10. What Else More?¶
- CI/CD pipeline/process
- 설정 정보 관리
- Team name/ Project name/ Member roles ...
Last update:
February 26, 2023
Created: February 13, 2023
Created: February 13, 2023