๋ฐ˜์‘ํ˜•

Framework 85

[React] return ์‹œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜๋‚˜๋กœ ๊ฐ์‹ธ๋Š” ์ด์œ  (+JSX ๋ฌธ๋ฒ•)

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” React ์—์„œ return ์‹œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜๋‚˜๋กœ ๊ฐ์‹ธ๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Why? React์—์„œ JSX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTML๊ณผ ์œ ์‚ฌํ•œ ๊ตฌ๋ฌธ์œผ๋กœ JavaScript๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JSX๋Š” JavaScript ํ‘œํ˜„์‹์ด๋ฏ€๋กœ, ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ด๋Ÿฌํ•œ ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์˜ ๋ฃจํŠธ ์š”์†Œ๋กœ ๋ฌถ์–ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. React์˜ ๊ฐ€์ƒ DOM(virtual DOM)์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹จ์ผ ๋ฃจํŠธ ๋…ธ๋“œ๋งŒ์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด React๋Š” ์š”์†Œ๋“ค์„ ๋‹จ์ผ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ๊ผญ ๋ฌถ์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. Method React์—์„œ ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€, ์—ฌ๋Ÿฌ ์š”์†Œ๋“ค์„ ๋˜๋Š” ์™€ ๊ฐ™์€ ๋…ธ๋“œ๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค...

Framework/React 2023.05.09

[React] Material-UI (mui) theme.spacing(1) ๋‹จ์œ„ ์˜๋ฏธ + ํ”ฝ์…€

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ์— MUI ๊ธฐ๋ฐ˜ ํšŒ์‚ฌ ํ™ˆํŽ˜์ด์ง€ ๊ฐœ๋ฐœ ์—…๋ฌด๋ฅผ ์ง€์›ํ•˜์—ฌ ๋งก๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. mui ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. theme.spacing(1) ์ฒ˜์Œ์—๋Š” 2px์ธ๊ฐ€ ์‹ถ์—ˆ๋Š”๋ฐ, 2px์ด ์•„๋‹ˆ๋”๋ผ๊ณ ์š”. theme.spacing(2) ์˜๋ฏธ Material-UI (mui) ์—์„œ 1์€ theme.spacing(1)๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต theme.spacing()์€ ํ…Œ๋งˆ ์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ, ๊ธฐ๋ณธ์ ์œผ๋กœ 8px์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 1์€ ๊ธฐ๋ณธ์ ์œผ๋กœ 8px์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, 2๋Š” 16px, 3์€ 24px, ... ์™€ ๊ฐ™์ด 8px ๊ฐ„๊ฒฉ์œผ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ”ฝ์…€ ์ปค์Šคํ…€์ด ๋ถˆ๊ฐ€๋Šฅํ•œ๊ฐ€? ์ปค์Šคํ…€๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. createTheme() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...

Framework/React 2023.05.08

[Next.js] Next์˜ Link์™€ MUI(Material-UI)์˜ Link ์ฐจ์ด

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” Next์˜ Link์™€ MUI(Material-UI)์˜ Link ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Next์˜ Link์™€ MUI(Material-UI)์˜ Link Next.js + React + MUI ์กฐํ•ฉ์œผ๋กœ ๊ฐœ๋ฐœ๊ฒฝํ—˜์ด ์žˆ์œผ์‹  ๋ถ„๋“ค์ด ๊ฝค ์žˆ์œผ์‹ค ํ…๋ฐ์š”, ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋ฉด Link ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฑฐ์˜ ํ•„์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Next.js์™€ MUI ์—๋Š” ๊ณตํ†ต์œผ๋กœ Link ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต ์ž๋™ IDE ํˆด์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ import ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ์š”, ๊ผญ ํ™•์ธํ•˜๊ณ  import๋ฅผ ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. Next.js์˜ Link์™€ MUI(Material-UI)์˜ Link๋Š” ๋ชฉ์ ์ด ๋‹ค๋ฅธ ์š”์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Why? Next.js์˜ Link ์ปดํฌ๋„ŒํŠธ Next.js์˜ Link ๋Š”..

Framework/Next.js 2023.05.03

[React] recharts chart ๋„“์ด 100% ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• (+ typescript)

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ €๋Š” recharts chart ์ฐจํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐจํŠธ์˜ ๋„“์ด๋ฅผ ํ™”๋ฉด 100%์— ๋งž์ถฐ์„œ ๋ฟŒ๋ ค์ฃผ๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ์š”. width ๊ฐ’์„ 100%๋กœ ์„ค์ •ํ•˜์ž ๋‹ค์Œ์˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. TS2322: Type 'string' is not assignable to type 'number'. import {NextPage} from "next"; import React from 'react'; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts'; const data = [ { name: 'Jan', uv: 4000, pv: 2400, amt: 2400, }, { name: 'Feb'..

Framework/React 2023.04.29

[SpringBoot] Failed to instantiate Factory method 'someHotMongoFactory' threw exception with message: Cannot invoke "String.startsWith(String)" because "connectionString" is null

Intro mongodb ์—์„œ ์ถ”๊ฐ€๋œ ์ปฌ๋ ‰์…˜์„ ์Šคํ”„๋ง๋ถ€ํŠธ์—์„œ ํ™œ์šฉํ•˜๋˜ ๋„์ค‘ ์•„๋ž˜์˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. Failed to instantiate [org.springframework.data.mongodb.core.SimpleReactiveMongoDatabaseFactory]: Factory method 'someHotMongoFactory' threw exception with message: Cannot invoke "String.startsWith(String)" because "connectionString" is null Why? ์ด ์˜ค๋ฅ˜๋Š” connectionString์ด null์ด๊ธฐ ๋•Œ๋ฌธ์— "String.startsWith(String)"๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. SomeHotMo..

[Next.js] nextjs ๋ทฐํฌ์ธํŠธ(Viewport) ์„ค์ • ๋ฐฉ๋ฒ•

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” Next.js์—์„œ Viewport(๋ทฐํฌ์ธํŠธ)๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. How to apply viewport in nextjs _document.js ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ์ „์ฒด ํŽ˜์ด์ง€์— meta ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. import Document, { Html, Head, Main, NextScript } from 'next/document'; class MyDocument extends Document { render() { return ( ); } } export default MyDocument;

Framework/Next.js 2023.04.18

[React] Zustand ์„ค์น˜ ๋ฐฉ๋ฒ• ๋ฐ ์˜ˆ์ œ ์‚ดํŽด๋ณด๊ธฐ

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Zustand ์„ค์น˜ ๋ฐฉ๋ฒ• ๋ฐ ์˜ˆ์ก”๋ฅผ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ์ „์— ์•ž์„œ zustand ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•˜์‹  ๋ถ„๋“ค์€ ์œ„ ํฌ์ŠคํŒ… ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค :) How to install Zustand Zustand ์„ค์น˜๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ์ž ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ํˆด(npm / yarn)์— ๋งž์ถฐ ์„ค์น˜ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 1. npm npm install zustand 2. yarn yarn add zustand Zustand Simple Example ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋กœ ์นด์šดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. zustand๋ฅผ importํ•˜๊ณ , ์ƒํƒœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—๋Š” count, increment(), decrement()์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค. import create fro..

Framework/React 2023.04.17

[React] Zustand๋ž€?

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” React Zustand ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Zustand ๋ฆฌ์•กํŠธ๋ฅผ ๊ณต๋ถ€ํ•˜์‹  ๋ถ„์ด๋ผ๋ฉด, ์ƒํƒœ (State)๋ผ๋Š” ๊ฐœ๋…์— ๋Œ€ํ•ด ๋“ค์–ด๋ณด์…จ์„ ๊ฒ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•˜์ž๋ฉด React Zustand๋Š” ๋ฆฌ์•กํŠธ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Redux, MobX ๋“ฑ์ด ์กด์žฌํ•˜์ง€๋งŒ Zustand๋Š” ์œ„ ๋ผ์ด๋ธŒ๋Ÿฌ์— ๋น„ํ•ด ๋” ๊ฐ€๋ณ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Zustand Features Zustand๋Š” State๋ฅผ ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ๊ณต์œ ๋˜๋Š” State Container๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด Container ๋Š” ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ useStore()์„ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  (get), ์—…๋ฐ์ด..

Framework/React 2023.04.14

[Flutter] ์‰ฌ์šด ํ”Œ๋Ÿฌํ„ฐ 0๊ฐ• : ํ”Œ๋Ÿฌํ„ฐ ์„ค์น˜ 4-step (๋งฅ/์œˆ๋„์šฐ)

์ด ๊ธ€์€ ์ฝ”๋”ฉ์• ํ”Œ๋‹˜์˜์‰ฌ์šด ํ”Œ๋Ÿฌํ„ฐ ๊ฐ•์ขŒ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. Intro ์ƒˆ๋กœ์šด ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ Flutter๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. Flutter๋Š” ํ•œ๋ฒˆ๋„ ๋‹ค๋ค„๋ณธ ์ ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ•์ขŒ ๋‚ด์šฉ์„ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜๋ฉฐ ๊ณต๋ถ€ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค :-) Flutter ๊ฐœ๋ฐœํ™˜๊ฒฝ ์…‹ํŒ… 1. Flutter SDK ๋‹ค์šด https://docs.flutter.dev/get-started/install 2. Android Studio ์„ค์น˜ https://developer.android.com/studio plugin ๋ฉ”๋‰ด์—์„œ Flutter ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฒ€์ƒ‰ ํ›„ ์„ค์น˜ SDK Manager ๋ˆŒ๋Ÿฌ์„œ Android SDK Command-line Tools ์„ค์น˜ 3. ํ™˜๊ฒฝ๋ณ€์ˆ˜๋“ฑ๋ก ์ œ ๊ฒฝ์šฐ ํ„ฐ๋ฏธ๋„ ์ด๋ฆ„์ด zsh ์ด๋ฏ€๋กœ ์•„๋ž˜ ..

Framework/Flutter 2023.04.11

[Angular] SVG path element click ์ด๋ฒคํŠธ ํ•จ์ˆ˜ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์•ต๊ทค๋Ÿฌ์—์„œ SVG path element์— click ์ด๋ฒคํŠธ ํ•จ์ˆ˜ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. My Case ์ œ ์ผ€์ด์Šค์˜ ๊ฒฝ์šฐ ํŠน์ • SVG ์š”์†Œ๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. svg ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ts ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. @ViewChild('myPath') myPath: ElementRef; handleClick() { console.log("handleClick!!"); } ํ•˜์ง€๋งŒ, svg ํŒŒ์ผ์˜ path ์š”์†Œ๋ฅผ ํด๋ฆญํ•ด๋„ handleClick ํ•จ์ˆ˜๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Why? ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋Š” ์กฐ๊ฑด์ด ์ถฉ์กฑํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ์š”์†Œ..

Framework/Angular 2023.04.10
๋ฐ˜์‘ํ˜•