Upgrade to PRO for Only $50/Yearโ€”Limited-Time Offer! ๐Ÿ”ฅ

[PyCon KR] Mono-repo migration using Pantsbuild

Avatar for Joongi Kim Joongi Kim
October 03, 2022

[PyCon KR] Mono-repo migration usingย Pantsbuild

Avatar for Joongi Kim

Joongi Kim

October 03, 2022
Tweet

More Decks by Joongi Kim

Other Decks in Programming

Transcript

  1. ๋ฐœํ‘œ์ž ์†Œ๊ฐœ โ€ข ์ผํ•˜๋Š” ๋ถ„์•ผ : ๋ฐฑ์—”๋“œ, ๋ถ„์‚ฐ์ฒ˜๋ฆฌ, ๊ฐ€์† ์ปดํ“จํŒ…

    โ€ข ์š”์ฆ˜ ๊ด€์‹ฌ์‚ฌ : ์ผ๊ด€์„ฑ, ๋ฆฌํŒฉํ† ๋ง, 3๋…„ ํ›„์˜ ๋‚˜๋„ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๊ฒŒ โ€ข ์š”์ฆ˜ ์ƒํƒœ ๐Ÿคฏ ๐Ÿ˜ต๐Ÿ’ซโ€โ€ โ€ข (์–ด์ฉŒ๋‹ค๋ณด๋‹ˆ) 7๋…„ ์—ฐ์† PyCon KR ๋ฐœํ‘œ ์ค‘... ์ฃผ๋กœ asyncio ๊ด€๋ จ ์‚ฝ์งˆ ๋‚ด์šฉ
  2. ๋ชฉ์ฐจ โ€ข Mono-repo vs. Multi-repo: ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ๋กœ๋‹ค โ€ข ๊ธฐ์กด ๊ฐœ๋ฐœ

    ํ”„๋กœ์„ธ์Šค์˜ ๋ฌธ์ œ์  โ€ข Pantsbuild์— ๋Œ€ํ•œ ์งง์€ ์†Œ๊ฐœ โ€ข Pantsbuild๋ฅผ ํ™œ์šฉํ•œ ์ด์ „ ๊ณผ์ • โ€ข ์šฐ๋ฆฌ ์‹ค์ •์— ๋งž๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•œ ๋ถ€๋ถ„๋“ค โ€ข ์ด์ „ ๊ณผ์ •์„ ๋งˆ์นœ ํ›„์˜ ๊ฒฝํ—˜ โ€ข ์ •๋ฆฌ
  3. ํ˜„๋Œ€์  ๋นŒ๋“œ ์‹œ์Šคํ…œ์˜ ํ•„์š”์„ฑ โ€ข Software Engineering at Google ("๊ตฌ๊ธ€

    ์—”์ง€๋‹ˆ์–ด๋Š” ์ด๋ ‡๊ฒŒ ์ผํ•œ๋‹ค") Backend.AI ํ”„๋กœ์ ํŠธ๊ฐ€ ์ •ํ™•ํžˆ ์ด ์ง€์ ์„ ์ง€๋‚˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ (7๋…„์ฐจ) ref) https://abseil.io/resources/swe-book/html/ch01.html#time_and_change
  4. ํ˜„๋Œ€์  ๋นŒ๋“œ ์‹œ์Šคํ…œ? โ€ข ์˜์กด์„ฑ ๊ด€๋ฆฌ ์ž๋™ํ™” ๋‚ด๋ถ€ ์˜์กด์„ฑ :

    ์šฐ๋ฆฌ ์กฐ์ง ์•ˆ์—์„œ ์ž‘์„ฑํ•œ ์ปดํฌ๋„ŒํŠธยท์„œ๋น„์Šค๋ผ๋ฆฌ์˜ ์˜์กด ๊ด€๊ณ„ ์™ธ๋ถ€ ์˜์กด์„ฑ : ์šฐ๋ฆฌ ์กฐ์ง ๋ฐ”๊นฅ์—์„œ ์ž‘์„ฑํ•œ ์ปดํฌ๋„ŒํŠธยท์„œ๋น„์Šค๋กœ์˜ ์˜์กด ๊ด€๊ณ„ โ€ข ์„ ์–ธ์  ์˜์กด์„ฑ ๊ด€๋ฆฌ ์‚ฌ๋žŒ์˜ ์‹ค์ˆ˜๋‚˜ ์‚ฌ๋žŒ์— ์˜ํ•œ ์ฐจ์ด๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ์ค„์ด๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? โ€ข ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ configuration์ด ๊ฐ™๋‹ค๋ฉด ๋ˆ„๊ตฌ์˜ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰ํ•ด๋„ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€์•ผ ํ•จ โ€ข ์ž๋™ํ™” ๋ฐ ์บ์‹ฑ Linting, Test, Build & Deploy์™€ ๊ฐ™์€ CI/CD ์ „ ๊ณผ์ • ์ž๋™ํ™”๋ฅผ ์ง€์›ํ•ด์•ผ ํ•จ ๋งค commit๋งˆ๋‹ค ๋ณ€๊ฒฝ๋œ ๋ฒ”์œ„๋ฅผ ์ž๋™ ์ถ”์ถœํ•˜๊ณ  ๊ธฐ์กด ๊ฒฐ๊ณผ ์žฌํ™œ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ์ž‘์—…๋งŒ ์ˆ˜ํ–‰
  5. ์˜์กด์„ฑ ๊ด€๋ฆฌ ์ž๋™ํ™” โ€ข ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž yarn, npm, cargo, poetry,

    pipenv, go get, ... โ€ข ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์˜์กด์„ฑ ํ•ด๊ฒฐ โœ“ ์˜ˆ) A โ†’ C, B โ†’ C ์˜์กด ๊ด€๊ณ„๊ฐ€ ์žˆ์„ ๋•Œ A์™€ B ๋ชจ๋‘์™€ ํ˜ธํ™˜๋˜๋Š” C ๋ฒ„์ „์ด ์กด์žฌํ•˜๋Š”๊ฐ€? โœ“ 1์ฐจ ์˜์กด์„ฑ์˜ n์ฐจ ์˜์กด์„ฑ์„ ๋ชฝ๋•… ๊ฐœ๋ณ„ ์ƒŒ๋“œ๋ฐ•์Šค vs. ํ˜ธํ™˜ ๋ฒ„์ „ ๋ชจ๋‘ ๋งž์ถ”๊ธฐ (NP-complete[1]) ์˜์กด์„ฑ ์ž ๊ทธ๊ธฐ : ๊ณต๊ธ‰๋ง ๊ณต๊ฒฉ ๋ฐ ์˜ˆ์ธก๋˜์ง€ ์•Š์€ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•œ ์˜ค๋ฅ˜ ์˜ˆ๋ฐฉ ์ž๋™ํ™” โœ“ ์˜์กด์„ฑ์˜ ๊ฐœ์ˆ˜์™€ ์ƒํ˜ธ ์˜์กด ๊ด€๊ณ„์˜ ์ˆซ์ž๊ฐ€ ์กฐ๊ธˆ๋งŒ ๋Š˜์–ด๋„ ์‚ฌ๋žŒ์ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ โœ“ ์˜์กด์„ฑ์˜ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ ์ž๋™ ํƒ์ง€ ๋ฐ ํŒจํ‚ค์ง€ metadata์— ์ž๋™ ์ ์šฉ ๋“ฑ [1] https://research.swtch.com/version-sat
  6. Mono-repo์™€ ๋นŒ๋“œ ์‹œ์Šคํ…œ โ€ข "One version rule" A โ†’ C,

    B โ†’ C ์˜์กด ๊ด€๊ณ„๊ฐ€ ์žˆ์„ ๋•Œ C๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ฒ„์ „๋งŒ ์กด์žฌํ•ด์•ผ ํ•˜๋ฉฐ, A์™€ B์˜ ๋ชจ๋“  ์ฝ”๋“œ๋ฒ ์ด์Šค๋„ ๊ทธ ๋‹จ ํ•˜๋‚˜์˜ C ๋ฒ„์ „์— ๋งž๋„๋ก ํ•ญ์ƒ ์œ ์ง€๋ณด์ˆ˜๋˜์–ด์•ผ ํ•จ โ€ข Mono-repo๋ฅผ ๋„์ž…ํ•˜๋ฉด ์ข‹์€ ์ ? ์ „์ฒด ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ค‘๋ณต์„ ์‰ฝ๊ฒŒ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Œ C์˜ API๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ ์ „์ฒด ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ํ•œ๋ฒˆ์— ์ˆ˜์ •(๋ฆฌํŒฉํ† ๋ง)ํ•  ์ˆ˜ ์žˆ์Œ ๋‚ด๋ถ€ ์˜์กด์„ฑ์„ ๋ชจ๋‘ ์„ ์–ธ์  ๋นŒ๋“œ ์„ค์ •์œผ๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ โœ“ ์ ์ ˆํ•œ ๋„๊ตฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ์˜์กด ๊ด€๊ณ„ ์ถ”๋ก  ์ž์ฒด๋ฅผ ์ž๋™ํ™”ํ•ด๋ฒ„๋ฆด ์ˆ˜๋„ ์žˆ์Œ
  7. ์žฅ๋‹จ์  ๋น„๊ต โœ— ์—ฐ๊ด€ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ๊ณ ๋ คํ•ด ์ž‘์—…ํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์†๋„ ๋А๋ ค์งˆ

    ์ˆ˜ ์žˆ์Œ โœ— ์ฝ”๋“œ ๋™๊ธฐํ™”์— ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ โœ— ์‹ค์ œ๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†๋Š” ์ปดํฌ๋„ŒํŠธ๋„ ๋ฆด๋ฆฌ์ฆˆ ์‹œ ์ƒˆ ๋ฒ„์ „์ด ์ฐํž˜ โœ— ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ fork๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์–ด๋ ค์›€ โœ“ ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ง„์ž…์žฅ๋ฒฝ์„ ๋‚ฎ์ถค โœ“ ์ค‘์•™์ง‘์ค‘ํ™”๋œ ์ฝ”๋“œ ๊ด€๋ฆฌ โœ“ ์ „์ฒด ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๊ณ ํ†ต ์—†๋Š” ๋ฆฌํŒฉํ† ๋ง ๊ฐ€๋Šฅ โœ“ ๊ด€๋ จ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๊นจ๋จน๊ธฐ ์–ด๋ ค์›€ โœ“ ๊ฐ ํŒ€์ด ๊ฐ™์€ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์™€ ๋ฌธํ™”๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋จ โœ“ ๋…๋ฆฝ์ ์ธ ์ปดํฌ๋„ŒํŠธ ๋ฒ„์ „ ๋ฒˆํ˜ธ ๋ถ€์—ฌ โœ“ ๋…๋ฆฝ์ ์ธ ์„œ๋น„์Šค ๋ฆด๋ฆฌ์ฆˆ ์ผ์ • โœ“ ์ €์žฅ์†Œ ๋‹จ์œ„์˜ ์ ‘๊ทผ ์ œ์–ด โœ“ ๊ฐ ์ €์žฅ์†Œ ๋‹ด๋‹น ํŒ€๋“ค์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ผ ์ง„ํ–‰ โœ— ๊ณตํ†ต ์ฝ”๋“œยท๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฐ˜๋ณต์ ์ธ ๋™๊ธฐํ™” ํ•„์š” โœ— ์ €์žฅ์†Œ ๋‹จ์œ„๋กœ ํŒ€๋“ค์ด ํŒŒํŽธํ™”๋จ โœ— ์ „์ฒด ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ view๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ์ด ์ ์–ด์ง โœ— ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋“ค์ด ์—ฌ๋Ÿฌ ์ €์žฅ์†Œ๋ฅผ ๋‘˜๋Ÿฌ๋ณด๊ธฐ ์–ด๋ ค์›€ Multi-Repo Mono-Repo ref) https://kinsta.com/blog/monorepo-vs-multi-repo/
  8. ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค ์š”์•ฝ โ€ข GitHub ์ €์žฅ์†Œ ์„ค์ • ๊ธฐ์ค€ ๋ฆด๋ฆฌ์ฆˆ ํŒจํ‚ค์ง€

    1๊ฐœ๋‹น ์ €์žฅ์†Œ 1๊ฐœ ํŒจํ‚ค์ง€๋ณ„ CI/CD ์›Œํฌํ”Œ๋กœ์šฐ ์ž‘์„ฑ ์šฉ์ด & ํŒจํ‚ค์ง€๋ณ„ ๊ฐœ๋ณ„ ๋ฆด๋ฆฌ์ฆˆ ๊ฐ€๋Šฅ โ€ข Backend.AI ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ค์ • ๋ฐฉ๋ฒ• ์„œ๋ฒ„์ธก ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์น˜๋ฅผ ์œ„ํ•œ ์ตœ์†Œ ์ปดํฌ๋„ŒํŠธ ์ง‘ํ•ฉ (6๊ฐœ) โœ“ manager, agent, common, client-py, webserver, storage-proxy โœ“ ํ”„๋ก ํŠธ์—”๋“œ๋Š” ๋˜ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ... ๊ฐœ๋ฐœํ™˜๊ฒฝ ์ž๋™์„ค์ • ์Šคํฌ๋ฆฝํŠธ (install-dev.sh) โœ“ docker-compose ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปจํ…Œ์ด๋„ˆ ์„ค์น˜ ("halfstack") โœ“ ์ปดํฌ๋„ŒํŠธ๋ณ„ ์ €์žฅ์†Œ ํด๋ก , venv ์ƒ์„ฑ, editable install ์ˆ˜ํ–‰
  9. ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค ๋ฌธ์ œ์  (1/2) โ€ข ์—ฌ๋Ÿฌ ์ €์žฅ์†Œ ์‚ฌ์ด์˜ ๋ธŒ๋žœ์น˜ ๋™๊ธฐํ™”

    ๊ฐœ๋ฐœํ•˜๋‹ค๊ฐ€ git switch๋ฅผ n๋ฒˆ ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ค‘๊ฐ„์— ํ•˜๋‚˜ ๋นผ๋จน์œผ๋ฉด... โ€ข ํ•˜๋‚˜์˜ ์ด์Šˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ PR์„ ์ž‘์„ฑยท๋ฆฌ๋ทฐํ•ด์•ผ ํ•จ ๋Œ€ํ‘œ์  ์‹ค์ˆ˜ ์‚ฌ๋ก€ : manager์— API๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ client์— ๋Œ€์‘ ๋ช…๋ น์–ด ์ถ”๊ฐ€ํ•˜๋Š” ๊ฑธ ๊นŒ๋จน๋Š” ๊ฒฝ์šฐ โœ“ ๋ฆฌ๋ทฐ์–ด๋„ ์ข…์ข… ๊นŒ๋จน์Œ... GitHub Issue & PR ๊ธฐ๋Šฅ๊ณผ ์–ด์šธ๋ฆฌ์ง€ ์•Š์Œ โœ“ ํ•˜๋‚˜์˜ ์ด์Šˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ PR์ด ์—ฐ๊ฒฐ๋˜๋ฉด ํ•˜๋‚˜์˜ PR๋งŒ ๋ณ‘ํ•ฉํ•ด๋„ ์ด์Šˆ ์™„๋ฃŒ๋กœ ์ฒ˜๋ฆฌ๋จ (OR ์กฐ๊ฑด) GitHub Project v2 ๋‚˜์™”์ง€๋งŒ (์•„์ง) ์—ฌ๋Ÿฌ ์ €์žฅ์†Œ์— ๊ฑธ์ณ label, milestone์„ ํ†ตํ•ฉ ๊ด€๋ฆฌ ๋ถˆ๊ฐ€ PR ์ž‘์„ฑ์ž๋„ ํ—ท๊ฐˆ๋ฆฌ๊ณ  PR ๋ฆฌ๋ทฐ์–ด๋„ ํ—ท๊ฐˆ๋ฆฌ๊ณ ... ๐Ÿคฏ โ€ข ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋“ค์˜ ์–ด๋ ค์›€ ์—ฌ๋Ÿฌ ์ €์žฅ์†Œ์— ๊ฑธ์นœ CI ๋™์ž‘์„ ์œ„ํ•ด PR branch ์ด๋ฆ„์„ ๋งž์ถฐ์•ผ ํ•˜๋Š” ์•”๋ฌต์  ๊ทœ์น™ ์กด์žฌ
  10. ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค ๋ฌธ์ œ์  (2/2) โ€ข ๋ฆฌํŒฉํ† ๋ง์˜ ์–ด๋ ค์›€ manager, agent์—์„œ ๋ชจ๋‘

    ์ฐธ์กฐํ•˜๋Š” common ํŒจํ‚ค์ง€์˜ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐ”๊พธ๋ฉด manager, agent ์ €์žฅ์†Œ์—๋„ PR์„ ์ƒ์„ฑํ•ด์•ผ ํ•จ common ํŒจํ‚ค์ง€๋ฅผ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ ์žฌํ™œ์šฉํ•˜๋ ค ํ•ด๋„ ์ ์  ๋” ๊ท€์ฐฎ์•„์งˆ ๊ฒƒ์ด ๊ฑฑ์ •๋˜์–ด ์†Œ๊ทน์ ์ด๊ฒŒ ๋จ ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ด€๋ฆฌ ํฌ์ธํŠธ๋ฅผ ๋Š˜๋ฆฌ๊ฒŒ ๋˜๋ฏ€๋กœ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•  ์ฝ”๋“œ๋ฅผ ๋ชฉ์ ์ด๋‚˜ ์˜๋„์™€ ์ƒ๊ด€ ์—†์ด common ํŒจํ‚ค์ง€ ์•ˆ์— ์ „๋ถ€ ๋‹ค ๋•Œ๋ ค๋ฐ•๊ฒŒ ๋จ โ€ข ๋ฆด๋ฆฌ์ฆˆ ๊ณผ์ •์˜ ์–ด๋ ค์›€ common ๋ฒ„์ „์„ ๋จผ์ € ๋ฆด๋ฆฌ์ฆˆํ•˜๊ณ  PyPI ์—…๋กœ๋“œ ํ™•์ธ ํ›„ manager, agent ๋ฒ„์ „์„ ๋ฆด๋ฆฌ์ฆˆํ•ด์•ผ CI๊ฐ€ ๊นจ์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ฌ๋žŒ์ด ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๋ฐœ์ƒ 6๊ฐœ์˜ ํŒจํ‚ค์ง€๋ฅผ ๋˜‘๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ๋ฆด๋ฆฌ์ฆˆํ•˜๋‹ค๋ณด๋ฉด ํ˜„ํƒ€๊ฐ€ ์˜ด... (๊ฐ€๋” ์‹ค์ˆ˜๋„ ๋ฐœ์ƒ) โœ“ changelog๋กœ๋ถ€ํ„ฐ release note ์ถ”์ถœํ•˜๋Š” ๋ถ€๋ถ„์ด ์ž๋™ํ™”๋˜์–ด ์žˆ์ง€ ์•Š์•˜์Œ โœ“ ์ž๋™ํ™”ํ•˜๋ ค๊ณ  ํ•ด๋„ 6๊ฐœ ์ €์žฅ์†Œ์— ๋˜‘๊ฐ™์€ ์„ค์ •๊ณผ ์ปค๋ฐ‹์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ•˜๋‹ˆ ์•ˆ ํ•˜๊ฒŒ ๋จ
  11. ํ•ด๊ฒฐ์ฑ… โ€ข ๋ฌธ์ œ์ ์„ ์š”์•ฝํ•˜๋ฉด: ๊ฐ™์€ ์ผ์„ ์—ฌ๋Ÿฌ ์ €์žฅ์†Œ์—์„œ ๋ฐ˜๋ณตํ•จ์— ๋Œ€ํ•œ

    ๊ท€์ฐจ๋‹ˆ์ฆ˜์œผ๋กœ ๋ฆฌํŒฉํ† ๋ง์„ ๊ฒŒ์„๋ฆฌํ•˜๊ฒŒ ๋จ ์ €์žฅ์†Œ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“ค ๋•Œ ์ฝ”๋“œ ์ž‘์„ฑ์ž์™€ ๋ฆฌ๋ทฐ์–ด ๋ชจ๋‘ context switching ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง โ€ข (Semi-)mono-repo๋กœ ๊ฐ‘์‹œ๋‹ค! ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋ฐฑ, ์ˆ˜์ฒœ ๋ช…์ด๊ณ  ์ฝ”๋“œ๊ฐ€ ๋ช‡๋ฐฑ๋งŒ์ค„ ์ด๋ ‡๋‹ค๋ฉด scalability ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์•„๋‹˜ ํšŒ์‚ฌ ์ „์ฒด mono-repo๊ฐ€ ์•„๋‹ˆ๋ผ, ๋™์ผ ๋ฆด๋ฆฌ์ฆˆ ์ฃผ๊ธฐ๋ฅผ ๊ฐ–๊ณ  ์ƒํ˜ธ ๋‚ด๋ถ€ ์˜์กด์„ฑ์ด ์กด์žฌํ•˜๋Š” Backend.AI ์„œ๋ฒ„์ธก ์˜คํ”ˆ์†Œ์Šค ์ปดํฌ๋„ŒํŠธ๋“ค๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ํ•จ โ€ข ๊ณ ๋ฏผ ๋‚ด๋ถ€ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ž๋™ํ™”ํ• ๊นŒ? (setup.cfg ํŒŒ์‹ฑ ๋˜๋Š” ์ƒ์„ฑ?) CI์—์„œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ํ…Œ์ŠคํŠธ ๋Œ๋ฆฌ๊ณ  ์‹ถ์€๋ฐ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜์ง€? (git sparse checkout?) Mono-repo๋ฅผ ์ง€์›ํ•˜๋Š” ํ˜„๋Œ€์  ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•˜๋‹ค!
  12. What is Pants? โ€ข ์ฃผ์š” ๊ธฐ๋Šฅ ์ •์  ๋ถ„์„์— ์˜ํ•œ ์˜์กด์„ฑ

    ์ž๋™ ์ถ”๋ก  Python ์ƒํƒœ๊ณ„์— ๋Œ€ํ•œ first-class support ์ž‘์—… ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฐ•๋ ฅํ•œ ์บ์‹ฑ๊ณผ ํ•จ๊ป˜ ๋น„๋™๊ธฐ ๋ณ‘๋ ฌ ์‹คํ–‰ ํ”Œ๋Ÿฌ๊ทธ์ธ API๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ธฐ๋Šฅ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•จ โ€ข ํ†บ์•„๋ณด๊ธฐ https://www.pantsbuild.org/docs/how-does-pants-work https://blog.pantsbuild.org/pycon-us-2022-talk/ Pants 2 is a fast, scalable, user-friendly build system for codebases of all sizes. It's currently focused on Python, Go, Java, Scala, Shell, and Docker, with support for other languages and frameworks coming soon. ref) https://www.pantsbuild.org/
  13. Pants Architecture Rust ๊ธฐ๋ฐ˜ DAG ์Šค์ผ€์ค„๋Ÿฌ ๋ฐ ๋น„๋™๊ธฐ ๋ณ‘๋ ฌ ์‹คํ–‰

    ์—”์ง„ (monadic, pure, cancellable/interruptible, concurrent, cached) Python ๊ธฐ๋ฐ˜ ๋นŒ๋“œ ๊ทœ์น™ ์ •์˜ ์—”์ง„ & ๋‚ด์žฅ๋œ ์–ธ์–ด๋ณ„ backend ํ”Œ๋Ÿฌ๊ทธ์ธ ํŒŒ์ผ์‹œ์Šคํ…œ๊ณผ ์šด์˜์ฒด์ œ Git ์ €์žฅ์†Œ์— ์ •์˜๋œ BUILD ์ •์˜ ํŒŒ์ผ ๋ฐ pants.toml ์‚ฌ์šฉ์ž ์„ค์ • (๋นŒ๋“œ ํƒ€๊ฒŸ ํ™˜๊ฒฝ์œผ๋กœ๋Š” ์ž„์˜ Python ๋ฒ„์ „ ์‚ฌ์šฉ ๊ฐ€๋Šฅ) pantsbuild-pants๋ผ๋Š” ์ด๋ฆ„์˜ PyPI ํŒจํ‚ค์ง€ ์•ˆ์— ํฌํ•จ ์‚ฌ์ „ ์„ค์น˜๋œ Python ๋Ÿฐํƒ€์ž„ (3.7, 3.8, 3.9 ์ค‘ ํ•˜๋‚˜) PEX ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ๊ธฐ ๋ฐ ํŒจํ‚ค์ง€ ์˜์กด์„ฑ resolver
  14. Pants ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ• โ€ข Pants๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ธํŒ…๋œ Git ์ €์žฅ์†Œ์— ํ•„์š”ํ•œ

    ์š”์†Œ๋“ค: ./pants ์Šคํฌ๋ฆฝํŠธ (๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์„œ ๋ณต์‚ฌํ•ด๋‘ ) pants.toml ๋ฐ pants.ci.toml **/BUILD ํŒŒ์ผ๋“ค โœ“ ๋นŒ๋“œ ๋Œ€์ƒ(์†Œ์Šค ํŒŒ์ผ, ๋ฆฌ์†Œ์Šค ํŒŒ์ผ ๋“ฑ)๊ณผ ์˜์กด ๊ด€๊ณ„ ์„ ์–ธ โ€ข ./pants [global-options] {goal} [goal-options] [targets] Pants ๋ณธ์ฒด๋ฅผ ~/.cache/pants/ ๋ฐ ./.pants.d ์•ˆ์— ์ž๋™ ์„ค์น˜ BUILD ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ํƒ€๊ฒŸ๊ณผ ์˜์กด ๊ด€๊ณ„๋ฅผ DAG ํ˜•ํƒœ๋กœ ์ƒ์„ฑ ๋ณ‘๋ ฌ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋ณ‘๋ ฌํ™”ํ•˜๋ฉด์„œ DAG ์ž‘์—… ๊ทธ๋ž˜ํ”„ ์‹คํ–‰ ref) https://docs.backend.ai/en/latest/dev/daily-workflows.html
  15. GitHub ์ €์žฅ์†Œ ์žฌ๊ตฌ์„ฑ backend.ai-manager backend.ai-agent backend.ai-common backend.ai-webserver backend.ai-client-py backend.ai-storage-proxy backend.ai-webui

    backend.ai-client-js Backend.AI Core https://github.com/lablup/... Backend.AI Fronted https://github.com/lablup/backend.ai ๋Œ€ํ†ตํ•ฉ!
  16. Mono-repo ์ €์žฅ์†Œ ๊ตฌ์กฐ Unified package version Pants build config for

    each directory (like Bazel) "local-config" templates for Backend.AI Core Backend.AI developer documentation Backend.AI plugin development workspace Utility shell scripts for developers Backend.AI Core source codes Backend.AI Core test codes Pants main config Toolchain configs (flake8, mypy, pytest) Unified requirements for all components Unified requirements dependency lock Toolchain requirements dependency lock Our Pants plugin for custom setup.py generation Main entry scripts for daily use venvs & build artifacts generated by Pants VERSION **/BUILD configs/{manager,agent,common,...} docs/ plugins/ scripts/ src/ai/backend/{manager,agent,common,...} tests/{manager,agent,common,...} pants.toml, pants.ci.toml pyproject.toml, .flake8 requirements.txt python.lock tools/*.lock tools/pants-plugin/setupgen/ ./pants, ./py, ./backend.ai dist/
  17. ๊ธฐ์กด multi-repo ์ด์ „ ๋ฐฉ๋ฒ• setup.cfg, requirements/*.txt README.md changes/, CHANGELOG.md configs/

    scripts/ src/ai/backend/{component}/ tests/ src/ai/backend/{component}/BUILD, VERSION, pants.toml, BUILD, requirements.txt src/ai/backend/{component}/README.md changes/, CHANGELOG.md configs/{component}/ scripts/{component}/ src/ai/backend/{component}/ tests/{component}/ (unified) (unified) __version__ = '22.03.1' from pathlib import Path __version__ = ( Path(__file__).parent / 'VERSION' ).read_text().strip() $ cd src/ai/backend/{component} $ ln -s ../../../../VERSION src/ai/backend/{component}/__init__.py: (moved) (moved) (moved) (moved) (moved)
  18. ์ „์ฒด ์ด์ „ ๊ณผ์ • โ€ข https://github.com/lablup/backend.ai/pull/417 4์›” 27์ผ์— ์‹œ์ž‘ํ•˜์—ฌ 5์›” 31์ผ์—

    ๋ณ‘ํ•ฉ (์ด 168๊ฐœ ์ปค๋ฐ‹) / ์ดํ›„์—๋„ ๋‹ค์ˆ˜์˜ follow-up PR ์žˆ์Œ โœ“ ์›๋ž˜ ๊ณ„ํš์€ 2์ฃผ์˜€์ง€๋งŒ ์—ญ์‹œ๋‚˜... ๐Ÿ˜… Pantsbuild ์ปค๋ฎค๋‹ˆํ‹ฐ ์Šฌ๋ž™์—์„œ 60์—ฌํšŒ ์ด์ƒ์˜ ๊ธฐ์ˆ  ์งˆ์˜์‘๋‹ต ์ง„ํ–‰ Pants ๋ฒ„๊ทธ ์‹ ๊ณ  5ํšŒ (๋ชจ๋‘ ์ˆ˜์ •๋จ), ๊ธฐ๋Šฅ ์ œ์•ˆ 2ํšŒ, ๋ฌธ์„œ ์ˆ˜์ • 2ํšŒ Pants๊ฐ€ ์˜์กดํ•˜๋Š” Pex์˜ ๋ฒ„๊ทธ ์‹ ๊ณ  ๋ฐ ๋ฆด๋ฆฌ์ฆˆ ํŠธ๋ฆฌ๊ฑฐ 3ํšŒ โœ“ ํ•œ๊ตญ ์‹œ๊ฐ„์œผ๋กœ ์˜คํ›„์— ๋ฒ„๊ทธ ์‹ ๊ณ , ๋ฐค์— ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ๋Œ€ํ™”, ์ƒˆ๋ฒฝ์— ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ณ ์น˜๊ณ  ๋ฆด๋ฆฌ์ฆˆํ•ด์คŒ, ๋‹ค์Œ ๋‚  ์•„์นจ์— ์ ์šฉํ•˜๊ณ  ์˜คํ›„์— ํ”ผ๋“œ๋ฐฑ ๋ฐ˜๋ณต... โ€ข Mono-repo ํ•ฉ์นœ ๊ฒฐ๊ณผ๋ฌผ Backend.AI Core ๋ณธ์ฒด ์ฝ”๋“œ : 7.4๋งŒ์ค„ ๋ชจ๋“  ์™ธ๋ถ€ ์˜์กด์„ฑ๊นŒ์ง€ ํฌํ•จํ•˜์˜€์„ ๋•Œ ์ฝ”๋“œ : 150๋งŒ์ค„ ์ด์ƒ
  19. setup.py Generator โ€ข Pants ํ”Œ๋Ÿฌ๊ทธ์ธ : tools/pants-plugins/setupgen โ€ข ์ถ”๊ฐ€ํ•œ ๊ธฐ๋Šฅ

    ์ €์žฅ์†Œ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ VERSION ํŒŒ์ผ์„ ๋ฒ„์ „ ๋ฒˆํ˜ธ ์†Œ์Šค๋กœ ์‚ฌ์šฉ README.md, README.rst ํŒŒ์ผ์˜ ์กด์žฌ ์—ฌ๋ถ€์— ๋”ฐ๋ผ long_description_type ๋‹ค๋ฅด๊ฒŒ ์„ค์ • ๋ฒ„์ „ ๋ฒˆํ˜ธ์— alpha, beta, rc ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๊ทธ์— ๋งž๋Š” trove classifier ์ ์šฉ ๋ผ์ด์„ผ์Šค ์œ ํ˜• ์˜ต์…˜ ์ธ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋นŒ๋“œ๋  ํŒจํ‚ค์ง€๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ผ์ด์„ผ์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
  20. Platfrom-specific Deps โ€ข Pants ํ”Œ๋Ÿฌ๊ทธ์ธ : tools/pants-plugins/platform_resources โ€ข ์ถ”๊ฐ€ํ•œ ๊ธฐ๋Šฅ

    Backend.AI Agent์˜ ์˜์กด์„ฑ์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š” pre-built executable์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•œ ํƒ€๊ฒŸ ํ”Œ๋žซํผ ์˜ต์…˜์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•จ ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋‹ฌ๋ฆฌ Pants ๋‚ด๋ถ€์˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ API๊ฐ€ ๋ฒ„์ „์— ๋”ฐ๋ผ ์ž์ฃผ ๋ฐ”๋€Œ์–ด์„œ ๋งค๋ฒˆ ํ˜ธํ™˜์„ฑ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•จ (ํ–ฅํ›„ ์•ˆ์ •ํ™”๋  ์ˆ˜ ์žˆ์Œ)
  21. towncrier Tool โ€ข Pants ํ”Œ๋Ÿฌ๊ทธ์ธ : tools/pants-plugins/towncrier โ€ข ์ถ”๊ฐ€ํ•œ ๊ธฐ๋Šฅ

    black, isort, flake8 ๋“ฑ๊ณผ ๊ฐ™์ด Python ์†Œ์ŠคํŒŒ์ผ ํƒ€๊ฒŸ์„ ์œ„ํ•œ ์ถ”๊ฐ€ ๋„๊ตฌ๋กœ towncrier๋ฅผ ์ •์˜ํ•จ ๋‹ค๋ฅธ ๋„๊ตฌ์ฒ˜๋Ÿผ towncrier๋„ ๋ณ„๋„์˜ lock ํŒŒ์ผ๊ณผ ์ „์šฉ venv ํ™˜๊ฒฝ ํ•˜์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
  22. Backend.AI ๋™์  ๋ชจ๋“ˆ ๋กœ๋”ฉ โ€ข ์ง์ ‘ BUILD ํŒŒ์ผ ๊ฒ€์ƒ‰ ๋ฐ

    parsingํ•˜๋Š” ์ž์ฒด ๋ชจ๋“ˆ ๋กœ๋” ๊ฐœ๋ฐœ https://github.com/lablup/backend.ai/blob/main/src/ai/backend/plugin/entrypoint.py โ€ข ./pants run ... ๋Œ€์‹  ./pants export :: ์‹คํ–‰ํ•œ ํ›„ ./py wrapper ์Šคํฌ๋ฆฝํŠธ ํ™œ์šฉ pex๊ฐ€ ์ƒ์„ฑํ•œ ๋ณ„๋„์˜ ์‹คํ–‰ํ™˜๊ฒฝ์—๋Š” package metadata๋„ ์—†๊ณ  BUILD ํŒŒ์ผ๋„ ์—†์Œ ใ… ใ… 
  23. ์ข‹์•˜๋˜ ์ ๋“ค โ€ข ์ƒˆ๋กœ์šด ๋ฆด๋ฆฌ์ฆˆ๋ฅผ PyPI์— ๋ฐฐํฌํ•˜๋Š” ์‹œ๊ฐ„์ด 10๋ถ„ ์ดํ•˜๋กœ

    ๊ฐ์†Œ ์˜์กด์„ฑ์ด ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฆด๋ฆฌ์ฆˆํ•˜๊ณ  CI ์ž‘์—…์„ ๋Œ๋ฆด ํ•„์š”๊ฐ€ ์—†์–ด์ง โ€ข ๊ฐ์ข… ๋ฆด๋ฆฌ์ฆˆ ๊ด€๋ จ ์ž‘์—…๋“ค์˜ ์ž๋™ํ™” ๋‹ค์ˆ˜ ์ €์žฅ์†Œ์— ์ค‘๋ณต์œผ๋กœ ํ•ด์•ผ ํ–ˆ๋˜ ์ผ์„ ํ•œ๋ฒˆ๋งŒ ํ•˜๋ฉด ๋จ ์˜ˆ) CHANGELOG.md์—์„œ ๋งˆ์ง€๋ง‰ ๋ฒ„์ „์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ๋งŒ ์ถ”์ถœํ•˜์—ฌ GitHub Release ์„ค๋ช… ๋“ฑ๋ก โ€ข ํ•˜๋‚˜์˜ ์ด์Šˆ๋Š” ํ•˜๋‚˜์˜ PR๋กœ ์™„๊ฒฐ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์— ๊ฑธ์นœ ๋ฆฌํŒฉํ† ๋ง(ํŠนํžˆ ์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์˜ ์˜์กด์„ฑ์ด ์žˆ์„ ๋•Œ)์„ ํ•˜๋‚˜์˜ PR๋กœ ์™„๊ฒฐ ๊ฐœ๋ฐœ ๊ด€๋ จ ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ๊นŒ์ง€ ํ•˜๋‚˜์˜ PR ์•ˆ์—์„œ ์™„๊ฒฐ ์œ„์™€ ๊ฐ™์€ ๋ณ€ํ™”๋กœ ์ธํ•ด GitHub Projects v2 ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋”์šฑ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ โ€ข ๋ณ€๊ฒฝ ๋ฒ”์œ„๋งŒ ํ…Œ์ŠคํŠธ (๋ชจ๋…ธ๋ฆฌํฌ์˜ ์ฝ”๋“œ ์–‘์ด ๋งŽ์•„๋„ CI ์†Œ์š” ์‹œ๊ฐ„ ์˜ํ–ฅ ์ตœ์†Œํ™”) ./pants test --changed-since=main
  24. ์ ์‘์ด ํ•„์š”ํ–ˆ๋˜ ์ ๋“ค (1/3) โ€ข Pants ์ž์ฒด Python ์š”๊ตฌ ๋ฒ„์ „๊ณผ

    Backend.AI์˜ Python ์š”๊ตฌ ๋ฒ„์ „ ๋ถˆ์ผ์น˜ โ†’ ๋‹ค์ค‘ Python ์„ค์น˜ Pants๋Š” Apple Silicon Mac์—์„œ Python 3.9 ํ™˜๊ฒฝ์„ ์š”๊ตฌํ•จ Backend.AI๋Š” Python 3.10 ํ™˜๊ฒฝ์„ ์š”๊ตฌํ•จ macOS Monterey๋Š” Python 3.8์„ ๊ธฐ๋ณธ ์ œ๊ณต Homebrew, pyenv ๋“ฑ์„ ์–ธ์ œ ์–ด๋–ป๊ฒŒ ์„ค์น˜ํ–ˆ๋А๋ƒ์— ๋”ฐ๋ผ Python 3.9๊ฐ€ ์—†๋‹ค๋ฉด... โœ“ ๊ฐ€์žฅ ๋น ๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : brew install [email protected] ๋˜๋Š” pyenv local 3.9.13 pyenv๋‚˜ venv์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์ ์€ ๊ธฐ์—ฌ์ž๋“ค์˜ ๊ฒฝ์šฐ ์—ฌ๊ธฐ์„œ ๋งŽ์€ ์‚ฝ์งˆ์„ ํ•˜๊ฒŒ ๋จ (์˜ˆ : ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์•„์นด๋ฐ๋ฏธ ... ๐Ÿ™‡)
  25. ์ ์‘์ด ํ•„์š”ํ–ˆ๋˜ ์ ๋“ค (2/3) โ€ข PYTHONPATH ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค์— ์ „๋‹ฌํ•˜๋Š”

    ๊ฒƒ์„ ์ข…์ข… ๊นŒ๋จน์–ด์„œ ๊ฒช๋Š” import error Pants ํ™˜๊ฒฝ์—์„œ๋Š” pants.toml์— ์„ค์ •๋œ source_roots๋ฅผ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค์—์„œ๋„ ์ธ์‹ํ•ด์•ผ ํ•จ โ€ข Pants๊ฐ€ ์ธ์‹ ๋ชปํ•˜๋Š” ๋‚ด๋ถ€ ์˜์กด ๊ด€๊ณ„ ๋•Œ๋ฌธ์— ํŒจํ‚ค์ง€ ๋ฐฐํฌ ํ›„ ๋ฐœ์ƒํ•˜๋Š” "module not found" ์˜ค๋ฅ˜๋“ค importlib.import_module() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค๊ฑฐ๋‚˜ SQLAlchemy๊ฐ€ database URL๋กœ๋ถ€ํ„ฐ ์—”์ง„์„ ๊ฒฐ์ •ํ•˜์—ฌ importํ•  ๋ชจ๋“ˆ์„ ์„ ํƒํ•œ๋‹ค๊ฑฐ๋‚˜ ์•„์ง๊นŒ์ง€ ์ด ๋ถ€๋ถ„์„ ์ž๋™์œผ๋กœ ์˜์กด์„ฑ ์ถ”๋ก ํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ฐพ์ง€ ๋ชปํ•จ
  26. ์ ์‘์ด ํ•„์š”ํ–ˆ๋˜ ์ ๋“ค (3/3) โ€ข ๊ธฐ์กด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋“ค์ด ๋ณ‘๋ ฌ๋กœ ์ž˜

    ์‹คํ–‰๋˜๋„๋ก ํ•˜๊ธฐ๊นŒ์ง€ ๋งŽ์€ ๋…ธ๋ ฅ ํ•„์š” ํŠนํžˆ database ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ณ ์ • ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ๋„์šฐ๋Š” ๊ฒฝ์šฐ ์ถฉ๋Œ ๋ฐœ์ƒ โœ“ pants.toml ์„ค์ • : [pytest].execution_slot_var = "BACKEND_TEST_EXEC_SLOT" โœ“ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ fixture์—์„œ ์ด ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’์„ ํฌํŠธ ๋ฒˆํ˜ธ์— ๋”ํ•˜์—ฌ ์ค‘๋ณต ์‚ฌ์šฉ ๋ฐฉ์ง€ โ€ข Ubuntu 22.04 + Snap + Docker + /tmp Docker๊ฐ€ Snap์„ ํ†ตํ•ด ์„ค์น˜๋œ ๊ฒฝ์šฐ host /tmp ๋Œ€์‹  ๊ฐ€์ƒ private /tmp๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œ๋จ ๊ฐ์ข… ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ /tmp ๋””๋ ‰ํ† ๋ฆฌ์— ์ž„์‹œ ์ƒ์„ฑํ•œ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ชป ์ฝ์–ด์„œ ํ•œ์ฐธ ๋™์•ˆ ์‚ฝ์งˆ ์‚ฌ์‹ค ์ด๊ฑด Pants ์ž์ฒด์˜ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์ปจํ…Œ์ด๋„ˆ์— ์˜์กดํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ณ‘๋ ฌ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์—์„œ fixture๋“ค์ด ๊ฐ ํ…Œ์ŠคํŠธ ๋ชจ๋“ˆ๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ์ž„์‹œ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•˜๋‹ค๋ณด๋ฉด ๊ฑฐ์˜ ํ•„์—ฐ์ ์œผ๋กœ ๊ฒช๋Š” ๋ฌธ์ œ โœ“ /tmp ๋Œ€์‹  ./.tmp๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์šฐํšŒ
  27. ์ดํ‰ โ€ข ์–ธ์ œ๋‚˜ ๊ทธ๋ ‡๋“ฏ ์ƒ๊ฐ๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆผ (์›๋ž˜ ๊ณ„ํš์€ 2์ฃผ์˜€์œผ๋‚˜

    ๊ผฌ๋ฐ• ํ•œ๋‹ฌ ๋„˜๊ฒŒ...) โ€ข ํ•˜์ง€๋งŒ ์ดํ›„์˜ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค ๊ฒฝํ—˜์„ ๊ณ ๋ คํ•˜๋ฉด ์ถฉ๋ถ„ํžˆ ๊ฐ€์น˜์žˆ๋Š” ์ผ์ด์—ˆ์Œ. ๊ฐ•๋ ฅํ•œ ์บ์‹ฑ ๊ธฐ๋Šฅ๊ณผ ์˜์กด์„ฑ ๊ธฐ๋ฐ˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ ํƒ์ง€ ๊ธฐ๋Šฅ์œผ๋กœ ๋ชจ๋…ธ๋ฆฌํฌ๋กœ ํ•ฉ์นœ ํ›„์—๋„ ๊ธฐ๋ณธ์ ์ธ ์ž‘์—… ํ”„๋กœ์„ธ์Šค๊ฐ€ ํฌ๊ฒŒ ๋А๋ ค์ง€์ง€ ์•Š์Œ โœ“ black + isort + git hook ๋„์ž…, release note ์ƒ์„ฑ ์ž๋™ํ™”, ๋ณ€๊ฒฝ ์˜ํ–ฅ ๋ฒ”์œ„๋งŒ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ํ…Œ์ŠคํŠธ ๋ณ‘๋ ฌํ™”๋กœ ํ–ฅํ›„ GitHub Action Runner ์‚ฌ์–‘์„ ๋†’์˜€์„ ๋•Œ ํฐ ์ด๋“์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด ์—ด๋ฆผ โ€ข ์ด์ „ ์ž‘์—… ๊ณผ์ •์—์„œ Pantsbuild ์ปค๋ฎค๋‹ˆํ‹ฐ ์Šฌ๋ž™์—์„œ ๋งค์šฐ ๋งŽ์€ ๋„์›€์„ ๋ฐ›์Œ ์นœ์ ˆํ•œ ์ฝ”์–ด ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ค‘์š”์„ฑ ์ฒด๊ฐ ๋ฌธ์„œ ์ˆ˜์ •, ๋ฒ„๊ทธ ๋ณด๊ณ , PyCon ๋ฐœํ‘œ ๋“ฑ์œผ๋กœ ์ตœ๋Œ€ํ•œ ๋˜๋Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅ โ€ข Python ๊ธฐ๋ฐ˜ mono-repo๋ฅผ ๊ณ ๋ฏผํ•œ๋‹ค๋ฉด Pants ๊ณ ๋ คํ•ด๋ด…์‹œ๋‹ค!