/images/avatar.png

🍞πŸ₯πŸ₯– 라일리의 μ½”λ“œ λΆ€μŠ€λŸ¬κΈ° 🍞πŸ₯πŸ₯–

[CI/CD μ„œλ²„ κ΅¬μΆ•ν•˜κΈ°] 1. κ°œλ…

μš”μ•½ CI/CDλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 단계λ₯Ό μžλ™ν™”ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 보닀 짧은 주기둜 κ³ κ°μ—κ²Œ μ œκ³΅ν•˜λŠ” 방법이닀. μ•„λž˜ μ„Έ 가지 λ‹¨κ³„λ‘œ ꡬ뢄 ν•  수 μžˆλ‹€. 지속적인 톡합 Continuous Integration 지속적인 μ„œλΉ„μŠ€ 제곡 Continuous Delivery 지속적인 배포 Continuous Deployment [좜처] https://www.redhat.com/ko/topics/devops/what-is-ci-cd πŸ’‘ “CD"λŠ” 지속적인 μ„œλΉ„μŠ€ 제곡(Continuous Delivery) 및/λ˜λŠ” 지속적인 배포(Continuous Deployment)λ₯Ό μ˜λ―Έν•˜λ©° 이 두 μš©μ–΄λŠ” μƒν˜Έ κ΅ν™˜μ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€. κ°œλ… CI λ‹€μˆ˜μ˜ κ°œλ°œμžκ°€ μž‘μ„± 및 μˆ˜μ •ν•œ μ½”λ“œκ°€ μ§€μ†μ μœΌλ‘œ 톡합/ν…ŒμŠ€νŠΈ(Continuous Integration) λ˜λŠ” 것을 μ˜λ―Έν•œλ‹€. CI μž‘μ—… μˆœμ„œλŠ” 도ꡬ, ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄, ν”„λ‘œμ νŠΈ λ“± 기타 μ—¬λŸ¬ μš”μΈμ— 따라 많이 λ‹€λ₯΄μ§€λ§Œ μΌλ°˜μ μœΌλ‘œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

Web Worker API

Web worker Web Worker λŠ” 메인 μŠ€λ ˆλ“œμ™€ λΆ„λ¦¬λœ λ³„λ„μ˜ λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œμ—μ„œ 슀크립트λ₯Ό μ‹€ν–‰ν•  수 μžˆλŠ” κΈ°μˆ μ΄λ‹€. UI μŠ€λ ˆλ“œμ™€λŠ” λ³„κ°œμ˜ μŠ€λ ˆλ“œλ₯Ό μ‹€ν–‰μ‹œμΌœ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ°©ν•΄ν•˜μ§€μ•Šκ³  μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€. Web worker scope Web workerλŠ” 메인 μŠ€λ ˆλ“œμ™€ λ³„λ„μ˜ worker μŠ€λ ˆλ“œλ₯Ό κ°–λŠ”λ‹€. 메인 μŠ€λ ˆλ“œμ—μ„œ window κ°μ²΄λŠ” GlobalScope μ΄μ§€λ§Œ worker μŠ€λ ˆλ“œμ—μ„œλŠ” λ³„λ„μ˜ μŠ€μ½”ν”„ λ²”μœ„λ₯Ό κ°–λŠ”λ‹€. Worker μ’…λ₯˜μ— λ”°λ₯Έ Scope worker μŠ€λ ˆλ“œλŠ” 메인 μŠ€λ ˆλ“œ window 객체에 μ•‘μ„ΈμŠ€ν•  수 μžˆλŠ” κΆŒν•œμ΄ μ—†κΈ° λ•Œλ¬Έμ— window의 λ©”μ„œλ“œλ‚˜ DOM을 μ§μ ‘μ μœΌλ‘œ μ œμ–΄ν•  수 μ—†λ‹€.

Webpack5 μ„€μ •ν•˜κΈ° (ESM)

νšŒμ‚¬μ—μ„œ Javascript 용 μ„œλΉ„μŠ€ SDKλ₯Ό κ°œλ°œν•˜λ©΄μ„œ μ„€μ •ν–ˆλ˜ webpack5 μ„€μ •νŒŒμΌμ„ κΈ°λ‘ν•œλ‹€. μ˜€λž˜μ „μ— 잠깐 μ ‘ν•΄λ³΄μ•˜λ˜κ²Œ webpack2 λ²„μ „μ΄μ—ˆλŠ”λ° μ–΄λŠμƒˆ 5κΉŒμ§€ λ‚˜μ™”λ‹€. μ•Œκ³  μ‚¬μš©ν•˜λŠ”κ²Œ μ•„λ‹ˆλ‹€λ³΄λ‹ˆ μ“°λ©΄μ„œ μ• λ₯Ό λ¨Ήμ—ˆλ‹€…πŸ₯ΊπŸ₯ΊπŸ₯Ί Webpack5 μ„€μ •ν•˜κΈ° (ESM μ‚¬μš©) νšŒμ‚¬μ—μ„œ κ°œλ°œν•œ SDKλŠ” CJS(CommonJS)μ—μ„œ ESM(ECMAScript Module) λͺ¨λ“ˆ 방식을 μ‚¬μš©ν•˜μ—¬ κ°œλ°œν–ˆλ‹€. ESM λͺ¨λ“ˆ λ‘œλ” μ‚¬μš©ν•˜κΈ° μœ„ν•΄ package.json에 μ•„λž˜ 섀정을 μΆ”κ°€ν–ˆλ‹€. package.json 1 "type": "module" μ•„λž˜ κΈ€μ—μ„œλŠ” CJSκ°€ 기본값이기 λ•Œλ¬Έμ— 라이브러리의 경우 CJS둜 κ°œλ°œν•˜λŠ” 것을 μΆ”μ²œν•˜κ³  μžˆλ‹€. Node Modules at War: Why CommonJS and ES Modules Can’t Get Along μ„€μΉ˜ 라이브러리 1 npm install --save-dev webpack webpack-cli webpack-merge webpack-stream webpack-merge μ›ΉνŒ© 섀정을 ν•˜λ‚˜λ‘œ λ³‘ν•©ν•΄μ£ΌλŠ” 라이브러리.

[Tucker의 Go ν”„λ‘œκ·Έλž˜λ°] 20. μΈν„°νŽ˜μ΄μŠ€

Tucker의 Go μ–Έμ–΄ ν”„λ‘œκ·Έλž˜λ° μ±… λ‚΄μš©μ„ μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 1. μΈν„°νŽ˜μ΄μŠ€ μ •μ˜ μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έ μΈν„°νŽ˜μ΄μŠ€ 선언은 type을 μ“΄ λ’€ μΈν„°νŽ˜μ΄μŠ€ λͺ…을 μ“°κ³  interface ν‚€μ›Œλ“œλ₯Ό μ“΄λ‹€. 그런 λ’€ {} 블둝 μ•ˆμ— μΈν„°νŽ˜μ΄μŠ€μ— ν¬ν•¨λœ λ©”μ„œλ“œ 집합을 써쀀닀. 1 2 3 4 type DuckInterface interface { Fly() Walk(distance int) int } μœ μ˜μ‚¬ν•­ λ©”μ„œλ“œλŠ” λ°˜λ“œμ‹œ λ©”μ„œλ“œλͺ…이 μžˆμ–΄μ•Όν•œλ‹€. λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜μ΄ λ‹€λ₯΄λ”라도 이름이 같은 λ©”μ„œλ“œλŠ” μžˆμ„ 수 μ—†λ‹€. μΈν„°νŽ˜μ΄μŠ€μ—μ„œλŠ” λ©”μ„œλ“œ κ΅¬ν˜„μ„ ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€. μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έ 예제 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 package main import "fmt" type Stringer interface { String() string } type Student struct { Name string Age int } func (s Student) String() string { return fmt.

[Tucker의 Go ν”„λ‘œκ·Έλž˜λ°] 15. λ¬Έμžμ—΄

Tucker의 Go μ–Έμ–΄ ν”„λ‘œκ·Έλž˜λ° μ±… λ‚΄μš©μ„ μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€. string ꡬ쑰 string νƒ€μž…μ€ Go μ–Έμ–΄μ—μ„œ μ œκ³΅ν•˜λŠ” λ‚΄μž₯ νƒ€μž…μœΌλ‘œ κ·Έ λ‚΄λΆ€κ΅¬ν˜„μ€ 감좔어져 μžˆλ‹€. ν•˜μ§€λ§Œ reflect νŒ¨ν‚€μ§€ μ•ˆμ˜ StringHeader ꡬ쑰체λ₯Ό 톡해 내뢀ꡬ쑰λ₯Ό μ—Ώλ³Ό 수 μžˆλ‹€. 1 2 3 4 5 6 7 8 9 10 // StringHeader is the runtime representation of a string. // It cannot be used safely or portably and its representation may // change in a later release. // Moreover, the Data field is not sufficient to guarantee the data // it references will not be garbage collected, so programs must keep // a separate, correctly typed pointer to the underlying data.

[Tucker의 Go ν”„λ‘œκ·Έλž˜λ°] Go μŠ€νƒ λ©”λͺ¨λ¦¬μ™€ νž™ λ©”λͺ¨λ¦¬

음.. μ™„λ²½ν•˜κ²Œ μ΄ν•΄ν•˜μ§€λŠ” λͺ»ν–ˆλ‹€ πŸ˜‡πŸ˜‡πŸ˜‡ μŠ€νƒ λ©”λͺ¨λ¦¬μ™€ νž™ λ©”λͺ¨λ¦¬ λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•  λ•Œ μŠ€νƒ λ©”λͺ¨λ¦¬ μ˜μ—­ λ˜λŠ” νž™ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μ‚¬μš©ν•œλ‹€. ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©λ˜λŠ” 값은 μŠ€νƒ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœλ‹€. ν•¨μˆ˜ μ™ΈλΆ€λ‘œ κ³΅κ°œλ˜λŠ” λ©”λͺ¨λ¦¬ 곡간은 νž™ λ©”λͺ¨λ¦¬ μ˜μ—­μ— ν• λ‹Ήλœλ‹€. C/C++ μ–Έμ–΄μ—μ„œλŠ” malloc() ν•¨μˆ˜λ₯Ό 직접 ν˜ΈμΆœν•΄μ„œ νž™ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•œλ‹€. μžλ°”μ˜ 경우 클래슀 νƒ€μž…μ„ νž™μ—, κΈ°λ³Έ νƒ€μž…μ„ μŠ€νƒμ— ν• λ‹Ήν•œλ‹€. Go μ–Έμ–΄λŠ” μ΄μŠ€μΌ€μ΄ν”„ 뢄석(escape analysis) 을 ν•΄μ„œ μ–΄λŠ λ©”λͺ¨λ¦¬μ— 할당할지 κ²°μ •ν•œλ‹€. μ΄μŠ€μΌ€μ΄ν”„ 뢄석(escape analysis) GC μ»΄νŒŒμΌλŸ¬λŠ” ν•¨μˆ˜μ™€ νŒ¨ν‚€μ§€λ₯Ό λ„˜μ–΄ μ „μ—­μ μœΌλ‘œ νƒˆμΆœ 검사λ₯Ό μˆ˜ν–‰ν•œλ‹€.