Programming (63) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [JS] setTimeout ์ฌ์ฉ๋ฒ๊ณผ await / sleep ๋ง๋ค๊ธฐ JavaScript์์ setTimeout์ ๋น๋๊ธฐ(async)๋ก ํน์ ์๊ฐ ํ์ ๋ก์ง์ ์ํ์ํฌ ์ ์๋ค. setTimeout ์ํ ์์ console.log('start');// async๋ก 3์ด(3,000ms)๋ค์ {}์์ ๋ก์ง ์ํsetTimeout(() => { console.log('call it after 3s');}, 3000);console.log('end') setTimeout ์ํ ๊ฒฐ๊ณผ>>> start>>> end// ...์ฝ 3์ด ๋ค...>>> call it after 3s setTimeout์ await๋ฅผ ์ฌ์ฉํ๊ธฐ setTimeout await ์ฌ์ฉconsole.log('start');// async๋ก 3์ด(3,000ms)๋ค์ {}์์ ๋ก์ง ์ํawait setTimeout(() .. [Git Hook] pre commit ์ผ๋ก ์ฅ์ ์๋ฐฉํ๊ธฐ(ft. husky, osascript) d์ต์ ์ด์ ์ค์ธ ์ฑ์์ ํน์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค ์ฅ์ ๊ฐ ๋ฌ์๋ค. ์ผ๋ถ ์๋น์ค์์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ ๋ฉ์๋๊ฐ ์์๋๋ฐ, ํ๊ฒฝ์ด ๋ถ์ฐ๋๊ณ ๋ณต์กํ๋ค๋ณด๋ ๊ฐ๋ฐ์๊ฐ ํ ์คํธ๋ฅผ ๋์น ์ผ์ด์ค์์๋ค. ์ด ๋ถ๋ถ์ ๊ฐ์ ํ๊ณ ๋น์ทํ ์ฅ์ ๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด์ pre commit rule์ ์ถ๊ฐํด์ ํน์ ํค์๋๊ฐ ์์ค์ ์ถ๊ฐ๋๋ฉด ์๋ด๋ฅผ ์ํ ํ์ ์ ๋์ฐ๊ฒ ํ๋ค. ๐ค ํ๊ฒฝ๊ฐ๋ฐํ์ ํ๊ฒฝ์ Mac์ ์ฌ์ฉํ๊ณ ์๊ณ Husky plugin์ด ์ค์น๋์ด ์์๋ค. git์ ๊ฐ๋ฐ์๊ฐ commit์ ์ํํ๋ฉด, commit ์ด ์ํ๋๊ธฐ ์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํ๋๊ฒ๋ํ๋ pre-commit ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.๋ฐฉ๋ฒ์ ํ๋ก์ ํธ์ .git/ ํ์์ "pre-commit"์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ฉด ๋๋ค.ํ์ง๋ง, git์์ ์ ๊ณตํ๋ pre-commit์ ๊ฒฝ์ฐ, ๊ฐ์ธ ๋ก์ปฌ.. [์ฟผ๋ฆฌ ํ๋] Oracle DB ์ฟผ๋ฆฌ ํ๋ ํ๊ณ (ft. LPAD) ์ฌ๋ด ์ ๋ฌด ์ค ์ด์์์ timeout์ด ๋๊ณ ์๋ ์๋น์ค๋ฅผ ๋ฐ๊ฒฌํ๋ค.(๋ด๋ถ ์๋น์ค์ด๊ณ ์์ฃผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ์ ๋ฐ๊ฒฌ์ด ๋ฆ์๋ค.)(์๋น์ค์ ์คํ ์๊ฐ์ด 60์ด ์ด์์ด๋ผ๋ฉด, timeout error๋ฅผ ๋ฑ๊ฒ ๋์ด์๋ค.) ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด๋ ์กฐํ ์ฟผ๋ฆฌ์์ 60์ด ์ด์ ๊ฑธ๋ฆฌ๋ ๊ฒ์ ํ์ธํ๋ค. ํด๋น ์ ๋ฌด์ ํน์ฑ์, ๊ณ ๊ฐ ์ด๋ ฅ ํ ์ด๋ธ์ ์กฐํํ๋๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์์ plan์ ํ์ธํ๋ ํ ์ด๋ธ์ full scanํ๊ณ ์์๋ค.์ด์ ํ๊ฒฝ ๊ฒฝ์ฐ, ๋ ๋ง์ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒ์ด๋ฏ๋ก ๊ฐ์ ์ด ํ์ํ๋ค. ์ฟผ๋ฆฌ ์ฑ๋ฅ ์ ํ์ ์ฃผ๋ ์์ธ์ "LAPD์ ์ฌ์ฉ"ํ๊ฒ ํ ์ด๋ธ์ ๊ณ ๊ฐ ์ด๋ ฅ์ ๊ด๋ฆฌํ๋ ํ ์ด๋ธ์ด์๊ธฐ์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ LPAD๋ฅผ ์ฌ์ฉํ์ฌ ์ข๋ณ์ ๋ชจ๋ ๊ฐ๊ณตํ๋ฏ๋ก์จ, ์ธ๋ฑ์ค ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. ํน์ ๊ธฐ๊ฐ์ ์กฐ๊ฑด์ผ๋ก ๊ฑธ๊ณ ์์๋.. ์จํ๋ ๋ฏธ์ค ๋ฐฐํฌ ์๋ฒ ์ฅ์ ํ๊ณ - ๋ ์นด๋ ๊ณ ์ฅ(ft. gitlab, ubuntu) on-premise / ubuntu ํ๊ฒฝ์ ๋ฐฐํฌ ์๋ฒ ๋์ด๋ฆฌ๊ธฐ ํ์ฌ ์ ๋ฌดํ๊ฒฝ์์ ๋ด๋ถ ๋ณด์๋ง์์ ๊ฐ๋ฐ์ ํ๊ณ ์๋ ์์ค๋ฅผ ๊ฐ ๊ฐ๋ฐ์์ ์ฐ๊ด๋ ๊ทธ๋ฃน์ฌ๋ก ๋ฐฐํฌ๋ฅผ ํ๊ธฐ ์ํ ์๋ฒ๊ฐ ์จํ๋ ๋ฏธ์ค(on-premise) ํ๊ฒฝ์ผ๋ก ๊ตฌ์ฑ ๋์ด์๋๋ฐ, ์ค์ ์ ์ ์์ด ์๋๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค. ์์ค ๋ฐฐํฌ๋ฅผ ์ํด์ ํด๋น ์๋ฒ์ gitlab / jenkis๋ฅผ docker๋ก ๋์์ ํธ์คํ ํ๊ณ ์์๋๋ฐ ๊ฐ๋ฐ์๋ค์ pc์์ ํด๋น ํธ์คํ ์ค์ด gitlab ์ฌ์ดํธ๊ฐ ์ ์์ด ๋์ง ์์๋ค. ๋น์ ์กฐ์น๋ฅผ ์ํ ์งํ ์ฌํญ์ ์ด๋ ๋ค.๐ ๏ธ ์กฐ์น ๋ฐฉ๋ฒ1. ๋ก๊ทธ ํ์ธ ํด๋ณด๊ธฐ$ cd /home/docker/gitlab๋ก๊ทธํ์ผ์ด ์กด์ฌํ๋ ๊ณณ์ผ๋ก ์ด๋$ docker-compose logs -f {์ปจํ ์ด๋ ํน์ ์๋น์ค ์ด๋ฆ}๋ก๊ทธ ํ์ธ. {์ปจํ ์ด๋ ํน์ ์๋น์ค.. [JS] ๋ณด์ ํคํจ๋ ์ ๋ ฅ error ์์ธ์ฒ๋ฆฌ(ft. isNaN) ํ์ฌ์์ ์ด์ํ๊ณ ์๋ ์ฑ์ ๋ณด์ ํคํจ๋๋ฅผ ์ฌ์ฉํ๋ ์๋น์ค์์ ์๋ชป๋ ์ ๋ ฅ ๊ฐ์ผ๋ก ์ธํ ์ค๋ฅ์ ํธ๋ฌ๋ธ ์ํ ์ ์งํํ์ต๋๋ค. ์๋ฒ์์ input ๊ฐ ๊ฒ์ฆ์ ํตํด์ ์ ๋ฌด ์ค๋ฅ๋ฅผ ๋ฑ์ด๋ด ์๋ชป๋ ์ ๋ณด๊ฐ ์ ๋ฐ์ดํธ ๋์ง๋ ์์์์ง๋ง, ํ๋ฉด ์์ค(front end)์์ ์์ธ์ฒ๋ฆฌ ๋ฏธํก์ผ๋ก ์๋ชป๋ input ๊ฐ์ ์๋ฒ(back end) ์ธก์ผ๋ก ๋ณด๋ด๊ณ ์์์ ํ์ธํ์ต๋๋ค. ๐ฎ ๋ฌธ์ ์ํฉ๋ณด์ ํคํจ๋์ ์ฌ์ฉํ๋ ์ด๋ฒคํธ์ value๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์์ numberic์ ๊ฒ์ฆ์ด ๋์ง ์์์ ์ซ์ํ ๊ฐ๋ง ๋ค์ด์์ผํ๋ ๋ถ๋ถ์ ์ค์ string์ด ๋ค์ด์ค๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ์์ต๋๋ค. ๐ ๏ธ ์กฐ์น๋ฐฉ๋ฒํคํจ๋ ์ด๋ฒคํธ๋ฅผ ํตํด์ ๋ค์ด์ค๋ value ๊ฐ์ ํ๋ฉด์์ isNaN๋ฅผ ์ฌ์ฉํด ํ๋ฒ ๋ ์์ธ์ฒ๋ฆฌ ํ์์ต๋๋ค. ๊ธฐ์กด ๋ก์ง์ ๊ฒฝ์ฐ, value๊ฐ s.. [Vue] Multiple v-model ์์ ์(modifiers) ์ฒ๋ฆฌํ๊ธฐ(์ต์ ์ฌ์ฉํ๊ธฐ) Vue ๊ณต์ ๊ฐ์ด๋ ๋ฌธ์์์ v-model์ ์์ ์ ์ฒ๋ฆฌ, ๋ค์ค(multiple) v-model ์ฌ์ฉ๋ฒ์ ๋ํด์ ๋์์๋ค. ํ๋์ v-model ์์ ์๋ฅผ ์ด์ฉํด set, get๊ณผ ๊ฐ์ ์ต์ ์ ์ฌ์ฉํ๋๋ฒ์ด ์๊ฐ ๋์ง๋ง, ๋ค์ค v-model์ ์ฌ์ฉํ์ ๋, ์์ ์๋ฅผ ๋ฐ๋ ๋ฐ์๋ง ์๊ฐ๋๊ณ set๊ณผ ๊ฐ์ ์ต์ ์ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋น ์ ธ์์ด ์ถ๊ฐ ํด๋ณธ๋ค. composition ์คํ์ผ ์งํฅํด์ composition ๋ฐฉ์์ผ๋ก๋ง ์๊ฐ ํฉ๋๋ค. ๐ค ์์ ์ฝ๋ ::: ๊ณต์ ๊ฐ์ด๋ playground ์์ ๋ฅผ ํ์ฉ App.vue first: second: MyComponent.vue ์ ์ฝ๋๋ 2๊ฐ์ input๊ณผ v-model์ ๊ฐ๋ Mycomponent.vue๋ฅผ App.vue์์ import ํด์ ์ฌ์ฉ.. [Shell Script] CI/CD ์๋ํ ๋ฐฐํฌ๋ฅผ ์ํ ํ์ผ ๋ชจ๋ํฐ๋ ์ ์คํฌ๋ฆฝํธ ๋ง๋ค๊ธฐ ํ์ฌ ๋ด์ ๋ฐฐํฌ ํ๊ฒฝ์ด ๋ณต์กํ๋ค. ํ์ฌ ์ฌ์ง ์ค์ธ ํ์ฌ๋ ํนํ, ๋ณด์์ ์ธ ๋ถ๋ถ์ ๋ฏผ๊ฐํด์ ์ ๋ฌด๋ณ๋ก ๋ค์ํ ๋ฐฐํฌ ํ๊ฒฝ์ด ๊ตฌ์ฑ ๋์ด์๋ค. ๊ทธ ์ค์ ๊ฐ์ ํ๊ณ ์ถ์๋ ๋ฐ์ชฝ์ง๋ฆฌ CI/CD ํ๊ฒฝ์ด ์์๋๋ฐ ์ด๋ฒ์ ์๊ฐ์ ์ฌ์ ๊ฐ ์๊ฒจ ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค. ๊ธฐ์กด์ ํ๊ฒฝ์์ Jenkis๋ฅผ ์ด์ฉํด์ git์ ๋ฐ์๋ ์์ค๋ฅผ ์ค์ ๊ฐ๋ฐ ์๋ฒ์ ๋ฐ์ํ์๋๋ฐ ๋ณด์์ ์ธ ๋ฌธ์ ๋ก Jenkis๋ฅผ ํตํด์ ๋ฐฐํฌ๊น์ง ์งํํ์ง๋ ๋ชปํ๊ณ ์์ถ๋ ์์ค ํ์ผ๋ง linux ํ๊ฒฝ์ ๊ฐ๋ฐ ์๋ฒ๋ก ์ ์กํ๊ฒ ๊ตฌ์ฑ๋์ด ์์๋ค.๋ฐ๋ผ์, ๋ฐฐํฌ๋ฅผ ์ํด์ ๊ฐ๋ฐ์ ์ง์ ์๋ฒ๋ก ์ ์ํด ์์ถ๋ ์์ค ํ์ผ์ ํ์ด์ ๋ฐฐํฌ๋ฅผ ์งํํ์๋ค. ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ํ์ผ ๋ชจ๋ํฐ๋ง ์์ ๋ง๋ค์ด์ ์๋ฒ์์ ์๋๋ฐฐํฌ๋ฅผ ์งํํ ์ ์๊ฒ ๊ตฌ์ฑํ๋ค. ๐ ํด๊ฒฐ๋ฐฉ๋ฒ1. Jenkis๋ฅผ ํต.. [Swift] Cannot assign to property: 'self' is immutable Cannot assign to property: 'self' is immutable ๋ฌธ์ ์์ธ๊ณผ ํด๊ฒฐ์ ๋ฌธ์ ๋ ๊ตฌ์กฐ์ฒด(Struct)์์ property๋ฅผ ํจ์๋ฅผ ํตํด์ ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋, ๋ฐ๊ฒฌํ ์ ์๋ค.๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌ์กฐ์ฒด๋ ์ค๋ ์ท(snap shot)์ ์ฐ์ด๋ด๋ ๊ฒ์ด๋ค.struct Example { var p = 0 func changeP() { p += 1 //p๋ฅผ 1์ฆ๊ฐ }}์ ์ฝ๋์์ p๋ ๊ฐ๋ณ ๋ณ์๋ก ์ ์ํ๋ค. ํ์ง๋ง ํด๋น ๊ตฌ์กฐ์ฒด๋ ๋ณํ์ง ์๋ ์ค๋ ์ท์ด ๋์ด์ผํ๊ธฐ์ ๊ตฌ์กฐ์ฒด ์ ์ฅ์์ ๋ถ๋ณ์ด์ฌ์ผํ property p๋ฅผ ๊ตฌ์กฐ์ฒด ๋ด๋ถ ํจ์์์ ๋ณ๊ฒฝํ ์ ์๋ค.var ex1 = Example()ex1.p = 1 //p๊ฐ์ ๋ณ๊ฒฝ์ ์ฒ๋ผ Example์ ์์๋ฐ์ ์์ฑํ ex1๊ฐ์ฒด๋ p๊ฐ.. ์ด์ 1 2 3 4 ยทยทยท 8 ๋ค์