ํฐ์คํ ๋ฆฌ ๋ทฐ
TIL - CI/CD๊ฐ ๋ญ๊ฐ์?, ํ์ด์ฌ GC(Garbage Collection), ํ์ด์ฌ GIL
๋ฐ๋ ํฌ 2022. 12. 6. 15:16๐ช 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 ๊ณผ ๊ฐ์ด ๋๊ธฐํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ฉด ๋ฉํฐ ์ค๋ ๋ฉ์ด ๋ ์ ์ฉํ ์ ์๋ค.
[python] GIL, Global interpreter Lock์ ๋ฌด์์ผ๊น?
ํ์ด์ฌ์์ ๋ฉํฐ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค๋ฉด GIL์ด๋ ๋จ์ด๋ฅผ ๋ง์ฃผ์น๊ฒ ๋ฉ๋๋ค. GIL์ด ๋ฌด์์ธ์ง ํ์ด์ฌ์ ์ GIL์ ๊ฐ์ง๊ณ ์๋์ง ์ด๋ฒ ํฌ์คํ ์ ํตํด ์ดํดํด๋ณด๋๋ก ํฉ์๋ค. Python์ผ๋ก ๋ฉํฐ์ค๋ ๋ฉ G
ssungkang.tistory.com
'TIL - 2022' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AWS] EC2, EB, ECR, ECS, ์ค์ผ์คํธ๋ ์ด์ , Fargate, Lambda (0) | 2022.12.11 |
---|---|
[AWS] CIDR, VPC, Cloud Front, Secret Manager (1) | 2022.12.09 |
TIL - ๋ก๋ ๋ฐธ๋ฐ์ฑ, http/https (0) | 2022.11.30 |
์ํฐ๋ 12์ ํ๋ฆฌ์จ๋ณด๋ฉ ์ฌ์ ๊ณผ์ (0) | 2022.11.28 |
[์ฐ์ํ ํ ํฌ์ฝ์ค] ํ๋ฆฌ์ฝ์ค 4์ฃผ์ฐจ ํ๊ณ (0) | 2022.11.22 |