๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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๊ฐ’..

728x90