ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๐Ÿช CI/CD ๊ฐ€ ๋ญ”๊ฐ€์š”?

ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ–ˆ๋Š”๋ฐ, ๋ฒ„๊ทธ๊ฐ€ ์žˆ์–ด ์ฝ”๋“œ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

๋น ๋ฅด๊ฒŒ ์ด๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋‹ค์‹œ ์ปดํŒŒ์ผ, ๋นŒ๋“œ, ๋ฐฐํฌ ๊ณผ์ •์„ ํ†ตํ•ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ณผ์ •์€ ๋ณต์žกํ•˜๊ธฐ์— ์ž๋™ํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

CI (Continuous Integration)

์ง€์†์  ํ†ตํ•ฉ์ด๋ผ๋Š” ๋œป์œผ๋กœ ๊ฐœ๋ฐœ ์ง„ํ–‰๊ณผ ๋™์‹œ์— ํ’ˆ์งˆ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋ณต์žกํ•ด์ง€๊ณ  ์„ธ๋ฐ€ํ™” ๋  ์ˆ˜๋ก, ํŒ€ ๋‹จ์œ„๋กœ ๊ธฐ๋Šฅ์„ ์ชผ๊ฐœ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜๊ณ  ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ํ˜‘์—…๊ณผ ๋ถ„์—…์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฐ ํŒ€๋“ค์ด ์ œ์ถœํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋ฉด์„œ๋„ ๋ฒ„๊ทธ๊ฐ€ ์—†๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฐ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•ด์ฃผ๋Š” ํˆด์„ CI tool ์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ์ œ๋Œ€๋กœ ๋ณ‘ํ•ฉ๋งŒ ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ ๊ฒ€์ฆ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

CI ๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๋ฐฐํฌ๋ฅผ ํ•˜๊ณ  ๋‚˜์„œ์•ผ ํ…Œ์ŠคํŠธ์™€ ๊ฒ€์ฆ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

CD (Continuous Deployment)

์ง€์†์  ๋ฐฐํฌ๋ผ๋Š” ๋œป์œผ๋กœ CI ๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ๊นŒ์ง€ ์„ฑ๊ณต์ ์œผ๋กœ ์ง„ํ–‰๋œ ๊ฒฝ์šฐ ๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณ ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ฐœ๋ฐœ์ž์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ๊ณ ๊ฐ์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋ฆด๋ฆฌ์Šค ํ•ด์ค€๋‹ค.

 

CI/CD ํˆด์—๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ Jenkins ์™€ Travis ๊ฐ€ ์žˆ๋‹ค.

 

https://helloworld-88.tistory.com/50

 

[๊ธฐ๋ณธ] CI ๋ž€?

CI ( Continuous Integration, ์ง€์†์ ์ธ ํ†ตํ•ฉ ) CI ๋ž€ ํŒ€์˜ ๊ตฌ์„ฑ์›๋“ค์ด ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ ์ •๊ธฐ์ ์œผ๋กœ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.ํ’€์–ด์„œ ์ด์•ผ๊ธฐํ•˜๋ฉด ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๊ฑฐ๋Œ€ํ•ด์ง€๊ณ  ๋ณต์žกํ•ด์ง€๋ฉด์„œ ํŒ€ ๋‹จ์œ„๋กœ ๊ฐœ๋ฐœ์„

helloworld-88.tistory.com

https://tecoble.techcourse.co.kr/post/2021-08-14-ci-cd/

 

CI/CD๊ฐ€ ๋ญ”๊ฐ€์š”? - ์ด๋ก ํŽธ

tecoble.techcourse.co.kr

 

๐Ÿช ํŒŒ์ด์ฌ GC (Garbage Collection)

 

์™œ GC ๊ฐ€ ํ•„์š”ํ• ๊นŒ?

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ง์ ‘ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ์–ธ์–ด๋“ค์—๋Š”

1. ํ•„์š”์—†๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋น„์šฐ์ง€ ์•Š์•˜์„ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ์‚ฌ์šฉ ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋น„์›Œ๋ฒ„๋ฆฌ๋ฉด ์กด์žฌ ํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘๋‹จ๋˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์†์ƒ ๋  ์ˆ˜ ์žˆ๋‹ค.

 

Cpython ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ GC ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ๋ฐฉ๋ฒ•

1. ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŒ…

2. ์„ธ๋Œ€๋ณ„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

 

1. ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŒ…

python ์—์„œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ๋งˆ๋‹ค ๊ธฐ๋ณธ ๊ฐ์ฒด์—์„œ python ์œ ํ˜•๊ณผ reference count ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ๊ฐ์ฒด๊ฐ€ ๋ช‡๋ฒˆ ์ฐธ์กฐ๋˜์—ˆ๋Š”์ง€ ์ €์žฅํ•˜๊ณ  reference count ๊ฐ€ 0์ด ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ํ•ด์ œ๋œ๋‹ค. 

 

>>> a = "hello"
>>> sys.getrefcount(a)
2

์™œ 2๋ฒˆ์ผ๊นŒ?

๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ์— ํ•œ๋ฒˆ, reference count ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ํ•œ๋ฒˆ์ด๋‹ค.

์ฃผ๋กœ ํŒŒ์ด์ฌ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ reference count ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๋ณด์กฐ์ ์œผ๋กœ ๋‹ค์Œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

2. ์„ธ๋Œ€๋ณ„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

 

์™œ ์ด ๋ฐฉ๋ฒ•๋„ ํ•„์š”ํ•œ ๊ฒƒ์ผ๊นŒ?

๋งŒ์ผ, ๊ฐ์ฒด๊ฐ€ ์ˆœํ™˜์ฐธ์กฐ ๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

a = [] # ํ•œ๋ฒˆ
a.append(a) # ๋‘๋ฒˆ
del a # ํ•œ๋ฒˆ

์ด๋ ‡๊ฒŒ ์ˆœํ™˜์ฐธ์กฐ๊ฐ€ ๋  ๊ฒฝ์šฐ, ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•ด์ œ๋˜์ง€ ์•Š๋Š”๋‹ค. a์˜ reference count ๊ฐ€ 1๋ฒˆ์œผ๋กœ ๋‚จ์•„์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋˜ํ•œ ์„œ๋กœ ์ฐธ์กฐ๊ฐ€ ๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

a = Func_pr() # a:1
b = Func_pr() # b:1
a.x = b # b:2
b.x = a # a:2
del a #a:1
del b #b:1

์„œ๋กœ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— 0์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” garbage (์“ฐ๋ ˆ๊ธฐ) ๋ผ๊ณ  ํ•œ๋‹ค.

 

์„ธ๋Œ€๋ณ„ ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰์…˜์˜ ๊ณผ์ •

1. ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์™€ 0์„ธ๋Œ€์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ณ , ์ด๊ฐ€ 0์„ธ๋Œ€ ์ž„๊ณ„๊ฐ’๋ณด๋‹ค ํด ๊ฒฝ์šฐ collect_generations() ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

2. collect_generations() ๋Š” 0,1,2, ์„ธ๋Œ€์— ๋Œ€ํ•˜์—ฌ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  2์„ธ๋Œ€๋ถ€ํ„ฐ ์—ญ์ˆœ์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.

3. ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” ์ด์ „ ์„ธ๋Œ€๋กœ ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋œ๋‹ค.

4. ๊ฐ ์„ธ๋Œ€์— ๋Œ€ํ•ด ์ž„๊ณ„๊ฐ’์„ ๊ฒ€์‚ฌํ•˜๊ณ  GC ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

๊ฐ€๋น„์ง€ ์ฝœ๋ ‰์…˜์€ ์„ฑ๋Šฅ์— ์–ด๋–ค ์˜ํ–ฅ์„ ์ฃผ๋‚˜

1. ์ž์ฃผ ์ˆ˜ํ–‰๋  ๊ฒฝ์šฐ

๊ฐ์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๋‹ค๋ฉด ๋ชจ๋“  ๊ฐ€๋น„์ง€๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐ์— ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.

๊ฐ€๋น„์ง€ ์ฝœ๋ ‰์…˜์ด ์ด๋ฃจ์–ด์ง€๋Š” ์ƒํ™ฉ์—์„œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘๋‹จ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

2. ์ž์ฃผ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ

๊ฐ€๋น„์ง€๊ฐ€ ๋งŽ์ด ์Œ“์—ฌ ๋ฉ”๋ชจ๋ฆฌ์— ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

https://medium.com/dmsfordsm/garbage-collection-in-python-777916fd3189

 

Garbage Collection in Python

Python์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

medium.com

 

๐Ÿช ํŒŒ์ด์ฌ GIL

 

ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜คํžˆ๋ ค ์†๋„ ์ €ํ•˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์ด๊ฐ€ GIL ์— ์˜ํ•ด์„œ์ด๋‹ค.

GIL ์€ Global Interpreter Lock ์˜ ์•ฝ์ž๋กœ ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ํ•˜๋‚˜์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋งŒ์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” lock ์ด๋‹ค.

ํ•ด๋‹น ์Šค๋ ˆ๋“œ์—๋Š” ๋ชจ๋“  ์ž์›์„ ํ—ˆ๊ฐ€ํ•˜๊ณ  ์ดํ›„์—๋Š” lock ์„ ๊ฑธ์–ด ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์Šค๋ ˆ๋“œ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ์œ„์ฒ˜๋Ÿผ ์Šค๋ ˆ๋“œ ํ•˜๋‚˜๊ฐ€ run ํ•˜๋Š” ๋™์•ˆ ๋ชจ๋“  ์ž์›์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๊ฐ€ ๋๋‚˜๋Š” ์‹œ์ ์—์•ผ release ๊ฐ€ ๋˜๊ณ , ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ด๋ฅผ ์–ป์–ด run ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๋™์‹œ ์ง„ํ–‰์€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ context switching ๊นŒ์ง€ ์ผ์–ด๋‚˜์•ผ ํ•˜๊ธฐ์— ๋” ์‹œ๊ฐ„ ์ง€์ฒด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

์™œ GIL ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

์•ž์„œ ์„ค๋ช…ํ•œ reference count ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์‚ฌ์šฉ์„ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด reference count ๊ฐ€ ๋™๊ธฐํ™”๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๊ธฐ์— lock ์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•œ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด, ํŒŒ์ด์ฌ์—์„œ์˜ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์€ ๋ฌด์กฐ๊ฑด ๋А๋ฆด๊นŒ?

๋งŒ์ผ, ์†Œ์Šค์ฝ”๋“œ์—์„œ sleep ์„ ์ค€๋‹ค๋ฉด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์ด ๋” ํšจ์œจ์ ์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์—์„œ๋Š” sleep ์„ ํ•œ ๊ฒฝ์šฐ ๋ชจ๋“  ์ž‘์—…์ด ์ค‘์ง€๋˜์ง€๋งŒ, ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์˜ ๊ฒฝ์šฐ์—๋Š” context switching ์„ ์œ„ํ•œ ์‹œ๊ฐ„์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ I/O ์ž‘์—…์ด ๋งŽ์•„ sleep ๊ณผ ๊ฐ™์ด ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์ด ๋” ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

https://ssungkang.tistory.com/entry/python-GIL-Global-interpreter-Lock%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

 

[python] GIL, Global interpreter Lock์€ ๋ฌด์—‡์ผ๊นŒ?

ํŒŒ์ด์ฌ์—์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด GIL์ด๋ž€ ๋‹จ์–ด๋ฅผ ๋งˆ์ฃผ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. GIL์ด ๋ฌด์—‡์ธ์ง€ ํŒŒ์ด์ฌ์€ ์™œ GIL์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์ด๋ฒˆ ํฌ์ŠคํŒ…์„ ํ†ตํ•ด ์ดํ•ดํ•ด๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค. Python์œผ๋กœ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ G

ssungkang.tistory.com

 

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2025/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
๊ธ€ ๋ณด๊ด€ํ•จ