๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก์ „์ฒด ๊ธ€ (142)

Tech Log ๐Ÿ› ๏ธ

๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ - ๋„๋ฉ”์ธ ์„œ๋น„์Šค

๋„๋ฉ”์ธ ์„œ๋น„์Šค ์—ฌ๋Ÿฌ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์ฑ…์ž„์ด ์• ๋งคํ•  ๋•Œ ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋„๋ฉ”์ธ ์„œ๋น„๋Š” ๋‹ค์Œ ์ƒํ™ฉ์— ์ด์šฉ๋œ๋‹ค. 1. ๊ณ„์‚ฐ๋กœ์ง 2. ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์—ฐ๋™์ด ํ•„์š”ํ•œ ๋กœ์ง ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋Š” ์ƒํƒœ ์—†์ด ๋กœ์ง๋งŒ ๊ตฌํ˜„ํ•œ๋‹ค. ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋ฅผ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๊ฐ์ฒด์— ์ฃผ์ž…ํ•˜๋ฉด ์•ˆ๋œ๋‹ค! ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์—ฐ๋™๊ณผ ๋„๋ฉ”์ธ ์„œ๋น„์Šค public interface API { ... } ๋„๋ฉ”์ธ ๋กœ์ง ๊ด€์ ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค. ์‘์šฉ ์„œ๋น„์Šค๋Š” ์ด ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•ด์„œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋„๋ฉ”์ธ ์„œ๋น„์Šค์˜ ๋กœ์ง์ด ๊ณ ์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด , ๋„๋ฉ”์ธ ์„œ๋น„์Šค ์ž์ฒด๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋„๋ฉ”์ธ ์„œ๋น„์Šค์˜ ๊ตฌํ˜„์ด ํŠน์ • ๊ธฐ์ˆ ์— ์˜์กดํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ API๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ถ”์ƒํ™”ํ•ด์•ผํ•œ๋‹ค.

๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ - ํ‘œํ˜„ ์˜์—ญ๊ณผ ์‘์šฉ ์˜์—ญ

ํ‘œํ˜„ ์˜์—ญ๊ณผ ์‘์šฉ ์˜์—ญ ์‘์šฉ ์˜์—ญ๊ณผ ํ‘œํ˜„ ์˜์—ญ์€ ์‚ฌ์šฉ์ž์™€ ๋„๋ฉ”์ธ์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋งค๊ฐœ์ฒด ์—ญํ• ์ด๋‹ค. ํ‘œํ˜„ ์˜์—ญ์€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ํ•ด์„ํ•˜๊ณ  ๊ทธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์‘์šฉ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์‘์šฉ ์˜์—ญ์€ ์‹ค์ œ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋‘ ์˜์—ญ์€ ์„œ๋กœ ์š”๊ตฌํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ํ˜•์‹์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ์„ ๋ณ€ํ™˜ํ•ด์•ผํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ˜ธ์ž‘์šฉ์€ ํ‘œํ˜„ ์˜์—ญ์ด ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์‘์šฉ ์„œ๋น„์Šค๋Š” ํ‘œํ˜„ ์˜์—ญ์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค. ์‘์šฉ ์„œ๋น„์Šค์˜ ์—ญํ•  ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ์—์„œ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•œ๋‹ค. public Result func(Req req){ // ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ์—์„œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ๊ตฌํ•จ Agg agg = AggRepository.finById(req.getId()); // ์• ๊ทธ๊ฑฐํŠธ์˜ ๋„๋ฉ”์ธ ๊ธฐ๋Šฅ ์‹คํ–‰ ad..

๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ - ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๊ฐ์ฒด ๋ชจ๋ธ์ด ๋ณต์žกํ•ด์ง€๋ฉด ๊ฐœ๋ณ„ ๊ตฌ์„ฑ์š”์†Œ ์œ„์ฃผ๋กœ ๋ชจ๋ธ์„ ์ดํ•ดํ•˜๊ฒŒ ๋˜๊ณ  ์ „๋ฐ˜์ ์ธ ๊ตฌ์กฐ๋‚˜ ํฐ ์ˆ˜์ค€์—์„œ ๋„๋ฉ”์ธ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. -> ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ๋ชจ๋ธ์„ ์กฐ๋งํ•ด์•ผํ•˜๋Š”๋ฐ , ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์• ๊ทธ๋ฆฌ๋ฆฌ๊ฑฐํŠธ๋Š” ๋ณต์žกํ•œ ๋„๋ฉ”์ธ์„ ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์— ์†ํ•œ ๊ฐ์ฒด๋Š” ์œ ์‚ฌํ•˜๊ฑฐ๋‚˜ ๋™์ผํ•œ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ฐ€์ง€๋ฉฐ ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ์ปคํŠธ์— ์†ํ•œ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ์ปคํŠธ์— ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๋ฃจํŠธ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ „์ฒด๋ฅผ ๊ด€๋ฆฌํ•  ์ฃผ์ฒด๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ์ด ์ฑ…์ž„์„ ์ง€๋Š” ๊ฒƒ์ด ๋ฃจํŠธ ์—”ํ‹ฐํ‹ฐ์ด๋‹ค. ex) Order -> (OrderLine) , (Orderer) , (Address) ํ•ต์‹ฌ ์—ญํ• ์€ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์˜ ์ผ๊ด€์„ฑ์ด ๊นจ์ง€์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ฃจํŠธ๋Š” ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๊ฐ€ ์ œ๊ณตํ•ด์•ผํ•  ๋„๋ฉ”์ธ์„ ๊ตฌํ˜„ํ•œ๋‹ค. ์• ๊ทธ..

๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ - ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”

๋„ค ๊ฐœ์˜ ์˜์—ญ ํ‘œํ˜„ ์˜์—ญ HTTP ์š”์ฒญ์„ ํ•„์š”๋กœ ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‘์šฉ ์˜์—ญ์— ์ „๋‹ฌํ•˜๊ณ  ๋‹ค์‹œ ์‘๋‹ต์„ HTTP ์‘๋‹ต์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ „์†ก ex) mvc ํ”„๋ ˆ์ž„์›Œํฌ ์‘์šฉ ์˜์—ญ(์„œ๋น„์Šค ๊ณ„์ธต) ๋„๋ฉ”์ธ ์˜์—ญ์˜ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. ๋กœ์ง์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋ณด๋‹จ ๋„๋ฉ”์ธ ๋ชจ๋ธ์— ๋กœ์ง ์ˆ˜ํ–‰์„ ์œ„ํž˜ ๋„๋ฉ”์ธ ์˜์—ญ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•˜๊ณ  ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌํ˜„ public cancelOrder(String orderId) { Order order = findOrderById(orderId); // ๋„๋ฉ”์ธ ๋ชจ๋ธ์— ์œ„์ž„ ... } ์ธํ”„๋ผ ์ŠคํŠธ๋Ÿญ์ณ ์˜์—ญ ๋…ผ๋ฆฌ์  ๊ฐœ๋… ๋ณด๋‹ค๋Š” ๊ตฌํ˜„ ๊ธฐ์ˆ ์„ ๋‹ค๋ฃฌ๋‹ค. ex) DB ,SMTP , ์นดํ”„์นด ๊ณ„์ธต ๊ตฌ์กฐ ์•„ํ‚คํ…์ฒ˜ ์•„ํ‚คํ…์ฒ˜๋Š” ๋ณดํ†ต ํ‘œํ˜„ -> ์‘์šฉ -> ๋„๋ฉ”์ธ -> ์ธํ”„๋ผ์Šค..

๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ - ๋„๋ฉ”์ธ ๋ชจ๋ธ ์‹œ์ž‘ํ•˜๊ธฐ

์š”๊ตฌ ์‚ฌํ•ญ ์š”๊ตฌ์‚ฌํ•ญ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฉด ์—‰๋šฑํ•œ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค. (Garbage in , Garbage out) -> ์ฝ”๋”ฉ์— ์•ž์„œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค ! ๋„๋ฉ”์ธ ๋ชจ๋ธ ํŠน์ • ๋„๋ฉ”์ธ์„ ๊ฐœ๋…์ ์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์„ ๋„๋ฉ”์ธ ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ด€๊ณ„์ž๋“ค์ด ๋™์ผํ•œ ๋ชจ์Šต์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ข…๋ฅ˜๋กœ ๋ชจ๋ธ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค. ex) ๊ฐ์ฒด , ์ƒํƒœ ๋‹ค์ด์–ด๊ทธ๋žจ, ๊ทธ๋ž˜ํ”„ ๋„๋ฉ”์ธ ๋ชจ๋ธ ํŒจํ„ด ๋„๋ฉ”์ธ ๊ณ„์ธต์€ ๋„๋ฉ”์ธ์˜ ํ•ต์‹ฌ ๊ทœ์น™์„ ๊ตฌํ˜„ํ•œ๋‹ค. ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” ์ฃผ๋ฌธ ์ƒํƒœ์— ๋”ฐ๋ผ ๋ฐฐ์†ก์ง€๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ๋„๋ฉ”์ธ ๋ชจ๋ธ ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„ public class Order { private OrderState state; private ShippingInfo inf..

์ค‘์ฒฉ ํด๋ž˜์Šค DTO ์‚ฌ์šฉ์‹œ swagger ์ธ์‹๋ฌธ์ œ

๊ฐœ์š” swagger ์ ์šฉ ํ›„ ์ผ๋ถ€ API์— ๋Œ€ํ•ด์„œ ๋ชจ๋‘ ๋˜‘๊ฐ™์€ Request Body๊ฐ€ ๋ณด์ด๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜์˜€๋‹ค. ์›์ธ ์šฐ๋ฆฌ๋Š” sealed interface ๋‚ด๋ถ€์— ์ค‘์ฒฉ ํด๋ž˜์Šค๋กœ dto๋ฅผ request ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋Š”๋ฐ, swagger์—์„œ ๋˜‘๊ฐ™์€ ์ด๋ฆ„์˜ record๋“ค์„ ๊ตฌ๋ถ„ํ•˜์ง€ ๋ชปํ•œ๊ฒŒ ์›์ธ์ด์—ˆ๋‹ค. ํ•ด๊ฒฐ ํ•ด๋‹น ๋ธ”๋กœ๊ทธ์—์„œ application.yml์— ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. swagger ์‚ฌ์šฉ์‹œ ํŒจํ‚ค์ง€๊ฐ€ ๋‹ค๋ฅธ ๋™์ผ ํด๋ž˜์Šค๋ฅผ ๊ตฌ๋ณ„ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ด์Šˆ swagger ์‚ฌ์šฉ์‹œ ํŒจํ‚ค์ง€๊ฐ€ ๋‹ค๋ฅธ ๋™์ผ ํด๋ž˜์Šค๋ฅผ ๊ตฌ๋ณ„ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ด์Šˆ ์—ฌ๋Ÿฌ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ํŽ˜์–ด๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ํด๋ž˜์Šค๋ช…์€ ๋™์ผํ•˜์ง€๋งŒ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•ด์„œ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ค‘๋ณต ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ์—„์—ฐํžˆ ๋‹ค๋ฅธ ํด๋ž˜์Šค์ธ๋ฐ ๋ช…์นญ์ด ..

ํ•„ํ„ฐ์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•˜๊ธฐ

๋ฌธ์ œ์ƒํ™ฉ JWT ํ† ํฐ ๊ฒ€์ฆ ์˜ค๋ฅ˜ ์‹œ ํ•„ํ„ฐ์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๊ฐ€ ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ์— ์žกํžˆ์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ์›์ธ ์ „์—ญ ๋ฒ”์œ„์˜ ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ๋Š” @RestControllerAdvice ์–ด๋…ธํ…Œ์ด์…˜๋ฅผ ๋ถ™์—ฌ์„œ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์€ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋งŒ ์ฒ˜๋ฆฌํ•  ๋ฟ ํ•„ํ„ฐ ๋‹จ์˜ ์˜ˆ์™ธ๋Š” ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•„ํ„ฐ์—์„œ ๋ฐœ์ƒํ•  ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค„ ํ•„ํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค ! ๋”ฐ๋ผ์„œ ๋งŒ์ผ JWT ๊ฒ€์ฆ์ด ์‹คํŒจํ–ˆ์„ ์‹œ์— ์—๋Ÿฌ ์ฝ”๋“œ์™€ ๋ฉ”์‹œ์ง€๋ฅผ Response๋กœ ์‘๋‹ตํ•ด์ค„ ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. ๊ทธ ๊ฒฐ๊ณผ JWT ํ•„ํ„ฐ์—์„œ์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์˜€๋‹ค.

์ผ„ํŠธ๋ฐฑ ๊ตฌํ˜„ ํŒจํ„ด 9์žฅ - ์ปฌ๋ ‰์…˜

์ปฌ๋ ‰์…˜ ์ปฌ๋ ‰์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์—ฌ๋Ÿฌ ๊ฐ์ฒด์˜ ๋ฌถ์Œ์— ๋Œ€ํ•ด ์ œ๊ฐ๊ฐ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ์ฃผ๋กœ ์„ฑ๋Šฅ์— ๊ด€๋ จ๋œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์˜๋„๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ์ปฌ๋ ‰์…˜์ด ํ‘œํ˜„ํ•˜๋Š” 3๊ฐ€์ง€ ๊ฐœ๋… 1. ํฌ๊ธฐ - ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ์ƒ์„ฑ ์‹œ ๊ณ ์ •๋˜์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ์ปฌ๋ ‰์…˜์€ ์ค‘๊ฐ„์— ํฌ๊ธฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 2. ์›์†Œ ๊ฐ„ ์ˆœ์„œ - ์›์†Œ์˜ ์ˆœ์„œ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ˆœ์„œ๋ฅผ ๋ณด์ „ํ•˜๋Š” ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. 3. ๋…์ž์„ฑ - ์ผ๋ถ€ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ์–ด๋–ค ์›์†Œ๊ฐ€ ์ปฌ๋ ‰์…˜์— ์†ํ•ด์žˆ๋Š” ์ง€ ํ˜น์€ ๋ช‡๋ฒˆ ๋‚˜ํƒ€๋‚ฌ๋Š”์ง€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค ๋ฐฐ์—ด ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ์œ ์—ฐ์„ฑ ๋ฌธ์ œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค. Iterable ์›์†Œ๋ฅผ ์ฃผ๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋ง‰์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์›์†Œ๊ฐ€ ์ง€์›Œ์งˆ ์œ„ํ—˜์ด ์žˆ๋‹ค. Collection Iterable์„ ์ƒ์†ํ•˜๋ฉฐ ์—ฌ๋Ÿฌ ๋ฉ”์†Œ..

์ผ„ํŠธ๋ฐฑ ๊ตฌํ˜„ ํŒจํ„ด 8์žฅ - ๋ฉ”์†Œ๋“œ

์กฐํ•ฉ ๋ฉ”์†Œ๋“œ ์ถ”์ƒํ™” ์ˆ˜์ค€์ด ๋น„์Šทํ•œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๋กœ ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋ผ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋งŒ ๋ชจ์•„๋†“๊ณ  ๊ด€๋ จ์„ฑ์ด ๋–จ์–ด์ง€๋Š” ์ฝ”๋“œ๋Š” ๋ถ„๋ฆฌ! ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ๋Š” ์ถ”์ธก์ด ์•„๋‹Œ ์‚ฌ์‹ค์— ๊ทผ๊ฑฐํ•˜๋ผ -> ์ผ๋‹จ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ตฌ์„ฑ ๋ฐฉ์‹ ๊ฒฐ์ • ์˜๋„ ์ œ์‹œํ˜• ์ด๋ฆ„ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์„ ํ†ตํ•ด์„œ ์˜๋„๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ๊ทธ ์™ธ ์ •๋ณด๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ•˜๋ผ Customer.linearSearch(String id) // x Customer.find(String id) // o ๋ฉ”์†Œ๋“œ ๊ฐ€์‹œ์„ฑ ๋ฉ”์†Œ๋“œ๋ฅผ ์ ๊ฒŒ ๋…ธ์ถœ์‹œํ‚ค๋ฉด ์œ ์—ฐ์„ฑ์—์„œ ์ด๋“์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ ๊ฐ€์‹œ์„ฑ์„ ์„ ํƒํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผํ•  ์‚ฌํ•ญ ๋‘๊ฐ€์ง€ 1. ๋ฏธ๋ž˜์˜ ์œ ์—ฐ์„ฑ 2. ๊ฐ์ฒด ์‚ฌ์šฉ ๋น„์šฉ ๋จผ์ € ์ œํ•œ์ ์ธ ๊ฐ€์‹œ์„ฑ์„ ์„ ํƒํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์ฐจ์ธฐ ํ™•์žฅ์‹œํ‚ค์ž ! ์˜ค๋ฒ„๋กœ๋“œ ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋กœ๋“œ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…๋งŒ ๋‹ค๋ฅผ..

MQTT ํ”„๋กœํ† ์ฝœ์ด๋ž€?

MQTT ๋ž€? MQTT ํ”„๋กœํ† ์ฝœ์€ ๊ธฐ๊ณ„ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ํ†ต์‹  ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. REST ํ†ต์‹  ๋ฐฉ์‹๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์„œ๋ฒ„ ๊ฐ„ ์ง์ ‘ ํ†ต์‹ ์ด ์•„๋‹Œ ์ค‘๊ฐ„์— ์ค‘๊ณ„ ์„œ๋ฒ„๋ฅผ ๋‘๊ณ  ๊ฒŒ์‹œ-๊ตฌ๋… ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ œํ•œ๋œ ๋ฆฌ์†Œ์Šค๋กœ ํ†ต์‹ ์„ ํ•ด์•ผํ•˜๋Š” IOT์˜ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด, ๊ตฌํ˜„์ด ์‰ฝ๊ณ  ํšจ์œจ์ ์ธ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ MQTT ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. MQTT์˜ ํŠน์ง• ํ™•์žฅ์„ฑ MQTT๋Š” ์ ์€ ์ „๋ ฅ๊ณผ ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋กœ ์—ฌ๋Ÿฌ ๋””๋ฐ”์ด์Šค์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ๋””๋ฐ”์ด์Šค๋Š” ์ œํ•œ์—†์ด ์ •๋ณด(ํ† ํ”ฝ)๋ฅผ ๊ตฌ๋…ํ•˜๊ฑฐ๋‚˜ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ†ต์‹  ๊ฐ€๋Šฅํ•œ ๋””๋ฐ”์ด์Šค๋ฅผ ๋Š˜๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹จ์ˆœํžˆ ๋””๋ฐ”์ด์Šค๊ฐ€ ํ•ด๋‹น ํ† ํ”ฝ์„ ๊ตฌ๋…ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์‹ ๋ขฐ์„ฑ ๊ธฐ์กด ๋ฌด์„  ํ†ต์‹ ์€ ์ •๋ณด์˜ ์†์‹ค์ด ์žˆ์—ˆ์ง€๋งŒ MQTT๋Š” ๋ธŒ๋กœ์ปค๊ฐ€ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๊ด€ , ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”..