μΌμμ΄λͺ½ - ν¨κ» κ²½νν νλμ μΌμμ μλ‘ λ€λ₯Έ μκ°μΌλ‘ νμνλ μλΉμ€
THE SOPT Sopkathon - Group 4
κΈ°λ₯λͺ
μλν¬μΈνΈ
λ΄λΉμ
ν μμ±
[POST] /team
μ£Όν¨μ
ν μ‘΄μ¬ μ 무 νμΈ
[GET] /team/:inviteCode
κΉμν
μ½λ©νΈ ν μ€ μμ±
[PUT] /comment
κΉμν
μ½λ©νΈκ²°κ³Ό νμΈ
[GET] /comment/:inviteCode
μ£Όν¨μ
λ³μλͺ
Camel Case μ¬μ©
ν¨μμ κ²½μ° λμ¬+λͺ
μ¬ μ¬μ©
flagλ‘ μ¬μ© λλ λ³μλ μ‘°λμ¬ + flag μ’
λ₯λ‘ κ΅¬μ±
μ½μ΄λ λλλ‘ μ¬μ©νμ§ μλλ€.
λΆλμ΄νκ² μ½μ΄κ° νμνλ€κ³ νλ¨λλ κ²½μ° νμκ³Ό μμλ₯Ό κ±°μΉλ€.
μ£Όμ
νμ€ μ£Όμμ // λ₯Ό μ¬μ©νλ€.
// νμ€ μ£ΌμμΌ λ
/**
* μ¬λ¬μ€
* μ£ΌμμΌ λ
*/
ν¨μμ λν μ£Όμ
/**
* @route Method /Route
* @desc Function Description
* @access Public
*/
Bracket μ¬μ© μ λ΄λΆμ μ£Όμμ μμ±νλ€.
if ( a == 5 ) {
// μ£Όμ
}
Bracket
νμ€ if λ¬Έμ μ¬λ¬ μ€λ‘ μμ±νλ€.
// νμ€ if λ¬Έ - μ¬λ¬ μ€λ‘ μμ±
if ( trigger ) {
return ;
}
κ΄νΈλ νμΉΈ λμ°κ³ μ¬μ©νλ€.
// κ΄νΈ μ¬μ© νμΉΈ λμ°κ³ μ¬μ©νλ€.
if ( left == true ) {
return ;
}
Bracket μμͺ½ μ¬μ΄λ₯Ό λμ΄μ μ¬μ©νλ€.
const { userId } = request . user ;
λΉλκΈ° ν¨μμ μ¬μ©
async, await ν¨μ μ¬μ©μ μ§ν₯νλ€.
Promise μ¬μ©μ μ§μνλ€.
λ€λ§ λ‘μ§μ μ§λ λ° μμ΄ promiseλ₯Ό λΆκ°νΌνκ² μ¬μ©ν κ²½μ°, μ£ΌμμΌλ‘ νμνκ³ commitμ κ·Έ μ΄μ λ₯Ό μμ±νλ€.
Git Workflow
main β develop β name β name_#feature
feature λ²νΈλ issue λ²νΈμ λ§κ² μμ± / nameμλ μκΈ° μ΄λ¦
1. issue μμ±
2. local - name_#featureμμ κ°μ κΈ°λ₯ μμ
(feature λ²νΈλ issue λ²νΈμ λ§κ² μμ±)
3. remote - name_#feature μ Push
4. remote - name μΌλ‘ PR
5. remote - develop μΌλ‘ PR
6. μ½λ 리뷰 ν Confirm λ°κ³ remote - develop Merge
7. remote - develop μ Merge λ λ λ§λ€ λͺ¨λ νμ local - develop pull λ°μ μ΅μ μν μ μ§
Branch Name
μ€λͺ
main
μ΄κΈ° μΈν
μ‘΄μ¬
develop
ꡬν μλ£ λΈλμΉ
hyosik
ν¨μ κ°μΈ λΈλμΉ
sohyeon
μν κ°μΈ λΈλμΉ
name_#issue
μ΄μ λ³ κΈ°λ₯ ꡬν λΈλμΉ
νκ·Έ μ΄λ¦
μ€λͺ
[CHORE]
μ½λ μμ , λ΄λΆ νμΌ μμ
[FEAT]
μλ‘μ΄ κΈ°λ₯ ꡬν
[ADD]
FEAT μ΄μΈμ λΆμμ μΈ μ½λ μΆκ°, λΌμ΄λΈλ¬λ¦¬ μΆκ°, μλ‘μ΄ νμΌ μμ±
[HOTFIX]
issueλ QAμμ κΈν λ²κ·Έ μμ μ μ¬μ©
[FIX]
λ²κ·Έ, μ€λ₯ ν΄κ²°
[DEL]
μΈλͺ¨ μλ μ½λ μμ
[DOCS]
READMEλ WIKI λ±μ λ¬Έμ κ°μ
[CORRECT]
μ£Όλ‘ λ¬Έλ²μ μ€λ₯λ νμ
μ λ³κ²½, μ΄λ¦ λ³κ²½μ μ¬μ©
[MOVE]
νλ‘μ νΈ λ΄ νμΌμ΄λ μ½λμ μ΄λ
[RENAME]
νμΌ μ΄λ¦ λ³κ²½μ΄ μμ λ μ¬μ©
[IMPROVE]
ν₯μμ΄ μμ λ μ¬μ©
[REFACTOR]
μ λ©΄ μμ μ΄ μμ λ μ¬μ©
ποΈ 3-Layer Architecture μ μ©
π src _
|_ π config _
|_ π controllers _
|_ π interfaces _
|_ π loaders _
|_ π models _
|_ π modules _
|_ π routess _
|_ π services _
const TeamSchema = new mongoose . Schema ( {
name : {
type : String ,
required : true ,
} ,
inviteCode : {
type : String ,
required : true ,
unique : true ,
} ,
comments : {
type : [ String ] ,
} ,
startTime : {
type : Date ,
required : true ,
} ,
endTime : {
type : Date ,
required : true ,
} ,
} ) ;
{
"name" : " node-typescript-init" ,
"version" : " 1.0.0" ,
"description" : " " ,
"main" : " index.js" ,
"scripts" : {
"dev" : " nodemon" ,
"build" : " tsc && node dist"
},
"author" : " " ,
"license" : " ISC" ,
"devDependencies" : {
"@types/express" : " ^4.17.13" ,
"@types/mongoose" : " ^5.11.97" ,
"@types/node" : " ^17.0.25" ,
"nodemon" : " ^2.0.15" ,
"ts-node" : " ^10.7.0" ,
"typescript" : " ^4.6.3"
},
"dependencies" : {
"dotenv" : " ^16.0.0" ,
"eslint" : " ^8.16.0" ,
"eslint-config-prettier" : " ^8.5.0" ,
"express" : " ^4.17.3" ,
"express-validator" : " ^6.14.0" ,
"mongoose" : " ^6.3.1" ,
"prettier" : " ^2.6.2"
}
}
π·ββοΈ Server Architecture
κ°λ° νκ²½ : Typescript, Node
λ°μ΄ν°λ² μ΄μ€ : MongoDB
μλ² νκ²½ : AWS EC2, PM2