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

[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

[ASP.NET] PC/๋ชจ๋ฐ”์ผ ์ ‘์† ๊ตฌ๋ถ„ - Request.UserAgent & IndexOf

๐Ÿ“‚ ๋ชฉ์ฐจ 1. Request.UserAgent (ASP.NET ์„œ๋ฒ„ ์ธก)Request.UserAgent๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•œ ๋ธŒ๋ผ์šฐ์ €๋‚˜ ๋””๋ฐ”์ด์Šค์˜ ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ASP.NET ์†์„ฑ์ž…๋‹ˆ๋‹ค.์‚ฌ์šฉ์œ„์น˜: ASP.NET ์„œ๋ฒ„์ฝ”๋“œ(C#)์—ญํ• : HTTP ์š”์ฒญ ํ—ค๋”์—์„œ User-Agent ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ด์˜ˆ์‹œstring userAgent = Request.UserAgent;๊ฒฐ๊ณผ: PC์ ‘์† ์‹œ ์•„๋ž˜ ์ฐธ๊ณ  PC ์ ‘์†์‹œ:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 ์ด ๋ฌธ์ž์—ด ์•ˆ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:์šด์˜์ฒด์ œ (์˜ˆ: Windows, Andr..

C# 2025.03.28

[C#] ASP.NET MasterPage ๋ž€? ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ ์ •์˜ํ•˜๊ธฐ

๐Ÿ“‚ ๋ชฉ์ฐจ 1. MasterPage๋ž€?ASP.NET Web Form์—์„œ๋Š” ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์—์„œ ๋ฐ˜๋ณต๋˜๋Š” UI ์š”์†Œ๋“ค (์˜ˆ๋ฅผ ๋“ค๋ฉด ํ—ค๋”, ๋ฉ”๋‰ด, ํ‘ธํ„ฐ, ์Šคํฌ๋ฆฝํŠธ ๋“ฑ..)์„ ํ•œ ๊ณณ์—์„œ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ธ MasterPage๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.๋งˆ์Šคํ„ฐํŽ˜์ด์ง€๋Š” ์›น์‚ฌ์ดํŠธ ์ „์ฒด์˜ ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ(ํ‹€) ์„ ์ •์˜ํ•˜๋Š” HTML๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.๊ฐ ํŽ˜์ด์ง€๋Š” ํ•ด๋‹น ํ‹€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์‹ ์˜ ์ฝ˜ํ…์ธ ๋งŒ ์ฑ„์›Œ ๋„ฃ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ’ฌ ์‰ฝ๊ฒŒ ๋น„์œ ํ•˜์ž๋ฉด?MasterPage = ์›น์‚ฌ์ดํŠธ์˜ ์„ค๊ณ„๋„ContentPlaceHoder = ๋น„์–ด ์žˆ๋Š” ์บ”๋ฒ„์Šค์ž์‹ํŽ˜์ด์ง€ = ๊ทธ ์บ”๋ฒ„์Šค์— ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ๊ฐœ๋ณ„ ์ฝ˜ํ…์ธ  ํŽ˜์ด์ง€์ฆ‰, Main.master๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋ชจ๋“  ํŽ˜์ด์ง€์— ๊ณตํ†ต์œผ๋กœ ๋ฐ˜์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค!  2. ๊ธฐ๋ณธ ๊ตฌ์กฐ ์‚ดํŽด๋ณด๊ธฐ 2-1. ๋งˆ..

C# 2025.03.28

[JS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ ๋น„๊ต ๋ฐ ํ™œ์šฉ - findIndex, includes

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐฐ์—ด์„ ๋‹ค๋ฃฐ ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” findIndex()์™€ includes() ์ด๋‘˜์€ ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ ์—„์—ฐํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด ๋‘ ๋ฉ”์„œ๋“œ์˜ ๋™์ž‘์›๋ฆฌ์™€ ํ•จ๊ป˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ“‚ ๋ชฉ์ฐจ  โ“ findIndex vs includes ์ฐจ์ด์ ์€?๊ตฌ๋ถ„findIndex()includes()๋ชฉ์ ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜๋ฐฐ์—ด์ด๋‚˜ ๋ฌธ์ž์—ด์— ํ•ด๋‹น ๊ฐ’์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜๋ฐ˜ํ™˜๊ฐ’์ธ๋ฑ์Šค(0, 1, 2, ...) ๋˜๋Š” -1true ๋˜๋Š” false์‚ฌ์šฉ๋Œ€์ƒ๋ฐฐ์—ด๋ฐฐ์—ด ๋˜๋Š” ๋ฌธ์ž์—ด์ฝœ๋ฐฑ์‚ฌ์šฉโœ… ๊ฐ€๋ŠฅโŒ ๋ถˆ๊ฐ€๋Šฅ(๊ฐ’๋งŒ์ฒดํฌ) ๐Ÿ’ก findIndex๋ž€?findIndex๋Š” ์กฐ๊ฑด์— ๋งž๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ์กฐ๊ฑด์ด ์ฐธ(t..

JS 2025.03.27