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

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

(78)
[ WEB ] iOS์—์„œ SVG ์ด๋ฏธ์ง€๊ฐ€ ๊นจ์ ธ ๋ณด์ผ ๋•Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ํšŒ์‚ฌ์—์„œ  iOS๊ฐœ๋ฐœ ํŒŒํŠธ์— ์ด์Šˆ ํ‹ฐ์ผ“์ด ๋ฐœํ–‰๋˜์—ˆ๋Š”๋ฐ,  AOS์—์„œ๋Š” ์ด๋ฏธ์ง€๊ฐ€ ์ •์ƒ์ ์ธ ํ•ด์ƒ๋„๋กœ ๋…ธ์ถœ๋˜๋Š” ๋ฐ˜๋ฉด,  iOS ์—์„œ๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๊นจ์ ธ ๋ณด์ด๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋‹ค. ํ•ด๋‹น ์ด๋ฏธ์ง€๋Š”  SVG ๋ฒกํ„ฐ ์ด๋ฏธ์ง€๋ผ ์ด๋ก ์ƒ์œผ๋กœ ๋‹น์—ฐํžˆ ๊นจ์ง€๋Š” ์ด์Šˆ๊ฐ€ ์—†์–ด์•ผ ํ•˜๋Š” ๊ฒŒ ๋งž๋Š”๋ฐ ์ฐธ ์ด์ƒํ–ˆ๋‹ค.  iOS๊ฐœ๋ฐœ์ž ๋ถ„์ด ํ•ด๋‹น ํ™”๋ฉด์€ ์›น๋ทฐ๋ผ๊ณ  ์›นํ”„๋ก ํŠธ ํŒŒํŠธ์— ์ด์Šˆ ํ‹ฐ์ผ“์„ ๋„˜๊ฒจ์ฃผ์–ด ํ•จ๊ป˜ ์ฐพ์•„๋ณด์•˜๋Š”๋ฐ, ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ์‚ฌํŒŒ๋ฆฌ ์›น๋ทฐ์—์„œ SVG๊นจ์ง ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•˜๊ณ , ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์•˜๋‹ค.    ํƒœ๊ทธ๋ฅผ  ์ด๋Ÿฐ ์‹์œผ๋กœ object ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. (, ๋„ ๊ฐ€๋Šฅ)     ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณธ ๊ฒฐ๊ณผ ์œ„์˜ ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ์‰ฌ์›Œ ๋ณด์˜€๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“  SVG ์ด๋ฏธ์ง€๋ฅผ ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ์‹ค์งˆ์ ์œผ๋กœ ์–ด๋ ค์› ๋‹ค. (์„œ๋ฒ„์—์„œ ์ด๋ฏธ์ง€..
[ Dev Tools ] ๊ฐœ๋ฐœ ํˆด ์ถ”์ฒœ. Lazy Git ์˜ค๋Š˜์€ ํšŒ์‚ฌ ๋™๋ฃŒ๋ถ„์ด ์ถ”์ฒœํ•ด ์ค€ ๊ฐœ๋ฐœ ํˆด, Lazy Git์— ๋Œ€ํ•ด ํฌ์ŠคํŒ…ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. Lazygit์€ ์ด๋ฆ„์ฒ˜๋Ÿผ, git์„ ๋”์šฑ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค. CLI๋ฅผ ์ด์šฉํ•˜์—ฌ git์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ณด๋‹ค ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์กŒ๋Š”๋ฐ, ๋Œ€ํ‘œ์ ์ธ ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. Stage Individual Lines ( ์Šคํ…Œ์ด์ง€ ๊ฐœ๋ณ„ ์„ ํƒ ๊ธฐ๋Šฅ ) ์ŠคํŽ˜์ด์Šค๋ฅผ ๋ˆŒ๋Ÿฌ ์„ ํƒํ•œ ๋ผ์ธ์„ ์Šคํ…Œ์ด์ง• ํ•˜๊ฑฐ๋‚˜, v๋ฅผ ๋ˆŒ๋Ÿฌ ๋ผ์ธ ๋ฒ”์œ„ ์„ ํƒ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ a๋ฅผ ๋ˆŒ๋Ÿฌ ํ˜„์žฌ hank ์ „์ฒด ์„ ํƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. Interactive Rebase ( ์–‘๋ฐฉํ–ฅ ๋ฆฌ๋ฒ ์ด์Šค ) i๋ฅผ ๋ˆ„๋ฅด๋ฉด ์–‘๋ฐฉํ–ฅ์˜ ๋ฆฌ๋ฒ ์ด์Šค๊ฐ€ ์‹œ์ž‘๋œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์Šค์ฟผ์‹œ(s), fixup(f), drop(d), edit(e), move up(ctrl..
[Docker] Docker ์™€ CI CD <01> ์ด๋ผ๋Š” ์ธํ”„๋Ÿฐ ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉฐ ๋ณต์Šต ๋ฐ ์ •๋ฆฌ๋ฅผ ์œ„ํ•œ ํฌ์ŠคํŒ…. ๋„์ปค๋ž€ ๋ฌด์—‡์ผ๊นŒ? ๋„์ปค๋ž€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒ์„ฑ, ๋ฐฐํฌ, ์‹คํ–‰์„ ๋” ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๋„๊ตฌ์ด๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค ๊ฐ€์ƒํ™” ํ”Œ๋žซํผ & ์ƒํƒœ๊ณ„์ด๋‹ค. ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์šด๋ฐ›๋Š” ๊ณผ์ •์„ ์—„์ฒญ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ทธ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ข…์†์„ฑ์„ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฌถ์–ด ํ™˜๊ฒฝ์„ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ , ์–ด๋””์„œ๋“  ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด, ๊ฐ๊ฐ ๋กœ์ปฌ์˜ ์„œ๋ฒ„, ํŒจํ‚ค์ง€๋ฒ„์ „, ์šด์˜์ฒด์ œ ๋“ฑ๋“ฑ์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์—๋Ÿฌ๋ฅผ ์—†์•ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ž€ ๋ฌด์—‡์ผ๊นŒ? ์ปจํ…Œ์ด๋„ˆ์˜ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…์€, ์šฐ๋ฆฌ๊ฐ€ ์„ ๋ฐ•์ด๋‚˜ ์ฐจ๋Ÿ‰, ๊ธฐ์ฐจ๋“ฑ์˜ ์šด์†ก์ˆ˜๋‹จ์œผ๋กœ ์ง์„ ์˜ฎ๊ธธ ๋•Œ, ์—ฌ๋Ÿฌ๊ฐ€์ง€..
[ TS ] TypeScript 5.4 ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์•Œ์•„๋ณด๊ธฐ. 2024๋…„ 1์›” 24์ผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ 5.4 ๋ฒ ํƒ€ ๋ฒ„์ „ ๋ฐœํ‘œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ด ํฌ์ŠคํŒ…์€ ํ•ด๋‹น ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ๊ณต๋ถ€ํ•˜๊ณ ์ž ํŒŒํŒŒ๊ณ ์™€ ํ•จ๊ป˜ ๋ฒˆ์—ญํ•˜๋ฉฐ ์˜ฎ๊ธด ๊ธ€์ด๋‹ค. (โ€ป์˜ค์—ญ ์ฃผ์˜) ์šฐ์„  TypeScript 5.4 beta ๋ฒ„์ „์€ ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. npm install -D typescript@beta TypeScript 5.4์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์†Œ๊ฐœํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 1. Preserved Narrowing in Clousures Following Last Assignments ๋งˆ์ง€๋ง‰ ํ• ๋‹น ํ›„ ํด๋กœ์ ธ์—์„œ ๋ฒ”์œ„๊ฐ€ ์ข์•„์ง€๋„๋ก ํƒ€์ž…์„ ์œ ์ง€(๋ณด์กด)ํ•˜๋‹ค. 2. NoInfer Utility Type NoInfer ์œ ํ‹ธ๋ฆฌํ‹ฐ ํƒ€์ž… 3. Object.groupBy and Map.groupBy O..
[ WEB API ] Geolocation API๋ฅผ ํ†ตํ•ด ์œ„์น˜ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ์ž์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? Geolocation API๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์šฉ์ž์˜ ๋™์˜๋ฅผ ๋ฐ›์•„ ์œ„์น˜ ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผํ†ตํ•ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ์ž์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„์„œ ์ง€๋„์— ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž์˜ ์œ„์น˜ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. Geolocation API๋Š” navigator.geolocation ์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. if ("geolocation" in navigator) { /* ์œ„์น˜์ •๋ณด ์‚ฌ์šฉ ๊ฐ€๋Šฅ */ } else { /* ์œ„์น˜์ •๋ณด ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ */ } ๋ธŒ๋ผ์šฐ์ €๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์œ„์น˜ ์ •๋ณด ๊ถŒํ•œ์„ ์š”์ฒญํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๋™์˜ํ•˜๋ฉด ํ˜„์žฌ ์žฅ์น˜์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•(GPS๋“ฑ)์„ ํ†ตํ•ด ์œ„์น˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. - Geolocation.getCurrentPos..
[ LocalStorage ] localStorage์—์„œ ๋ฐฐ์—ด(Array)๋‹ค๋ฃจ๊ธฐ. ์ตœ๊ทผ ์ž‘์—… ํ•  ๋ถ€๋ถ„์ด client์ธก์—์„œ `localStorage`๋ฅผ ํ†ตํ•ด ๋ฐฐ์—ด์„ ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ด์„œ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค. (localStorage๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ํด๋ผ์ด์–ธํŠธ ์ธก์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์›น ์Šคํ† ๋ฆฌ์ง€) 1. ๋ฐฐ์—ด์„ `localStorage`์— ์ €์žฅํ•˜๊ธฐ: // ์˜ˆ์‹œ ๋ฐฐ์—ด const myArray = [1, 2, 3, 4, 5]; // ๋ฐฐ์—ด์„ JSON ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ localStorage์— ์ €์žฅ localStorage.setItem('myArray', JSON.stringify(myArray)); * localStorage๋Š” value์— ๋ฌธ์ž์—ด๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, JSON.stringufy()๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์—ด์„ ๋ฌธ์ž๋กœ ๋ฐ”๊พธ์–ด ์ €์žฅํ•ด์•ผํ•œ๋‹ค. 2. `localStor..
[ CSS ] white-space ์†์„ฑ /* Single keyword values */ white-space: normal; white-space: nowrap; white-space: pre; white-space: pre-wrap; white-space: pre-line; white-space: break-spaces; /* white-space-collapse and text-wrap shorthand values */ white-space: collapse balance; white-space: preserve nowrap; /* Global values */ white-space: inherit; white-space: initial; white-space: revert; white-space: revert-layer; white-..
[ CSS ] list-style-type์•Œ์•„๋ณด๊ธฐ. list-style์€ css์†์„ฑ ์ค‘ ํ•˜๋‚˜๋กœ, HTML์˜ ๋ชฉ๋ก ์š”์†Œ(``, ``, ``)๋“ฑ์˜ ๋ฆฌ์ŠคํŠธ์—์„œ ๋ฆฌ์ŠคํŠธ ํ•ญ๋ชฉ๋“ค์˜ ๋งˆ์ปค(marker) ๋ชจ์–‘์„ ์ง€์ •ํ•˜๋Š” CSS ์†์„ฑ์œผ๋กœ, ํ…์ŠคํŠธ ์•ž์— ์‚ฌ์šฉ๋˜๋Š” ์ˆซ์ž, ๋ฌธ์ž, ์ด๋ฏธ์ง€ ๋“ฑ์˜ ๋งˆ์ปค ๋ชจ์–‘์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. `list-style-type` ์†์„ฑ์€ ๋‹ค์–‘ํ•œ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ’๋“ค์ด ์‚ฌ์šฉ๋œ๋‹ค. 1. `none` ๋ชฉ๋ก ํ•ญ๋ชฉ์— ๋งˆ์ปค๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ๋ฒˆํ˜ธ๋‚˜ ๋ถˆ๋ฆฟ ๊ธฐํ˜ธ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š”๋‹ค. 2. `disc` ์›ํ˜• ๋ถˆ๋ฆฟ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (default) 3. `circle` ๋นˆ ์› ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 4. `square` ๋„ค๋ชจ ์ƒ์ž ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 5. `decimal` 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ˆซ์ž๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธด๋‹ค. 6. `decimal-lead..