데브코스 백엔드 3기 92일차
벌써 프로젝트 기간이 되었다니 실감이 안난다
이제 플젝 2개하고나면 데브코스도 끝이라니?!
곧 100일,,ㅋㅋㅋㅋ
지난주는 팀 프로젝트 구성하고 설정하고 아주 정신이 없었다
까먹기 전에 얼른 기록해두기
일기(회고)
- 지난주, 쉽지 않았다 속으로 코드 짜고 싶다 100번 외침ㅋㅋ
프로젝트 일정 짜고, Jira 세팅하고(젤 어려움), 유저스토리 작성하고,
각종 컨벤션들 짜고, 와중에 기능 구현에 사용하는 기술 공부하고 등등
병아리 PO + developer에게 살짝 버겁지만
아주아주우 알찬 1주일이었다!- 5-6시간씩 팀원들이랑 상의하다보니까 끝나고나면 진이 빠지더라 ㅎㅎ 밥 엄청먹음
- 혹시 지쳤니?!라고 몇번을 물어봄 그래도 아니라고 말해주는 아이덜
- 힘들었어도, 어느정도 일정에 다 맞추어 진행되어서 뿌듯-!
- 5-6시간씩 팀원들이랑 상의하다보니까 끝나고나면 진이 빠지더라 ㅎㅎ 밥 엄청먹음
- ㅅㅍㅅ님과의 면접날에 대한 대화
좋은말씀을 많이 해주셔서 응원이 되고 힘이났음 ㅎㅎ- 나를 뽑는 것에 대해 전혀 고민하지 않으셨다고..!(갬동)
- 갑분 추억회상,
면접 전보다 면접을 보고 데브코스가 더 너무너무 하고 싶었다
사실 면접 전에는 독학도 고민을 하고있었다
그런데 내 github과 자소서를 꼼꼼하게 다 보았다는게 느껴져서
면접 보면서 속으로 여러번 놀랐고
이 교육은 엄청 탄탄할것 같았다(실제로도)
면접을 겪어보고 나 너무너무 되고싶다! 했었쥐
- 프로젝트 기간동안 많이 배우고 건강하기 목표!
배우게된것들 꼭 다 기록해두고 싶은데..!
건강하려면 잠도 자야하고! 그치만 알고리즘도 계속 풀어야하고!
암튼 열심히 합시다 ㅋㄷㅋㄷ
Jira
-
정말정말 낯설고 정말정말 삐질대며 설정한 Jira..!
아직도 친해지는 중(거리가 먼 jira ㅎㅎ)
혼자 하다가 살짝 포기를 고민하는 중에 ㅇㅂ이의 도움을 받았다 커피사주기 잊지말것!
지금와서 보면 별 내용 아닌거같은데(별 내용 아니지 않음), 그때는 왜 그렇게 어려웠는지?(개구리 올챙이적)
암튼 가장 힘겹게 했고, 가장 뿌듯한 파트 -
이슈란 무엇인가
- 제품에 관해 회사에서 대화의 대상이 되는 거의 모든것
- ticket이라고 하기도 함
- 오류, 버그, 새로운 기능, 작업요쳥, 사소한 질문, 의견 등 모든것이 될 수 있음
Jira 프로젝트 생성
- Epic : 여러 splint에 걸쳐 진행되는, 여러 User Story의 집합
- User Story :
(사용자)는 (무엇)을 위해 (무엇)을 하고싶다
에 대한 actor의 use case - Sub Task : 스토리 혹은 초어들을 개발하기 위해 진행되는 실제 세부 개발사항들
- Epic을 작성하려는데, 예시들이 개발과 관려되지 않아서 따라하려해도 멈칫했다
그냥 큰틀이라고 생각하고 작성을 했고, 그러다보니 도메인별로 나누게 되었다
(나도 PO가 처음이라 서툴ㅎ)
이번에 이렇게 해보고, 더 좋은방법이 생각난다면 다음번에 좀 더 발전시켜봐야겠다
Jira 자동화 규칙 생성
- 라이브러리에 있는 규칙을 설정하니까 매우 편했다
Jira-Github 연동해서 issue 관리 + 자동화
- ex) 에픽 유저스토리 하위태스크 예시
- 실제 플젝의 내용은 아니고
팀원들에게 사용법과 플로우를 이해하기 쉽게 공유하고 싶어서 쉬운 예시를 만들어 공유했다
- 실제 플젝의 내용은 아니고
1. Jira에서 Github for Jira
앱 다운받기
2. github Organization 연동
- repository 선택 가능
3. organization 안의 repository에서 feature/[이슈번호]
branch 생성
- husky로 git hook 관리하는 거까지 해볼까 했으나 이건 다음 플젝 때 공부해보고 적용하려 한다
이슈
라는 단어조차 낯설어서 이 단계까지 오는데에도 많이 헤매면서 공부했다(뿌듯하긴 하쥐)
4. 기능구현 완료 후 commit 시, commit 제목에 하위태스크 이슈번호 포함해서 작성
ex) Feat : 이슈번호 ~~~ 기능 구현
- commit 후 Jira : 자동화 규칙으로 인해 진행중으로 자동 변경됨
5. 하나의 user story 기준으로 PR : PR 제목에 user story 이슈번호 포함해서 작성
ex) 이슈번호 ~~~ 구현
- 본문에 해당 user story의 하위태스크들 이슈번호 같이 적어주기
Resolved : 이슈번호, 이슈번호
- 본문에 해당 user story의 하위태스크들 이슈번호 같이 적어주기
- PR 완료 후 Jira : 자동화 규칙으로 인해 완료됨으로 자동 변경됨
- 사실, commit과 pr 단위를 내 마음대로 각각 하위태스크와 유저스토리로 정하긴 했는데
이것 또한 이번에 해보고 더 좋은 방법이 있다면 다음 플젝 때 적용해보아야지
Jira와 좀 많이 친해진듯ㅎ
SpringBoot project 생성 + 설정(버전 등)
- JDK는 17로 결정
- 일단 lts버전을 사용하려고 했기에 11과 17중에 고민하다가, DTO를 사용할 일이 많은데 Record class를 사용하면 가독성도 높고 편하게 코드작성이 될거라 판단해 결정했다
- 그 외에 사용할지 모르겠지만, 텍스트블록과 케이스문 람다식이 지원 되는것 등의 기능이 추가적으로 있어 기회가 있다면 사용하기로 했다
- SpringBoot 버전은 2.7.x로 결정
- 3.x 버전이 있지만 Security 강의 들을 때 3.x버전 쓴 사람들이 애먹던걸 옆에서 보았기 때문에,,
Security 사용하는 우리는 안정적으로 가자며 나름 최신의 2.7.x로 결정
- 3.x 버전이 있지만 Security 강의 들을 때 3.x버전 쓴 사람들이 애먹던걸 옆에서 보았기 때문에,,
- TestContainers : 테스트 이전에 Docker Container 다로 안띄워도, 테스트 시작 시 자동으로 띄워줌 + 끝나면 알아서 종료
- 사용은 2가지 이유로 결정
- 외부모듈에 대해 멱등성을 유지하며 테스트 할 수 있다
- production에 가까운 환경에서 테스트를 할 수 있다
- 팀원들의 로컬환경이 다 다를텐데 TestContainers를 사용하면 걱정이 없었다
- 그러나 단점, 테스트 시 생성+실행+삭제로 시간이 오래걸림(오래걸려도 너무 오래 걸림 Docker compose 공부해보기)
- 사용은 2가지 이유로 결정
- project structure와 class를 만들고 공통으로 건드리게 될 파일들도 미리 셋팅했다
- dependency는 우리가 사용 확정 한 security, swagger, validation, caffeine cache, test container 등을 넣었다
- logback 설정도 하고
- encoding도 UTF-8로 모두 통일
- yml파일도 JPA 설정하고, DB나 Security 관련 설정들은 외부환경파일로 분리해 include 해서 올렸다
- TMI) 한번에 깔꼼하게는 못올렸고 진짜_최최최최_최종으로 여러번 올림 ㅎㅎ
Naver Checkstyle
- CheckStyle : Java source code가 지정한 codinig convention을 준수하는지 확인하기 위한 정적 코드 분석 도구
- 저장된 규칙에 어긋나면 컴파일시 경고나 에러 띄움
1. Preferences - Plugins - Marketplace에서 CheckStyle-IDEA 플러그인 설치
2. naver github에서 3개 파일받기
naver-intellij-formatter.xml
: IntelliJ Formatter 적용- IntelliJ Preferences Open - Editor - Code Style - Java- Scheme - Import Scheme - IntelliJ IDEA Code Style XML - naver-intellij-formatter.xml 파일 선택
Cmd + Option + L
누르면 지정한 code style에 맞게 자동으로 formatter 적용
naver-checkstyle-rules.xml
naver-checkstyle-suppressions.xml
3. Preferences - Tools - CheckStyle
- Scan Scope : All sources(including tests)로 설정
- Treat Checkstyle errors as warnings 체크
- Configuration File의 + 버튼 클릭
- Description은 Naver Checkstyle Rules
- Use a Local Checkstyle File 선택 후 naver-checkstyle-rules.xml
- suppressionFile 변수 설정 : value에 naver-checkstyle-suppressions.xml 입력
- Naver Checkstyle Rules의 Active 체크
=> IntelliJ 하단에 CheckStyle 탭에서 coding convention 준수 여부 체크
Erd Cloud
- 무료이고 여러명이서 접근 가능한 Erd Cloud를 사용해서 Erd를 만들었다
- 이미지 파일을 여러 도메인(member, product, feed)에서 사용하기 때문에 이미지 테이블을 가장 고민했다
- 1번) 이미지 테이블안에 컬럼으로 member_id, product_id, feed_id를 넣는다
- 2번) 이미지 테이블은 image_id와 path만 가지고 도메인별로 중간테이블을 만든다
- 3번) 이미지 테이블에 domain type을 Enum값으로 넣고, 그에 따른 domain의 id를 컬럼으로 넣는다
- 결론은 3번으로 결정!
- 덕분에 RDB를 사용하는데도 혼자 동떨어져있음
- 이유는 현재 서비스의 크기가 작아 최대한 테이블의 개수를 줄이고 싶기도 했고, 하나의 테이블에서도 충분히 관리 가능할거라 판단했기 때문이다 서비스가 커진다면 그 때 마이그레이션을,,
Branch 전략
- Github flow
- Main : 안정화 버전 브랜치
- Develop : Merge 전용 브랜치
- Feature : 작업 시 하나의 브랜치 생성(feature/[이슈번호])
Template
PR Template
### ⛏ 작업 사항
### 📝 작업 요약
### 💡 관련 이슈
- Resolved : [이슈번호], [이슈번호]
- PR 시 PR template이 자동설정되도록 pull_request_template.md를 생성했다
- root directory, docs directory, .github directory 중 한 곳에 생성하면 됨
- .github/pull_request_template.md
- docs/pull_request_template.md
- root directory 아래 /pull_request_template.md
- root directory, docs directory, .github directory 중 한 곳에 생성하면 됨
Commit Convention
Keyword | 설명 |
---|---|
Chore | 빌드 업무 수정, 패키지 매니저 수정 |
Feat | 새로운 기능 추가 |
Fix | 버그 수정 |
Docs | 문서 추가, 수정, 삭제 |
Style | 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우 |
Refactor | 코드 리펙토링 (기능의 변경은 없지만, 코드의 구조 개선) |
Test | 테스트 코드, 리펙토링 테스트 코드 추가 |
##### 제목 - 50자 이내로 한글로 요약(도메인은 클래스명 그대로 영어)
### <커밋 타입> 띄고 : 띄고 [이슈번호] <제목(명사)>
##### 본문 - 한 줄에 최대 30 자 이내로 한글로 입력하기
# 1. 무엇을 수정했는지
# 2. 왜 수정했는지
-
# <커밋 타입> <리스트>
# Feat : 새로운 기능 추가
# Fix : 버그 수정
# Refactor : 코드 리펙토링 (기능의 변경은 없지만, 코드의 구조 개선)
# Style : 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우
# Docs : 문서 추가, 수정, 삭제
# Test : 테스트 코드, 리펙토링 테스트 코드 추가
# Chore : 빌드 업무 수정, 패키지 매니저 수정
# ------------------
# [체크리스트]
# 제목 첫 글자는 대문자로 작성했나요?
# 제목은 한글로 작성했나요?
# 제목 끝에 마침표(.) 금지
# 제목과 본문을 한 줄 띄워 분리하기(Enter 2번)
# 본문의 메시지를 작성할 때 "-"로 구분했나요?
# 컴파일이 되나요?
# Feat 시, 기능단위로 작성했나요?
# Fix 시, 수정 단위로 작성했나요?
# ------------------
-
예시)
제목은 Feat : [이슈번호] Image 등록 기능 구현 본문에 - 파일업로드 관련 공부 [이슈번호] - 파일업로드 --- 상의 필요 [이슈번호]
- 모두가 이슈관리는 처음이라 기준을 정하기가 어려워, 이슈를
대화의 대상이 되는 모든것
으로 일단 이번엔 이해하기로 하고 이슈번호를 마구마구 생성했다^^ㅎㅎ - 이번주는 많은걸 알아보느라 정말정말 하얗게 불태웠다 그만큼 뿌뜻
- Kream clone project, 신발만 다뤄서 Shoe-Kreamㅎㅎ 스타뜨!