๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€67

SQL ๋™์  ์ฟผ๋ฆฌ foreach๋ฌธ ๋ฌธ๋ฒ• ์ •๋ฆฌ List data = new ArrayList(); data.put('data', arr); MainMapper.insertData(data); INSERT INTO ${session.tableName}.personDetail(P_ID, P_NAME, P_AGE) VALUES #{person.p_id}, #{person.p_name}, #{person.p_age} SQL foreach ๋ฌธ ํƒœ๊ทธ ๊ธฐ๋Šฅ collection ์ „๋‹ฌ๋ฐ›์€ ์ธ์ž (List or Array) item ์ „๋‹ฌ๋ฐ›์€ ์ธ์ž alias separator ๋ฐ˜๋ณต๋˜๋Š” ์‚ฌ์ด์— ์ถœ๋ ฅํ•  ๋ฌธ์ž์—ด index ๋ฐ˜๋ณต๋˜๋Š” ๊ตฌ๋ฌธ ๋ฒˆํ˜ธ (0๋ถ€ํ„ฐ ์ˆœ์ฐจ ์ฆ๊ฐ€) open ๊ตฌ๋ฌธ ์‹œ์ž‘๋  ๋•Œ ์‚ฝ์ž…ํ•  ๋ฌธ์ž์—ด close ๊ตฌ๋ฌธ ์ข…๋ฃŒ๋  ๋•Œ ์‚ฝ์ž…ํ•  ๋ฌธ์ž์—ด 2023. 9. 21.
Spring ์ปค์Šคํ…€ Annotation (@Target, @Retention) ์ƒˆ๋กœ์šด ํŒ€์— ๋“ค์–ด์™€์„œ ๋ฐฑ์—”๋“œ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค๊ฐ€ ์ปค์Šคํ…€ ๋œ ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ์–ด๋…ธํ…Œ์ด์…˜๋„ ์ปค์Šคํ…€์ด ๋˜๋‹ค๋‹ˆ..! ์‹ ๊ธฐํ•ด์„œ ์ปค์Šคํ…€ ์–ด๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. @์ปค์Šคํ…€์–ด๋…ธํ…Œ์ด์…˜ ๋ช… ํ”ํžˆ ์•„๋Š” ์–ด๋…ธํ…Œ์ด์…˜์—๋Š” @Controller @Service ๋“ฑ์ด ์žˆ๋Š”๋ฐ, ์ด๋“ค์€ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ(์–ด๋…ธํ…Œ์ด์…˜) ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ์–ด๋…ธํ…Œ์ด์…˜์˜ ๋งŽ์€ ๊ธฐ๋Šฅ ์ค‘ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ปค์Šคํ…€ ํ•œ ๊ฒƒ์ด ์ปค์Šคํ…€ ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ์ปค์Šคํ…€ ์–ด๋…ธํ…Œ์ด์…˜์€ @Target ๊ณผ @Retention ๋“ฑ meta annotation ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค์Šคํ…€ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ meta annotation ์€ ๋ณดํ†ต ๋‹ค๋ฅธ ์–ด๋…ธํ…Œ์ด์…˜ ์ƒ์„ฑ ์‹œ์—๋„ ํฌํ•จ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋‚ด๊ฐ€ ๋ฐœ๊ฒฌํ•œ ์ปค์Šคํ…€ ์–ด๋…ธํ…Œ์ด์…˜์€ @Target @Retention ๋‘ ๊ฐ€์ง€ ์–ด๋…ธ.. 2023. 9. 19.
[Java] MyBatis xml ์ž‘์„ฑ Mapper - namespace : ์—ฌ๋Ÿฌ ๊ฐœ์˜ SQL๋ฌธ์„ ํŒจํ‚ค์ง€์ฒ˜๋Ÿผ ๋ฌถ๋Š”๋‹ค. SQL ํƒœ๊ทธ - ํƒœ๊ทธ๋ฅผ ์ œ๊ณต - ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ sql๋ฌธ์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ๋‘˜ ์ˆ˜ ์žˆ๋‹ค. SELECT #{S_ID} AS L_ID, F.L_NAME, F.L_TEACHER, F.L_PLACE, F.L_TIME, F.L_MAX FROM ${DB_LESSON}.FIRST_TYPE F WHERE F.L_ID = '11111' AND F.L_NAME NOT IN ( SELECT L_NAME FROM ${DB_LESSON}.FIRST_TYPE WHERE L_ID = #{S_ID} ) SELECT COUNT(*) FROM ( ) A parameterType - parameterType ์— ์ง€์ •๋œ ๊ฐ’์ด SQL๋ฌธ ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค. resul.. 2023. 9. 18.
[JAVA] DAO, DTO, VO ์ •๋ฆฌ ์ „์ฒด์ ์ธ ํ๋ฆ„ DB -> DAO -> SERVICE (-MAPPER) -> CONTROLLER -> WEB DAO (Data Access Object) - ์‹ค์ œ๋กœ DB ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ DOMAIN (= Entity) Lesson.java @Data @Getter @Setter @NoArgsConstructor public class Lesson { private int c_idx; private String c_name; private int ag_idx; @Builder public Lesson(int c_idx, String c_name, int ag_idx) { this.c_idx = c_idx; this.c_name = c_name; this.ag_idx = ag_idx; } } L.. 2023. 9. 16.
js ์—์„œ ํ•œ๊ธ€ ๊ธ€์ž ์ˆ˜ ์„ธ๊ธฐ ํŒŒ์ผ์„ ์ฒจ๋ถ€ํ•  ๋•Œ ํŒŒ์ผ๋ช…์„ ๋ณด์—ฌ์ฃผ๋Š” input ๋ฐ•์Šค ๊ธธ์ด ๋ณด๋‹ค ํŒŒ์ผ๋ช…์ด ๋” ๊ธธ ๊ฒฝ์šฐ, ํŒŒ์ผ๋ช…์ด ์˜ค๋ฒ„๋˜์–ด ์ผ๋ถ€๋งŒ ์ถœ๋ ฅ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค. ํŒŒ์ผ๋ช…์˜ ๊ธ€์ž ์ˆ˜๋ฅผ ์ œํ•œํ•˜์—ฌ ํŒŒ์ผ๋ช…์ด input ๋ฐ•์Šค ๋‚ด์—์„œ ์ž˜๋ฆฌ์ง€ ์•Š๊ฒŒ ์ถœ๋ ฅํ•ด์•ผ ํ–ˆ๋‹ค. ํŒŒ์ผ๋ช…์— ํ•œ๊ธ€์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ํ•œ๊ธ€์€ ๋ชจ์Œ/์ž์Œ ๋‹จ์œ„๋กœ length ๊ฐ€ ๊ณ„์‚ฐ๋˜๊ณ  ์žˆ์—ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒŒ์ผ๋ช…์ด "์•„moya" ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, ์•„ ๋ผ๋Š” ๊ธ€์ž์˜ length ๋Š” 1๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜์ง€๋งŒ 'ใ…‡' ๊ณผ 'ใ…' ๊ฐ€ ๊ฐ๊ฐ ๊ณ„์‚ฐ๋˜์–ด ๊ธธ์ด๊ฐ€ 2๋กœ ์ถœ๋ ฅ๋œ๋‹ค. ํŒŒ์ผ๋ช… ๊ฐ’์ด ๋“  ๋ณ€์ˆ˜๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ ์ •๊ทœํ™”(normalize) ํ•ด์ฃผ๋‹ˆ ํ•œ๊ธ€ length ๊ธธ์ด๊ฐ€ 1๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. // ํŒŒ์ผ๋ช… ์ •๊ทœํ™” var fileName = orgFileName.normalize('NFC'); ์‚ฌ์šฉ.. 2022. 10. 13.
window.postMessage ๋กœ ์œˆ๋„์šฐ ์ปจํŠธ๋กค ํ•˜๊ธฐ ์ˆœ์ˆ˜ js ๋กœ ์ž‘์—…ํ•œ A ์œˆ๋„์šฐ์—์„œ ์–ด๋–ค ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•˜๋ฉด a ๋‹ค์ด์–ผ๋กœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š”๋ฐ, a ๋‹ค์ด์–ผ๋กœ๊ทธ ์•ˆ์— ์žˆ๋Š” ํ™•์ธ ๋ฒ„ํŠผ(okBtn)์„ ํด๋ฆญํ•˜๋ฉด B ์œˆ๋„์šฐ๊ฐ€ ํŒ์—…์œผ๋กœ ์—ด๋ฆฐ๋‹ค. (์ด๋•Œ B์œˆ๋„์šฐ๋Š” ๋ฆฌ์•กํŠธ๋กœ ์ž‘์—…ํ•œ ๋ถ€๋ถ„) A ์œˆ๋„์šฐ์˜ a ๋‹ค์ด์–ผ๋กœ๊ทธ์—๋Š” ์ทจ์†Œ ๋ฒ„ํŠผ(closeBtn) ๋„ ์žˆ๋Š”๋ฐ, ์ทจ์†Œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด B ์œˆ๋„์šฐ๊ฐ€ ๋‹ซํ˜€์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ B๊ฐ€ ์œˆ๋„์šฐ ํŒ์—…์ด๋ผ ๋‹ค๋ฅธ ํƒญ์— ๊ทธ๋Œ€๋กœ ๋‚จ์•„์žˆ์–ด์„œ ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ทจ์†Œ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ž๋™์œผ๋กœ ๋‹ซํžˆ๊ฒŒ ์ˆ˜์ •ํ•ด์•ผ ํ–ˆ๋‹ค. ์ฒ˜์Œ์— ๊ฒ€์ƒ‰ํ•˜๋ฉด์„œ ํฌ๋กฌ ๋‚ด์—์„œ๋Š” ๋„๋ฉ”์ธ์ด ๋‹ค๋ฅธ ์œˆ๋„์šฐ๋ฅผ ๋‹ซ์„ ์ˆ˜ ์—†๋‹ค๋Š” ๊ธ€์„ ๋ดค์—ˆ๋Š”๋ฐ, ๊ทธ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์ด ์™€์„œ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์ด ๊ณผ์—ฐ ์žˆ๋Š”๊ฑด์ง€ ๋ช‡ ์‹œ๊ฐ„์„ ๊ณ ๋ฏผํ–ˆ๋‹ค ใ… ใ…  ์ˆœ์ˆ˜ js ๊ธฐ๋ฐ˜ ์œˆ๋„์šฐ ๋‚ด์—์„œ ๋ฆฌ์•กํŠธ ์œˆ๋„์šฐ๋ฅผ ์ปจํŠธ๋กค ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋„ ๋ชจ๋ฅด๊ฒ ๊ณ .. ๋ฉ˜๋ถ•์ด์—ˆ.. 2022. 8. 17.
window ๊ฐ์ฒด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ์ฝ”๋“œ๋ฅผ ํ›‘์–ด๋ณด๋‹ค๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด window ๊ฐ์ฒด์— ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“  ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ๋ณดํ†ต์€ ๋ณ€์ˆ˜๋กœ ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ window ๊ฐ์ฒด๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ ์‹ ๊ธฐํ•ด์„œ ํ•œ๋ฒˆ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. window ๊ฐ์ฒด๋ž€? ๋ธŒ๋ผ์šฐ์ € ์ „์ฒด๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๊ฐ์ฒด ๋ชจ๋“  ๊ฐ์ฒด์˜ ์กฐ์ƒ(์ „์—ญ ๊ฐ์ฒด) ์ตœ์ƒ์œ„์— ์žˆ๋Š” ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋””์„œ๋“  ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๊ฒฝ์šฐ ์‹ค์ œ๋กœ๋Š” window.ํ•จ์ˆ˜๋ช…์ด ๋˜์ง€๋งŒ, window ๊ฐ€ ์ƒ๋žต๋˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค. "์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค." 2022. 5. 23.
Mac์—์„œ ๋ชจ๋ฐ”์ผ ์›น๋ทฐ ๋””๋ฒ„๊น…ํ•˜๊ธฐ (๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์‚ฌ์šฉํ•˜๊ธฐ) ๋ชจ๋ฐ”์ผ์—์„œ ์›น ์ ‘๊ทผ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ ๋•Œ๋ฌธ์— ๋ชจ๋ฐ”์ผ์—์„œ ์›น ๋””๋ฒ„๊น…์„ ํ•ด์•ผํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฐพ์•„๋ณธ 3๊ฐ€์ง€ adb, android emulator, chrome inspect ๋ชจ๋ฐ”์ผ ์›น๋ทฐ ๋””๋ฒ„๊น… ๋ฐ ์ฝ˜์†” ๋กœ๊ทธ ํ™•์ธ ๋ฐฉ๋ฒ• (๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์‚ฌ์šฉ๋ฒ•) 1. ์•ˆ๋“œ๋กœ์ด๋“œ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๋กฌ ์›น ์ ‘์† 2. chrome://inspect/#devices ์ ‘์† 3. ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๊ธฐ๊ธฐ๊ฐ€ ์ ‘์†ํ•œ ์›น ์‚ฌ์ดํŠธ inspect 1. android studio ๋‹ค์šด๋กœ๋“œ https://developer.android.com/studio?hl=ko Download Android Studio and SDK tools | Android Developers The official IDE for Android app developers. deve.. 2022. 5. 23.
์กฐ๊ฑด๋ฌธ ์ค„์ด๊ธฐ(feat. ํด๋ฆฐ ์ฝ”๋“œ) ์˜ค๋Š˜ ํšŒ์‚ฌ์—์„œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ? ์œ ์ง€๋ณด์ˆ˜ ์ฝ”๋“œ ๊ฐœ์„  ๋ฐฉ์•ˆ ํšŒ์˜๋ฅผ ํ–ˆ๋Š”๋ฐ ์‹ ์ž…์ด๋ผ์„œ ๋‚˜๋„ ์ฐธ๊ด€ํ–ˆ๋‹ค! ๊ทธ ์ค‘์— ๊ธฐ์–ต์— ๋‚จ๋Š” ๋ถ€๋ถ„์€ ์กฐ๊ฑด๋ฌธ์„ ์ค„์ด๋Š” ๋ฐฉ์•ˆ์— ๊ด€ํ•œ ๊ฒƒ์ด๋‹ค. ๊ฐœ์„ ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ๋งค๋ฒˆ ๊ฐ™์€ ๋กœ์ง์„ ํƒ€์ง€๋งŒ ์ผ€์ด์Šค ๋ณ„๋กœ ๊ฐ’๋งŒ ๋‹ค๋ฅด๊ฒŒ ๋ฐ”๋€Œ๋Š” ์ƒํƒœ์—ฌ์„œ ์ผ€์ด์Šค๋ณ„๋กœ switch-case ๋˜๋Š” if ๋ฌธ์œผ๋กœ ์ž‘์„ฑ๋˜์–ด์„œ ๊ทธ ์•ˆ์—์„œ ๊ฐ’๋งŒ ๋ฐ”๊ฟ”์ฃผ๊ณ  ์žˆ์—ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑ๋˜์–ด ์žˆ์œผ๋ฉด ํ˜น์—ฌ๋‚˜ ๋‹ค๋ฅธ ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ ์กฐ๊ฑด๋ฌธ๋„ ๊ณ„์† ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ๋ฉด์—์„œ ์ข‹์ง€๊ฐ€ ์•Š๋‹ค. ํ•ด๋‹น ๋ถ€๋ถ„์—์„œ switch-case ๋ฌธ์„ ์—†์• ๋Š” ๋ฐฉ์•ˆ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ–ˆ๋Š”๋ฐ, ๋‚˜๋„ ๊ทธ์™€ ๋น„์Šทํ•œ ๊ณ ๋ฏผ์„ ํ•ด๋ณธ์ ์€ ์žˆ์ง€๋งŒ ํ•ญ์ƒ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์ง€๋Š” ์•Š๊ณ  ๋๋‚ฌ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ ๋ง์„ ๋“ค์–ด๋„ ๋ฐ”๋กœ ๋”ฑ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์„ ์–˜๊ธฐํ•  ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค ... ๊ฒฐ๋ก ์€ ๊ฐ™์€ ๋กœ.. 2022. 5. 20.