728x90
๋ฐ˜์‘ํ˜•

2025/02 27

[js] ์˜ต์…”๋„ ์ฒด์ด๋‹ (.?)

ํŠน์ • ์†์„ฑ์— ์ ‘๊ทผํ•  ๋•Œ, ํ•ด๋‹น ์†์„ฑ์ด null๋˜๋Š” undefined์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ ๐Ÿš€ ์ฆ‰, ?.๋‹น์‹ ์„ ์‚ฌ์šฉํ•˜๋ฉด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” if๋ฐฉ๋ฒ• ์—†์ด ์•ˆ์ „ํ•˜๊ฒŒ ์†์„ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!const obj = { user: { name: "Alice", age: 25 }};// ์ผ๋ฐ˜์ ์œผ๋กœ ์†์„ฑ ์ ‘๊ทผconsole.log(obj.user.name); // ์ถœ๋ ฅ: "Alice"// ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์†์„ฑ์— ์ ‘๊ทผ (์˜ค๋ฅ˜ ๋ฐœ์ƒ)// console.log(obj.user.address.street); // โŒ TypeError: Cannot read properties of undefined (reading 'street')// โœ… ์˜ต์…”๋„ ์ฒด์ด๋‹ ์‚ฌ์šฉconsole.log(obj.user...

Front/JS & jQuery 2025.02.28

[js][bootstrap] collapse ์ ์šฉํ•˜๊ธฐ

๋‚ด์šฉ ๋ณด๊ธฐ / ์ˆจ๊ธฐ๊ธฐ ์ด ๋ถ€๋ถ„์€ ํด๋ฆญํ•˜๋ฉด ๋‚˜ํƒ€๋‚˜๊ณ  ๋‹ค์‹œ ํด๋ฆญํ•˜๋ฉด ์ˆจ๊ฒจ์ง‘๋‹ˆ๋‹ค. 2๏ธโƒฃ ์„ค๋ช…data-bs-toggle="collapse":ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ์š”์†Œ์˜ collapse๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. => ํ—ค๋“œ ์„ค์ •data-bs-target="#collapseExample": ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ์ฐธ์—ฌ๋Œ€์ƒ ์š”์†Œ๋ฅผ id์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. => ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ํ‘œ์‹œํ•  body ์˜ id ์ž‘์„ฑ: ์ˆจ๊ธธ ์š”์†Œ๋ฅผ ๊ฐ์‹ธ๋Š” ๊ฒƒ div. => ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ํ‘œ์‹œํ•  body์— class ์™€ id ์ •ํ•˜๊ธฐ

Front/JS & jQuery 2025.02.27

[js] $div.data(item)

$div.data(item); ๐Ÿ“Œ ์™œ ์‚ฌ์šฉํ• ๊นŒ์š”?๋ฐ์ดํ„ฐ์˜ ๋ถ„๋ฅ˜ ๋ฐ ๋ถ„๋ฅ˜item์ €์žฅ์†Œ DOM ์š”์†Œ(`$div)์— ์ €์žฅํ•˜๋ฉด, ์ดํ›„ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋ฆญ ์ด๋ฒคํŠธ $(this).data()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌdiv์—๊ทธ๋””๋ฐ์ดํ„ฐDOM ์กฐ๊ฐ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉdata-*์†์„ฑ ์‚ฌ์šฉ์ž์˜ˆ์‹œ $('.accordion-item-wrap').on('click', function() { const itemData = $(this).data(); console.log(itemData); // ํด๋ฆญํ•œ div์— ์ €์žฅ๋œ item ๊ฐ์ฒด ์ถœ๋ ฅ}); ๐Ÿ”์˜ˆ์ œ ์ฝ”๋“œitems.forEach((item) => { const $div = $(''); const html = this._dataConverter(item)..

Front/JS & jQuery 2025.02.26

[MySQL] JSON_CONTAINS

JSON_CONTAINS()๋Š”JSON ๋ฐฐ์—ด์€ ๊ฑฐ๊ธฐ์— ํŠน์ • ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค. ์‰ผํ‘œFIND_IN_SET()๋‹ค๋ฅด๊ฒŒ, ์ •๊ทœํ™”๋œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์œ ์šฉ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“Œ ์‚ฌ์šฉ๋ฒ•JSON_CONTAINS(target, candidate[, path]) target:๋™์ž‘candidate:์ฐพ๋‹คpath($.key_nameํ˜•ํƒœ)โœ… JSON ๋ฐฐ์—ด ์ฐพ๊ธฐSELECT JSON_CONTAINS('[1, 2, 3, 4]', '3'); ๊ฒฐ๊ณผ: 1 ( 3์ด ๋ฐฐ์—ด์— ์กด์žฌ)SELECT JSON_CONTAINS('[1, 2, 3, 4]', '5');๊ฒฐ๊ณผ: 0 ( 5๊ฐ€ ๋ฐฐ์—ด์— ์—†์Œ) โœ… WHERE ์—์„œ ํ™œ์šฉ์˜ˆ: ํŠน์ • ์‚ฌ์šฉ์ž์˜ ์—ญํ• (role)์ด ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ ์ฐพ๊ธฐSELECT * FROM users WHERE JSON_..

DB 2025.02.25

[MySQL][SQL] FIND_IN_SET

FIND_IN_SET()ํ•จ์ˆ˜๋Š” MySQL์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰์œผ๋กœ ํ•จ์ˆ˜, ํŠน์ • ๊ฐ’์ด ์‰ผํ‘œ(,)๋กœ ๊ตฌ๋ถ„๋œ ๋ฌธ์ž์—ด ๋ชฉ๋ก ์•ˆ์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š” CSV(Comma-Separated Values) ํ˜•์‹์œผ๋กœ ์ €์žฅ๋  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“Œ ์‚ฌ์šฉ๋ฒ•FIND_IN_SET(needle, haystack)needle: ๊ฒ€์ƒ‰ํ•  ๊ฐ’ (์ฐพ๊ณ ์ž ํ•˜๋Š” ๋‹จ์ผ ๊ฐ’)haystack: ์‰ผํ‘œ(,)๋กœ ๊ตฌ๋ถ„๋œ ๋ฌธ์ž์—ด ๋ชฉ๋ก์ด ํ•จ์ˆ˜๋Š” needle๋‚ด haystack์—์„œ ๋ช‡ ๋ฒˆ์งธ ์œ„์น˜(index)์— ์žˆ๋Š”์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด needle์ด haystack์— ์—†์œผ๋ฉด 0, NULL์ด ์™ธ์—๋Š” NULL๋ฐ˜ํ™˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์‹คํ—˜โœ… ๊ธฐ๋ณธ ์‚ฌ์šฉSELECT FIND_IN_SET('b', 'a,b,c..

DB 2025.02.24

[js][datatables] ์—‘์…€ ๋ณ€ํ™˜ ์‹œ html์ฝ”๋“œ ์ฒ˜๋ฆฌ

// HTML ํƒœ๊ทธ ์ œ๊ฑฐ ๋ฐ ์ค„๋ฐ”๊ฟˆ ์ฒ˜๋ฆฌ let text = data .replace(/]*>/g, "\r\n") // → ๊ฐœํ–‰ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ .replace(/]*>/g, "") // ๋ชจ๋“  HTML ํƒœ๊ทธ ์ œ๊ฑฐ .replace(/ /g, " ") //  ๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๋ณ€๊ฒฝ .trim(); // ์•ž๋’ค ๊ณต๋ฐฑ ์ œ๊ฑฐ

Front/JS & jQuery 2025.02.23

[js] ์†์„ฑ์ด ํฌํ•จ๋œ ํƒœ๊ทธ์˜ ์ •๊ทœ์‹ ๋ณ€ํ™˜

๋ณ€ํ˜•๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ ๋ฐœ์ƒ.๊ธฐ์กด ์ฝ”๋“œ.replace(//g, "\r\n") // → ๊ฐœํ–‰ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ ๋ณ€๊ฒฝ ์ฝ”๋“œ.replace(/]*>/g, "\r\n") // ํƒœ๊ทธ(์†์„ฑ ํฌํ•จ) → ๊ฐœํ–‰ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜

Front/JS & jQuery 2025.02.22

[js][datatables] responsive: { details: false }

$('#example').DataTable({ responsive: { details: false }});์˜๋ฏธ:responsive: DataTables์—์„œ ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์ปฌ๋Ÿผ์„ ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ํ‘œ์‹œํ•˜์—ฌ ๋ฐ˜์‘ํ˜• UI๋ฅผ ์ง€์›ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.details: false: ๋ฐ˜์‘ํ˜• ์ฒ˜๋ฆฌ ์‹œ ์ˆจ๊ฒจ์ง„ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ƒ์„ธ ์ •๋ณด ํ‘œ์‹œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.๋™์ž‘ ๋ฐฉ์‹:responsive๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ํ™”๋ฉด ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์งˆ ๋•Œ ์ผ๋ถ€ ์ปฌ๋Ÿผ์ด ์ˆจ๊ฒจ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ธฐ๋ณธ์ ์œผ๋กœ, ์ˆจ๊ฒจ์ง„ ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ๋Š” ํด๋ฆญ ์‹œ + ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ƒ์„ธ ๋ณด๊ธฐ(details ๊ธฐ๋Šฅ)์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.details: false๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ด ์ƒ์„ธ ๋ณด๊ธฐ ๊ธฐ๋Šฅ์ด ๋น„ํ™œ์„ฑํ™”๋˜์–ด, ์ˆจ๊ฒจ์ง„ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„์˜ˆ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.  ๊ธฐ๋ณธ ์„ค์ • (d..

Front/JS & jQuery 2025.02.21

[js][datatables] fnRecordsDisplay()

if (this.$table.dataTable().fnSettings().fnRecordsDisplay() > 0) { // Execute logic if there are records displayed}this.$table.dataTable()DataTable ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค..fnSettings()DataTables์˜ ๋‚ด๋ถ€ ์„ค์ • ๊ฐœ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค..fnRecordsDisplay()์ ์šฉ๋œ ํ•„ํ„ฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํ˜„์žฌ ํ‘œ์‹œ๋œ ๋ ˆ์ฝ”๋“œ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Front/JS & jQuery 2025.02.20

[JAVA] Optional ์ฃผ์˜ํ•  ์ 

โŒ Optional์„ ํ•„๋“œ์— ์‚ฌ์šฉํ•˜์ง€ ๋ง ๊ฒƒclass User { private Optional name; // โŒ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Œ}โœ” Optional์€ ๋ฉ”์„œ๋“œ ๋ฐ˜ํ™˜ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•จโœ” ํ•„๋“œ์—๋Š” null ๋Œ€์‹  ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์  ํ•„๋“œ์—๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ , ๋ฉ”์„œ๋“œ ๋ฐ˜ํ™˜ ํƒ€์ž…์œผ๋กœ๋งŒ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•จ

JAVA 2025.02.19
728x90
๋ฐ˜์‘ํ˜•