Ambassador/DEVOCEAN YOUNG
2023.08.06
์๋
ํ์ธ์. ๋ฐ๋ณด์
์ 2๊ธฐ ์๋ค์์
๋๋ค! ์ค๋์ SKT Tํ์์์ ์งํ๋ ํฐ์ ํฌ์ด ์ฒดํ๊ณผ SKT ๋ณธ์ฌ๋ฅผ ๋ฐฉ๋ฌธํด๋ณธ ํ๊ธฐ๋ฅผ ํฌ์คํ
ํด๋ณผ๊นํฉ๋๋ค.์ ๋ ๋ฐ๋ณด์
์ ํ๋์ ์ผํ์ผ๋ก ํฐ์ํฌ์ด๋ฅผ ์งํํ๊ฒ ๋์๋๋ฐ์.์ง์ ์ฌ์ดํธ์์ ์์ฝํ๊ณ ๋ฐฉ๋ฌธํ ์๋ ์์ด์. ์์ฝํ ์ ์๋ ์ฌ์ดํธ๋ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!https://tum.sktelecom.com/reservation/registReservation.do ๋ฏธ๋๊ธฐ์ ์ฒดํ๊ด T.um(ํฐ์)SKํ
๋ ์ฝค ๋ฏธ๋๊ธฐ์ ์ฒดํ๊ด, ์์ค ์๋ด, ๋ฐฉ๋ฌธ์์ฝ, ์ ์๊ด ์ ๋ณด, ์ฒดํ ์๋น์ค ๋ฑ ์ ๊ณต.tum.sktelecom.comํฌ์ด ์ ํ์๋ ์ ํ๋ธ ๋ผ์ด๋ธ ํฌ์ด์ ํ์ฅ ํฌ์ด๊ฐ ์๋๋ฐ ํ์ฅ ํฌ์ด๋ฅผ ์ ํํด์ฃผ์๋ฉด ๋ ๊ฒ ๊ฐ์์. ๋จผ์ ์์ง๋ก์ ์๋ SKT Tํ์์ ๋์ฐฉ์ ํ์ด์.๋ฐ๋ณด์
์๋ด๋น์๋..
Develop/TypeScript
2023.07.23
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
2023.07.23
๊ธฐ๋ณธ ํ์
๊ธฐ๋ณธ ํ์
์ ์ ๋ฆฌํด๋ณด์ 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
2023.07.22
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
2023.07.18
์ค์๊ฐ ์ํต์ ํ๊ณ ์ถ์ผ๋ฉด ์๋ฒ์ ์ ์ ๊ฐ 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
2023.07.15
์ฑํ
๊ธฐ๋ฅ์ ๋ง๋ค์ด๋ณด์ ์ฑํ
๋ฉ์ธ์ง๋ ๊ฒฐ๊ตญ ๊ฒ์๋ฌผ ๋ฐํ๊ธฐ๋ฅ๊ณผ ๋๊ฐ๋ค. ์๋ก์ด ์ ์ด ์๋ค๋ฉด ์ฑํ
๋ฉ์ธ์ง๋ ์ฑํ
๋ฐฉ ๊ฒ์๋ฌผ์ ์ข
์์ด ๋์ด์ผํ๋ค. ๋๊ธ ๋ง๋๋ ๋ฒ ๋๊ธ์ ๋๊ธ collection ์ ํ๋ ์๋ก ๋ง๋ค์ด์ ๋ชจ๋ ๋๊ธ์ ์ ์ฅํ๋ฉด ๋๋ค. ํ์ง๋ง ๊ทธ๋ฌ๋ฉด ๊ทธ ๋๊ธ๋ค ํ๋ํ๋๊ฐ ์ด๋ค ๊ธ์ ๋ฌ๋ฆฐ ๋๊ธ์ธ์ง ํ์ธํ ์ ์๊ฒ๋ ๊ฒ์ด๋ค. ๋๋ฌธ์ ๋ชจ๋ ๋๊ธ์ ๋ถ๋ชจ ๊ฒ์๋ฌผ์ด ๋ฌด์์ธ์ง ๋ฅผ ๋ช
์ํด์ผํ๋ค. ๋ฐ๋ผ์ ๊ฒ์๋ฌผ collection ๊ณผ ๋๊ธ collection ์ ๋ง๋ค๊ณ ๋๊ธ 1์ ๋ถ๋ชจ๊ฒ์๋ฌผ์ ๊ฒ์๋ฌผ 2๊ณ , ๋๊ธ 2์ ๋ถ๋ชจ ๊ฒ์๋ฌผ์ ๊ฒ์๋ฌผ 4์ด๋ค... ์ด๋ฐ์์ผ๋ก collection ๋ผ๋ฆฌ ๊ด๊ณ๋ฅผ ๋งบ์ด์ผํ๋ค. ์ฑํ
๋ฐฉ ๋ง๋๋ POST api ๋ง๋ค๊ธฐ ์ฑํ
๋ฒํผ์ ๋๋ฅด๋ฉด chatroom ์ด๋ผ๋ collection ์ document..
Develop
2023.07.08
์ํฐ๋ ํ๋ฆฌ์จ๋ณด๋ฉ ์ฑ๋ฆฐ์ง 7์ ๊ณผ์ ๋ก CSR๊ณผ SSR์ ์ดํด๋ ์ฃผ์ ๋ก ํฌ์คํ
์ ํ๊ฒ๋์๋ค! 1. CSR์ด๋? ์ด๊ฒ์ ์ฅ๋จ์ ์ ๋ฌด์์ธ๊ฐ์?CSR์ด๋ Client-side Rendering ์ ์ค์๋ง์ด๋ค.๋ง ๊ทธ๋๋ก 'ํด๋ผ์ด์ธํธ ์ชฝ์์ ๋ ๋๋ง์ ํ๋ค' ๋ผ๋ ๋ง์ธ๋ฐ,์ฌ๊ธฐ์ ํด๋ผ์ด์ธํธ๋ ๋ธ๋ผ์ฐ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋๋ง์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค. ์๋ฒ์์ HTML์ ๋ฐ์์์ JS์ฃผ์๋ฅผ ์๋ฒ๋ก ์์ฒญํด ๋์ ์ผ๋ก ์ฌ์ฉ์์๊ฒ ์ต์ข
์ ์ธ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ณด์ฌ์ค๋ค.์ ๊ทธ๋ฆผ์ CSR ์ ์์์ด๋ค.์ ์ ๋ ์น์ฌ์ดํธ์ ์์ฒญ์ ๋ณด๋ธ๋ค.Edge Caching ์ HTML ํ์ผ๊ณผ JS์ ์ ๊ทผํ ์ ์๋ ๋งํฌ๋ฅผ ๋น ๋ฅด๊ฒ ๋ณด๋ธ๋ค๋ธ๋ผ์ฐ์ ๋ HTML, JS๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๋๋ค.๋ธ๋ผ์ฐ์ ๋ JS๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๋๋ค.๋ชจ๋ ๋ค์ด๋ก๋๊ฐ ๋๋ฉด JS๊ฐ ์คํ๋๊ณ , ๋ฐ..
Review
2023.07.02
์นดํ์์ ์ด๊ฒ์ ๊ฒ ํ ์ผ์ ํ๋ค๊ฐ ๊ฐ์๊ธฐ ๋ฐ๊ฒ๋ ์ ํ ํํต 'ai ๊ต์ก์์
๋๋ค. SW์ค์ฌ๋ํ ๊ณต๋ํด์ปคํค ์ฐธ๊ฐ์๋ก ์ ์ ๋์
์ ์ฐ๋ฝ๋๋ ธ์ด์.' ์ผ๋จ๋จํ๊ณ ๊ธฐ์ ์๊ฐ์ด์๋ค! ์ฌ์ค ํด์ปคํค์ ์ฐธ์ฌํ๊ธฐ ์ ์ ๋ด์ ์ผ๋ก ํ์ด ๋ง์ด ๋ถ์กฑํ ์ํ์๋ค. ์กธ์
์ ๋ฐ๋
์๋๊ณ ํ ๊ฑด ๋๋ฌด ๋ง์๋ณด์ด๊ณ , ๋ง์์ ๊ธํ๊ณ . ๋ฌด์ธ๊ฐ ํ์ ๋ด์ ํ ์๋์ง๊ฐ ์ค์ค๋ก ๋ง์ด ๋จ์ด์ก๋ค๊ณ ๋๊ผ๋ค. ๊ทธ๋์ ๋๋์ฑ ๊ฑฑ์ ์ด ๋๋ค. ์ด ํด์ปคํค์ ๋ด๊ฐ ์ฒ์ ๋๊ฐ๋ณด๋ ํด์ปคํค์ด๊ณ , ๋ฌด๋ ค ๋ฌด๋ฐ 3์ผ์ธ๋ฐ ์ ๋ฒํฐ๊ณ ๋ฏผํ๋ฅผ ์ ๋ผ์น ์ ์์ ์ง ๋ง์ด๋ค. ํ์ง๋ง ์ด์ฉ๋ฉด ๋ด๊ฐ ์ด ๋ํ์์ ์กฐ๊ธ์ด๋ผ๋ ๊ธ์ ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋๋ค๋ฉด ๋ด๊ฐ ๋ค์ ํ์ ๋ผ ์ ์๋ ์๋๋ ฅ์ด ๋ ์๋ ์๊ฒ ๋จ ์๊ฐ์ ํ๋ค. ๊ทธ๋ฌ๋ค ํด์ปคํค ๋น์ผ์ด ๊ฐ๊น์์ง๊ณ , ๊ฒฐ๊ตญ ์ ์ ๋ณ๋ก ๋ชป ์ ์ํ๋ก ์บ๋ฆฌ์ด๋ฅผ ๋๊ณ ..
Ambassador/DEVOCEAN YOUNG
2023.07.02
์๋
ํ์ธ์! DEVOCEAN YOUNG 2๊ธฐ ์๋ค์์
๋๋ค. ์ ๋ ์ด๋ฒ ํ๊ธฐ๊ฐ 4ํ๋
1ํ๊ธฐ์๋๋ฐ์. ์ ํฌ ํ๊ต์์๋ ์กธ์
์กฐ๊ฑด์ผ๋ก 4-1์ ์บก์คํค ์กธ์
ํ๋ก์ ํธ๋ฅผ ์ํํด์ผํด์. (1,2 ํ๋
๋์๋ ๋ฉ๊ฒ๋ง ๋๊ปด์ง๋ ์กธ์
ํ๋ก์ ํธ๋ฅผ ์ง์ ํ๊ฒ ๋์๋ค๋, ๊ทธ๋ฆฌ๊ณ ๋ฒ์จ ๋ง๋ฌด๋ฆฌํ๊ณ ํ๊ธฐ๋ฅผ ์ฐ๊ณ ์๋ค๋ ์๊ฐ์ด ์ ๋ง ๋น ๋ฅธ ๊ฒ ๊ฐ์์.) ์ด ๊ณผ๋ชฉ์ ๊ธฐ์
๊ณผ์ ๋ ํ์ ๋งค์นญํด์ฃผ๊ณ , ํ ํ๊ธฐ๋์ ๊ณผ์ ๋ฅผ ์ํํ๋ ๋ฐฉ์์ด์๋๋ฐ์. ์ ํฌ๋ ํ ๊ธฐ์
์ AI CS ๋ด๋น ์ฑ๋ด ์๋น์ค๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ๊ณผ์ ์์ด์. ์ ๋ ํ์์ FE ๊ฐ๋ฐ์๋ฅผ ๋งก์๊ณ , FE ํํธ๋ฅผ ๋งก์ ์ฌ๋์ ์ ํผ์์๊ธฐ์ ์ด ๋ถ๋ถ์ด ์ ๋ง ๋ถ๋ด์ค๋ฌ์ ๋ ๊ฒ ๊ฐ์์. ํ ํํธ์ ์ฌ๋์ด ๋๋ช
์ด์์ด๋ฉด ๊ฐ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋๊ฐ ์ ์๋๋ฐ ๋ง์ฝ์ ์ ๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ๋ฉด ํ์ ๋ชจ๋..
Ambassador/DEVOCEAN YOUNG
2023.06.27
์๋
ํ์ธ์! ๋ฐ๋ณด์
์ 2๊ธฐ '๋ฐ๋ณด์
์์คํฐ์ฆ'ํ์ ์๋ค์์
๋๋ค. ์ด๋ฒ ํฌ์คํ
์์๋ 6์ ํ
ํฌ์ธ๋ฏธ๋ [์น ํ๋ก ํธ์๋ ์ฑ๋ฅ ์ต์ ํ ๋ฐฉ๋ฒ ๋ฐ ์ ์ฉ ์ฌ๋ก] ํ๊ธฐ๋ฅผ ๊ณต์ ํด๋ณด๋ คํฉ๋๋ค. ์ ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ฅผ ์ง๋ก๋ก ํฌ๋งํ๊ณ ์๋๋ฐ์. ๊ทธ๋งํผ ์ด๋ฒ ํ
ํฌ ์ธ๋ฏธ๋์ ๊ด์ฌ์ด ๊ฐ๋ํ์ด์! ํ์คํ ์ฑ์ฉ ๊ณต๊ณ ๋ฅผ ๋ณด๋ฉด ์ฐ๋ ์ฌํญ์ ‘์ฑ๋ฅ ์ต์ ํ’ ๊ฐ๋
์ด ๋์ค๊ณค ํ๊ฑฐ๋ ์. ์ ๋ํ ์ฌ์ดํธ์ ์ฑ๋ฅ์ด ์ข์์ผ ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ค- ๋ผ๋ ๊ฒ์ ๋จธ๋ฆฌ๋ก ์๊ณ ์์ง๋ง ์ ํํ ์ด๋ป๊ฒ ํ๋์ง, ์ด๋ค ์ฌ๋ก๊ฐ ์๋์ง๋ ์ ๋ชจ๋ฅด๊ณ ์์๋ ๊ฒ ๊ฐ์์. ํ๊ตญ์ ์ฌ์ฉ์๋ค์ ๋ก๋ฉ ํ์์ด 2์ด๋์ ๋จ์ง ์์ผ๋ฉด ์ฌ์ดํธ๋ฅผ ๋๊ฐ๋ฒ๋ฆฐ๋ค๊ณ ํฉ๋๋ค. ์ ๋ง ์ถฉ๊ฒฉ์ด์์ด์. ์๋ฌด๋ฆฌ ์ฌ์ดํธ ๋ฐฑ์๋ ์์ ๋ก์ง์ ์ ์ง๋์๋ค๊ณ ํ๋๋ผ๋, ํ๋ก ํธ์๋์ ์ฑ๋ฅ์ ์ต์ ํ..
Finds & Notes
2023.06.03
๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ๋งค๋ฒ ์ฃผ์๋ฅผ ๋ฐ๊ฟ์ผํด์ ๊ท์ฐฎ์ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๊ทธ๋์ ํ๊ฒฝ๋ณ์๋ฅผ ๋ง๋ค์ด๋ณด๊ธฐ๋ก ํ๋ค. ์ฌ์ฉ๋ฒ ์ค๋ฅธ์ชฝ ์์ ๋๋ชจ์ ๋ฒํผ์ ํด๋ฆญํ๋ค. 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
2023.05.31
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
2023.05.20
ํต๊ณ ํ์ด์ง๋ฅผ ๊ฐ๋ฐํ๋ คํ๋๋ฐ ์ฐจํธ๋ฅผ ๊ทธ๋ฆด์ผ์ด ํ์ํ๋ค. ๋ด๊ฐ ์ฌ์ฉํ ๊ฑด 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
2023.05.20
์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ํ๋ก์ ํธ๋ฅผ ํ๋ค๊ฐ ์, ์ด๊ฑด ์๋๊ฒ ๋ค. ์ ์ญ์ผ๋ก ์ํ๊ด๋ฆฌํด์ผ๊ฒ ๋ค! ์ถ์ ๋ถ๋ถ์ด ์์๋ค. ๊ทผ๋ฐ ์ค๋ ์์นจ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ถ ํฐ์คํ ๋ฆฌ ํผ๋๋ฅผ ๋ณด๋ค๊ฐ 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
2023.05.18
์ฑํ
์ ํ๋ค๋ณด๋ฉด ๋ด๊ฐ ์ง์ ์คํฌ๋กค์ ๋ด๋ฆฌ์ง ์์๋ ์๋ก ์ถ๊ฐ๋ ๋ฉ์ธ์ง์ ๋ํด์ ์๋๋ก ์๋ ์คํฌ๋กค์ด ๋๋ค. ์ด ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด๋ ค๊ณ ํ๋ค. ๋ฐฉ๋ฒ useRef, useEffect ํ
์ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค. const scrollRef = useRef(); useRef ํ
์ ์ฌ์ฉํ์ฌ ์คํฌ๋กคํ ์์์ ๋ํ scrollRef ๋ผ๋ ๊ฒ์ ๋ง๋ ๋ค. ์ด scrollRef๋ ์คํฌ๋กคํ ์ปจํฌ๋ํธ๋ฅผ ๊ฐ๋ฆฌํค๋๋ฐ ์ฌ์ฉ๋๋ค. useEffect(() => { scrollToBottom(); }, [isTyping]); const scrollToBottom = () => { if (scrollRef.current) { scrollRef.current.scrollTop = scrollRef.current.scrollHeight; } };..
Finds & Notes
2023.05.18
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
2023.05.17
๋ฌธ์ ์ฑํ
๋ฆฌ์คํธ๋ค์ ๋ณด์ฌ์ฃผ๊ณ , ์ฑํ
์ ์ญ์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ตฌํ ์ค์ด์๋ค. ์ฑํ
๋ฆฌ์คํธ๋ฅผ ํด๋ฆญํ๋ฉด ์ฑํ
์ ํ์ธํ๋ฌ ์์ธํ์ด์ง๋ก ์ด๋ํ๊ณ , ์ญ์ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฑํ
๊ธฐ๋ก์ด ์ญ์ ๊ฐ ๋์ด์ผํ๋ค. {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
2023.05.15
React์์ fetch๋ JavaScript์ ๋ด์ฅ API์ธ fetch() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ๋ฐ์ดํฐ ํต์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ด๋ค. fetch ํจ์๋ ES6๋ถํฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ํจ์์ด๋ฉฐ, React ์ ํ๋ฆฌ์ผ์ด์
์์ AJAX ์์ฒญ์ ๋ณด๋ผ ๋ ๋ง์ด ์ฌ์ฉ๋๋ค. AJAX ๋? AJAX๋ "Asynchronous JavaScript and XML"์ ์ฝ์๋ก, ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๊ธฐ ์ํ ๊ธฐ์ ์
๋๋ค. AJAX๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ด์ง ์ ์ฒด๋ฅผ ์๋ก ๊ณ ์น์ง ์๊ณ ๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค. ๊ธฐ์กด์๋ ์น ํ์ด์ง์์ ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ์๋ก์ด ํ์ด์ง๋ฅผ ์๋ฒ๋ก๋ถํฐ ์ ์ฒด์ ์ผ๋ก ๋ค์ ๋ฐ์์ค๋ ๋ฐฉ์์ธ ์ ํต์ ์ธ ๋๊ธฐ์ ์ธ ์์ฒญ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ด์์ต๋๋ค. ํ์ง๋ง ..
Develop/React.js
2023.05.12
์ด๋ ๊ฒ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ค๋ค ๋์ ๋ ์ด๊ฒ ์ด๋ค ๋ฒํผ์ธ์ง ๋ฏธ๋ฆฌ ์ ์ ์๋ ๋ฌธ๊ตฌ๊ฐ ๋์ค๊ฒ ํ๋ ค๋ฉด 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
2023.05.12
์บก์คํค ํ๋ก์ ํธ ์ค์ ํน์ ๊ตฌ์ญ ๋ด์์ ์คํฌ๋กค์ ๊ธฐ๋ฅํ ์ผ์ด ์๊ฒจ์ ์์ฑํด๋ณด๋ ํฌ์คํ
! ์ฑํ
์ฐฝ์ ๋ง๋๋๋ฐ ์ฑํ
์ฐฝ์ ์๋ ์ฑํ
๋ฉ์ธ์ง ๋ด์ฉ๋ค๋ง ์คํฌ๋กค์ด ๊ฐ๋ฅํ๋๋ก ํ ๊ฒ์ด๋ค. ๋ฐฉ๋ฒ 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
2023.05.10
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
2023.05.10
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
2023.05.10
useCallback ์ด๋ React์ useCallback ํ
์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์ฌ์ฉ๋๋ ํ
์ค ํ๋์ด๋ค. ์ด ํ
์ ํจ์๋ฅผ ์บ์(cache)ํ์ฌ ๋ถํ์ํ ํจ์ ์ฌ์์ฑ์ ๋ฐฉ์งํ๊ณ , ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ์ ๋์์ ์ค๋ค. ์ฌ์ฉ๋ฒ useCallback์ ๋ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋๋ค. ์ฒซ ๋ฒ์งธ ์ธ์๋ ์บ์ํ ํจ์์ด๋ฉฐ, ๋ ๋ฒ์งธ ์ธ์๋ ์์กด์ฑ ๋ฐฐ์ด(dependency array)์ด๋ค. ์์กด์ฑ ๋ฐฐ์ด์๋ ์บ์ํ ํจ์์์ ์ฐธ์กฐํ๋ ๊ฐ๋ค์ด ํฌํจ๋๋ฉฐ, ์ด ๊ฐ๋ค์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํจ์๋ฅผ ๋ค์ ์์ฑํ๋ค. ์์ ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์. import { useState } from 'react'; function MyComponent() { const [count, setCount] = useState(0)..
Develop/React.js
2023.04.27
React์์ ํ์ด์ง ์ด๋์ ๊ตฌํํ ๋, Link ์ useNavigate ์ด๋ผ๋ ๊ฐ๋
์ ์ฌ์ฉํ๋ค. ํ์ง๋ง ๋์ ๋ถ๋ช
ํ ์ฐจ์ด์ ์ด ์๋๋ฐ, ์ฌ์ฉํ๋ค๋ณด๋ ๊ถ๊ธํด์ ธ์ ์ ๋ฆฌํด๋ณด๊ณ ์ํ๋ค. Link Link๋ ํด๋ฆญํ ๋ ๋ฐ๋ก ์ด๋ํ๋ ๋ก์ง์ ๊ตฌํํ ๋ ์ฌ์ฉ๋๋ค. ์๋ ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ๋๋ฉด ํ์ฌ ๋ ๋๋ง๋์ด์๋ ์ปดํฌ๋ํธ๊ฐ ๋ค ์ฌ๋ผ์ง๊ณ ์๋ก ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋๋๋ฐ, ์ด๋ state ๋ค์ด ๋ชจ๋ ๋ ์๊ฐ๋ค. ํ์ง๋ง Link ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ๋ ๋๋ง๋ ์ปดํฌ๋ํธ์ state ๊ฐ ์ ์ง๋์ด์ SPA๋ก ๋์ํ ์ ์๋ค. ์ค์ ํด๋น ๋งํฌ๋ก ์ด๋ํ๋ ๊ฒ์ด ์๋๋ผ, ์ ์ง์ ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ค. * v6 ๋ถํฐ๋ Link ๋ก props ๋ฅผ ์ ๋ฌํ์ง ๋ชปํ๋ค. (์ด๊ฒ๋๋ฌธ์ ํ์ฐธ ๋ถ์ก๊ณ ์์๋ค...) ์์ ์๋ฅผ ๋ค์ด์ ์ํ ๋ฆฌ์คํธ๋ฅผ ํด๋ฆญํ..
Develop/JavaScript
2023.04.26
React ๋ฅผ ๊ณต๋ถํ๋ค๊ฐ '๋น๊ตฌ์กฐํ ํ ๋น' ์ด๋ผ๋ ๊ฐ๋
์ ๋ํด์ ํ์คํ ์ ๋ฆฌํ๊ณ ๋์ด๊ฐ๊ณ ์ถ์ด์ ธ์ ์ฐ๋ ํฌ์คํ
! ๋น๊ตฌ์กฐํ ํ ๋น์ด๋ ๋น๊ตฌ์กฐํ ํ ๋น(Destructuring Assignment)์ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์ฑ์ ํด์ฒดํด์ ๊ทธ ๊ฐ์ ๊ฐ๋ณ ๋ณ์์ ๋ด์ ์ ์๊ฒ ํ๋ JavaScript ์ ํํ์์ด๋ค. ์ฐ๋ ์ด์ ์ด๋ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์ฑ์ ์ฝ๊ฒ ๊บผ๋ด์ ๋ณ์์ ํ ๋นํ ์ ์์ผ๋ฏ๋ก ๋ ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋
์ฑ์ด ๋์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค ์์ ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ฒด๊ฐ ์์ ๋, const person = { name: 'John', age: 30, gender: 'male' }; ์ด ๊ฐ์ฒด์ ์์ฑ์ ๊บผ๋ด์ ๊ฐ๋ณ ๋ณ์์ ํ ๋นํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์๋ค. const name = person.name; const..
Develop/React.js
2023.04.26
์ ์ฐ๋ ๊ฑฐ์ผ? React ์์ JSX ๋ฅผ ์ฌ์ฉํ ๋ return ๋ฌธ์๋ ๋ฌด์กฐ๊ฑด ์ต์์ ํ๊ทธ๊ฐ ์กด์ฌํด์ผํ๋ค. React ๋ ํ๋์ ์ปดํฌ๋ํธ๋ง์ return ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋, Fragment ๋ผ๋ ๊ฑธ ์ฌ์ฉํ ์ ์๋๋ฐ ์ด๋ ๋ถํ์ํ div, span ๋ฑ์ HTML ์์ ์์ด ์ฌ๋ฌ ๊ฐ์ ์์ ์์๋ฅผ ๋ ๋๋ง ํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ์ด๋ค. Fragment ๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ์ ์ฌ๋ฌ ์์๋ฅผ ๊ทธ๋ฃนํํ ์ ์๋ค. ์์ ์๋ฅผ ๋ค์ด App() ์ Table() ์ด๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ฃ์ด์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์. Table ์ปดํฌ๋ํธ๋ ๋ค์๊ณผ ๊ฐ๋ค. function Table() { return ( Hello World ); } ์ฌ๊ธฐ์ Table ์ปดํฌ๋ํธ ๋ด์ ํ๊ทธ๋ค์ ๋ฌถ๊ธฐ ์ํด ์ต์์ ํ๊ทธ๋ก div ..
Review
2023.04.21
2023 ์๋ IT ์ผ๋ฅผ ๋ค๋
์์ต๋๋ค! ์จ๋ผ์ธ ์ฌ์ ๋ฑ๋ก์ ํ๋ฉด ๋ฌด๋ฃ์ด๊ณ , ํ์ฅ ๋ฑ๋ก์ ํ๋ฉด 1๋ง์์ ๊ฒฐ์ ํด์ผํ๋๋ผ๊ตฌ์. ์ ๋ ์จ๋ผ์ธ ์ฌ์ ๋ฑ๋ก์ ํ๊ธฐ์ ๊ฒฐ์ ํ ํ์์์ด ๋ฐ๋ก ๋ฑ๋ก์ ํ๊ณ , ์ด๋ฆํ๋ฅผ ๋ฐ์ ์
์ฅํ ์ ์์์ต๋๋ค. ์ฌ๋์ด ์ ๋ง์ ๋ง ๋ง์์ด์. ์ฌ์ ๋ฑ๋ก์ ํ๋๋ผ๋ ๋ฑ๋ก/์ด๋ฆํ๋ฅผ ๋ฐ์ผ๋ ค๋ฉด ์ด ๊ธด ์ค์ ์์ผํ๋ต๋๋ค. ๊ทผ๋ฐ ํ์ ์จ์ด ๋นจ๋ผ์ 5๋ถ๋ ์ ๊ธฐ๋ค๋ฆฐ ๊ฒ ๊ฐ์์. ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ณผ ์ ์์๋ ๋ถ์ค ์๋ด๋์
๋๋ค. 2์ธต์๋ ์ฃผ๋ก ์คํํธ์
, 3์ธต์๋ ๋๊ธฐ์
๋ถ์ค๊ฐ ์์์ด์. ๋ค์ด๊ฐ์๋ง์ ์ฒ์์ผ๋ก ๊ตฌ๊ฒฝํ๋ ๋ถ์ค๋ ์ฝ๊ธฐ ๋ฅ๋ ฅ์ ๊ฒ์ฌํ ์ ์๋ ์๋น์ค๊ฐ ์์๋๋ฐ์. ๊ธ์ ์ฝ์ ๋ ๋์ด ๋ฐ๋ผ๋ณด๋ ๊ฑธ ์ธ์ํด์ ์ฝ๊ธฐ ๋ฅ๋ ฅ์ ์ธก์ ํ ์ ์๋ ์๋น์ค์์ด์. ๊ฑฐ์ ๋๋ถ๋ถ์ ์๋น์ค๋ค์ด AI์ ๊ด๋ จ๋์๋ค๊ณ ํด๋ ๊ณผ์ธ์ด ์๋ ..
Finds & Notes
2023.04.15
์ด๋ฒ์ ์ธ์ดํ๊ณผ ์ฌ๋ฆฌ์คํ์ด๋ผ๋ ๊ต์์ ๋ฃ๊ฒ ๋์๋๋ฐ์. ์์
์์ ์ฐ๋ ํ๋ก๊ทธ๋จ์ธ OpenSesame ๋ฅผ ์ค์นํด์ผ ์ค์ต์ ์งํํ ์ ์๋๋ผ๊ตฌ์! MacOS์์ OpenSesame ์ฑ์ ์ค์นํ๊ณ , ์ฌ๋ ๋ฒ์ ๋ํด์ ํฌ์คํ
ํด๋ณด๋ คํฉ๋๋ค. OpenSesame ๋? "OpenSesame"๋ ์คํ์ค ์ฐ๊ตฌ์๋ฅผ ์ํ ๋ฌด๋ฃ ์คํ ์์ค ์คํ ์ค๊ณ ๋ฐ ๋ฐ์ดํฐ ์์ง ์ํํธ์จ์ด์
๋๋ค. ์ด ์ํํธ์จ์ด๋ ํ๋ ์คํ, ๋ ์์ ์คํ ๋ฐ ํต์ ์คํ ๋ฑ ๋ค์ํ ์คํ ์ ํ์ ์ง์ํ๋ฉฐ, ์คํ ์ค๊ณ, ์๊ฐ์ ์๊ทน ์ ์, ๋ฐ์ ๋ฐ ๋ฐ์ดํฐ ์์ง์์ํ ์ฌ์ฉ์ ์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. OpenSesame๋ Python ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ค์น ์ ๋ homebrew ๋ฅผ ์ด์ฉํด์ ..
Finds & Notes
2023.04.14
์๋
ํ์ธ์!์ค๋์ ํฐ์คํ ๋ฆฌ ์คํจ์ ์๋ก ๋ฐ๊ฟ๋ณด๊ณ , ๋ฐ๊พธ๋ฉด์ ํค๋งธ๋ ๋ถ๋ถ์ ๊ณต์ ํด๋๋ฆฌ๋ ค๊ณ ํด์. hELLO ์คํจ์ผ๋จ ์ ๋ hELLO ๋ผ๊ณ ํ๋ ์คํจ์ ์ ์ฉํ์ต๋๋ค.๊ฐ๋ฐ์๋ค์๊ฒ ์์ฃผ ์ธ๊ธฐ ์๋ ์คํจ์ด๋ผ๊ณ ํ๋๋ผ๊ตฌ์!์ ์์ฐ ๊ฐ๋ฐ์ ๋์ด ์ ์ํ์
จ์ผ๋ฉฐ, ์๋ ํฌ์คํ
์์ ๋ค์ด๋ก๋ ๋ฐ์ ์ ์์ต๋๋ค.https://pronist.tistory.com/5?category=844785 hELLO ํฐ์คํ ๋ฆฌ ์คํจ์ ์๊ฐํฉ๋๋ค.hELLO ์คํจ์ ๋ณธ๋ ๊ธฐ๋ฅ์ ๋ง์ด ์์๋ค๊ฐ, ํฐ์คํ ๋ฆฌ ๋ธ๋ก๊ฑฐ ์ฌ๋ฌ๋ถ์ ํธ์์ ํ์
์ด ๊ธฐ๋ฅ์ ์ถ๊ฐ์ ํจ๊ป ์
๋ฐ์ดํธ๋ฅผ ์ฌ๋ฌ ๋ฒ ํ๊ฒ ๋์์ต๋๋ค. hELLO 1.0 ๋์ ๋น๊ตํ๋ฉด ๋น๊ตํ ์๋ ์์ ๋งํผ์ ๊ธฐpronist.dev ์คํจ ์ ์ฉํ๊ธฐ๊ด๋ฆฌ์ ํ์ด์ง์ ๋ค์ด๊ฐ์ ์คํจ ๋ณ๊ฒฝ > ์คํจ ๋ฑ๋ก ์ ๋๋ฌ์ค๋๋ค.์ถ๊ฐ..
Develop/React.js
2023.04.13
์์๋ค์ ๋ฆฌ์คํธ๋ก ๋ณด์ฌ์ฃผ๋๋ฐ, ์ ๋ชฉ์ด ๋๋ฌด ๊ธธ์ด์ ๋์ด๊ฐ๋ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค. ์ค์ ๋์ด๊ฐ๋ฉด grid ๊ฐ ํํธ๋ฌ์ง๊ธฐ๋ํ๊ณ , ๋ณด๊ธฐ์๋ ํต์ผ์ฑ์ด ์์ด๋ณด์ฌ์ ๋๋ฌด ๊ธธ๋ฉด ์ ๋นํ ์๋ฅด๊ณ ๋์ ... ์ ๋ถ์ด๋๋ก ํด๋ดค๋ค. ํ์ฌ๋ ์์ ๊ฐ์ ์ํ์ด๋ค. ๋งจ ์ค๋ฅธ์ชฝ ์์๋ฅผ ๋ณด๋ฉด ์ ๋ชฉ์ด ๋๋ฌด ๊ธธ์ด์ ์๋์ค๊น์ง ์นจ๋ฒํ๋ค. ์ ์ ๋ชฉ ๋ฐ์ดํฐ๋ name ์ด๋ผ๋ ๋ณ์์ ๋ค์ด์์๋๋ฐ, processedName ์ด๋ผ๋ ์ด๋ฆ์ ๋ณ์๋ก ์๋ก ๋ง๋ค์ด์คฌ๋ค. const processedName = name.length > 15 ? `${name.slice(0, 15)}...` : name; ๋๋ 15์๊ฐ ๋์ด๊ฐ ๊ฒฝ์ฐ ๋ฌธ์์ด์ ์๋ฅด๊ณ , ๋์ ... ์ด ๋ถ๋๋ก ์ฝ๋๋ฅผ ์์ฑํด๋ดค๋ค. processedName ๋ณ์๋ฅผ ์ ์ฉํด์ ๋ค์ ํ๋ฉด์ ๊ตฌ์ฑํด๋ณด๊ฒ ๋ค. ์..