31st IN SOPT APP JAM
프로젝트 기간 : 2022.12.11 ~ 2023.01.14
박현정 | 조예슬 |
---|---|
hyeonjeongs | yeseul106 |
├── husky
├── prisma
├── scripts
├── after-deploy.sh
├── src
│ ├── constants
│ └── index.ts
│ └── response.ts
│ └── responseMessage.ts
│ └── statusCode.ts
│ └── tokenType.ts
│ ├── config
│ └── index.ts
│ ├── controller
│ └── index.ts
│ ├── interfaces
│ ├── middlwares
│ ├── modules
│ └── slackErrorMessage.ts
│ └── slackWebhook.ts
│ ├── router
│ └── index.ts
│ └── service
│ └── index.ts
│ └── index.ts
└── test
https://www.erdcloud.com/d/X9GnjASe9fSv26YWg
https://interesting-door-b57.notion.site/Api-d14d8f4bc9bb4ae9a55661ef609d4275
기능명 | 담당자 | 완료 여부 |
---|---|---|
프로젝트 세팅 | 현정🐸 |
완료 |
EC2 세팅 | 현정🐸 |
완료 |
RDS 세팅 | 예슬🐼 |
완료 |
Datagrip 세팅 | 예슬🐼 |
완료 |
DB 설계 | 예슬🐼 현정🐸 |
완료 |
API 명세서 작성 | 예슬🐼 현정🐸 |
완료 |
CI/CD 구현 | 예슬🐼 현정🐸 |
완료 |
Slack webhook 세팅 | 현정🐸 |
완료 |
macha를 통한 테스트 환경 구축 | 예슬🐼 |
완료 |
테스트 코드 작성 | 예슬🐼 현정🐸 |
완료 |
함수에 대한 주석
-
backend에서 공통적으로 사용하는 함수의 경우, 모듈화를 통해 하나의 파일로 관리합니다.
-
하나의 파일의 시작 부분에 주석으로 상세 내용을 작성합니다. 정리해야 하는 부분은 다음과 같습니다.
-
보통 controller에 작성하기로 합니다
-
함수의 전체 기능에 대한 설명
-
예시 코드
/** * @route GET /mission/all * @desc 지난 미션 모두 가져오기 * */ */ const getCompletedMission = async (req: Request, res: Response) => { //어쩌구 저쩌구 };
변수명
### 읽기 쉽고 알기 쉬운 **변수명**으로 만들기
```tsx
// great - "name" implies strings
const subjectName = ['math', 'english', 'korea'];
const subject = [{name: 'math', difficulty: 'easy’}]
```
- boolean 같은 경우 “is”, “has”, “can”과 같은 접두어와 같이 사용한다.
```tsx
// good
const isOpen = true; const canWrite = true; const hasFruit = true;
```
- 숫자일 경우 max, min, total과같은 단어로 설명한다.
```tsx
// good
let totalNum = 54;
```
- 함수일 경우 동사와 명사를 사용하여 **actionResource**의 형식을 따르는 것이 좋다
```tsx
// good
const getUser = (firstName, LastName) => firstName + LastName
```
<br>
- 변수, 함수 , 인스턴스 - Camel Case
- 함수명 작성 시 동사 + 명사
- Class, Constructor - Pascal Case
```tsx
// good
var userId
function addUserInfo () {}
class UserInfo {}
```
- 파일명 - Camel Case
### 상수는 무조건 대문자
- 만약 여러 단어면 상수일 때만 _ (언더바 사용)
```tsx
//bad
const maxNum = 20;
//good
const MAX_NUM = 20;
```
Bracket
- ✅
[CHORE]
: 동작에 영향 없는 코드 or 변경 없는 변경사항(주석 추가 등) - ✨
[FEAT]
: 새로운 기능 구현 - ➕
[ADD]
: Feat 이외의 부수적인 코드 추가, 라이브러리 추가, 새로운 파일 생성 - 🔨
[FIX]
: 버그, 오류 해결 - ⚰️
[DEL]
: 쓸모없는 코드 삭제 - 📝
[DOCS]
: README나 WIKI 등의 문서 수정 - ✏️
[CORRECT]
: 주로 문법의 오류나 타입의 변경, 이름 변경시 - ⏪️
[RENAME]
: 파일 이름 변경시 - ♻️
[REFACTOR]
: 전면 수정 - 🔀
[MERGE]
: 다른 브랜치와 병합
ex ) git commit -m "#1 [FEAT] 회원가입 기능 완료"
- [develop] : 최종 배포
- [feature] : 기능 추가
- [fix] : 에러 수정, 버그 수정
- [docs] : README, 문서
- [refactor] : 코드 리펙토링 (기능 변경 없이 코드만 수정할 때)
- [modify] : 코드 수정 (기능의 변화가 있을 때)
- [chore] : gradle 세팅, 위의 것 이외에 거의 모든 것
ex) feature/#issue-user-api
기본적으로 Git Flow 전략을 이용한다. Fork한 후 나의 repository에서 작업하고 구현 후 원본 repository에 pr을 날린다. 작업 시작 시 선행되어야 할 작업은 다음과 같다.
1. Issue를 생성한다.
2. feature Branch를 생성한다.
3. Add - Commit - Push - Pull Request 의 과정을 거친다.
4. Pull Request가 작성되면 작성자 이외의 다른 팀원이 Code Review를 한다.
5. Code Review가 완료되면 Pull Request 작성자가 develop Branch로 merge 한다.
6. merge된 작업이 있을 경우, 다른 브랜치에서 작업을 진행 중이던 개발자는 본인의 브랜치로 merge된 작업을 Pull 받아온다.
7. 종료된 Issue와 Pull Request의 Label과 Project를 관리한다.
- 기본적으로 git flow 전략을 사용합니다.
- main, develop, feature 3가지 branch 를 기본으로 합니다.
- main → develop → feature. feature 브랜치는 feat/기능명으로 사용합니다.
- 이슈를 사용하는 경우 브랜치명을 feature/[issue num]-[feature name]로 합니다.
- [feat] : 기능 추가
- [fix] : 에러 수정, 버그 수정
- [docs] : README, 문서
- [refactor] : 코드 리펙토링 (기능 변경 없이 코드만 수정할 때)
- [modify] : 코드 수정 (기능의 변화가 있을 때)
- [chore] : gradle 세팅, 위의 것 이외에 거의 모든 것
ex) [feat] user api 구현
{
"name": "peekabook",
"version": "1.0.0",
"main": "index.js",
"repository": "https://github.com/team-peekabook/Peekabook-server.git",
"author": "hyeonjeong Park <[email protected]>",
"license": "MIT",
"scripts": {
"dev": "nodemon",
"build": "tsc",
"postinstall": "prisma generate",
"prepare": "husky install",
"test": "yarn mocha ./test/* -r ts-node/register -exit"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.241.0",
"@prisma/client": "^4.8.0",
"axios": "^1.2.2",
"dayjs": "^1.11.7",
"dotenv": "^16.0.3",
"express": "^4.18.2",
"multer": "^1.4.5-lts.1",
"multer-s3": "^3.0.1",
"prisma": "^4.8.0"
},
"devDependencies": {
"@types/chai": "^4.3.4",
"@types/express": "^4.17.15",
"@types/mocha": "^10.0.1",
"@types/multer": "^1.4.7",
"@types/multer-s3": "^3.0.0",
"@types/node": "^18.11.18",
"@types/supertest": "^2.0.12",
"chai": "^4.3.7",
"husky": "^8.0.0",
"mocha": "^10.2.0",
"nodemon": "^2.0.20",
"supertest": "^6.3.3",
"ts-node": "^10.9.1",
"typescript": "^4.9.4"
}
}