2025/04 7

[Git] ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๋ธŒ๋žœ์น˜ ์ •๋ฆฌํ•˜๊ธฐ

Git ๋ธŒ๋žœ์น˜๋ฅผ ์ •๋ฆฌํ•  ๋•Œ๋Š” ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์™€ ์›๊ฒฉ ๋ธŒ๋žœ์น˜๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.๐Ÿ“‚ ๋ชฉ์ฐจ 1. ํ˜„์žฌ ๋ธŒ๋žœ์น˜ ํ™•์ธgit branch # ๋กœ์ปฌ ๋ธŒ๋žœ์น˜ ๋ชฉ๋กgit branch -r # ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ๋ชฉ๋กgit branch -a # ์ „์ฒด ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก (๋กœ์ปฌ + ์›๊ฒฉ) 2. ๋กœ์ปฌ ๋ธŒ๋žœ์น˜ ์‚ญ์ œgit branch -d ๋ธŒ๋žœ์น˜์ด๋ฆ„ # ์•ˆ์ „ํ•˜๊ฒŒ ์‚ญ์ œ (๋ณ‘ํ•ฉ๋œ ๋ธŒ๋žœ์น˜๋งŒ)git branch -D ๋ธŒ๋žœ์น˜์ด๋ฆ„ # ๊ฐ•์ œ๋กœ ์‚ญ์ œ (๋ณ‘ํ•ฉ ์•ˆ๋œ ๊ฒƒ๋„) 3. ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ์‚ญ์ œgit push origin --delete ๋ธŒ๋žœ์น˜์ด๋ฆ„ 4. ์•ˆ ์“ฐ๋Š” ๋กœ์ปฌ ๋ธŒ๋žœ์น˜ ์ผ๊ด„ ์‚ญ์ œ (์˜ˆ: ๋ณ‘ํ•ฉ๋œ ๊ฒƒ๋“ค)git branch --merg..

[React] ํŠน์ • ์‹œ๊ฐ„๋Œ€์—๋งŒ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” (feat. ๊ณตํœด์ผ, ์ฃผ๋ง ์ œ์™ธ)

๐Ÿ“‚ ๋ชฉ์ฐจ ์‹œ๊ฐ„ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฒ„ํŠผํ™œ์„ฑํ™” or ๋น„ํ™œ์„ฑํ™” ์ปค์Šคํ…€ ํ›… ์˜ˆ์ œ ์ฝ”๋“œimport {useState, useEffect} from "react";export const useTimeRestrictedToggle = () => { const [isEnabled, setIsEnabled] = useState(false);useEffect(()=>{ const checkIsHoliday = (date: Date) => { const month = date.getMonth() + 1; const day = date.getDate(); // ๊ณตํœด์ผ (์‹ ์ •, ์„ค๋‚ , ์ถ”์„, ๋“ฑ) const isNewYear = month === 1 && day === ..

React 2025.04.11

[React] ์„ฑ๋Šฅ ์ตœ์ ํ™”ํ•˜๋Š” ํ›… useMemo

๋ฆฌ์•กํŠธ๋ฅผ ์“ฐ๋‹ค ๋ณด๋ฉด ๋ฆฌ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ํ•จ์ˆ˜๋‚˜ ๊ณ„์‚ฐ์ด ๋‹ค์‹œ ์‹คํ–‰๋˜๋Š” ํ˜„์ƒ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ .filter() ๋‚˜ .map(), .sort()์ฒ˜๋Ÿผ ๋ฐ˜๋ณต ๊ณ„์‚ฐ์ด ๋งŽ์€ ์—ฐ์‚ฐ์€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฐ˜๋ณต๋˜๋ฉด ๋ฆฌ์•กํŠธ์˜ ํผํฌ๋จผ์Šค๋ฅผ ๊ฐ‰์•„๋จน์Šต๋‹ˆ๋‹ค.๊ทธ๋ž˜์„œ ๋“ฑ์žฅํ•˜๋Š” ๊ฒŒ ๋ฐ”๋กœ โญuseMemo ์ž…๋‹ˆ๋‹ค.์‹ค๋ฌด์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” useMemo์˜ ๊ฐœ๋…๊ณผ ์˜ˆ์ œ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์“ฐ์ด๋Š”์ง€ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.๐Ÿ“‚ ๋ชฉ์ฐจ useMemo๋ž€?const memoizedValue = useMemo(() => { return ๊ณ„์‚ฐ์‹;}, [์˜์กด์„ฑ])๐Ÿ’ก ํ•œ๋งˆ๋””๋กœ ๋งํ•˜๋ฉด?"์˜์กด์„ฑ ๊ฐ’์ด ๋ฐ”๋€”๋•Œ๋งŒ ๋‹ค์‹œ ๊ณ„์‚ฐ๋˜๋Š” ๊ฐ’" ์„ ๋งŒ๋“ค์–ด์„œ, ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ๋ง‰์•„์ฃผ๋Š” ํ›… ๐Ÿ” ์™œ์จ์•ผํ• ๊นŒ?๋ฆฌ์•กํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š”๋ฐ,..

React 2025.04.09

[SQL] ๊ทธ๋ฃน๋ณ„ 1๊ฑด๋งŒ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ• LEFT JOIN, ROW_NUMBER

๐Ÿ“‚ ๋ชฉ์ฐจ ์˜ˆ์‹œ ์ฟผ๋ฆฌ ํ™•์ธํ•˜๊ธฐWITH RankedData AS ( SELECT a.OrderID, c.SafeKey, ROW_NUMBER() OVER (PARTITION BY a.OrderID ORDER BY c.SafeKey) AS rn FROM SalesDB.dbo.Orders a LEFT OUTER JOIN SalesDB.dbo.CreditCheckResult b ON a.CreditCheckID = b.ID LEFT OUTER JOIN SalesDB.dbo.SafeKeyLog c ON c.SafeKey = b.SafeKey WHERE a.OrderID IN ( 10001, 10002, 100..

DB 2025.04.07

[JavaScript] hasOwnProperty ๊ฐ์ฒด ์†์„ฑ ํ™•์ธํ•˜๊ธฐ

๐Ÿ“‚ ๋ชฉ์ฐจ hasOwnProperty๋ž€?์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ์ฒด(Object)๋Š” ์ƒ์œ„ ๊ฐ์ฒด์ธ object๋กœ๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ(๊ธฐ๋Šฅ)๋ฅผ ๋ฌผ๋ ค๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ hasOwnProperty()์ž…๋‹ˆ๋‹ค. const user = { name: "Hyonie",};console.log(user.hasOwnProperty("name")); // trueconsole.log(user.hasOwnProperty("toString")); // false๐Ÿ‘‰ ์ด ๋ฉ”์„œ๋“œ๋Š” ํ•ด๋‹น ์†์„ฑ์ด ์ง์ ‘ ์ •์˜๋œ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•ด์ค๋‹ˆ๋‹ค.(์ƒ์†๋œ ์†์„ฑ์€ false๋กœ ํŒ๋‹จ) โ— ๋ฌธ์ œ๋Š” ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.const params = { hasOwnProperty: () => false, id: 123,};console.log(params..

JS 2025.04.03

[JavaScript] ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ํ‘œํ˜„์‹(IIFE) ์ด๋ž€?

JavaScript๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ€๋” ์ด๋Ÿฐ ์ƒ์†Œํ•œ ๋ฌธ๋ฒ•์„ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค:(() => { // ๋ญ”๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ})(); ์ฒ˜์Œ ๋ณด๋ฉด ์ด๊ฒŒ ๋„๋Œ€์ฒด ๋ญ์ง€.....? ์‹ถ์€๋ฐ์š”, ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ํ‘œํ˜„์‹ ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.์ด๋ฒˆ๊ธ€์—์„œ๋Š” IIFE๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์™œ ์“ฐ๋Š”์ง€, ์–ธ์ œ ์œ ์šฉํ•œ์ง€ ์ •๋ฆฌํ•ด๋ณด๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.๐Ÿ“‚ ๋ชฉ์ฐจ ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์ด๋ž€?์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ํ‘œํ˜„์‹(IIFE)์€ ์ •์˜ํ•˜์ž๋งˆ์ž ๋ฐ”๋กœ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. โœ… ๋ฌธ๋ฒ• ํ˜•ํƒœ(fucntion() { console.log("์ฆ‰์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค!");})(); ๋˜๋Š” ํ™”์‚ดํ‘œํ•จ์ˆ˜ ๋ฒ„์ „์œผ๋กœ๋„ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:(() => { console.log("์ด๊ฒƒ๋„ ์ฆ‰์‹œ ์‹คํ–‰!");})();  ๐Ÿ” ์™œ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ?ํ•œ๋ฒˆ ๋งŒ ์‹คํ–‰๋˜๋Š” ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋–„์ „์—ญ..

JS 2025.04.02

[JavaScript] new Set()๊ณผ has() ์ค‘๋ณต์—†๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ๋ฐฐ์—ด๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ถˆํŽธํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋Ÿด๋•Œ Set ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Set์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•๊ณผ has()๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.๐Ÿ“‚ ๋ชฉ์ฐจ ๐Ÿงฉ new Set() ์ด๋ž€?Set์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ’๋“ค์˜ ์ง‘ํ•ฉ์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.const mySet = new Set([1,2,3,3,4]);console.log(mySet); //Set(4) {1,2,3,4}์œ„ ์˜ˆ์‹œ์ฒ˜๋Ÿผ, ์ค‘๋ณต๋œ ๊ฐ’ 3์€ ํ•˜๋‚˜๋งŒ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ“Œ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•const setName = new Set(iterable); // ๋ฐ˜๋ณตํ• ์ˆ˜ ์žˆ๋Š” ๊ฐ’(string, Array, Set, Map) ์˜ˆ์‹œ:const usi..

JS 2025.04.02