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

์ „์ฒด ๊ธ€51

REST API ์—์„œ์˜ HTTP ์‘๋‹ต ์ฝ”๋“œ (HTTP 201 Created) ๋ง‰์—ฐํ•˜๊ฒŒ ์•Œ๊ณ , ๋Œ€์ถฉ ์‚ฌ์šฉํ•˜๋˜ HTTP ์‘๋‹ต ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•  ์‹œ๊ฐ„.. ๋“œ๋””์–ด..ํ•œ ๋ฒˆ์— ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ POST ํ•˜๋‚˜ ์ •๋ฆฌ๋„ ๊ฝค๋‚˜ ๊ฑธ๋ ค์„œ ๋‚˜๋ˆ ์„œ ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค. ์‚ฌ์‹ค ์•„์ง POST ๋ง๊ณ ๋Š” ๊ถ๊ธˆํ•œ ์ ์ด ์—†์Œ. ์กฐํšŒ(GET) => 200 OK์ƒ์„ฑ(POST) => 201 Created์ˆ˜์ •(PUT, PATCH) => 200 OK / 204 No Content์‚ญ์ œ(DELETE) => 204 No Content ๐Ÿ”ถ ์ƒ์„ฑ(POST)POST ์š”์ฒญ ์‹œ 201 Created ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค.์ด ๋•Œ, Location ํ—ค๋”์— ์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. HTTP 201 Created์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์œผ๋ฉฐ, ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. URI๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ณด๋‚ด๋Š” ์ฝ”๋“œ @PostMapping.. 2025. 2. 18.
Spring JPA | Entity์™€ Dto ๋ถ„๋ฆฌ Spring JPA๋ฅผ ํ™œ์šฉํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ์ ์ด ์žˆ์–ด ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.Entity๋ฅผ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ด์ „ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์„œ๋น„์Šค๋‹จ์—์„œ Entity์™€ Dto๋ฅผ ๋นŒ๋” ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณค ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Entity์— toResponseDto() ๋ฉ”์„œ๋“œ์™€ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์—ˆ๋‹ค.์ด์— ๋Œ€ํ•ด Entity๋ฅผ ๋ณดํ˜ธํ•˜๋ผ! ๋ผ๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๊ณ , ๊ณ ์น˜๋Š” ๋ฐฉ๋ฒ•๋„ ์ „๋‹ฌ๋ฐ›์•˜๊ธฐ์— ๊ธฐ๋กํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.  ๐Ÿง Entity๋ฅผ ๋ณดํ˜ธํ•ด์•ผ ํ•˜๋Š” ์ด์œ Entity๋Š” ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด์ด๋ฏ€๋กœ ์ตœ๋Œ€ํ•œ ์ˆœ์ˆ˜ํ•œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด๋กœ ์œ ์ง€ํ•˜๊ณ , DTO์™€์˜ ์˜์กด์„ฑ์„ ์—†์• ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.Entity๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ 1:1 ๋งคํ•‘๋˜๋Š” ๊ฐ์ฒด์ธ๋ฐ, DTO์™€์˜ ๋ณ€ํ™˜ ๋กœ์ง์ด ๋“ค์–ด๊ฐ€๋ฉด .. 2025. 2. 17.
[๋ฌธ์ œํ’€์ด] ๋ฐฑ์ค€ 5427 ๋ถˆ ๐Ÿ›Ž๏ธ ๋ฌธ์ œ  ๐Ÿ“ข ํ‹€๋ฆฐ ์ด์œ ๋ถˆ์ด ํผ์ง€๋Š” ๊ฐ„๊ฒฉ๊ณผ ์ƒ๊ทผ์ด๊ฐ€ ์›€์ง์ด๋Š” ๊ฐ„๊ฒฉ์ด ๊ฐ™์œผ๋ ค๋ฉด BFS๋ฅผ ๋Œ๋ฆด ๋•Œ ๋ถˆ์ด ๊ฐˆ ๊ณณ์„ ํƒ์ƒ‰ํ•˜๊ณ  que์— ๋„ฃ๋Š” depth์™€ ์ƒ๊ทผ์ด๊ฐ€ ์ด๋™ํ•˜๋Š” depth๊ฐ€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.๊ทธ ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ•ด์„œ ๊ณ„์† ๋ชจ๋“  ๋ฌธ์ œ๊ฐ€ "IMPOSSIBLE"์ด ๋‚˜์™”๋‹ค. ๐Ÿ˜€ ์ œ๋Œ€๋กœ ๋œ ์ฝ”๋“œ์ œ๋Œ€๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๋ ค๋ฉด ๋ถˆ์„ ๋„ฃ๋Š” ํ ์‚ฌ์ด์ฆˆ๋งŒํผ๋งŒ ๋‹ค์Œ ์ขŒํ‘œ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์ƒ๊ทผ์ด๋„ ์ƒ๊ทผ์ด์˜ ํ ์‚ฌ์ด์ฆˆ๋งŒํผ๋งŒ ๋‹ค์Œ ์ขŒํ‘œ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์ด๋™์‹œ์ผœ์ฃผ์–ด ๋‘˜์ด ์›€์ง์ด๋Š” ๊ฐ„๊ฒฉ์„ ๋งž์ถฐ์ค˜์•ผ ํ•œ๋‹ค.์ฃผ์š” ์ฝ”๋“œ while (!sangQ.isEmpty()){ int firesize = fireQ.size(); int sangsize = sangQ.size(); for (int i = 0; i โš ๏ธ for๋ฌธ์— ํ์˜ size๋ฅผ.. 2025. 2. 14.
[๋ฌธ์ œํ’€์ด] ๋ฐฑ์ค€ 1697 ์ˆจ๋ฐ”๊ผญ์งˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•ˆ ํ’€๋ฉด ๊นŒ๋จน๋Š” ๊ฒƒ ๊ฐ™๋‹ค.BFS/DFS๋Š” ๋‹ค๋ฅธ ์œ ํ˜•์— ๋น„ํ•ด ๋งŽ์ด ํ’€์–ด๋ดค์–ด์„œ ์†์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์„๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐํ•œ ๋ฒˆ์— ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ^-^ ๋จธ์“ฑ  ๋ฐฑ์ค€ 1697 ์ˆจ๋ฐ”๊ผญ์งˆ ๋ฌธ์ œ์ˆ˜๋นˆ์ด๊ฐ€ ๋™์ƒ์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ํŠน์ • ์ด๋™ ์กฐ๊ฑด์— ๋งž์ถฐ ํƒ์ƒ‰ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.์ „ํ˜•์ ์ธ BFS ๋ฌธ์ œ์ธ ๋“ฏ ํ•˜๋‹ค. X - 1X + 12 * X์ด๋™ ์กฐ๊ฑด์ด ๊ทœ์น™์ ์ด๋ฏ€๋กœ ํƒ์ƒ‰ ์œ„์น˜๊ฐ€ ๋ฐ˜๋ณต๋  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ฒ˜์Œ์— ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ๋นผ๋จน์€ ์ด์œ ๋Š”…..!๊ทธ๋ƒฅ ์ž˜๋ชป ์ƒ๊ฐํ–ˆ๋‹ค.์„ค๋ช…ํ•˜๊ธฐ๋„ ์–ด๋ ต๊ฒŒ ์ƒ๊ฐ์˜ ์˜ค๋ฅ˜๋ฅผ ๋ฒ”ํ•ด์„œ ์ ๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค..๊ฒฐ๋ก ์€ํŠน์ • ์ง€์ ์— ๋„์ฐฉํ–ˆ์„ ๋•Œ, ๊ทธ ์ง€์ ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜(3๊ฐ€์ง€ ์ด๋™ ์กฐ๊ฑด)๋Š” ํ•œ ๋ฒˆ์— ํ์— ๋„ฃ์–ด์„œ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋‚˜์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๊ณณ์— ๋‹ค์‹œ ๋Œ์•„์˜ฌ ํ•„์š”๊ฐ€ ์—†๋‹ค.ํŠนํžˆ, ์ด ๋ฌธ์ œ๋Š” ์กฐ๊ฑด์ด X-1 .. 2025. 2. 13.
ํ”„๋กœ์ ํŠธ | ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ํ™•์žฅ์„ฑ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ โœจ ์ฃผ์š” ๋‚ด์šฉ ํ–ฅํ›„์— ์–ด๋–ค ๋ณ€๋™(๊ธฐ๋Šฅ ๋ณ€๊ฒฝ, ์™ธ๋ถ€ ์„œ๋น„์Šค ๋“ฑ)์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•  ๊ฒƒ  โœ ํ”„๋กœ์ ํŠธ ์„ค๊ณ„ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ ์„ค๊ณ„๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.๊ธฐํš์€ ํ•˜์ง€ ์•Š๊ณ , ์š”๊ตฌ์‚ฌํ•ญ์ด ์ฃผ์–ด์ง„ ์ฃผ๋ฌธ ๊ด€๋ฆฌ ํ”Œ๋žซํผ์„ ์„ค๊ณ„๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋  ์˜ˆ์ •์ด๋‹ค. ๊ณ ๋ คํ•  ์ ์Šคํ”„๋ง ๋ถ€ํŠธ ๊ธฐ๋ฐ˜์˜ ๋ชจ๋†€๋ฆฌ์‹ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์ถ”ํ›„ MSA๋กœ ์ „ํ™˜ํ•  ๊ฒƒ.์‹ค์ œ๋กœ ์ดˆ๊ธฐ์—๋Š” ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜๋กœ MVP ์œ„์ฃผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ , ์ถ”ํ›„์— MSA๋ฅผ ๋„์ž…ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.์ดˆ๊ธฐ์— MSA๋ฅผ ๋„์ž…ํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ์˜ ๋ถˆํ™•์‹ค์„ฑ, ์ธ๋ ฅ ๋ฐ ์ธํ”„๋ผ์˜ ์ œํ•œ ๋“ฑ ์—ฌ๋Ÿฌ ์š”์ธ์œผ๋กœ ํž˜๋“ค๋‹ค.ํ˜‘์—… ๋™๋ฃŒ(์˜ˆ. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž)์—๊ฒŒ ๋ฌธ์„œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ๊ณตํ•  ๊ฒƒ์ธ๊ฐ€?RESTful API ์„ค๊ณ„๋ฅผ ์œ„ํ•ด ๊ณ ๋ คํ•  ์ ์€ ๋ฌด์—‡์ธ๊ฐ€?์—”ํ‹ฐํ‹ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?ํ™•์žฅ์„ฑ์€ ์–ด๋””๊นŒ์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š”.. 2025. 2. 12.
MSA | ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค (feat. Resilience4j) โ‡๏ธ ์ถ”๊ฐ€ ์ง€์‹ : ์„œํ‚ท๋ธŒ๋ ˆ์ด์ปค(Circuit Breaker) ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€?๋”๋ณด๊ธฐ์œ ๋ž˜ :   ์ „๊ธฐ ํšŒ๋กœ์—์„œ ๊ณผ์—ด๋œ ํšŒ๋กœ๋ฅผ ์ฐจ๋‹จํ•˜๋Š” ์žฅ์น˜ (a.k.a. ๋‘๊บผ๋น„์ง‘)์“ฐ์ž„ :  ์ฃผ์‹ ์‹œ์žฅ - ์ฃผ๊ฐ€๊ฐ€ ๊ฐ‘์ž๊ธฐ ๊ธ‰๋ฝํ•  ๋•Œ, ์ฃผ์‹๋งค๋งค ์ผ์‹œ ์ •์ง€ํ•˜๋Š” ์ œ๋„  ์†Œํ”„ํŠธ์›จ์–ด - ์žฅ์• ์ „ํŒŒ ์ฐจ๋‹จ์„ ๋ชฉ์ ์œผ๋กœ ์‹œ์Šคํ…œ ๊ฐ„ ์—ฐ๋™์„ ์ฐจ๋‹จํ•˜๋Š” ๊ธฐ์ˆ ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ๋ผ๋ฆฌ ์—ฐ๋™ํ•  ๋•Œ, ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ ์„œ๋น„์Šค๋กœ์˜ ์š”์ฒญ์„ ์ผ์‹œ์ ์œผ๋กœ ์ฐจ๋‹จํ•˜์—ฌ, ์žฅ์• ์ „ํŒŒ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š”๊ธฐ์ˆ ๋ชฉ์  : ์‹œ์Šคํ…œ์˜ ์ „์ฒด์ ์ธ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.๊ธฐ๋Šฅ :์‹œ์Šคํ…œ ์—ฐ๋™ ์‹œ, ํ˜ธ์ถœ ์‹คํŒจ ๊ฐ์ง€์ดํ›„ ํšŒ๋ณต์‹œ, ์ž๋™์œผ๋กœ ์‹œ์Šคํ…œ ์—ฐ๋™ 1. ํด๋กœ์ฆˆ๋“œ (CLOSED)์„œ๋น„์Šค๊ฐ€ ์ •์ƒ ํ˜ธ์ถœ/์‘๋‹ต ๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ2. ์˜คํ”ˆ (OPEN)๋ฌธ์ œ ๋ฐœ์ƒ์ด ๊ฐ์ง€๋œ ์ƒํƒœ3. ํ•˜ํ”„-์˜คํ”ˆ (HALF_OPEN)์„œ๋น„์Šค๊ฐ€ ์˜คํ”ˆ ์ƒ.. 2025. 2. 11.