์Šคํ”„๋ฆฐํŠธ 1ํšŒ์ฐจ ํšŒ๊ณ 

date
Jun 19, 2022
์นดํ…Œ๊ณ ๋ฆฌ
์ธ์Šคํƒ€๋€จ๋žจ
Status
Completed
Assign

์Šคํ”„๋ฆฐํŠธ 1ํšŒ์ฐจ ํšŒ๊ณ 

 
  • ๋™์šด
    • ๋ชฉํ‘œํ•œ๊ฒƒ๋“ค์„ ์™„๋ฃŒ ๋‹ค ๋ชปํ•ด์„œ ๊ต‰์žฅํžˆโ€ฆ. ์‹ค๋ง์Šค๋Ÿฌ์šด ์Šคํ”„๋ฆฐํŠธ์˜€๋‹ค.
    • FLYWAY ๋ฅผ ์ ์šฉ์‹œ์ผœํ•ด๋ณด๋ คํ–ˆ๋Š”๋ฐ ๋งŽ์ด ํ•ด๋งค์„œ โ€ฆ
    • ์—ฐ๊ณ„ํ•ด์„œ ํ˜‘์—…ํ•˜๋Š”๊ฒŒ ์–ด์ƒ‰ํ•ด์„œ ๊ทธ๋Ÿฐ์ง€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์†๋„๊ฐ€ ๋А๋ ธ๋‹ค.
  • ๋ณ‘์—ฐ
    • ์‚ฌ์šฉ์ž ๋ชฉ๋ก์กฐํšŒ ๊นŒ์ง€๋Š” ๋‹ค ํ–ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ ์™„๋ฃŒ ๋ชปํ•ด์„œ ์กฐ๊ธˆ ๋” ์†๋ ฅ์„ ๋‚ด์•ผ๋  ๊ฒƒ ๊ฐ™๋‹ค.
    • ์ค‘๊ฐ„์ค‘๊ฐ„ ์ˆ˜์ •ํ•ด์•ผ๋ ๊ฒƒ ๊ฐ™์€ ๊ฒƒ๋„ ์ฑ™๊ฒจ์•ผ๋๋Š”๋ฐ ๋ชป์ฑ™๊ฒผ๋‹ค.. ์†๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค
    • ์‹คํ–‰์ด ์•ˆ๋˜์„œ ๊ณ ์ƒ
    • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์งค๋•Œ๋„ ํ˜•์‹ ๋งž์ถ”๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ํ˜•์šฑ
    • ์Šคํฌ๋Ÿผ ๋งˆ์Šคํ„ฐ ์—ญํ• ์„ ๋งก์•˜๋Š”๋ฐ ๋ฌธ์„œํ™” ๋ถ€๋ถ„์ด๋‚˜ ์ง„ํ–‰ ๋ถ€๋ถ„์— ์žˆ์–ด์„œ ๋งŽ์ด ๋ฏธ์ˆ™ํ•จ์ด ์žˆ์–ด์„œ ํŒ€์›๋ถ„๋“คํ•œํ…Œ ์ฃ„์†กํ•œ ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋‹ค. ํŒ€์› ๋ถ„๋“ค๋„ ๋งŽ์ด ๋„์™€์ฃผ์…”์„œ ๊ฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ง€๋ผ๋ฅผ ํ†ตํ•ด์„œ ํ˜‘์—…์„ ํ•˜๋Š” ๊ณผ์ •๋„ ๋ถ€์กฑํ•˜๊ธด ํ–ˆ์ง€๋งŒ ์ ์  ๋” ๊ดœ์ฐฎ์•„ ์ง€์ง€ ์•Š์„๊นŒโ€ฆ?
    • ํ•ด์•ผํ•  ๋ถ„๋Ÿ‰๋งŒ ๋”ฑ ์ž˜ ์ •ํ•ด์•ผ๊ฒ ๋‹ค.
  • ์ง„ํ˜•
    • ๊ฐœ์ธ์ ์œผ๋กœ ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…์— ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์„ ๋“ค์ธ ๊ฒƒ ๊ฐ™์•„์„œ ๋‹ค๋ฅธ ๊ณณ์— ํž˜์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ๋  ๋“ฏ ํ•จ๋‹ค.
  • ํ˜œ๋นˆ
    • ์ง€๋ผ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ˜‘์—…์„ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์„œํˆด๋Ÿฌ์„œ ํ—ค๋งจ ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋‹ค .
    • ๋ชฉํ‘œ๋ฅผ ์ž‘๊ฒŒ ์žก์•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. โ†’ ๋ชฉํ‘œ ์„ค์ • ์‹คํŒจ
 

๋ฉ˜ํ† ๋‹˜

  • ์ด๋ฒˆ ์Šคํ”„๋ฆฐํŠธ๋Š” ์ต์ˆ™ํ•ด์ง€๊ธฐ๋กœ ๊ฐ€์ ธ๊ฐ€๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ์†๋„๋ฅผ ์กฐ๊ธˆ ๋‚ด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ํ”„๋ก ํŠธ
    • ํ™”๋ฉด์„ ์•„๋ฌด๋„ ์‹œ์ž‘์„ ์•ˆ ํ–ˆ๋Š”๋ฐ ํ™”๋ฉด๋ถ€ํ„ฐ ์žก๊ณ  ๋“ค์–ด๊ฐ€์•ผํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • ํ™”๋ฉด๋„ ์—†๋Š”๋ฐ API ๋ถ€ํ„ฐ ๋งŒ๋“ค๋ฉด ์“ธ๋ชจ๊ฐ€ ์—†์–ด์š” ์—ฐ๋™๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. โ‡’ ๋ฐฑ์—”๋“œ๊ฐ€ ํ”„๋ก ํŠธ ์งฐ๊ตฌ๋‚˜? ์ƒ๊ฐ ๋“ค์–ด๋„ ๋œ๋‹ค
  • ์ตœ๋Œ€ํ•œ ๋จธ์ง€ ํ–ˆ์„ ๋•Œ force ์•ˆ ๋‚˜๊ฐ€๊ฒŒ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • pr ๋จธ์ง€๋Š” ๋ฆฌ๋ฒ ์ด์Šค๋‚˜ ์Šค์ฟผ์‹œ๋Š” ํ•˜์ง€ ์•Š๋„๋ก

KPT ํšŒ๊ณ 

Keep

  • ๋™์šด๋‹˜
  • ๋ณ‘์—ฐ๋‹˜
  • ํ˜•์šฑ๋‹˜
  • ์ง„ํ˜•๋‹˜
  • ํ˜œ๋นˆ๋‹˜

Problem

  • ๋™์šด๋‹˜
  • ๋ณ‘์—ฐ๋‹˜
    • ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ๋Šฆ์–ด์ ธ ๋ณ‘๋ชฉ์ด ์ข€ ์ƒ๊ฒผ๋‹ค.
  • ํ˜•์šฑ๋‹˜
  • ์ง„ํ˜•๋‹˜
    • ์ปค๋ฐ‹์ด ์ค‘๋ณต๋˜์–ด ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ์ค‘๋ณต์œผ๋กœ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค.
  • ํ˜œ๋นˆ๋‹˜

Try

  • ๋™์šด๋‹˜
  • ๋ณ‘์—ฐ๋‹˜
  • ํ˜•์šฑ๋‹˜
  • ์ง„ํ˜•๋‹˜
  • ํ˜œ๋นˆ๋‹˜
 

์ง„ํ–‰ํ•œ ์ž‘์—…

  • 10๊ณ„๋ช… ์ •๋ฆฌ
  • ์Šคํ”„๋ฆฐํŠธ ์ƒ๋ช…์ฃผ๊ธฐ
    • 3์ผ ๋‹จ์œ„๋กœ ๊ฐ€์ ธ๊ฐ€์ž !
    • ์ฃผ๋ง์€ 1์‹œ~3์‹œ๊นŒ์ง€ ๊ณตํ†ต์ ์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๊ณ  ๋” ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ €๋…์— ํ•œ๋ฒˆ ๋” ๋ชจ์ด์ž !
  • ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐฉ์‹
    • PR์€ 24์‹œ๊ฐ„ ๋‚ด๋กœ ํ•˜์ž
      • ๋ฆฌ๋ทฐ๋Š” ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ํŒ€์›์„ ์œ„ํ•ด ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ํ•ด์ฃผ๊ธฐ
      • ๋ฏธ๋ฆฌ ์ด์•ผ๊ธฐ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด PR ์˜ˆ๊ณ  ํ•ด์ฃผ๊ธฐ
      • 2~3๋ช… ์ด์ƒ์˜ approve ๋ฐ›์œผ๋ฉด ๋„˜์–ด๊ฐ€๋„๋ก ์œ ์—ฐํ•˜๊ฒŒ ์šด์˜ํ•˜๊ธฐ
    • PR ๋‚ด์šฉ์€?
      • ์‚ฌ์†Œํ•œ ๊ฒƒ์ด๋ผ๋„ ๋ชจ๋‘ PR ๋ณด๋‚ด๊ธฐ
  • ์—ญํ•  ๋ถ„๋ฐฐ(SM, PO, Developer)
    • PO - ๊ณฝ๋™์šด
    • SM - ๊น€ํ˜•์šฑ
    • Developer - ๊น€๋ณ‘์—ฐ, ๋ฐ•์ง„ํ˜•, ๋ฐ•ํ˜œ๋นˆ
  • ์˜ค๋ฅ˜ ์ƒํ™ฉ ๋Œ€์ฒ˜ ๊ฐ€์ด๋“œ
    • Issus ๋ฐœ์ƒ์‹œ Fix !
      • ๋ฌธ์„œํ™” ๋ฐ ๊ณต์œ  โ†’ ํ•ด๊ฒฐ
      • ๋ฌธ์„œ๋ฅผ ์ƒ์„ธํžˆ ์ž‘์„ฑํ•˜์ž
      • ํฐ ์ด์Šˆ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จ๋˜๋ฉด ์ง„ํ–‰ ํ›„์— ๋ฌธ์„œํ™” ๋ฐ ๊ณต์œ ํ•˜์ž
    • ์ด์Šˆ ์‚ฝ์งˆ ์‹œ๊ฐ„ ์ตœ๋Œ€์น˜ : 1์‹œ๊ฐ„
  • ๊นƒ ์ปจ๋ฒค์…˜
    • Git Hook ๊ธฐ๋Šฅ ์‚ฌ์šฉํ•˜๊ธฐ
      feat : ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ fix : ๋ฒ„๊ทธ ์ˆ˜์ •(ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง) refactor : ์ฝ”๋“œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ๋ฐ, ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ ํฌํ•จ - (์‚ญ์ œ ํŒŒ์ผ ํฌํ•จ) style : ๋งˆ๊ฐ ์ฒ˜๋ฆฌ , ์ปจ๋ฒค์…˜ setting : dependency ์„ค์ • test : ${xxxx} ํ…Œ์ŠคํŠธ docs : readme ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ ์ถ”๊ฐ€
      feat: ${function} ๊ฐœ๋ฐœ
      test: ${function} ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
      test: ${function} ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
      test : Following ๋‹จ์œ„ํ…Œ์ŠคํŠธ(repository, service ,controller) test : Follwing ํ†ตํ•ฉํ…Œ์ŠคํŠธ feat : Following ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
  • ๋ธŒ๋žœ์น˜ ์ „๋žต
    • main - ์ตœ์ข… ๋ฐฐํฌ ๋ธŒ๋žœ์น˜ ์ž…๋‹ˆ๋‹ค.
    • develop - ๋ฐฐํฌ ์ „ ๋ชจ๋“  ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ์ˆ˜์ • ์‚ฌํ•ญ์€ ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋กœ Merge๋ฉ๋‹ˆ๋‹ค.
    • ์ด์ŠˆID - ๋ชจ๋“  ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ๋ฆฌํŒฉํ† ๋ง, ๋ฒ„๊ทธ ํ”ฝ์Šค ๋“ฑ์€ ์ด์Šˆ ID๋กœ ์ƒ์„ฑํ•ด์„œ ํ•ด๋‹น ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜
    • ์ง„ํ˜•๋‹˜๊ป˜์„œ XML ํŒŒ์ผ ์ „๋‹ฌ ์™„๋ฃŒ
  • ์ง€๋ผ / ๋ ˆํฌ ์ƒ์„ฑ
    • ์œ ์ €์Šคํ† ๋ฆฌ ์ž‘์„ฑ
  • ํƒœ์Šคํฌ ๋ถ„ํ• 
    • ERD : ๋ณ‘์—ฐ๋‹˜, ํ˜•์šฑ๋‹˜
    • UseCase: ์ง„ํ˜•๋‹˜, ํ˜œ๋นˆ๋‹˜
    • jira : ๋™์šด๋‹˜
    • Domain
      • POST, COMMENT : ๋™์šด, ํ˜•์šฑ, ํ˜œ๋นˆ
      • USER : ๋ณ‘์—ฐ, ์ง„ํ˜•
  • ๊ฐœ๋ฐœํ™˜๊ฒฝ ์…‹ํŒ…
    • BackEnd
      • SpringBoot 2.7.0
      • Java 17
      • Gradle 7.4.2
      • Junit5 / Mockito
      • MySQL
    • FrontEnd
      • Thymeleaf
    • Collaboration
      • Jira
      • Notion
      • Slack
      • Git
  • ์ด์Šˆ๊ด€๋ฆฌ
    • ์ง€๋ผ + ๋…ธ์…˜
  • DTO / Validation ๊ทœ์น™ ์ •ํ•˜๊ธฐ
  • API ์„ค๊ณ„ & ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ ๊ทธ๋ฆฌ๊ธฐ
  • ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ˜•์‹ ์ •ํ•˜๊ธฐ
    • ์„ฑ๊ณต์˜ˆ์‹œ
      // ๋‹จ์ผ๊ฑด { "response": { "id": 3000001, "barcode": "49319927-68ed-4bc3-b022-6c099195f48c", "itemId": 10, "qty": 1 }, } // ๋‹ค์ค‘๊ฑด { "response": [ { "id": 3000000, "barcode": "12cbf5bf-2c96-4172-acb6-4c24a853d255", "itemId": 6, "qty": 1 }, { "id": 3000001, "barcode": "49319927-68ed-4bc3-b022-6c099195f48c", "itemId": 10, "qty": 1 } // ... ], }
      ์‹คํŒจ์˜ˆ์‹œ
      { "code" : V0001 "message" : ๊ฐ„๋‹จ ๋ฉ”์‹œ์ง€ }
      ์ฝ”๋“œ
      ๋‚ด์šฉ
      v0012
      ์•„์ด๋””๊ฐ’ ์˜ค๋ฅ˜
      v1231
      ๋น„๋ฐ€๋ฒˆํ˜ธ ์˜ค๋ฅ˜
  • Swagger vs RestDocs ๋น„๊ต ์ •๋ฆฌ