์ „์ฒด ๊ธ€ 82

[API ํ†ต์‹ ] RestTemplate๊ณผ WebClient

RestTemplate๊ณผ WebClient1. API ํ†ต์‹ 2. RestTemplate๊ณผ WebClient1. API ํ†ต์‹ ํด๋ผ์ด์–ธํŠธ์—์„œ ํšŒ์›๊ฐ€์ž…์„ ํ•  ๋•Œ, ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ฒŒ ๋˜๋ฉด, ๋ณด์•ˆ์— ๋งค์šฐ ์ทจ์•ฝํ•ด์ง€๋ฉฐ ํ•ดํ‚น ๋“ฑ์˜ ์œ„ํ—˜์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„(ํ”„๋ก ํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ API)๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ„์ ‘์ ์œผ๋กœ ํ†ต์‹ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ HTTP ๊ธฐ๋ฐ˜์˜ API ํ†ต์‹ ์ด๊ณ , ์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์ด๋‚˜ ๋‹ค๋ฅธ ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•  ๋•Œ๋Š” RestTemplate์ด๋‚˜ WebClient ๊ฐ™์€ HTTP ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 2. RestTemplate๊ณผ WebClientRest..

[์†Œํ”„ํŠธ์›จ์–ด๊ณตํ•™] ํ…Œ์ŠคํŠธ ์šฉ์–ด ์ •๋ฆฌ

ํ…Œ์ŠคํŠธ ์šฉ์–ด ์ •๋ฆฌ์ด์ œ ์‹œ์ž‘์ด๋ผ๋Š” ๋งˆ์Œ ๊ฐ€์ง์œผ๋กœ ๋ณต์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ด…์‹œ๋‹ค!์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ํ•œ ๋ ์ฐจ์ด๋กœ ์˜๋ฏธ๊ฐ€ ์™„์ „ํžˆ ๊ฐˆ๋ฆฌ๋Š” ํ…Œ์ŠคํŠธ ์šฉ์–ด๋ฅผ ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ํ…Œ์ŠคํŠธ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณธ์ธ์ด ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋™์ž‘ ํ™•์ธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธPM๋‚˜ QC๊ฐ€ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์˜๋„๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šคํ…Œ์ŠคํŠธ ๋‚ด์šฉ ์ž‘์„ฑ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ์ƒํ’ˆ ๊ตฌ๋งค ๋“ฑ ์‚ฌ์šฉ์ž์˜ ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ํ…Œ์ŠคํŠธํ•˜๋Š” ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์ž‘์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์œ ์ €(์‚ฌ์šฉ์ž) ํ…Œ์ŠคํŠธ์œ ์ €(์‚ฌ์šฉ์ž) ๋ฐ ๊ณ ๊ฐ์‚ฌ๊ฐ€ ์‹ค์ œ ํ™˜๊ฒฝ์—์„œ ๊ธฐ๋Šฅ์ด ์ž˜ ์ž‘๋™๋˜๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ํ…Œ์ŠคํŠธํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋๋‚  ๋•Œ ์ฏค ๋ชจ์˜ ํ•ดํ‚น(XSS, SQL ์ธ์ ์…˜), ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ(ํŠธ๋ž˜ํ”ฝ, ์•ˆ์ •์„ฑ) ๋“ฑ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” !ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค

๐Ÿ“— CS 2025.04.13

[SQL] ๋™๋ช… ๋™๋ฌผ ์ˆ˜ ์ฐพ๊ธฐ - GROUP BY (Lv. 2)

JAVA ๊ธฐ๋ณธ ๊ฐœ๋…1. ๋ฌธ์ œ2. ํ’€์ด1. ๋ฌธ์ œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์ŠคSW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„programmers.co.kr 2. ํ’€์ดSELECT NAME, COUNT(NAME) AS 'COUNT' FROM ANIMAL_INS GROUP BY NAME HAVING COUNT(NAME) > 1 ORDER BY NAME - COUNT(NAME) AS 'COUNT'๊ฐ ์ด๋ฆ„์ด ๋ช‡ ๋ฒˆ ๋“ฑ์žฅํ–ˆ๋Š”์ง€ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. - GROUP BY NAMEํ•ด๋‹น ์ด๋ฆ„์ด ์‚ฌ์šฉ๋œ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ™์€ ์ด๋ฆ„๋ผ๋ฆฌ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค. - HAVING COUNT(NAME) > 1ํ•œ ๋ฒˆ ์ด์ƒ ์‚ฌ์šฉ๋œ ์ด๋ฆ„์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” !ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค

[Monitor] Prometheus, Grafana

Prometheus, Grafana1. ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ2. Prometheus3. Grafana1. ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„œ๋น„์Šค์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์•Œ๋ฆผ์„ ํ†ตํ•ด ์•Œ๋ ค์ฃผ๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.๋งŒ์•ฝ์— ์ด์ƒํ•œ ๋กœ๊ทธ์ธ ์‹œ๋„๋‚˜ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋“ฑ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ์ด์ƒ์„ ๊ฐ์ง€ํ•˜๊ณ  ์•Œ๋ฆผ์„ ๋ณด๋‚ด ์ด์— ๋Œ€ํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2. Prometheus์„œ๋ฒ„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์ปจํ…Œ์ด๋„ˆ ๋“ฑ์˜ ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•˜๊ณ  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.prometheus๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ˜์†” ๊ธฐ๋ฐ˜์œผ๋กœ ํ™•์ธํ•ด์•ผ ํ•ด์„œ ๋ถˆํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์— grafana์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 3. Grafana๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.์ด๋ฉ”์ผ, Slack ๋“ฑ์œผ๋กœ ์•Œ๋žŒ์„ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Slack์œผ๋กœ ์•Œ๋žŒ์ด ์˜ค๊ฒŒ๋” ์„ค์ •์„ ํ•˜๋ฉด ์œ„์™€ ๊ฐ™์ด ์•Œ๋žŒ์ด ์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ..

[IntelliJ] Code with me ์‚ฌ์šฉํ•˜๊ธฐ

Code with me ์‚ฌ์šฉํ•˜๊ธฐํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๊ณผ์ •์—์„œ ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ๊ณ ์น˜๋ฉด์„œ Code with me๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.์˜จ๋ผ์ธ์œผ๋กœ ์ง„ํ–‰ํ•˜์—ฌ zep์˜ ํ™”๋ฉด ๊ณต์œ  ๊ธฐ๋Šฅ์œผ๋กœ ํ™•์ธํ•˜๋˜ ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ ์ง์ ‘ ์ฝ”๋“œ, ํ„ฐ๋ฏธ๋„ ๋“ฑ์— ์ ‘๊ทผํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์œ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.  ์ธํ…”๋ฆฌ์ œ์ด์˜ ์ƒ๋‹จ ์šฐ์ธก์— ์‚ฌ๋žŒ ๋ชจ์–‘์„ ํด๋ฆญํ•˜์—ฌ ์„ธ์…˜ ์‹œ์ž‘์„ ๋ˆ„๋ฅด๋ฉด ์ž์‹ ์˜ ํ™˜๊ฒฝ์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ์ดˆ๋Œ€ํ•  ์ˆ˜ ์žˆ๊ณ , ์„ธ์…˜ ์ฐธ์—ฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ฐธ์—ฌ ๋งํฌ๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ์ดˆ๋Œ€ํ•  ๋•Œ  ์ฝ”๋“œ๋งŒ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ„ฐ๋ฏธ๋„๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜์—ฌ ์„ธ์…˜์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ํ˜ผ์ž ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ์— ๋„์›€์ด ๋˜..

[Gradle] Could not download jbcrypt-0.4.jar (org.mindrot:jbcrypt:0.4): No cached version available for offline mode

Could not download jbcrypt-0.4.jar (org.mindrot:jbcrypt:0.4): No cached version available for offline mode1. ๋ฌธ์ œ2. ์›์ธ3. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•1. ๋ฌธ์ œStarting Gradle Daemon...Gradle Daemon started in 1 s 109 ms> Task :prepareKotlinBuildScriptModel UP-TO-DATECould not resolve: org.postgresql:postgresql:42.5.1FAILURE: Build failed with an exception.* What went wrong:Could not download jbcrypt-0.4.jar (org.mindrot:jbcr..

[API] Springboot์™€ Gemini API ์—ฐ๋™ํ•˜๊ธฐ (์ˆ˜์ •์ค‘)

Springboot์™€ Gemini API ์—ฐ๋™ํ•˜๊ธฐ   ์ฐธ๊ณ  ์‚ฌ์ดํŠธ Gemini API  |  Google AI for DevelopersGemini Developer API ๋ฌธ์„œ ๋ฐ API ์ฐธ์กฐai.google.dev ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” !ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค

[API] Springboot์™€ Slack API ์—ฐ๋™ํ•˜๊ธฐ (์ˆ˜์ •์ค‘)

Springboot์™€ Slack API ์—ฐ๋™ํ•˜๊ธฐ  ์ฐธ๊ณ  ์‚ฌ์ดํŠธ Slack platform overview | SlackThe Slack platform offers many tools to aid you in enhancing your workspaces. At a high level, they can be viewed through the lens of workflow automations and non-workflow Slack apps. Workflow automations These comprise both workflow apps and Workflow Builapi.slack.com ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” !ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค

[DB] ๋…ผ๋ฆฌ ์‚ญ์ œ(Soft Delete)์™€ ๋ฌผ๋ฆฌ ์‚ญ์ œ(Hard Delete)

๋…ผ๋ฆฌ ์‚ญ์ œ(Soft Delete)์™€ ๋ฌผ๋ฆฌ ์‚ญ์ œ(Hard Delete)0. ๊ณต๋ถ€ํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ1. ๋…ผ๋ฆฌ ์‚ญ์ œ(Soft Delete)2. ๋ฌผ๋ฆฌ ์‚ญ์ œ(Hard Delete)0. ๊ณต๋ถ€ํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ์ง€๊ธˆ๊นŒ์ง€ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฌผ๋ฆฌ ์‚ญ์ œ(Hard Delete)๋งŒ์„ ์‚ฌ์šฉํ•ด์™”์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ ์‚ฌ์šฉ์ž ํƒˆํ‡ด์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ํ•„์š”๊ฐ€ ์ƒ๊ฒผ๊ณ , ์ด๋•Œ ๋…ผ๋ฆฌ ์‚ญ์ œ(Soft Delete)์˜ ๊ฐœ๋…์„ ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •๋ณด๋Š” ์‚ญ์ œ๋˜์ง€๋งŒ, ์กฐํšŒ๋‚˜ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋…ผ๋ฆฌ ์‚ญ์ œ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 1. ๋…ผ๋ฆฌ ์‚ญ์ œ(Soft Delete)๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ๋กœ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์‚ญ์ œ๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋งŒ ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.is_deleted์™€ ๊ฐ™์€ boolean ํƒ€์ž… ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋…ผ๋ฆฌ์ ..

[Java] ํ‘ธ๋“œ ํŒŒ์ดํŠธ ๋Œ€ํšŒ (Lv. 1)

ํ‘ธ๋“œ ํŒŒ์ดํŠธ ๋Œ€ํšŒ (Lv. 1)1. ๋ฌธ์ œ2. ํ’€์ด1. ๋ฌธ์ œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์ŠคSW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„programmers.co.kr 2. ํ’€์ดclass Solution { public String solution(int[] food) { StringBuilder sb = new StringBuilder(); for (int i = 1; i  food๋ฐฐ์—ด์— ์ฃผ์–ด์ง„ ์Œ์‹์„ ๊ณตํ‰ํ•˜๊ฒŒ ๋ฐฐ์น˜ํ•˜์—ฌ ๋ฌธ์ž์—ด๋กœ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.String.valueOf(i)๋ฅผ ํ†ตํ•ด i๋ฅผ ๋ฌธ์ž์—ด(i = 2 -> "2")๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค. .repeat(count)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด count๋งŒํผ ๋ฐ˜๋ณตํ•ด์„œ sb.appe..