๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Back-end ๋ฐ๋ธŒ์ฝ”์Šค/week 11 - 13 TIL (soft skill)

[TIL] 221227 - ๋ฐฑ์—”๋“œ์˜ ํ”„๋กœ์ ํŠธ ์ค€๋น„์‚ฌํ•ญ

by young-ji 2023. 1. 6.

 

๋ฐฑ์—”๋“œ๊ฐ€ ์ด์ •๋„๋Š” 

 

 

 

๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ• ๋•Œ(์ง„ํ–‰ํ•˜๊ธฐ์ „) ์ฐธ๊ณ ํ• ๋งŒํ•œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ดค๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋ธ”๋กœ๊ทธ ์ฐธ๊ณ ํ•˜๊ธฐ!

๋ฐฑ์—”๋“œ๊ฐ€ ์ด์ •๋„๋Š” ํ•ด์ค˜์•ผํ•จ - planB

 

์‹œ๋ฆฌ์ฆˆ | ๋ฐฑ์—”๋“œ๊ฐ€ ์ด์ •๋„๋Š” ํ•ด์ค˜์•ผ ํ•จ - city7310.log

์ด๋ฒˆ์—” ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ๊ฒฐ์ •ํ•˜์ž. pip, npm, yarn, gem, maven, gradle ๋“ฑ๊ณผ ๊ฐ™์€ ์˜์กด์„ฑ ๊ด€๋ฆฌ/๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์จ๋ณธ ์  ์—†๋‹ค๋ฉด ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ(Dependency Manager)๋ผ๋Š” ๊ธ€์„ ์ฝ์–ด

velog.io

 

 

1. ํ”„๋กœ์ ํŠธ ๊ธฐํš์„œ(์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„)

ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ธฐ

  • ํ”„๋กœ์ ํŠธ๋ฅผ 5๋ฌธ์žฅ/3๋ฌธ์žฅ/1๋ฌธ์žฅ์œผ๋กœ ์ •์˜ํ•˜๊ธฐ
  • ๋น„์Šทํ•œ ์„œ๋น„์Šค๊ฐ€ ๋ฌด์—‡์ด ์žˆ๊ณ  ์–ด๋–ค ์ฐจ๋ณ„์ ์ด, ๋ฌด์—‡์„ ๋ฐฐ์šธ์ˆ˜ ์žˆ๋Š”์ง€
  • ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ(๋ฉ”์ธ๊ธฐ๋Šฅ)์€ ๋ฌด์—‡์ธ์ง€
  • ๊ธฐ๋Šฅ ํ™”๋ฉด ์Šค์ผ€์น˜ ํ•ด๋ณด๊ธฐ

 

ํ”ผ๋“œ๋ฐฑํ•˜๊ธฐ

  • ๊ฐ€์„ฑ๋น„๊ฐ€ ๋‚ฎ์€ ๊ธฐ๋Šฅ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ (์ค‘์š”๋„์— ๋น„ํ•ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ณ  ๊ตฌํ˜„์ด ์–ด๋ ค์šด ๊ธฐ๋Šฅ) -> ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ
  • linearํ•˜๊ฒŒ ๋Š˜์–ด๋‚˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ -> ๋ฌดํ•œ์ • ๋Š˜์–ด๋‚˜์ง€ ์•Š๋„๋ก, ์ตœ์•…์˜ ์ƒํ•ญ์„ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•ด์•ผํ•œ๋‹ค.
  • validation rule์ด ์ƒ์„ธํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ ->  ๋‹น์—ฐํ•ด ๋ณด์ด๋Š” ๊ฒƒ๋„ ์–ธ๊ธ‰ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ, max ๊ฐ’ ์ง€์ •, ์ค‘๋ณต ๋ฐœ์ƒ ์ผ€์ด์Šค ๊ณ ๋ ค, ...

 

2. ํ”„๋กœ์ ํŠธ ์ค€๋น„ํ•˜๊ธฐ

GitHub Organization ์„ค์ •

: ๊ฐœ์ธ ๋ ˆํฌ๋กœ ๋งŒ๋“ค์–ด๋„ ๋˜์ง€๋งŒ organization ์ถ”์ฒœ. 

 

 

์ž‘์—… ํ”„๋กœ์„ธ์Šค ๊ฒฐ์ •

  • ์ž‘์—… ๊ด€๋ฆฌ ๋„๊ตฌ (Issue Tracker)
    • SaaS(Trello, Asana, Monday, JIRA), GitHub Projrcts + Issues, Notion, ..
  • ์ž‘์—… ๋ฐฉ์‹
    • branch protection / forking workflow
  • ๊ธฐ์ˆ ์  ์˜์‚ฌ๊ฒฐ์ •
    • API ์ œ๊ณต ๋ฐฉ์‹ : REST
    • ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” : JSON
    • ๊ธฐ์ˆ  ์Šคํƒ : ์–ธ์–ด/ํ”„๋ ˆ์ž„์›Œํฌ , ์„œ๋ฒ„ ์ธํ”„๋ผ, ์ปดํ“จํŒ… ์—”์ง„, DB, DB ์„œ๋ฒ„

 

 

3. ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์‹œ ๊ณ ๋ ค์‚ฌํ•ญ

DataBase tips

  • Schema ๋””์ž์ธ์—์„œ ์œ ์˜์ 
    • ํƒ€์ž… ์„ ํƒ์„ ์ž˜ํ•˜์ž : ๋ฐ์ดํ„ฐ์— ๊ฐ€์žฅ ์ž˜ ๋งž๋Š” ํƒ€์ž…์„ ์„ ํƒํ•˜๊ณ , size๋Š” ๊ฐ€๋Šฅํ•œ ํ‘œ์ค€์— ๊ทผ๊ฑฐํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ž.
    • Key ์„ค์ • : ์ž์—ฐkey๋กœ ํ• ๋งŒํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ(์œ ๋‹ˆํฌํ•œ ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ) ๋Œ€์ฒดkey๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • alter table์ด๋‚˜ update ์ฟผ๋ฆฌ ๋“ฑ ํŒŒ๊ดด์ ์ธ ํ–‰๋™์—์„œ ์œ ์˜์ 
    • soft delete : hard delete๋กœ ์‚ญ์ œ๋œ ๊ฒƒ์€ ์‰ฝ๊ฒŒ ๋ณต๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ select ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ• ๋•Œ ํ•ญ์ƒ where์ ˆ์„ ๊ฑธ์–ด์ค˜์•ผํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๊ทธ์—๋”ฐ๋ฅธ ๋…ผ์Ÿ์ด ์žˆ๋‹ค.
    • DROP TABLE ๋ณด๋‹ค ALTER TABLE RENAME TO : ํ…Œ์ด๋ธ”์„ DROP์‹œํ‚ค๋ฉด ๋ณต๊ตฌ๊ฐ€ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„์„ ๋ฐ”๊พผ ํ›„ ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ๋ฉฐ์น  ์ง€์ผœ๋ณธํ›„ ๊ทธ๋•Œ DROP์„ ์ง„ํ–‰ํ•œ๋‹ค. 
  • DB Lock์— ๊ด€ํ•ด
    • ALTER TABLE์„ ๊ฒฝ์šฐ ํ…Œ์ด๋ธ” ์ „์ฒด์— lock์„ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์‹ฌํ•ด์•ผํ•œ๋‹ค. -> Online DDL์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ• ์ˆ˜์žˆ๋‹ค.
    • backfill ์ž‘์—…๊ณผ ๊ฐ™์ด ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ๋ณ€๊ฒฝ์‹œ ํŠธ๋žœ์žญ์…˜์ด ๋๋‚˜๊ธฐ ์ „๊นŒ์ง€ ๋ชจ๋“  row๊ฐ€ lock์— ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์–ด lock์˜ ๋ฒ”์œ„์™€ ์ง€์†์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ˆ˜์‹ญ~์ˆ˜๋ฐฑ๊ฐœ ์ •๋„์”ฉ ๋‚˜๋ˆ ์„œ ์ž‘์€ update๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • DB index์— ๊ด€ํ•ด
    • PK, UQ, FK ๋Š” ์ž๋™์œผ๋กœ index๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค.
    • where ์ ˆ์— ์ž์ฃผ ์“ธ๊ฑฐ๊ฐ™์€ ์ปฌ๋Ÿผ, ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ์— ๋น„์‹ผ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ฑฐ ๊ฐ™์€ ์ปฌ๋Ÿผ์— ์ถ”๊ธฐ์ ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•ด๋‹น ์ปฌ๋Ÿผ์„ ์•Œ๊ธฐ๋Š” ์‰ฝ์ง€์•Š๊ณ  ์ฟผ๋ฆฌ๊ฐ€ ๋Š๋ ค์ง€๋ฉด ์ถ”๊ฐ€ํ•˜๋„๋ก ํ•œ๋‹ค.(query plan)

 

 

API tips

  • API Design - Request
    • Method
    • URL : ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค์— ๋”ฐ๋ผ URL์„ ๋ถ„๋ฅ˜ํ•œ๋‹ค.
    • Header
  • API Design - Response
    • Status Code
      • ์ƒํƒœ์ฝ”๋“œ ์ข…๋ฅ˜๋Š” 4~5๊ฐœ ์ •๋„๋กœ ์ ๊ฒŒ ์œ ์ง€ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค. 
      • ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผ์‹œ์—๋Š” 403(Forbidden) ๋Œ€์‹  404(Not Found) ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•œ๋‹ค.
    • Error Message
    • Body
    • Header : POST ๋ฉ”์†Œ๋“œ์˜ ๊ฒฝ์šฐ ์ƒํƒœ์ฝ”๋“œ 201(Created) + location ํ—ค๋” ์ถ”๊ฐ€๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•œ๋‹ค.
  • API ๋ฌธ์„œํ™”
    • ์ฝ”๋“œ์™€ ๋ฌธ์„œ๊ฐ€ ๊ฐ•๊ฒฐํ•ฉํ•˜์—ฌ ์ž๋™ ์ƒ์„ฑ๋˜๋Š” API Docs ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. -> ๋ฏธ์Šค๋งค์น˜๋ฅผ ์ค„์ด๊ณ , ์ž๋™ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • UI ์ˆ˜์ค€์˜ ๋ฌธ์„œํ™” ๋ฐฉ์‹์œผ๋กœ README.COM์„ ๊ฝค ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

๋Œ“๊ธ€