์ „์ฒด ๊ธ€

๐Ÿ’ป Developer ๐ŸŒฑ self.push(knowledge)
Ambassador/DEVOCEAN YOUNG

[๋ฐ๋ณด์…˜์˜] SKT๋ณธ์‚ฌ๋ฐฉ๋ฌธ & ํ‹ฐ์›€(T.um)ํˆฌ์–ด ํ›„๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”. ๋ฐ๋ณด์…˜์˜ 2๊ธฐ ์„œ๋‹ค์›์ž…๋‹ˆ๋‹ค! ์˜ค๋Š˜์€ SKT Tํƒ€์›Œ์—์„œ ์ง„ํ–‰๋œ ํ‹ฐ์›€ ํˆฌ์–ด ์ฒดํ—˜๊ณผ SKT ๋ณธ์‚ฌ๋ฅผ ๋ฐฉ๋ฌธํ•ด๋ณธ ํ›„๊ธฐ๋ฅผ ํฌ์ŠคํŒ…ํ•ด๋ณผ๊นŒํ•ฉ๋‹ˆ๋‹ค.์ €๋Š” ๋ฐ๋ณด์…˜์˜ ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ ํ‹ฐ์›€ํˆฌ์–ด๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”.์ง์ ‘ ์‚ฌ์ดํŠธ์—์„œ ์˜ˆ์•ฝํ•˜๊ณ  ๋ฐฉ๋ฌธํ•  ์ˆ˜๋„ ์žˆ์–ด์š”. ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋Š” ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!https://tum.sktelecom.com/reservation/registReservation.do ๋ฏธ๋ž˜๊ธฐ์ˆ  ์ฒดํ—˜๊ด€ T.um(ํ‹ฐ์›€)SKํ…”๋ ˆ์ฝค ๋ฏธ๋ž˜๊ธฐ์ˆ  ์ฒดํ—˜๊ด€, ์‹œ์„ค ์•ˆ๋‚ด, ๋ฐฉ๋ฌธ์˜ˆ์•ฝ, ์ „์‹œ๊ด€ ์ •๋ณด, ์ฒดํ—˜ ์„œ๋น„์Šค ๋“ฑ ์ œ๊ณต.tum.sktelecom.comํˆฌ์–ด ์œ ํ˜•์—๋Š” ์œ ํŠœ๋ธŒ ๋ผ์ด๋ธŒ ํˆฌ์–ด์™€ ํ˜„์žฅ ํˆฌ์–ด๊ฐ€ ์žˆ๋Š”๋ฐ ํ˜„์žฅ ํˆฌ์–ด๋ฅผ ์„ ํƒํ•ด์ฃผ์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์•„์š”. ๋จผ์ € ์„์ง€๋กœ์— ์žˆ๋Š” SKT Tํƒ€์›Œ์— ๋„์ฐฉ์„ ํ–ˆ์–ด์š”.๋ฐ๋ณด์…˜์˜๋‹ด๋‹น์ž๋‹˜..

Develop/TypeScript

[Typescript] union type, any, unknown

union type ๋ณ€์ˆ˜์— ๋“ค์–ด์˜ฌ ๊ฐ’์ด string ๋˜๋Š” number ์ด๋ผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. let ์ด๋ฆ„: string | number = 'kim'; let ๋‚˜์ด: (string | number) = 100; ๊ด„ํ˜ธ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด A | B | C ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ €๋ ‡๊ฒŒ ํ• ๋‹นํ•˜๋Š” ์ˆœ๊ฐ„ ํƒ€์ž…์€ string ๋˜๋Š” number ์ค‘ ํ•˜๋‚˜๋กœ ๋ณ€ํ•œ๋‹ค. array ๋‚˜ object ๋ฅผ ๋งŒ๋“ค ๋•Œ union type ์„ ์“ฐ๋Š” ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. var ์–ด๋ ˆ์ด: (number | string)[] = [1,'2',3] var ์˜ค๋ธŒ์ ํŠธ: {data : (number | string) } = { data : '123' } ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค๋ฉด ๋ณ€์ˆ˜์— ์ •์˜๋œ union ํƒ€์ž…์€ ํ• ๋‹น์„ ํ•˜๋ฉด..

Develop/TypeScript

[Typescript] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ ํƒ€์ž… ์ •๋ฆฌ(primitive types)

๊ธฐ๋ณธ ํƒ€์ž… ๊ธฐ๋ณธ ํƒ€์ž…์„ ์ •๋ฆฌํ•ด๋ณด์ž string, number, boolean ๋“ฑ์ด ์žˆ๋‹ค. ์ €๋ ‡๊ฒŒ ๋ณ€์ˆ˜ ์˜†์— : ๋ฅผ ๋ถ™์ด๊ณ  ์˜ค๋ฅธ์ชฝ์— ํƒ€์ž…์„ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค. (null, undefined ๋„ ์žˆ๋‹ค) let ์ด๋ฆ„ :string = 'kim'; let ๋‚˜์ด :number = 20; let ๊ฒฐํ˜ผ์—ฌ๋ถ€ :boolean = false; array ์™€ object ์—ฌ๋Ÿฌ ์ž๋ฃŒ๋ฅผ ํ•œ๋ฒˆ์— ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ array ๋‚˜ object ๋ฅผ ์“ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด string ์ด ๋“ค์–ด๊ฐ€๋Š” array ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค. let ํšŒ์›๋“ค :string[] = ['kim', 'park'] ๋งŒ์•ฝ์— string ๋งŒ์ด ์•„๋‹Œ string ๋˜๋Š” number ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” array ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋Š”๋ฐ ์ด๊ฑด..

Develop/TypeScript

[Typescript] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ธํŒ…ํ•˜๊ธฐ

tsconfig ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ ํ”„๋กœ์ ํŠธ ํด๋”์— tsconfig.json ์ด๋ผ๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ts ํŒŒ์ผ์„ js ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ์— ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜ํ• ์ง€ ์„ธ๋ถ€์„ค์ •์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. { "compilerOptions": { "target": "es5", "module": "commonjs", } } target : ts ํŒŒ์ผ์„ ์–ด๋–ค ๋ฒ„์ „์˜ js ๋กœ ๋ฐ”๊ฟ”์ค„์ง€ ์ •ํ•˜๋Š” ๋ถ€๋ถ„ module : js ํŒŒ์ผ๊ฐ„ import ๋ฌธ๋ฒ•์„ ๊ตฌํ˜„ํ•  ๋•Œ ์–ด๋–ค ๋ฌธ๋ฒ•์„ ์“ธ์ง€ ์ •ํ•˜๋Š” ๋ถ€๋ถ„ (์˜ˆ๋ฅผ ๋“ค์–ด commonjs ๋Š” require ๋ฅผ ์“ฐ๊ณ , es2015 ๋Š” import ๋ฅผ ์“ด๋‹ค) ๊ทธ ๋ฐ–์— ์ถ”๊ฐ€๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์ด ๋ช‡๊ฐ€์ง€ ์žˆ๋Š”๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. { "compilerOptions": { "target": "es5", "modul..

Develop/Node.js

[Node.js] ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ณด๋‚ด๊ณ  ๋ฐ›๊ธฐ(feat. Socket.io)

์‹ค์‹œ๊ฐ„ ์†Œํ†ต์„ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์„œ๋ฒ„์™€ ์œ ์ €๊ฐ„ Web Socket ์„ ๋šซ์œผ๋ฉด ๋œ๋‹ค. socket.io ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด์„œ ํ•œ๋ฒˆ ์‚ฌ์šฉํ•ด๋ณด์ž. ์‚ฌ์šฉ ๋ฐฉ๋ฒ• npm install socket.io npm ์„ ์ด์šฉํ•ด์„œ ์„ค์น˜๋ฅผ ์™„๋ฃŒํ•œ ํ›„์— server.js ์— 3์ค„์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. (const app = express() ๋ณด๋‹ค ์•„๋ž˜์— ์œ„์น˜ํ•ด์•ผํ•œ๋‹ค.) ๊ทธ๋ฆฌ๊ณ  app.listen ์ฝ”๋“œ๋ฅผ http.listen ์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ์ด์ „์—๋Š” express ๋ฅผ ์ด์šฉํ•ด์„œ ์„œ๋ฒ„๋ฅผ ๋„์› ๋˜ ๊ฑธ http ๋ผ๋Š” node.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ + socket.io ๋ฅผ ์ด์šฉํ•ด์„œ ๋„์šฐ๋Š” ๊ฒƒ์ด๋‹ค. socket.ejs ๋ผ๋Š” ํŒŒ์ผ์„ ํ•˜๋‚˜ ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค. https://cdnjs.com/libraries/socket.io socket.io - Librarie..

Develop/Node.js

[Node.js] ์œ ์ €๊ฐ„ ์ฑ„ํŒ…๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ

์ฑ„ํŒ…๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด๋ณด์ž ์ฑ„ํŒ…๋ฉ”์„ธ์ง€๋„ ๊ฒฐ๊ตญ ๊ฒŒ์‹œ๋ฌผ ๋ฐœํ–‰๊ธฐ๋Šฅ๊ณผ ๋˜‘๊ฐ™๋‹ค. ์ƒˆ๋กœ์šด ์ ์ด ์žˆ๋‹ค๋ฉด ์ฑ„ํŒ…๋ฉ”์„ธ์ง€๋Š” ์ฑ„ํŒ…๋ฐฉ ๊ฒŒ์‹œ๋ฌผ์— ์ข…์†์ด ๋˜์–ด์•ผํ•œ๋‹ค. ๋Œ“๊ธ€ ๋งŒ๋“œ๋Š” ๋ฒ• ๋Œ“๊ธ€์€ ๋Œ“๊ธ€ collection ์„ ํ•˜๋‚˜ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ชจ๋“  ๋Œ“๊ธ€์„ ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฌ๋ฉด ๊ทธ ๋Œ“๊ธ€๋“ค ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ์–ด๋–ค ๊ธ€์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์—†๊ฒŒ๋  ๊ฒƒ์ด๋‹ค. ๋•Œ๋ฌธ์— ๋ชจ๋“  ๋Œ“๊ธ€์€ ๋ถ€๋ชจ ๊ฒŒ์‹œ๋ฌผ์ด ๋ฌด์—‡์ธ์ง€ ๋ฅผ ๋ช…์‹œํ•ด์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒŒ์‹œ๋ฌผ collection ๊ณผ ๋Œ“๊ธ€ collection ์„ ๋งŒ๋“ค๊ณ  ๋Œ“๊ธ€ 1์˜ ๋ถ€๋ชจ๊ฒŒ์‹œ๋ฌผ์€ ๊ฒŒ์‹œ๋ฌผ 2๊ณ , ๋Œ“๊ธ€ 2์˜ ๋ถ€๋ชจ ๊ฒŒ์‹œ๋ฌผ์€ ๊ฒŒ์‹œ๋ฌผ 4์ด๋‹ค... ์ด๋Ÿฐ์‹์œผ๋กœ collection ๋ผ๋ฆฌ ๊ด€๊ณ„๋ฅผ ๋งบ์–ด์•ผํ•œ๋‹ค. ์ฑ„ํŒ…๋ฐฉ ๋งŒ๋“œ๋Š” POST api ๋งŒ๋“ค๊ธฐ ์ฑ„ํŒ… ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด chatroom ์ด๋ผ๋Š” collection ์— document..

Develop

CSR๊ณผ SSR์˜ ์ดํ•ด

์›ํ‹ฐ๋“œ ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ ์ฑŒ๋ฆฐ์ง€ 7์›” ๊ณผ์ œ๋กœ CSR๊ณผ SSR์˜ ์ดํ•ด๋ž€ ์ฃผ์ œ๋กœ ํฌ์ŠคํŒ…์„ ํ•˜๊ฒŒ๋˜์—ˆ๋‹ค! 1. CSR์ด๋ž€? ์ด๊ฒƒ์˜ ์žฅ๋‹จ์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?CSR์ด๋ž€ Client-side Rendering ์˜ ์ค„์ž„๋ง์ด๋‹ค.๋ง ๊ทธ๋Œ€๋กœ 'ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ ๋ Œ๋”๋ง์„ ํ•œ๋‹ค' ๋ผ๋Š” ๋ง์ธ๋ฐ,์—ฌ๊ธฐ์„œ ํด๋ผ์ด์–ธํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์„œ๋ฒ„์—์„œ HTML์„ ๋ฐ›์•„์™€์„œ JS์ฃผ์†Œ๋ฅผ ์„œ๋ฒ„๋กœ ์š”์ฒญํ•ด ๋™์ ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ตœ์ข…์ ์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณด์—ฌ์ค€๋‹ค.์œ„ ๊ทธ๋ฆผ์€ CSR ์˜ ์ˆœ์„œ์ด๋‹ค.์œ ์ €๋Š” ์›น์‚ฌ์ดํŠธ์— ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.Edge Caching ์€ HTML ํŒŒ์ผ๊ณผ JS์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋งํฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ณด๋‚ธ๋‹ค๋ธŒ๋ผ์šฐ์ €๋Š” HTML, JS๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๋‹ค.๋ธŒ๋ผ์šฐ์ €๋Š” JS๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๋‹ค.๋ชจ๋‘ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋˜๋ฉด JS๊ฐ€ ์‹คํ–‰๋˜๊ณ , ๋ฐ..

Review

2023 SW์ค‘์‹ฌ๋Œ€ํ•™ ๊ณต๋™ํ•ด์ปคํ†ค ํ›„๊ธฐ (feat. ์ตœ์šฐ์ˆ˜์ƒ)

์นดํŽ˜์—์„œ ์ด๊ฒƒ์ €๊ฒƒ ํ• ์ผ์„ ํ•˜๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ ๋ฐ›๊ฒŒ๋œ ์ „ํ™” ํ•œํ†ต 'ai ๊ต์œก์›์ž…๋‹ˆ๋‹ค. SW์ค‘์‹ฌ๋Œ€ํ•™ ๊ณต๋™ํ•ด์ปคํ†ค ์ฐธ๊ฐ€์ž๋กœ ์„ ์ •๋˜์…”์„œ ์—ฐ๋ฝ๋“œ๋ ธ์–ด์š”.' ์–ผ๋–จ๋–จํ•˜๊ณ  ๊ธฐ์œ ์ˆœ๊ฐ„์ด์—ˆ๋‹ค! ์‚ฌ์‹ค ํ•ด์ปคํ†ค์— ์ฐธ์—ฌํ•˜๊ธฐ ์ „์— ๋‚ด์ ์œผ๋กœ ํž˜์ด ๋งŽ์ด ๋ถ€์กฑํ•œ ์ƒํƒœ์˜€๋‹ค. ์กธ์—…์„ ๋ฐ˜๋…„ ์•ž๋‘๊ณ  ํ•  ๊ฑด ๋„ˆ๋ฌด ๋งŽ์•„๋ณด์ด๊ณ , ๋งˆ์Œ์€ ๊ธ‰ํ•˜๊ณ . ๋ฌด์–ธ๊ฐ€ ํž˜์„ ๋‚ด์„œ ํ•  ์—๋„ˆ์ง€๊ฐ€ ์Šค์Šค๋กœ ๋งŽ์ด ๋–จ์–ด์กŒ๋‹ค๊ณ  ๋А๊ผˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋”๋”์šฑ ๊ฑฑ์ •์ด ๋๋‹ค. ์ด ํ•ด์ปคํ†ค์€ ๋‚ด๊ฐ€ ์ฒ˜์Œ ๋‚˜๊ฐ€๋ณด๋Š” ํ•ด์ปคํ†ค์ด๊ณ , ๋ฌด๋ ค ๋ฌด๋ฐ• 3์ผ์ธ๋ฐ ์ž˜ ๋ฒ„ํ‹ฐ๊ณ  ๋ฏผํ๋ฅผ ์•ˆ ๋ผ์น  ์ˆ˜ ์žˆ์„ ์ง€ ๋ง์ด๋‹ค. ํ•˜์ง€๋งŒ ์–ด์ฉŒ๋ฉด ๋‚ด๊ฐ€ ์ด ๋Œ€ํšŒ์—์„œ ์กฐ๊ธˆ์ด๋ผ๋„ ๊ธ์ •์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๋Š”๋‹ค๋ฉด ๋‚ด๊ฐ€ ๋‹ค์‹œ ํž˜์„ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์›๋™๋ ฅ์ด ๋  ์ˆ˜๋„ ์žˆ๊ฒ ๋‹จ ์ƒ๊ฐ์„ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ํ•ด์ปคํ†ค ๋‹น์ผ์ด ๊ฐ€๊นŒ์›Œ์ง€๊ณ , ๊ฒฐ๊ตญ ์ž ์„ ๋ณ„๋กœ ๋ชป ์ž” ์ƒํƒœ๋กœ ์บ๋ฆฌ์–ด๋ฅผ ๋Œ๊ณ  ..

Ambassador/DEVOCEAN YOUNG

[๋ฐ๋ณด์…˜์˜] ๋“œ๋””์–ด ์กธ์—…? '์บก์Šคํ†ค์„ค๊ณ„๋ฐ์‹ค์Šต' ์ˆ˜๊ฐ• ํ›„๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”! DEVOCEAN YOUNG 2๊ธฐ ์„œ๋‹ค์›์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋ฒˆ ํ•™๊ธฐ๊ฐ€ 4ํ•™๋…„ 1ํ•™๊ธฐ์˜€๋Š”๋ฐ์š”. ์ €ํฌ ํ•™๊ต์—์„œ๋Š” ์กธ์—… ์กฐ๊ฑด์œผ๋กœ 4-1์— ์บก์Šคํ†ค ์กธ์—… ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผํ•ด์š”. (1,2 ํ•™๋…„ ๋•Œ์—๋Š” ๋ฉ€๊ฒŒ๋งŒ ๋А๊ปด์ง€๋˜ ์กธ์—… ํ”„๋กœ์ ํŠธ๋ฅผ ์ง์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค๋‹ˆ, ๊ทธ๋ฆฌ๊ณ  ๋ฒŒ์จ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  ํ›„๊ธฐ๋ฅผ ์“ฐ๊ณ  ์žˆ๋‹ค๋‹ˆ ์‹œ๊ฐ„์ด ์ •๋ง ๋น ๋ฅธ ๊ฒƒ ๊ฐ™์•„์š”.) ์ด ๊ณผ๋ชฉ์€ ๊ธฐ์—…๊ณผ์ œ๋ž‘ ํŒ€์„ ๋งค์นญํ•ด์ฃผ๊ณ , ํ•œ ํ•™๊ธฐ๋™์•ˆ ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ๋Š”๋ฐ์š”. ์ €ํฌ๋Š” ํ•œ ๊ธฐ์—…์˜ AI CS ๋‹ด๋‹น ์ฑ—๋ด‡ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ณผ์ œ์˜€์–ด์š”. ์ €๋Š” ํŒ€์—์„œ FE ๊ฐœ๋ฐœ์ž๋ฅผ ๋งก์•˜๊ณ , FE ํŒŒํŠธ๋ฅผ ๋งก์€ ์‚ฌ๋žŒ์€ ์ € ํ˜ผ์ž์˜€๊ธฐ์— ์ด ๋ถ€๋ถ„์ด ์ •๋ง ๋ถ€๋‹ด์Šค๋Ÿฌ์› ๋˜ ๊ฒƒ ๊ฐ™์•„์š”. ํ•œ ํŒŒํŠธ์— ์‚ฌ๋žŒ์ด ๋‘๋ช… ์ด์ƒ์ด๋ฉด ๊ฐ™์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋งŒ์•ฝ์— ์ œ๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๋ฉด ํŒ€์› ๋ชจ๋‘..

Ambassador/DEVOCEAN YOUNG

[๋ฐ๋ณด์…˜์˜] ‘์›น ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ๋ฒ• ๋ฐ ์ ์šฉ ์‚ฌ๋ก€’ ํ…Œํฌ์„ธ๋ฏธ๋‚˜ ํ›„๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”! ๋ฐ๋ณด์…˜ ์˜ 2๊ธฐ '๋ฐ๋ณด์…˜์‹œ์Šคํ„ฐ์ฆˆ'ํŒ€์˜ ์„œ๋‹ค์›์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” 6์›” ํ…Œํฌ์„ธ๋ฏธ๋‚˜ [์›น ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ๋ฒ• ๋ฐ ์ ์šฉ ์‚ฌ๋ก€] ํ›„๊ธฐ๋ฅผ ๊ณต์œ ํ•ด๋ณด๋ คํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋ฅผ ์ง„๋กœ๋กœ ํฌ๋งํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”. ๊ทธ๋งŒํผ ์ด๋ฒˆ ํ…Œํฌ ์„ธ๋ฏธ๋‚˜์— ๊ด€์‹ฌ์ด ๊ฐ€๋“ํ–ˆ์–ด์š”! ํ™•์‹คํžˆ ์ฑ„์šฉ ๊ณต๊ณ ๋ฅผ ๋ณด๋ฉด ์šฐ๋Œ€ ์‚ฌํ•ญ์— ‘์„ฑ๋Šฅ ์ตœ์ ํ™”’ ๊ฐœ๋…์ด ๋‚˜์˜ค๊ณค ํ–ˆ๊ฑฐ๋“ ์š”. ์ € ๋˜ํ•œ ์‚ฌ์ดํŠธ์˜ ์„ฑ๋Šฅ์ด ์ข‹์•„์•ผ ์ข‹์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค- ๋ผ๋Š” ๊ฒƒ์€ ๋จธ๋ฆฌ๋กœ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€, ์–ด๋–ค ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š”์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์•„์š”. ํ•œ๊ตญ์˜ ์‚ฌ์šฉ์ž๋“ค์€ ๋กœ๋”ฉ ํƒ€์ž„์ด 2์ดˆ๋™์•ˆ ๋œจ์ง€ ์•Š์œผ๋ฉด ์‚ฌ์ดํŠธ๋ฅผ ๋‚˜๊ฐ€๋ฒ„๋ฆฐ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ์ถฉ๊ฒฉ์ด์—ˆ์–ด์š”. ์•„๋ฌด๋ฆฌ ์‚ฌ์ดํŠธ ๋ฐฑ์—”๋“œ ์ƒ์˜ ๋กœ์ง์„ ์ž˜ ์งœ๋†“์•˜๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ํ”„๋ก ํŠธ์—”๋“œ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”..

Finds & Notes

Postman ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๊ธฐ

๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ๋งค๋ฒˆ ์ฃผ์†Œ๋ฅผ ๋ฐ”๊ฟ”์•ผํ•ด์„œ ๊ท€์ฐฎ์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ž˜์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ์‚ฌ์šฉ๋ฒ• ์˜ค๋ฅธ์ชฝ ์œ„์— ๋ˆˆ๋ชจ์–‘ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ๋‹ค. variable ์—๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜ ์ด๋ฆ„, Initial value ์™€ Current value ์—๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์จ์ฃผ๋ฉด๋œ๋‹ค. ๋‚˜๋Š” dev ๋ผ๋Š” ์ด๋ฆ„์˜ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด local ์—์„œ ๊ฐœ๋ฐœํ•˜๊ธฐ ํŽธํ•˜๋„๋ก ๋งŒ๋“ค๊ณ  bookmark ๋ผ๋Š” ๋ณ€์ˆ˜์—๋Š” ์‹ค์ œ ์„œ๋น„์Šค url ์„ ๋„ฃ์–ด์คฌ๋‹ค. ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” {{๋ณ€์ˆ˜๋ช…}} ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ref: https://velog.io/@kkl4846/postman-%ED%8F%AC%EC%8A%A4%ED%8A%B8%EB%A7%A8-%EA%BF%80%ED%8C%81team-workspace-%ED%99%98%EA%B2%BD%..

Develop/React.js

[React] ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ(REST API ๋ฐฉ์‹)

https://stack94.tistory.com/entry/React-%EC%B9%B4%EC%B9%B4%EC%98%A4Kakao-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EA%B5%AC%ED%98%84%ED%95%B4%EB%B3%B4%EA%B8%B0 ๋А๋ฆฐ ๊ฐœ๋ฐœ์ž ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฑ์—”๋“œ ํ•™์Šต์ •๋ฆฌ ๋ฐ ์ •๋ณด๊ณต์œ  ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค. stack94.tistory.com ์œ„์˜ ๊ธ€์„ ์ฐธ๊ณ ํ•˜๋ฉด์„œ ๋”ฐ๋ผํ•ด๋ณด์•˜๋‹ค. https://developers.kakao.com/docs/latest/ko/kakaologin/common Kakao Developers ์นด์นด์˜ค API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•ด๋ณด์„ธ์š”. ์นด์นด์˜ค ๋กœ๊ทธ์ธ, ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ, ์นœ๊ตฌ API, ์ธ๊ณต์ง€๋Šฅ API ๋“ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. developers.kakao..

Develop/React.js

[React] react-chartjs-2 ๋กœ ์‰ฝ๊ฒŒ ์ฐจํŠธ๊ทธ๋ฆฌ๊ธฐ

ํ†ต๊ณ„ ํŽ˜์ด์ง€๋ฅผ ๊ฐœ๋ฐœํ•˜๋ คํ•˜๋Š”๋ฐ ์ฐจํŠธ๋ฅผ ๊ทธ๋ฆด์ผ์ด ํ•„์š”ํ–ˆ๋‹ค. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ๊ฑด react-chartjs-2 ! ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ค๊ฐ€ ์œ ๋ช…ํ•˜๋‹ค๊ณ  ํ•ด์„œ ํ•œ๋ฒˆ ์จ๋ดค๋‹ค. ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ด์•ผ๊ฒ ๋‹ค ์‚ฌ์šฉ๋ฐฉ๋ฒ• npm install --save chart.js react-chartjs-2 https://react-chartjs-2.js.org/examples Examples | react-chartjs-2 List of react-chartjs-2 usage examples. react-chartjs-2.js.org ๋‚œ ์ด ํŽ˜์ด์ง€์—์„œ ๋‚ด๊ฒŒ ํ•„์š”ํ•œ ์ฐจํŠธ ๋ชจ์–‘์„ ์ฐพ์•„์„œ ๋“ค์–ด๊ฐ”๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๋‚˜๋Š” Line Chart ๋ฅผ ์ฐพ์•„ ๋“ค์–ด๊ฐ€์„œ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ดค๋‹ค. App.tsx์— ์žˆ๋Š” ์ฝ”๋“œ๋“ค์„ ๊ฐ€์ ธ์™€์ค€๋‹ค. tsx ์ฝ”๋“œ๋ผ์„œ js ํŒŒ์ผ์—์„œ ์“ฐ๊ธฐ์—”..

Develop/React.js

[React] Recoil ๋กœ React ์Šค๋Ÿฝ๊ฒŒ ์ƒํƒœ๊ด€๋ฆฌํ•˜๋Š”๋ฒ•

์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‹ค๊ฐ€ ์•„, ์ด๊ฑด ์•ˆ๋˜๊ฒ ๋‹ค. ์ „์—ญ์œผ๋กœ ์ƒํƒœ๊ด€๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค! ์‹ถ์€ ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋‹ค. ๊ทผ๋ฐ ์˜ค๋Š˜ ์•„์นจ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋ถ„ ํ‹ฐ์Šคํ† ๋ฆฌ ํ”ผ๋“œ๋ฅผ ๋ณด๋‹ค๊ฐ€ Recoil ์„ ์ถ”์ฒœํ•˜์‹œ๋Š” ๊ธ€์„ ์ฝ๊ณ  ์ด ์ฐธ์— Recoil์„ ์จ๋ณด์ž ์ƒ๊ฐํ–ˆ๋‹ค. ์„ค์น˜ ๋จผ์ € ์„ค์น˜ํ•œ๋‹ค npm install recoil Recoil์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. index.js ์˜ ํŒŒ์ผ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•ด์ค€๋‹ค. index.js // index.js import React from 'react'; import ReactDOM from 'react-dom'; import { RecoilRoot } from 'recoil'; import App from './App'; ReactDOM..

Develop/React.js

[React] ์—…๋ฐ์ดํŠธ ์‹œ ์Šคํฌ๋กค ๋งจ ๋ฐ‘์œผ๋กœ ๋‚ด๋ฆฌ๊ธฐ

์ฑ„ํŒ…์„ ํ•˜๋‹ค๋ณด๋ฉด ๋‚ด๊ฐ€ ์ง์ ‘ ์Šคํฌ๋กค์„ ๋‚ด๋ฆฌ์ง€ ์•Š์•„๋„ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋ฉ”์„ธ์ง€์— ๋Œ€ํ•ด์„œ ์•„๋ž˜๋กœ ์ž๋™ ์Šคํฌ๋กค์ด ๋œ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋ฐฉ๋ฒ• useRef, useEffect ํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ–ˆ๋‹ค. const scrollRef = useRef(); useRef ํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋กคํ•  ์š”์†Œ์— ๋Œ€ํ•œ scrollRef ๋ผ๋Š” ๊ฒƒ์„ ๋งŒ๋“ ๋‹ค. ์ด scrollRef๋Š” ์Šคํฌ๋กคํ•  ์ปจํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. useEffect(() => { scrollToBottom(); }, [isTyping]); const scrollToBottom = () => { if (scrollRef.current) { scrollRef.current.scrollTop = scrollRef.current.scrollHeight; } };..

Finds & Notes

Github README์— ์ด๋ฏธ์ง€/gif ์˜ฌ๋ฆฌ๊ธฐ

README์— ์ด๋ฏธ์ง€/gif(์›€์งค)์„ ์˜ฌ๋ ค๋ณด์ž ๋งŒ์•ฝ ์˜์ƒ -> gif ๋ณ€ํ™˜์„ ์›ํ•˜๋Š” ์‚ฌ๋žŒ์€ ์•„๋ž˜ ์‚ฌ์ดํŠธ์—์„œ gif ๋ณ€ํ™˜์„ ํ•˜๊ณ  ์˜ค๋ฉด๋œ๋‹ค. https://cloudconvert.com/mov-to-gif MOV to GIF | CloudConvert Compress Merge Capture Website Create Archive Extract Archive Convert MOV Converter MOV MOV is a video format that is commonly associated with QuickTime. This video extension is developed by Apple. It uses an algorithm to compress video and audio. Although cl..

Develop/React.js

[React][์˜ค๋ฅ˜] ํด๋ฆญ ์ด๋ฒคํŠธ ์ „ํŒŒ ๋ง‰๊ธฐ

๋ฌธ์ œ ์ฑ„ํŒ… ๋ฆฌ์ŠคํŠธ๋“ค์„ ๋ณด์—ฌ์ฃผ๊ณ , ์ฑ„ํŒ…์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ ์ค‘์ด์—ˆ๋‹ค. ์ฑ„ํŒ… ๋ฆฌ์ŠคํŠธ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ฑ„ํŒ…์„ ํ™•์ธํ•˜๋Ÿฌ ์ƒ์„ธํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ณ , ์‚ญ์ œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ฑ„ํŒ… ๊ธฐ๋ก์ด ์‚ญ์ œ๊ฐ€ ๋˜์–ด์•ผํ•œ๋‹ค. {chats.map((chat) => ( handleChatItemClick(chat.chatId)} className="border-2 border-t-gray-300 p-5 flex justify-between text-sm" > {/* ์ฑ„ํŒ… ์ƒ์„ฑ ์‹œ๊ฐ„ */} {formatDate(chat.created_date)} handleDeleteOneChat(chat.chatId)} className="px-4 py-2 overflow-hidden" > ์‚ญ์ œ ))} ๊ทผ๋ฐ ์‚ญ์ œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์‚ญ์ œ๊ฐ€ ๋˜๊ธดํ•˜์ง€๋งŒ ๋™์‹œ์—..

Develop/React.js

[React] fetch ๋กœ ํ†ต์‹ ํ•˜๊ธฐ

React์—์„œ fetch๋Š” JavaScript์˜ ๋‚ด์žฅ API์ธ fetch() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. fetch ํ•จ์ˆ˜๋Š” ES6๋ถ€ํ„ฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ํ•จ์ˆ˜์ด๋ฉฐ, React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ AJAX ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. AJAX ๋ž€? AJAX๋Š” "Asynchronous JavaScript and XML"์˜ ์•ฝ์ž๋กœ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. AJAX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜์ง€ ์•Š๊ณ ๋„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์—๋Š” ์›น ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „์ฒด์ ์œผ๋กœ ๋‹ค์‹œ ๋ฐ›์•„์˜ค๋Š” ๋ฐฉ์‹์ธ ์ „ํ†ต์ ์ธ ๋™๊ธฐ์ ์ธ ์š”์ฒญ ๋ฐฉ์‹์ด ์ผ๋ฐ˜์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ..

Develop/React.js

[React] tooltip ๊ตฌํ˜„ํ•˜๊ธฐ

์ด๋ ‡๊ฒŒ ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ค๋‹ค ๋Œ”์„ ๋•Œ ์ด๊ฒŒ ์–ด๋–ค ๋ฒ„ํŠผ์ธ์ง€ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ํ•˜๋ ค๋ฉด tooltip ์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค. React์—์„œ tooltip ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋‚˜๋Š” ๊ทธ์ค‘์—์„œ๋„ react-tooltip ์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. https://react-tooltip.com/docs/getting-started Getting Started | React Tooltip This docs is related to V5, if you are using V4 please check here. react-tooltip.com ์ž์„ธํ•œ ์„ค๋ช…์€ ์œ„์— ๋‚˜์™€์žˆ๋‹ค. ๋ณธ์ธ๋„ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๊ณ  ์ ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ณ  ์ ์šฉ๋ฒ•๋งŒ ๋ณด๊ณ ์‹ถ์€ ๋ถ„์€ ์•„๋ž˜๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ..

Develop/HTML, CSS

[HTML, CSS] ์Šคํฌ๋กค ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

์บก์Šคํ†ค ํ”„๋กœ์ ํŠธ ์ค‘์— ํŠน์ • ๊ตฌ์—ญ ๋‚ด์—์„œ ์Šคํฌ๋กค์„ ๊ธฐ๋Šฅํ•  ์ผ์ด ์ƒ๊ฒจ์„œ ์ž‘์„ฑํ•ด๋ณด๋Š” ํฌ์ŠคํŒ…! ์ฑ„ํŒ…์ฐฝ์„ ๋งŒ๋“œ๋Š”๋ฐ ์ฑ„ํŒ…์ฐฝ์— ์žˆ๋Š” ์ฑ„ํŒ… ๋ฉ”์„ธ์ง€ ๋‚ด์šฉ๋“ค๋งŒ ์Šคํฌ๋กค์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•  ๊ฒƒ์ด๋‹ค. ๋ฐฉ๋ฒ• tailwindcss ๋ฒ„์ „ import React from 'react'; function MyComponent() { return ( {/* ์Šคํฌ๋กค์ด ํ•„์š”ํ•œ ์ปจํ…์ธ  */} ); } overflow-y-scroll ์„ ์ด์šฉํ•ด์„œ ์Šคํฌ๋กค์ด ํ•„์š”ํ•œ ์ปจํ…์ธ ๋ฅผ ๊ฐ์‹ธ์ค€๋‹ค. ๊ธฐ๋ณธ css ๋ฒ„์ „ import React from 'react'; function MyComponent() { return ( {/* ์Šคํฌ๋กค์ด ํ•„์š”ํ•œ ์ปจํ…์ธ  */} ); } ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ overflow-y : 'scroll' ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ์Šคํฌ๋กค์ด ๋„˜์น˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ ..

Develop/React.js

[React] useDebugValue

useDebugValue ๋ž€ React Hooks ์ค‘ ํ•˜๋‚˜๋กœ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ Dev Tools ์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ๋””๋ฒ„๊น…ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์‚ฌ์šฉ๋ฒ• useDebugValue ๋Š” ๋‘๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›์Œ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” ๋””๋ฒ„๊น…์— ์‚ฌ์šฉํ•  ๊ฐ’(value) ๋‘๋ฒˆ์งธ ์ธ์ž๋Š” ์˜ต์…˜ ๊ฐ์ฒด์ด๋‹ค. ์˜ˆ์‹œ import { useDebugValue, useState } from 'react'; function useCounter(initialValue) { const [count, setCount] = useState(initialValue); useDebugValue(count, count => `Count: ${count}`); function handleIncrement() { setCount(count + 1); } fu..

Develop/React.js

[React] useRef

useRef ๋ž€ useRef๋Š” React์—์„œ ์ œ๊ณตํ•˜๋Š” Hook ํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ DOM ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์˜ˆ์‹œ ์˜ˆ๋ฅผ ๋“ค์–ด, useRef๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DOM ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. import React, { useRef, useEffect } from 'react'; function Example() { const inputRef = useRef(null); useEffect(() => { inputRef.current.focus(); }, []); return ; } ์œ„์˜ ์ฝ”๋“œ์—์„œ useRef๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ input ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๊ณ , useEffect๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋  ๋•Œ input ์š”์†Œ์— ์ž๋™..

Develop/React.js

[React] useCallback

useCallback ์ด๋ž€ React์˜ useCallback ํ›…์€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ›… ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ด ํ›…์€ ํ•จ์ˆ˜๋ฅผ ์บ์‹œ(cache)ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ํ•จ์ˆ˜ ์žฌ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๊ณ , ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ์— ๋„์›€์„ ์ค€๋‹ค. ์‚ฌ์šฉ๋ฒ• useCallback์€ ๋‘ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋Š” ์บ์‹œํ•  ํ•จ์ˆ˜์ด๋ฉฐ, ๋‘ ๋ฒˆ์งธ ์ธ์ž๋Š” ์˜์กด์„ฑ ๋ฐฐ์—ด(dependency array)์ด๋‹ค. ์˜์กด์„ฑ ๋ฐฐ์—ด์—๋Š” ์บ์‹œํ•  ํ•จ์ˆ˜์—์„œ ์ฐธ์กฐํ•˜๋Š” ๊ฐ’๋“ค์ด ํฌํ•จ๋˜๋ฉฐ, ์ด ๊ฐ’๋“ค์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•œ๋‹ค. ์˜ˆ์‹œ ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. import { useState } from 'react'; function MyComponent() { const [count, setCount] = useState(0)..

Develop/React.js

[React] Link์™€ useNavigate์˜ ์ฐจ์ด์  ์•Œ์•„๋ณด๊ธฐ

React์—์„œ ํŽ˜์ด์ง€ ์ด๋™์„ ๊ตฌํ˜„ํ•  ๋•Œ, Link ์™€ useNavigate ์ด๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋‘˜์˜ ๋ถ„๋ช…ํ•œ ์ฐจ์ด์ ์ด ์žˆ๋Š”๋ฐ, ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ ๊ถ๊ธˆํ•ด์ ธ์„œ ์ •๋ฆฌํ•ด๋ณด๊ณ ์žํ•œ๋‹ค. Link Link๋Š” ํด๋ฆญํ•  ๋•Œ ๋ฐ”๋กœ ์ด๋™ํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ์›๋ž˜ ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ๋˜๋ฉด ํ˜„์žฌ ๋ Œ๋”๋ง๋˜์–ด์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค ์‚ฌ๋ผ์ง€๊ณ  ์ƒˆ๋กœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋˜๋Š”๋ฐ, ์ด๋•Œ state ๋“ค์ด ๋ชจ๋‘ ๋‚ ์•„๊ฐ„๋‹ค. ํ•˜์ง€๋งŒ Link ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ Œ๋”๋ง๋œ ์ปดํฌ๋„ŒํŠธ์˜ state ๊ฐ€ ์œ ์ง€๋˜์–ด์„œ SPA๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ค์ œ ํ•ด๋‹น ๋งํฌ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์— ์ง€์ •๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค. * v6 ๋ถ€ํ„ฐ๋Š” Link ๋กœ props ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ๋ชปํ•œ๋‹ค. (์ด๊ฒƒ๋•Œ๋ฌธ์— ํ•œ์ฐธ ๋ถ™์žก๊ณ  ์žˆ์—ˆ๋‹ค...) ์˜ˆ์‹œ ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ํด๋ฆญํ–ˆ..

Develop/JavaScript

[JavaScript] ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น

React ๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ '๋น„๊ตฌ์กฐํ™” ํ• ๋‹น' ์ด๋ผ๋Š” ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ํ™•์‹คํžˆ ์ •๋ฆฌํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ณ  ์‹ถ์–ด์ ธ์„œ ์“ฐ๋Š” ํฌ์ŠคํŒ…! ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์ด๋ž€ ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น(Destructuring Assignment)์€ ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ํ•ด์ฒดํ•ด์„œ ๊ทธ ๊ฐ’์„ ๊ฐœ๋ณ„ ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” JavaScript ์˜ ํ‘œํ˜„์‹์ด๋‹ค. ์“ฐ๋Š” ์ด์œ  ์ด๋Š” ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์‰ฝ๊ฒŒ ๊บผ๋‚ด์„œ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ๋†’์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค ์˜ˆ์‹œ ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๋•Œ, const person = { name: 'John', age: 30, gender: 'male' }; ์ด ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๊บผ๋‚ด์„œ ๊ฐœ๋ณ„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค. const name = person.name; const..

Develop/React.js

[React] Fragment ๋ฌธ๋ฒ•์„ ์™œ ์“ธ๊นŒ

์™œ ์“ฐ๋Š” ๊ฑฐ์•ผ? React ์—์„œ JSX ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ return ๋ฌธ์—๋Š” ๋ฌด์กฐ๊ฑด ์ตœ์ƒ์œ„ ํƒœ๊ทธ๊ฐ€ ์กด์žฌํ•ด์•ผํ•œ๋‹ค. React ๋Š” ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋งŒ์„ return ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋•Œ, Fragment ๋ผ๋Š” ๊ฑธ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Š” ๋ถˆํ•„์š”ํ•œ div, span ๋“ฑ์˜ HTML ์š”์†Œ ์—†์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž์‹ ์š”์†Œ๋ฅผ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. Fragment ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ์˜ ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ์‹œ ์˜ˆ๋ฅผ ๋“ค์–ด App() ์— Table() ์ด๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. Table ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. function Table() { return ( Hello World ); } ์—ฌ๊ธฐ์„œ Table ์ปดํฌ๋„ŒํŠธ ๋‚ด์˜ ํƒœ๊ทธ๋“ค์„ ๋ฌถ๊ธฐ ์œ„ํ•ด ์ตœ์ƒ์œ„ ํƒœ๊ทธ๋กœ div ..

Review

World IT Show 2023 ๋ฐฉ๋ฌธ!

2023 ์›”๋“œ IT ์‡ผ๋ฅผ ๋‹ค๋…€์™”์Šต๋‹ˆ๋‹ค! ์˜จ๋ผ์ธ ์‚ฌ์ „๋“ฑ๋ก์„ ํ•˜๋ฉด ๋ฌด๋ฃŒ์ด๊ณ , ํ˜„์žฅ ๋“ฑ๋ก์„ ํ•˜๋ฉด 1๋งŒ์›์„ ๊ฒฐ์ œํ•ด์•ผํ•˜๋”๋ผ๊ตฌ์š”. ์ €๋Š” ์˜จ๋ผ์ธ ์‚ฌ์ „๋“ฑ๋ก์„ ํ–ˆ๊ธฐ์— ๊ฒฐ์ œํ•  ํ•„์š”์—†์ด ๋ฐ”๋กœ ๋“ฑ๋ก์„ ํ•˜๊ณ , ์ด๋ฆ„ํ‘œ๋ฅผ ๋ฐ›์•„ ์ž…์žฅํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ์ด ์ •๋ง์ •๋ง ๋งŽ์•˜์–ด์š”. ์‚ฌ์ „๋“ฑ๋ก์„ ํ–ˆ๋”๋ผ๋„ ๋“ฑ๋ก/์ด๋ฆ„ํ‘œ๋ฅผ ๋ฐ›์œผ๋ ค๋ฉด ์ด ๊ธด ์ค„์„ ์„œ์•ผํ–ˆ๋‹ต๋‹ˆ๋‹ค. ๊ทผ๋ฐ ํšŒ์ „์œจ์ด ๋นจ๋ผ์„œ 5๋ถ„๋„ ์•ˆ ๊ธฐ๋‹ค๋ฆฐ ๊ฒƒ ๊ฐ™์•„์š”. ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ถ€์Šค ์•ˆ๋‚ด๋„์ž…๋‹ˆ๋‹ค. 2์ธต์—๋Š” ์ฃผ๋กœ ์Šคํƒ€ํŠธ์—…, 3์ธต์—๋Š” ๋Œ€๊ธฐ์—… ๋ถ€์Šค๊ฐ€ ์žˆ์—ˆ์–ด์š”. ๋“ค์–ด๊ฐ€์ž๋งˆ์ž ์ฒ˜์Œ์œผ๋กœ ๊ตฌ๊ฒฝํ–ˆ๋˜ ๋ถ€์Šค๋Š” ์ฝ๊ธฐ ๋Šฅ๋ ฅ์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ์š”. ๊ธ€์„ ์ฝ์„ ๋•Œ ๋ˆˆ์ด ๋ฐ”๋ผ๋ณด๋Š” ๊ฑธ ์ธ์‹ํ•ด์„œ ์ฝ๊ธฐ ๋Šฅ๋ ฅ์„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค์˜€์–ด์š”. ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์˜ ์„œ๋น„์Šค๋“ค์ด AI์— ๊ด€๋ จ๋˜์—ˆ๋‹ค๊ณ ํ•ด๋„ ๊ณผ์–ธ์ด ์•„๋‹ ..

Finds & Notes

(MacOS) homebrew ๋กœ OpenSesame ์„ค์น˜ํ•˜๊ธฐ

์ด๋ฒˆ์— ์–ธ์–ดํ•™๊ณผ ์‹ฌ๋ฆฌ์‹คํ—˜์ด๋ผ๋Š” ๊ต์–‘์„ ๋“ฃ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”. ์ˆ˜์—…์—์„œ ์“ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์ธ OpenSesame ๋ฅผ ์„ค์น˜ํ•ด์•ผ ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋”๋ผ๊ตฌ์š”! MacOS์—์„œ OpenSesame ์•ฑ์„ ์„ค์น˜ํ•˜๊ณ , ์—ฌ๋Š” ๋ฒ•์— ๋Œ€ํ•ด์„œ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ คํ•ฉ๋‹ˆ๋‹ค. OpenSesame ๋ž€? "OpenSesame"๋Š” ์‹คํ—˜์‹ค ์—ฐ๊ตฌ์ž๋ฅผ ์œ„ํ•œ ๋ฌด๋ฃŒ ์˜คํ”ˆ ์†Œ์Šค ์‹คํ—˜ ์„ค๊ณ„ ๋ฐ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค. ์ด ์†Œํ”„ํŠธ์›จ์–ด๋Š” ํ–‰๋™ ์‹คํ—˜, ๋‡Œ ์˜์ƒ ์‹คํ—˜ ๋ฐ ํ†ต์ œ ์‹คํ—˜ ๋“ฑ ๋‹ค์–‘ํ•œ ์‹คํ—˜ ์œ ํ˜•์„ ์ง€์›ํ•˜๋ฉฐ, ์‹คํ—˜ ์„ค๊ณ„, ์‹œ๊ฐ์  ์ž๊ทน ์ œ์‹œ, ๋ฐ˜์‘ ๋ฐ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์„์œ„ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OpenSesame๋Š” Python ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์น˜ ์ €๋Š” homebrew ๋ฅผ ์ด์šฉํ•ด์„œ ..

Finds & Notes

hELLO, highlight.js ์ ์šฉ ๋ฐ ์ปค์Šคํ…€(feat. ๊ธ€์“ฐ๊ธฐ/๊ตฌ๋… ๋ฒ„ํŠผ, ์ฝ”๋“œ๋ธ”๋Ÿญ ๋‹คํฌ๋ชจ๋“œ ๋“ฑ)

์•ˆ๋…•ํ•˜์„ธ์š”!์˜ค๋Š˜์€ ํ‹ฐ์Šคํ† ๋ฆฌ ์Šคํ‚จ์„ ์ƒˆ๋กœ ๋ฐ”๊ฟ”๋ณด๊ณ , ๋ฐ”๊พธ๋ฉด์„œ ํ—ค๋งธ๋˜ ๋ถ€๋ถ„์„ ๊ณต์œ ํ•ด๋“œ๋ฆฌ๋ ค๊ณ ํ•ด์š”. hELLO ์Šคํ‚จ์ผ๋‹จ ์ €๋Š” hELLO ๋ผ๊ณ  ํ•˜๋Š” ์Šคํ‚จ์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์•„์ฃผ ์ธ๊ธฐ ์žˆ๋Š” ์Šคํ‚จ์ด๋ผ๊ณ  ํ•˜๋”๋ผ๊ตฌ์š”!์ •์ƒ์šฐ ๊ฐœ๋ฐœ์ž ๋‹˜์ด ์ œ์ž‘ํ•˜์…จ์œผ๋ฉฐ, ์•„๋ž˜ ํฌ์ŠคํŒ…์—์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.https://pronist.tistory.com/5?category=844785 hELLO ํ‹ฐ์Šคํ† ๋ฆฌ ์Šคํ‚จ์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.hELLO ์Šคํ‚จ์€ ๋ณธ๋ž˜ ๊ธฐ๋Šฅ์˜ ๋งŽ์ด ์—†์—ˆ๋‹ค๊ฐ€, ํ‹ฐ์Šคํ† ๋ฆฌ ๋ธ”๋กœ๊ฑฐ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ˜ธ์‘์— ํž˜์ž…์–ด ๊ธฐ๋Šฅ์˜ ์ถ”๊ฐ€์™€ ํ•จ๊ป˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. hELLO 1.0 ๋•Œ์™€ ๋น„๊ตํ•˜๋ฉด ๋น„๊ตํ•  ์ˆ˜๋„ ์—†์„ ๋งŒํผ์˜ ๊ธฐpronist.dev ์Šคํ‚จ ์ ์šฉํ•˜๊ธฐ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€์„œ ์Šคํ‚จ ๋ณ€๊ฒฝ > ์Šคํ‚จ ๋“ฑ๋ก ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.์ถ”๊ฐ€..

Develop/React.js

[React] ๊ธด ๋ฌธ์ž์—ด ์ž๋ฅด๊ณ  '...' ๋ถ™์ด๊ธฐ

์š”์†Œ๋“ค์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ, ์ œ๋ชฉ์ด ๋„ˆ๋ฌด ๊ธธ์–ด์„œ ๋„˜์–ด๊ฐ€๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค. ์ค„์„ ๋„˜์–ด๊ฐ€๋ฉด grid ๊ฐ€ ํํŠธ๋Ÿฌ์ง€๊ธฐ๋„ํ•˜๊ณ , ๋ณด๊ธฐ์—๋„ ํ†ต์ผ์„ฑ์ด ์—†์–ด๋ณด์—ฌ์„œ ๋„ˆ๋ฌด ๊ธธ๋ฉด ์ ๋‹นํžˆ ์ž๋ฅด๊ณ  ๋์— ... ์„ ๋ถ™์ด๋„๋ก ํ•ด๋ดค๋‹ค. ํ˜„์žฌ๋Š” ์œ„์™€ ๊ฐ™์€ ์ƒํƒœ์ด๋‹ค. ๋งจ ์˜ค๋ฅธ์ชฝ ์š”์†Œ๋ฅผ ๋ณด๋ฉด ์ œ๋ชฉ์ด ๋„ˆ๋ฌด ๊ธธ์–ด์„œ ์•„๋ž˜์ค„๊นŒ์ง€ ์นจ๋ฒ”ํ–ˆ๋‹ค. ์ € ์ œ๋ชฉ ๋ฐ์ดํ„ฐ๋Š” name ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ๋“ค์–ด์žˆ์—ˆ๋Š”๋ฐ, processedName ์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋ณ€์ˆ˜๋กœ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์คฌ๋‹ค. const processedName = name.length > 15 ? `${name.slice(0, 15)}...` : name; ๋‚˜๋Š” 15์ž๊ฐ€ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์„ ์ž๋ฅด๊ณ , ๋์— ... ์ด ๋ถ™๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ดค๋‹ค. processedName ๋ณ€์ˆ˜๋ฅผ ์ ์šฉํ•ด์„œ ๋‹ค์‹œ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•ด๋ณด๊ฒ ๋‹ค. ์›..

wonny_dev
WonnyDocs

...