๐ŸŽซ

๋ฐฑ์—”๋“œ๊ฐ€ ์ด์ •๋„๋Š”.. (์‹ค๋ฌด)

ํ”„๋กœ์ ํŠธ ์ดํ•ดํ•˜๊ธฐ

  • ๋‚ด๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•ด์•ผ ๋‚ด๊ฐ€ ์žฌ๋ฏธ๊ฐ€ ์žˆ๊ณ ,
  • ๊ธฐํš์ž๋ฅผ ๋„์™€์ค„ ์ˆ˜๊ฐ€ ์žˆ์Œ

๊ตฌํ˜„์ด ์–ด๋ ต๊ฑฐ๋‚˜ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ธฐ๋Šฅ

  • ๊ธฐํš์ž์™€ ๋…ผ์˜ํ•˜์—ฌ ๊ธฐ๋Šฅ์˜ ๊ฐ€์„ฑ๋น„๋ฅผ ๋†’์—ฌ์•ผ ํ•จ(์ค‘์š”๋„๋Š” ๋†’๊ณ  ์ผ์ •์€ ์ ๊ฒŒ ๊ฑธ๋ฆฌ๋Š” ์‹์œผ๋กœ)
  • ๋”ฑ ๋ดค์„ ๋•Œ, ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ธ๋ฐ ์ค‘์š”์„ฑ์ด ๋–จ์–ด์ง€๋ฉด ๊ธฐํš์ž์—๊ฒŒ ์ด์•ผ๊ธฐํ•˜๊ธฐ

Validation์— ๋Œ€ํ•˜์—ฌ

๋ฌธ์ž์—ด

  • ์ตœ์†Œ/์ตœ๋Œ€ ๊ธธ์ด
  • ํฌ๋งท(e.g ์ด๋ฉ”์ผ ํฌ๋งท..)
  • Enum(๊ฐ’์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์„ ํƒํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ)
  • ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž ๋ฒ”์œ„ ์ œํ•œ
  • ์ด๋ฉ”์ผ username ๋’ค์— +๋ฌธ์ž ๋ถ™์—ฌ์„œ aliasing ํ•  ์ˆ˜ ์žˆ์Œ

๊ธฐํƒ€

  • ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ์šฉ๋Ÿ‰, ๊ฐœ์ˆ˜ ์ œํ•œ ๊ฑธ์–ด๋‘๋Š”๊ฒŒ ์ข‹์Œ
  • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์˜๋ฏธ์—†๋Š” ๋ฐ์ดํ„ฐ(๋‚˜์ด. ์‹œ๊ฐ„์ง€๋‚˜๋ฉด ๋ฐ”๋€Œ์–ด์•ผํ•˜๋Š”๋ฐ? ๊ทธ๋ž˜์„œ ์ƒ๋…„์›”์ผ ๋ฐ›๋Š”๊ฒŒ ๋‚˜์Œ)

๋ณด์•ˆ์ƒ ์œ„ํ—˜ํ•œ UX > ID๊ฐ€ ํ‹€๋ ธ๋‹ค/ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ‹€๋ ธ๋‹ค

  • ID ๋˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š๋‹ค ๋ผ๊ณ  ์‹คํŒจ์›์ธ detailํ•˜๊ฒŒ ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š”๊ฒƒ
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ•๋„ ๊ฒ€์‚ฌ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ. zxcvbn์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์•Œ๋ ค์ฃผ๊ณ  level์„ ์ •ํ•˜๊ฒŒ ๋งŒ๋“ค์ž(๊ธฐํš์ž์—๊ฒŒ)
  • ๋กœ๊ทธ์ธ์„ ๋ฌดํ•œ์ • ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ โ†’ brute forcing์ด ๊ฐ€๋Šฅํ•˜๋‹ˆ, ์‹œ๋„ํšŸ์ˆ˜ ์ œํ•œ ๊ฑธ๊ธฐ

์˜์‚ฌ๊ฒฐ์ •์˜ ์›์น™

  • ํŒ€์— ์ต์ˆ™ํ•˜๊ฑฐ๋‚˜ ์ˆ™๋ จ๋„๊ฐ€ ์žˆ๋Š”์ง€
  • ํŒ€์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€
  • ๋น„์šฉ ๋ถ€๋‹ด์„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋Š”์ง€
  • ๋ณดํŽธ์ ์ธ ๊ธฐ์ˆ ์ธ์ง€
    • ๋‚˜์ค‘์— ์‚ฌ๋žŒ ๋ฝ‘์„๋•Œ๋‚˜ ๊ตฌ๊ธ€๋งํ•  ๋•Œ ์˜ํ–ฅ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ
  • ํ”„๋กœ๋•ํŠธ์— ์–ด์šธ๋ฆฌ๋Š” ๊ธฐ์ˆ ์ธ์ง€
  • ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์ด ์•„๋‹Œ์ง€

์ž‘์—… ๊ด€๋ฆฌ

์ด์Šˆ ํŠธ๋ž˜์ปค
  • Trello
  • Monday
  • JIRA
    • ๊ด€๋ฆฌ์ž ๊ณ„์ธต์ด ํ™•์‹คํ•œ ์กฐ์ง์ด๊ฑฐ๋‚˜ ๊ฐœ๋ฐœ์ž ์™ธ์˜ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ž‘์—…๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์‚ฌ์šฉ
  • GitHub Projects + Issues
    • ๊ฐœ๋ฐœ์ž ์œ„์ฃผ์˜ ์กฐ์ง์—์„œ ์ฃผ๋กœ ์”€
YouTrack๋„ ๊ดœ์ฐฎ๋‹ค๊ณ  ํ•จ
ํŒ : ๋Œ€์•ˆ์„ ์ฐพ๋Š” ๊ฒฝ์šฐ ์•„๋Š” ๊ฒƒ vs ํ‚ค์›Œ๋“œ๋กœ ์—ฐ๊ด€๊ฒ€์ƒ‰์–ด ์ฐพ์œผ๋ฉด ์ข‹์Œ( JIRA vs )
 

์˜ˆ์™ธ์ฒ˜๋ฆฌ

1. ์˜ˆ์™ธ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ•˜๊ณ  ์ •์˜ํ•  ๊ฒƒ์ธ๊ฐ€?

๐Ÿ“Œ ํ•ด์•ผ ํ•  ์ผ

  • ์—…๋ฌด ๋„๋ฉ”์ธ ์˜ˆ์™ธ / ์‹œ์Šคํ…œ ์˜ˆ์™ธ / ์™ธ๋ถ€ ์—ฐ๋™ ์˜ˆ์™ธ ๋“ฑ ๋ถ„๋ฆฌ๋œ ์ปค์Šคํ…€ ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜์„ธ์š”.
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์—๋Ÿฌ๋Š” BusinessLogicException, DB ๊ด€๋ จ์€ DatabaseException, ์ธ์ฆ ๊ด€๋ จ์€ AuthException ๋“ฑ์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒŒ ์ข‹์•„์š”.
2. ์–ด๋””์„œ, ์–ด๋–ค ๋ ˆ๋ฒจ์—์„œ ํ•ธ๋“ค๋งํ•  ๊ฒƒ์ธ๊ฐ€?

๐Ÿ“Œ ํ•ด์•ผ ํ•  ์ผ

  • ๋กœ์ง ๋‚ด๋ถ€์—์„œ try/except๋ฅผ ๋„ˆ๋ฌด ๋‚จ๋ฐœํ•˜๋ฉด ๋ณต์žกํ•ด์ง โŒ
  • ํ•ต์‹ฌ ๋กœ์ง์—์„œ๋Š” ์˜ˆ์™ธ๋ฅผ ๊ทธ๋Œ€๋กœ raiseํ•˜๊ณ , API handler๋‚˜ middleware ๋ ˆ๋ฒจ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.
  • FastAPI์—์„œ๋Š” @app.exception_handler(...) ๋˜๋Š” middleware์—์„œ ์ „์ฒด ํ•ธ๋“ค๋ง ๊ฐ€๋Šฅ
3. ์—๋Ÿฌ ์‘๋‹ต ํฌ๋งท์„ ์–ด๋–ป๊ฒŒ ํ†ต์ผํ•  ๊ฒƒ์ธ๊ฐ€?

๐Ÿ“Œ ํ•ด์•ผ ํ•  ์ผ

  • ๋ชจ๋“  ์—๋Ÿฌ ์‘๋‹ต์„ ์ผ๊ด€๋œ JSON ๊ตฌ์กฐ๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋ก ํŠธ์—”๋“œ๋‚˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŒŒ์‹ฑํ•˜๊ธฐ ์‰ฝ๋„๋ก status, code, message, details ๋“ฑ์˜ ํ•„๋“œ๋ฅผ ํ†ต์ผํ•˜์„ธ์š”.
4. ๋กœ๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์€ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€?

๐Ÿ“Œ ํ•ด์•ผ ํ•  ์ผ

  • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜๋Š” ๋ฉ”์‹œ์ง€๋Š” ์ ์ ˆํžˆ ๊ฐ€๊ณตํ•˜๊ณ ,
  • ์‹œ์Šคํ…œ ๋‚ด๋ถ€ ์—๋Ÿฌ๋Š” ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(logging, loguru ๋“ฑ)๋กœ ์ €์žฅํ•˜๊ณ ,
  • ํ•„์š”ํ•˜๋ฉด Sentry, Datadog, Slack ์—ฐ๋™์„ ํ†ตํ•ด ์šด์˜ ์ค‘ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜์„ธ์š”.