๋ฐ˜์‘ํ˜•
# Spring boot ๋””์ž์ธ ํŒจํ„ด ์ •๋ฆฌ - ํ”„๋ก์‹œ(Proxy) ํŒจํ„ด

ํ”„๋ก์‹œ ํŒจํ„ด์ด๋ž€? ์–ด๋–ค ๊ฐ์ฒด ์•ž์— ๋Œ€๋ฆฌ์ธ(proxy) ์„ ํ•˜๋‚˜ ๋‘๊ณ ,๊ทธ ๊ฐ์ฒด์˜ ์‹คํ–‰ ์ „ํ›„์— ๋‹ค๋ฅธ ํ–‰๋™์„ ๋ง๋ถ™์ด๋Š” ๊ตฌ์กฐ ์‹ค๋ฌด ๋น„์œ ์นด์นด์˜คํŽ˜์ด์— ๊ฒฐ์ œ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค๊ทธ๋Ÿฐ๋ฐ ๊ทธ ์š”์ฒญ์€ ์นด์นด์˜ค API๋กœ ๋ฐ”๋กœ ๊ฐ€์ง€ ์•Š๊ณ ,์ค‘๊ฐ„์—์„œ “ํ”„๋ก์‹œ ์„œ๋ฒ„”๊ฐ€ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๊ณ  ๊ฒ€์ฆํ•œ ๋’ค ์นด์นด์˜ค์— ๋„˜๊ฒจ์คŒ์ด ํ”„๋ก์‹œ๊ฐ€ ๋ฐ”๋กœ ์ค‘๊ฐ„์—์„œ ๋Œ€์‹  ์ผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ฐ์ฒด ์˜ˆ์ œ: ๋กœ๊ทธ๋ฅผ ์ž๋™์œผ๋กœ ๋‚จ๊ธฐ๋Š” ํ”„๋ก์‹œ ํŒจํ„ด 1. ์ง„์งœ ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šคpublic interface PayService { void pay(int amount);} 2.์‹ค์ œ ๊ตฌํ˜„์ฒดpublic class KakaoPayService implements PayService { public void pay(int amount) { System.out.println("..

โ˜•JAVA/๋””์ž์ธํŒจํ„ด(GoF) 2025. 7. 23. 17:43

# Spring boot ๋””์ž์ธ ํŒจํ„ด ์ •๋ฆฌ - ์‹ฑ๊ธ€ํ†ค(Singleton) ํŒจํ„ด

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด๋ž€?์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋งŒ ์กด์žฌํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ํŒจํ„ด ์™œ ํ•„์š”ํ• ๊นŒ? ์ž์ฃผ ์“ฐ์ด๋Š” ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ์ค„์ž„์—ฌ๋Ÿฌ ํด๋ž˜์Šค์—์„œ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ๊ฐ์ฒด ์ƒ์„ฑ ๋น„์šฉ์ด ํฐ ๊ฒฝ์šฐ ํšจ๊ณผ์ ์˜ˆ๋ฅผ๋“ค์–ด DB์—ฐ๊ฒฐ ๊ฐ์ฒด, ์„ค์ • ๊ฐ์ฒด ๋“ฑ์€ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค.๊ทธ๋ž˜์„œ ํ•œ๋ฒˆ๋งŒ ๋งŒ๋“ค๊ณ  ๋‹ค๊ฐ™์ด ์“ฐ์ž = ์‹ฑ๊ธ€ํ†ค Spring boot์—์„œ๋Š” ์–ด๋””์— ์“ฐ์ผ๊นŒ?→ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“  Bean์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค์ด๋‹ค. ์ฝ”๋“œ๋กœ ๋ณด๊ธฐpublic class MySingleton { // 1. ์ž๊ธฐ ์ž์‹ ์„ private static์œผ๋กœ ํ•˜๋‚˜ ๋งŒ๋“ ๋‹ค private static MySingleton instance = new MySingleton(); // 2..

โ˜•JAVA/๋””์ž์ธํŒจํ„ด(GoF) 2025. 7. 23. 16:55

# JAVA์—์„œ double๊ณผ Double์˜ ์ฐจ์ด ์–ธ์ œ ์–ด๋–ค ๊ฑธ ์จ์•ผ ํ• ๊นŒ?

Java์—์„œ๋Š” ์ˆซ์žํ˜• ํƒ€์ž…์œผ๋กœ double๊ณผ Double ๋‘ ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.์ฒ˜์Œ ๊ณต๋ถ€ํ•  ๋• ๋˜‘๊ฐ™์•„ ๋ณด์ด์ง€๋งŒ, ์‹ค๋ฌด์—์„œ ์ •๋ง ์ค‘์š”ํ•œ ์ฐจ์ด๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ด ๋‘˜์˜ ์ฐจ์ด์™€ ์‹ค์ œ๋กœ ์–ธ์ œ ์–ด๋–ค ๊ฑธ ์จ์•ผ ํ•˜๋Š”์ง€ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐœ๋…ํ•ญ๋ชฉdoubleDoubleํƒ€์ž…๊ธฐ๋ณธํ˜•(primitive)์ฐธ์กฐํ˜•(wrapper class)null ํ—ˆ์šฉโŒ ๋ถˆ๊ฐ€โœ… ๊ฐ€๋Šฅ๊ธฐ๋ณธ๊ฐ’0.0null์‚ฌ์šฉ ๋ชฉ์ ๋น ๋ฅธ ๊ณ„์‚ฐ, ๋‹จ์ˆœํ•œ ์ˆ˜์น˜ ์ฒ˜๋ฆฌnull์ฒ˜๋ฆฌ, ์ปฌ๋ ‰์…˜/๊ฐ์ฒด ์กฐ์ž‘ ์™œ ๋‘๊ฐ€์ง€๊ฐ€ ์กด์žฌํ• ๊นŒ?Java๋Š” ์„ฑ๋Šฅ์„ ์œ„ํ•ด ์ˆซ์žํ˜•์€ primitive ํƒ€์ž…์œผ๋กœ ์„ค๊ณ„ํ–ˆ์ง€๋งŒ,์ปฌ๋ ‰์…˜(List, Map ๋“ฑ)์— ๋‹ด๊ฑฐ๋‚˜ null ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•ด์•ผ ํ•  ๋•Œ๋Š” ๊ฐ์ฒด๋กœ์จ ๋‹ค๋ค„์•ผ ํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋ž˜์„œ ๋“ฑ์žฅํ•œ ๊ฒƒ์ด Wrapper Class, ์ฆ‰ Double ์ž…๋‹ˆ๋‹ค.(int ..

โ˜•JAVA/์ „์ฒด 2025. 7. 16. 09:43

# spring boot(java) ์ œ๋ฏธ๋‚˜์ด(Gemini) API ์—ฐ๋™ํ•˜๊ธฐ (๋ฌด๋ฃŒ ๋ฒ„์ „)

๋ญ”๊ฐ€ AI์ฑ—๋ด‡์„ ๋งŒ๋“ค์–ด๋ณด๊ณ ์‹ถ์–ด์„œ๊ฐœ์ธ์ ์œผ๋กœ ๋งŒ๋“ค์–ด๋†“์€ ๋‹ค์ด์–ด๋ฆฌ์— ์–ด๋–ค๊ธฐ๋Šฅ์„ ๋„ฃ์–ด๋ณผ๊นŒํ•˜๋‹ค๊ฐ€๋‹จ์–ด์žฅ์— ๋ฒˆ์—ญ๊ธฐ ๊ธฐ๋Šฅ์„ ๋„ฃ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค ์ƒ๊ฐํ•ด์„œ์ œ๋ฏธ๋‚˜์ด๊ฐ€ ๋ฒˆ์—ญํ•ด์ฃผ๋Š” ๋ฒˆ์—ญ๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณด์•˜๋‹ค. ์›๋ž˜๋Š” GPT์จฉ์„ ์“ฐ๊ณ ์‹ถ์—ˆ์ง€๋งŒ ใ… ใ…  ์œ ๋ฃŒ๋กœ ๋ฐ”๋€Œ์–ด์„œ..๋ฌด๋ฃŒํ‚ค๋ผ...์‘๋‹ต๋„๋А๋ฆฌ๊ณ ..๊ทธ๋ ‡์ง€๋งŒ..๋ฌด๋ฃŒ๋‹ˆ๊นŒ............ ๋ฒˆ์—ญ๊ธฐ๋Š” ์•ˆ์— ๋‚ด์šฉ์ด ๋ถ€๋„๋Ÿฌ์šฐ๋‹ˆ๊นŒ ๋‹ค๋ฅธ ์˜ˆ์‹œ์ฝ”๋“œ๋กœ..๊ฐ„๋‹จํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ•ด๋ณด๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ฒ ๋‹ค. ๋จผ์ € ์ œ๋ฏธ๋‚˜์ด apiํ‚ค๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„์•ผ ํ•œ๋‹ค.https://aistudio.google.com/apikey ๋กœ๊ทธ์ธ - Google ๊ณ„์ •์ด๋ฉ”์ผ ๋˜๋Š” ํœด๋Œ€์ „ํ™”accounts.google.com์—ฌ๊ธฐ์„œ ๋กœ๊ทธ์ธ์„ ํ•œ ํ›„ APIํ‚ค๋ฅผ ๋ฌด๋ฃŒ๋กœ ๋ฐœ๊ธ‰๋ฐ›์œผ๋ฉด ๋˜๊ณ  ์ด๊ฒŒ ๋์ด ์•„๋‹ˆ๋ผ์ œ๋ฏธ๋‚˜์ด api๋ฅผ ํ™œ์„ฑํ•ด์ฃผ์–ด์•ผ ๋น„๋กœ์†Œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. http..

โ˜•JAVA/API ๋ชจ์Œ 2025. 7. 15. 11:43

# ์ž๋ฐ” ๋””์ž์ธ ํŒจํ„ด ์ž…๋ฌธ - Adapter ํŒจํ„ด ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

Adapter ํŒจํ„ด์ด๋ž€?์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋งž์ง€ ์•Š๋Š” ๋‘ ๊ฐ์ฒด ์‚ฌ์ด๋ฅผ ์ค‘๊ฐ„์—์„œ “๋ณ€ํ™˜”ํ•ด์ฃผ๋Š” ํŒจํ„ด“๋ณ€ํ™˜ ์–ด๋Œ‘ํ„ฐ” ์—ญํ• ์„ ํ•˜๋Š” ํด๋ž˜์Šค์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด,๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ “๊ฐ์‹ธ์„œ” ์“ฐ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ตฌ์กฐ๋‹ค. ์™œ Adapter ํŒจํ„ด์ด ํ•„์š”ํ• ๊นŒ?1.๊ธฐ์กด ํด๋ž˜์Šค๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ๋ถˆํŽธํ•  ๋•Œ→ ex. Properties, InputStream, Thread ๋“ฑ 2.๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด๋‚˜ ๊ตฌ์กฐ์™€ ์•ˆ๋งž์„ ๋•Œ→ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๋ฐ”๊พธ๊ฑฐ๋‚˜, ๊ธฐ๋Šฅ์„ ์กฐํ•ฉํ•ด์„œ ์ƒˆ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๊ตฌ์กฐ ์ดํ•ด (ํด๋ž˜์Šค ๋ช…์€ ์˜ˆ์‹œ)์—ญํ• ์ด๋ฆ„์„ค๋ช…Target (ํƒ€๊ฒŸ ์ธํ„ฐํŽ˜์ด์Šค)Printํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์ŠคAdaptee (๊ธฐ์กด ํด๋ž˜์Šค)Banner์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋งž์ง€ ์•Š๋Š” ๊ธฐ์กด ํด๋ž˜์ŠคAdapterPrintBannerPrint ์ธํ„ฐํŽ˜์ด์Šค..

โ˜•JAVA/๋””์ž์ธํŒจํ„ด(GoF) 2025. 6. 19. 10:52

ํŽ˜์ด์ง•

๋ฐ˜์‘ํ˜•