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

Programming

(92)
์˜จํ”„๋ ˆ๋ฏธ์Šค ๋ฐฐํฌ ์„œ๋ฒ„ ์žฅ์•  ํšŒ๊ณ  - ๋žœ ์นด๋“œ ๊ณ ์žฅ(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๊ฐ’..
[Java] modelmapper jdk 17 issue "modelmapper Unable to make field private final java.time.LocalDate java.time.LocalDateTime.date accessible: module java.base does not "opens java.time" to unnamed module" ํ•ด๊ฒฐ java spring ํ™˜๊ฒฝ์—์„œ modelmapper ๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ์ค‘ ์•„๋ž˜์™€ ๊ฐ™์€ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒ "modelmapper Unable to make field private final java.time.LocalDate java.time.LocalDateTime.date accessible: module java.base does not "opens java.time" to unnamed module" Java 9๋ถ€ํ„ฐ๋Š” ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ, ๋ชจ๋“ˆ ๊ฐ„์˜ ์ ‘๊ทผ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ œ์–ดํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” Java 9 ์ด์ƒ์—์„œ ModelMapper์™€ java.time ํŒจํ‚ค์ง€์˜ ์‚ฌ์šฉ ์‚ฌ์ด์˜ ์ ‘๊ทผ ์ œํ•œ์œผ๋กœ ๋ฐœ์ƒํ•œ ์ด์Šˆ ํ˜„์žฌ ๋‚ด ํ™˜๊ฒฝ์€ jdk 17์ด์—ˆ๊ณ  entity์˜ private์œผ๋กœ ์„ค์ •๋œ LocalDateTi..
[VScode] Mac VScode ESLint ์ €์žฅ ์‹œ, ์ž๋™ ์ •๋ ฌ, ์ž๋™ ์ˆ˜์ • ์„ค์ • VScode์—์„œ ESLint ์ €์žฅ ์‹œ, ์ž๋™์ •๋ ฌ ์„ค์ • ๋ฐฉ๋ฒ• 1. setting.json ์ผœ๊ธฐ Mac์˜ ๊ฒฝ์šฐ, "Command + P" ๋‹จ์ถ•ํ‚ค๋กœ ํŒŒ์ผ ๊ฒ€์ƒ‰ ์ฐฝ์„ ์—ฐ ํ›„, setting.json(.vscode) ๋ฅผ ์ผœ๊ธฐ 2. ESLint ์ €์žฅ ์‹œ, ์ž๋™์ •๋ ฌ ์ฝ”๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit" } ์œ„ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ ๋ฐ”๋กœ ์ ์šฉ์ด๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, VScode๋ฅผ ์žฌ์‹œ์ž‘, VScode ํ™•์žฅ์—์„œ ESLint๋ฅผ "์‚ฌ์šฉ์•ˆํ•จ" > "๋‹ค์‹œ๋กœ๋“œ" > "์‚ฌ์šฉ" ์ˆœ์„œ๋กœ ์žฌ์‹œ์ž‘ ํ•ด๋ณด๊ธฐ
[TypeScript] VScode "๋ชจ๋“ˆ ๋˜๋Š” ํ•ด๋‹น ํ˜•์‹์„ ์ฐพ์„ ์ˆ˜..." ์˜ค๋ฅ˜ VScode์—์„œ TS๊ฐ€ ์„ค์น˜๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด์—ˆ์„ ๋•Œ, ์ž์ฃผ "๋ชจ๋“ˆ ๋˜๋Š” ํ•ด๋‹นํ˜•์‹์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค....(Cannot fine module...)"์˜ ์˜ค๋ฅ˜๋ฅผ ์ž์ฃผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. Vue3 ํ”„๋กœ์ ํŠธ์— TS๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์„ ๋•Œ, ๋ฐ”๋กœ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋Š”๋ฐ ํ•ด๊ฒฐ๋ฒ•์„ ์ ์–ด๋ณธ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐ”๋กœ ์ƒ์„ฑํ–ˆ์„ ๊ฒฝ์šฐ, ๋ณดํ†ต vite.config.ts, tsconfig.node.json, tsconfig.app.json, App.vue ์—์„œ ํ™•์ธ๋œ๋‹ค. ์‹ค์ œ ์„ค์น˜๋œ TSํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ VScode์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ถฉ๋Œํ•˜์—ฌ ๋‚˜๋Š” ์˜ค๋ฅ˜์ธ๋ฐ, ์‹ค์ œ npm ํ˜น์€ pnpm install์ด๋‚˜ build๋Š” ์ž˜ ๋˜๋Š”๋ฐ ๋ถ‰์€ ๋ฐ‘์ค„ ๋“ฑ์œผ๋กœ ๋ฌธ๋ฒ•์  ์˜ค๋ฅ˜์ฒ˜๋Ÿผ ํ‘œ๊ธฐ๋œ๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ๋œ๋‹ค.(install์ด๋‚˜ build๊ฐ€ ์•ˆ๋œ..

728x90