์ „์ฒด ๊ธ€

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

REST API

REST : Representational State Transfer ํ•˜๋‚˜์˜ URI๋Š” ํ•˜๋‚˜์˜ ๊ณ ์œ ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋Œ€ํ‘œํ•˜๋„๋ก ์„ค๊ฒŒ๋œ๋‹ค๋Š” ๊ฐœ๋…์— ์ „์†ก๋ฐฉ์‹์„ ๊ฒฐํ•ฉํ•ด์„œ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ง€์ •ํ•œ๋‹ค. URI + GET / POST / PUT / DELETE HTTP URI๋ฅผ ํ†ตํ•ด ์ œ์–ดํ•  ์ž์›์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method(GET, POST, PUT, DELETE)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›(Resource)์„ ์ œ์–ดํ•˜๋Š” ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๋ฐฉ์‹์˜ ์•„ํ‚คํ…์ฒ˜ ๊ธฐ์กด Service : ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ ํ›„ ๊ฐ€๊ณต๋œ data๋ฅผ ์ด์šฉํ•ด ํŠน์ • ํ”Œ๋žซํผ์— ์ ํ•ฉํ•œ ํ˜•ํƒœ์˜ View๋กœ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜. REST Service : data์ฒ˜๋ฆฌ๋งŒ ํ•œ๋‹ค๊ฑฐ๋‚˜, ์ฒ˜๋ผ ํ›„ ๋ฐ˜ํ™˜๋  data๊ฐ€ ์žˆ๋‹ค๋ฉด JSON์ด๋‚˜ XMLํ˜•์‹์œผ๋กœ ์ „๋‹ฌ. View์— ๋Œ€ํ•ด์„œ๋Š” ์‹ ๊ฒฝ์“ธ ํ•„์š”๊ฐ€..

๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm

๋ฒจ๋งŒ ํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ฐ„์„  ์ค‘์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ‘‰ ๊ทธ๋ž˜ํ”„๋“ค์„ ์—์ง€ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ ์Œ์ˆ˜ ๊ฐ„์„ ์ด ํฌํ•จ๋œ ์ƒํ™ฉ์—์„œ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฌธ์ œ์— ์‚ฌ์šฉ. ์Œ์ˆ˜ ๊ฐ„์„ ์˜ ์ˆœํ™˜์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Œ. ๋งค๋ฒˆ ๋ชจ๋“  ๊ฐ„์„ ์„ ์ „๋ถ€ ํ™•์ธ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฆฌ์ŠคํŠธ์—์„œ ์—…๋ฐ์ดํŠธ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋Š” V - 1 ์‹œ๊ฐ„๋ณต์žก๋„ : O(VE), ๋‹ค์ต์ŠคํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋น„ํ•ด ๋Š๋ฆฌ๋‹ค ์Œ์ˆ˜๊ฐ„์„ ์ด ์žˆ์–ด๋„ ์ˆœํ™˜์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. (์Œ์ˆ˜๊ฐ„์„ ์˜ ์ˆœํ™˜์ด ๋ฐœ์ƒํ•˜๋ฉด ์ตœ๋‹จ๊ฑฐ๋ฆฌ๊ฐ€ ์Œ์˜ ๋ฌดํ•œ์ธ ๋…ธ๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ) ๋™์ž‘์›๋ฆฌ 1. ์ถœ๋ฐœ ๋…ธ๋“œ๋ฅผ ์„ค์ • 2. ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ์ดˆ๊ธฐํ™” 3. ๋‹ค์Œ์˜ ๊ณผ์ •์„ N-1 ๋ฒˆ ๋ฐ˜๋ณต 3-1. ์ „์ฒด ๊ฐ„์„  E๊ฐœ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธ 3-2. ๊ฐ ๊ฐ„์„ ์„ ๊ฑฐ์ณ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๋น„์šฉ์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ๊ฐฑ์‹  4. ๋งŒ์•ฝ ์Œ์ˆ˜ ๊ฐ„์„  ์ˆœํ™˜์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ฒดํฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด 3..

๐Ÿ“–๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค:DB

[MySQL] union๊ณผ join์˜ ์ฐจ์ด

Union์€ ํ…Œ์ด๋ธ”์„ ์ˆ˜์ง ๋ฐฉํ–ฅ์œผ๋กœ ํ•ฉ์นœ๋‹ค ์ด๋•Œ union์€ ์ค‘๋ณต row๋ฅผ ์ œ๊ฑฐํ•˜์ง€๋งŒ, union all ์€ ์ค‘๋ณต row๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š”๋‹ค. Join์€ ํ…Œ์ด๋ธ”์„ ์ˆ˜ํ‰ ๋ฐฉํ–ฅ์œผ๋กœ ํ•ฉ์นœ๋‹ค ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค sql ๋ฌธ์ œ ์ค‘ " ์˜คํ”„๋ผ์ธ/์˜จ๋ผ์ธ ํŒ๋งค ๋ฐ์ดํ„ฐ ํ†ตํ•ฉํ•˜๊ธฐ" ๋ฌธ์ œ์—์„œ Union์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ONLINE_SALE ํ…Œ์ด๋ธ” OFFLINSE_SALE ํ…Œ์ด๋ธ” ONLINE_SALE ํ…Œ์ด๋ธ”๊ณผ OFFLINE_SALE ํ…Œ์ด๋ธ”์—์„œ 2022๋…„ 3์›”์˜ ์˜คํ”„๋ผ์ธ/์˜จ๋ผ์ธ ์ƒํ’ˆ ํŒ๋งค ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. (OFFLINE_SALE ํ…Œ์ด๋ธ”์˜ USER_ID๊ฐ’์€ NULL ๋กœ ํ‘œ์‹œํ•˜๋ผ๋Š” ์กฐ๊ฑด์ด ์žˆ์—ˆ๋‹ค.) ๋‘ ํ…Œ์ด๋ธ”์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์น˜๊ธฐ ์œ„ํ•ด UNION์„, ์˜คํ”„๋ผ์ธ ํ…Œ์ด๋ธ”์˜ USER_ID๋ฅผ NULL ๋กœ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด NULL as user_id..

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

MyBatis

MyBatis Java Object์™€ SQL๋ฌธ ์‚ฌ์ด์˜ ์ž๋™ Mapping ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ORM Framework MyBatis๋Š” SQL์„ ๋ณ„๋„์˜ ํŒŒ์ผ(XML ํ˜น์€ ์ž)๋กœ ๋ถ„๋ž˜ํ•ด์„œ ๊ด€๋ฆฌ Object ์™€ SQL ์‚ฌ์ด์˜ parameter mapping ์ž‘์—…์„ ์ž๋™์œผ๋กœ ํ•ด ์คŒ. ์ž๋ฐ”์™€ SQL์„ ์—ฐ๊ฒฐ๋งŒ ํ•ด์ค€๋‹ค! JAVA - MyBatis - MySQL myBatis → Java์™€ myBatis → spring ๋”ฐ๋กœ ์žˆ์Œ JDBC Driver Loading (Driver Class) DB์—ฐ๊ฒฐ(Connection๊ฐ์ฒด ์ƒ์„ฑ) (url, id, pwd) SQL ์‹คํ–‰ ์ค€๋น„ SQL๋ฌธ์žฅ Statement์ƒ์„ฑ SQL ์‹คํ–‰ DB ์† ์ข…๋ฃŒ ๐Ÿ’ก ์œ„ ๋ฐฉ์‹์—์„œ ํŒŒ๋ž€์ƒ‰ ๋ถ€๋ถ„์€ MyBatis๊ฐ€ ์•Œ์•„์„œ ํ•ด์ฃผ๊ณ , ์ดˆ๋ก์ƒ‰ ๋ถ€๋ถ„๋งŒ xml์— ์„ค์ •..

๐Ÿ“–๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค:DB

[MySQL] GROUP BY ... HAVING COUNT(*)

๐Ÿ’ก์•Œ๊ฒŒ๋œ ์  : GROUP BY์˜ HAVING ์กฐ๊ฑด์— COUNT(*) ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ…Œ์ด๋ธ”์—์„œ, ๋™์ผํ•œ ํšŒ์›(USER_ID)์ด ๋™์ผํ•œ ์ƒํ’ˆ(PRODUCT_ID)์„ ์žฌ๊ตฌ๋งคํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌํ•˜๋ ค๋ฉด SELECT USER_ID, PRODUCT_ID, COUNT(*) FROM ONLINE_SALE GROUP BY USER_ID, PRODUCT_ID HAVING COUNT(*) >= 2; ์™€ ๊ฐ™์ด ํ•˜๋ฉด ๋œ๋‹ค. ์‹คํ–‰๊ฒฐ๊ณผ

๐Ÿ”์–ธ์–ด:Language

java

java๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉฐ ๊ธฐ๋กํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.JAVA์˜ ๋™์ž‘๊ณผ์ • ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์˜ ์žฅ์ 1. ์ƒ์† ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.2. ์ผ์ƒ์ƒํ™œ ๋ชจ์Šต์˜ ๊ตฌ์กฐ๊ฐ€ ๊ฐ์ฒด์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋…น์•„๋“ค์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๊ทธ๋Œ€๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.3. ์ž˜ ์„ค๊ณ„๋œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋…๋ฆฝ๋œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์˜ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ. ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์˜ ๋‹จ์ 1. ๊ฐ์ฒด๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋ ค๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๊ธฐ์— ์„ค๊ณ„๋‹จ๊ณ„๋ถ€ํ„ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ๋ชจ๋œ๋‹ค.2. ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋Š” ๋Œ€์ฒด์ ์œผ๋กœ ์‹คํ–‰์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.3. ๋‹ค์ค‘์ƒ์†์ด ์ง€์›๋˜๋Š” c++์˜ ๊ฒฝ์šฐ์—๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ ธ ์ฝ”๋”ฉ์˜ ๋‚œ์ด๋„๊ฐ€ ์ƒ์Šนํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰๊ณผ์ •1. ์ž๋ฐ”์ปดํŒŒ์ผ๋Ÿฌ(javac)์— ์˜ํ•ด์„œ .java ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ(.clas..

๐Ÿ–ฅ๏ธ์ปดํ“จํ„ฐ๊ณผํ•™:CS

[์šด์˜์ฒด์ œ]5์žฅ - ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ

ํ”„๋กœ์„ธ์Šค : ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ ํ”„๋กœ์„ธ์Šค์˜ ๋ฌธ๋งฅ(context) : ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ˜„์žฌ ์–ด๋–ค ์ƒํƒœ์—์„œ ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ์ •ํ™•ํžˆ ๊ทœ๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด. CPU์˜ ์ˆ˜ํ–‰ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋“œ์›จ์–ด ๋ฌธ๋งฅ Program Counter ๊ฐ์ข… register ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„ code, data, stack ํ”„๋กœ์„ธ์Šค ๊ด€๋ จ ์ปค๋„ ์ž๋ฃŒ ๊ตฌ์กฐ PCB Kernel stack ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ ์‹คํ–‰(running) CPU๋ฅผ ์žก๊ณ  instruction์„ ์ˆ˜ํ–‰์ค‘์ธ ์ƒํƒœ ์ค€๋น„(ready) CPU๋งŒ ๋ณด์œ ํ•˜๋ฉด ๋‹น์žฅ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ(๋ฉ”๋ชจ๋ฆฌ ๋“ฑ ๋‹ค๋ฅธ ์กฐ๊ทผ์„ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๊ณ  ์žˆ์Œ) ๋ด‰์‡„(blocked, wait, sleep) CPU๋ฅผ ์ฃผ์–ด๋„ ๋‹น์žฅ instruction์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”์ฒญํ•œ ์ž…์ถœ๋ ฅ ์ž‘์—…์ด ์ง„ํ–‰์ค‘..

๐Ÿ“–๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค:DB

[MySQL] not a GROUP BY expression

group by์— ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด select ์ ˆ์—์„œ ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ์“ฐ๋Š” ์ปฌ๋Ÿผ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์ปฌ๋Ÿผ์€ group by ์˜ ์ธ์ž๋กœ ์จ์ค˜์•ผ ํ•จ! SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS, ROUND(AVG(R.REVIEW_SCORE),2) SCORE FROM REST_INFO AS I JOIN REST_REVIEW AS R ON I.REST_ID=R.REST_ID WHERE I.ADDRESS LIKE '์„œ์šธ%' GROUP BY I.REST_ID , I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS ORDER BY SCORE desc, I.FAVORITES DESC; ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์„œ์šธ์— ์œ„์น˜ ์‹..

mc.thd
mincheolsong