์ „์ฒด ๊ธ€

AWS

[AWS] AWS IoT ๋””๋ฐ”์ด์Šค ๋“ฑ๋ก ์ ˆ์ฐจ ์ฝ”๋“œ๋กœ ์•Œ์•„๋ณด๊ธฐ

๋””๋ฐ”์ด์Šค ๋“ฑ๋ก ์ˆœ์„œ์ธ์ฆ์„œ ์ƒ์„ฑDB์— ์ธ์ฆ์„œ ์ €์žฅ์ธ์ฆ์„œ์™€ ์ •์ฑ… ์—ฐ๊ฒฐthing ์ƒ์„ฑthing์— ์ธ์ฆ์„œ ๋ฐ ์ •์ฑ… ์—ฐ๊ฒฐ device shadow ๋“ฑ๋กDB์— ๋””๋ฐ”์ด์Šค ์ €์žฅ ๐Ÿ‘‰ ์ด ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ๋””๋ฐ”์ด์Šค๊ฐ€ AWS์™€ DB ๋ชจ๋‘์— ์ €์žฅ๋˜๋„๋ก ํ•˜์˜€๋‹ค.    1. ์ธ์ฆ์„œ ์ƒ์„ฑ ๋ฐ DB์— ์ธ์ฆ์„œ ์ €์žฅimport software.amazon.awssdk.services.iot.IotAsyncClient;import software.amazon.awssdk.services.iot.model.*;public Mono createCertificate() { // ์ธ์ฆ์„œ ํ™œ์„ฑํ™”์‹œํ‚ค๊ธฐ CreateKeysAndCertificateRequest request = CreateKeysAndCertificateRequest.build..

AWS

[AWS] AWS SDK๋ฅผ ํ™œ์šฉํ•ด AWS IoT ๋””๋ฐ”์ด์Šค ๋“ฑ๋กํ•˜๊ธฐ

๋””๋ฐ”์ด์Šค๋ฅผ ๋“ฑ๋กํ•˜๊ธฐ ์ „์— ํ•ด์•ผํ•  ์ผ์ด ์žˆ๋‹ค. ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•ด์„œ ํ•ด๋‹น ๋””๋ฐ”์ด์Šค์— ๋“ฑ๋กํ•ด๋‹น ์ธ์ฆ์„œ์— ์ •์ฑ… ์—ฐ๊ฒฐ ์ด ๊ณผ์ •์„ ๋๋‚ด๊ณ  ๋””๋ฐ”์ด์Šค๋ฅผ ๋“ฑ๋กํ•˜๊ณ ์ž ํ•œ๋‹ค.  ์ธ์ฆ์„œ๋ž‘ ์ •์ฑ…์ด ๋ญ”๋ฐ ์ธ์ฆ์„œ์™€ ์ •์ฑ…์— ๊ด€๋ จํ•ด์„œ ์ด์ „ ๊ธ€์— ๊ธฐ๋กํ–ˆ๋‹ค. ์‚ฌ์‹ค ์ด ๋‘˜์— ๋Œ€ํ•ด ๊นŠ๊ฒŒ ์•Œ์ง€๋Š” ๋ชปํ•˜์ง€๋งŒ.. ๊ฐ„๋‹จํžˆ ์š”์•ฝํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๐Ÿ”ถ ์ธ์ฆ์„œ๋””๋ฐ”์ด์Šค๋ฅผ ์ธ์ฆํ•˜๊ณ  AWS IoT Core์™€ ์•ˆ์ „ํ•˜๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ • (๋””๋ฐ”์ด์Šค ์‹ ์› ํ™•์ธ)์ˆ˜๋งŽ์€ ๋””๋ฐ”์ด์Šค๊ฐ€ ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋˜๋ฏ€๋กœ ์ธ์ฆ์„œ๋ฅผ ํ†ตํ•ด ๋””๋ฐ”์ด์Šค ์ธ์ฆํ•˜๊ณ , ํ†ต์‹  ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธ ๐Ÿ”ถ ์ •์ฑ…์ธ์ฆ์„œ๋ฅผ ๊ฐ€์ง„ ๋””๋ฐ”์ด์Šค๊ฐ€ ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ถŒํ•œ ์ •์˜MQTT ๋ฉ”์‹œ์ง€ ๊ฒŒ์‹œ ๋ฐ ๊ตฌ๋…, HTTP ์š”์ฒญ ๋“ฑ ๋””๋ฐ”์ด์Šค๊ฐ€ ํ—ˆ์šฉ๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ œํ•œ{ "Version": "2012-10-..

AWS

[AWS] AWS IoT Core ์ด๊ฒƒ์ €๊ฒƒ

๋””๋ฐ”์ด์Šค(์—์–ด์ปจ, ๊ณต๊ธฐ์ฒญ์ •๊ธฐ ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฐ€์ „๊ธฐ๊ธฐ)์— ์ธ์ฆ์„œ์™€ ์ •์ฑ… ๋“ฑ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ํ•ด์ œํ•˜๋Š” ๊ณผ์ •์„ AWS IoT ์ฝ˜์†”์—์„œ ์ง์ ‘ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ AWS sdk๋ฅผ ํ™œ์šฉํ•ด java ์ฝ”๋“œ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ์ž‘์—…์„ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค.  AWS IoT API reference๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉฐ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด์ง€๋งŒ, ๊ทธ ์ „์— AWS IoT Core์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์šฉ์–ด์™€ ์ž‘๋™ ๋ฐฉ์‹์„ ์–ด๋Š ์ •๋„ ํŒŒ์•…ํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์˜๋ฏธ์žˆ์„ ๊ฒƒ์œผ๋กœ ๋ณด์•„ ๋ชจ๋ฅด๋Š” ํ˜น์€ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฐœ๋…๋“ค์„ ์ •๋ฆฌํ•˜๊ฒ ๋‹ค ! ๐Ÿ˜€ AWS IoT Core์˜ ๊ธฐ๋ณธ์ ์ธ ๋‚ด์šฉ์€ ๊ทธ ์ „์— ๊ธฐ๋กํ•œ ๊ฒƒ์ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜๋ฉด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฐœ๋… ์œ„์ฃผ๋กœ ์ •๋ฆฌํ•  ๊ฒƒ์ด๋‹ค.   ๋””๋ฐ”์ด์Šค ๊ด€๋ฆฌAWS IoT๋Š” ์‚ฌ๋ฌผ(Thing)์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.AWS IoT์— ๋“ค์–ด๊ฐ€๋ฉด ์ขŒ..

Java/๐Ÿ“• Effective Java

[๐Ÿ“• Effective Java] ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™ ไธญ

61. ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…๋ณด๋‹ค๋Š” ๊ธฐ๋ณธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๊ธฐint, double, boolean ๐Ÿ‘‰ ๊ธฐ๋ณธํƒ€์ž…String, List ๐Ÿ‘‰ ์ฐธ์กฐํƒ€์ž…Integer, Double, Boolean ๐Ÿ‘‰ ๊ฐ๊ฐ์˜ ๊ธฐ๋ณธ ํƒ€์ž…์— ๋Œ€์‘ํ•˜๋Š” ์ฐธ์กฐํƒ€์ž… ๐Ÿ‘‰ ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…  โœณ๏ธ ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์˜ ์ฐจ์ด์  ๊ธฐ๋ณธ ํƒ€์ž…์€ ๊ฐ’๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋‚˜, ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์€ ๊ฐ’์— ๋”ํ•ด ์‹๋ณ„์„ฑ์ด๋ž€ ์†์„ฑ์„ ๊ฐ€์ง ๐Ÿ‘‰ ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๋‘ ์ธ์Šคํ„ด์Šค๋Š” ๊ฐ’์ด ๊ฐ™์•„๋„ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค๊ณ  ์‹๋ณ„๋  ์ˆ˜ ์žˆ์Œ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๊ฐ’์€ ์–ธ์ œ๋‚˜ ์œ ํšจํ•˜๋‚˜, ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์€ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฐ’์ธ null์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ๊ธฐ๋ณธ ํƒ€์ž…์ด ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž… ๋ณด๋‹ค ์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฉด์—์„œ ๋” ํšจ์œจ์  โœณ๏ธ ์ฃผ์˜ํ•ด์•ผํ•  ์  Comparator naturalOrder = (i, j) ..

Java/๐Ÿ“• Effective Java

[๐Ÿ“• Effective Java] ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™ ไธŠ

57. ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ์ง€์—ญ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œ๋กœ ์ค„์—ฌ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ณ  ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์„ ๋‚ฎ์ถ”์ž๐Ÿ‘‰ ๊ทธ ๋ฐฉ๋ฒ•์€ "๊ฐ€์žฅ ์ฒ˜์Œ ์“ฐ์ผ ๋•Œ ์„ ์–ธํ•˜๊ธฐ" & ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ํ•œ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์— ์ง‘์ค‘ํ•˜๊ธฐ โœณ๏ธ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์„ ์–ธํ•ด๋‘๋ฉด...? ๋ฏธ๋ฆฌ ์„ ์–ธํ•ด๋‘๋ฉด ์ฝ”๋“œ๊ฐ€ ์–ด์ˆ˜์„ ํ•ด์ ธ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง ๋ณ€์ˆ˜๋ฅผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์ ์—๋Š” ํƒ€์ž…๊ณผ ์ดˆ๊นƒ๊ฐ’์ด ๊ธฐ์–ต๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ ๐ŸŒŸ ๊ฑฐ์˜ ๋ชจ๋“  ์ง€์—ญ๋ณ€์ˆ˜๋Š” ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•จ๋งŒ์•ฝ, ์ดˆ๊ธฐํ™”์— ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ถฉ๋ถ„ํ•ด์งˆ ๋•Œ๊นŒ์ง€ ์„ ์–ธ์„ ๋ฏธ๋ค„์•ผ ํ•จ๋‹ค๋งŒ try-catch ๋ฌธ์—์„œ๋Š” ์˜ˆ์™ธ์ธ๋ฐ, ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ํ‘œํ˜„์‹์—์„œ ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋ฉด try ๋ธ”๋ก ์•ˆ์—์„œ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•จ ๐Ÿ‘‰ ๊ทธ๋ ‡์ง€ ์•Š์„ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ธ”๋ก์„ ๋„˜์–ด ๋ฉ”์„œ๋“œ์—๊นŒ์ง€ ์ „..

CS/๐Ÿ“• ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ

[๐Ÿ“• System Design Interview] URL ๋‹จ์ถ•๊ธฐ ์„ค๊ณ„

1. ๋ฌธ์ œ ์ดํ•ด ๋ฐ ์„ค๊ณ„ ๋ฒ”์œ„ ํ™•์ •URL ๋‹จ์ถ• ๐Ÿ‘‰ ์ฃผ์–ด์ง„ ๊ธด URL์„ ์งง๊ฒŒ ์ค„์ด๊ธฐURL redirection ๐Ÿ‘‰ ์ถ•์•ฝ๋œ URL๋กœ HTTP ์š”์ฒญ์ด ์˜ค๋ฉด ์›๋ž˜ URL๋กœ ์•ˆ๋‚ด๋†’์€ ๊ฐ€์šฉ์„ฑ๊ณผ ๊ทœ๋ชจ ํ™•์žฅ์„ฑ, ์žฅ์•  ๊ฐ๋‚ด ์š”๊ตฌ๋จ์“ฐ๊ธฐ ์—ฐ์‚ฐ : ๋งค์ผ 1์–ต ๊ฐœ์˜ ๋‹จ์ถ• URL ์ƒ์„ฑ์ดˆ๋‹น ์ฝ๊ธฐ ์—ฐ์‚ฐ : 1์–ต/24/3600 = 1160์ฝ๊ธฐ ์—ฐ์‚ฐ : ์ฝ๊ธฐ ์—ฐ์‚ฐ๊ณผ ์“ฐ๊ธฐ ์—ฐ์‚ฐ์˜ ๋น„์œจ = 10 : 1 ๐Ÿ‘‰ 11,600ํšŒ10๋…„๊ฐ„ ์šด์˜ํ•œ๋‹ค๋ฉด 1์–ต x 365 x 10 = 3650์–ต ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ ๋ณด๊ด€์ถ•์•ฝ ์ „ URL์˜ ํ‰๊ท  ๊ธธ์ด = 10010๋…„ ๋™์•ˆ ํ•„์š”ํ•œ ์ €์žฅ ์šฉ๋Ÿ‰ = 3650์–ต x 100๋ฐ”์ดํŠธ = 36.5TB    2. ๊ฐœ๋žต์  ์„ค๊ณ„์•ˆ ์ œ์‹œ ๋ฐ ๋™์˜ ๊ตฌํ•˜๊ธฐโœณ๏ธ API ์—”๋“œํฌ์ธํŠธ URL ๋‹จ์ถ•์šฉ ์—”๋“œํฌ์ธํŠธ : ์ƒˆ ๋‹จ์ถ• URL์„ ์ƒ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ..

Java/๐Ÿ“• Effective Java

[๐Ÿ“•Effective Java] ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์–ด๋…ธํ…Œ์ด์…˜ ไธ‹

38. ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์—ด๊ฑฐ ํƒ€์ž…์ด ํ•„์š”ํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉํ•˜๊ธฐ์—ด๊ฑฐ ํƒ€์ž… ์ž์ฒด๋Š” ํ™•์žฅํ•  ์ˆ˜ ์—†์ง€๋งŒ, ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ธฐ๋ณธ ์—ด๊ฑฐ ํƒ€์ž…์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์Œ  public interface Operation { double apply(double x, double y);}public enum BasicOperation implements Operation { PLUS("+") { public double apply(double x, double y) { return x + y; } }, MINUS("-") { public double apply(double x, double y) { return x - y; } }, TIMES("*"..

CS/๐Ÿ“• ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ

[๐Ÿ“• System Design Interview] ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์œ ์ผ ID ์ƒ์„ฑ๊ธฐ ์„ค๊ณ„

auto_increment ์†์„ฑ์ด ์„ค์ •๋œ RDB์˜ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ...?๐Ÿ‘‰ ๋ถ„์‚ฐํ™˜๊ฒฝ์—์„œ๋Š” ํ†ตํ•˜์ง€ ์•Š๊ณ  DB ์„œ๋ฒ„ ํ•œ ๋Œ€๋กœ๋Š” ์š”๊ตฌ ๊ฐ๋‹น X, ์—ฌ๋Ÿฌ DB ์„œ๋ฒ„๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ง€์—ฐ์‹œ๊ฐ„์„ ๋‚ฎ์ถ”๊ธฐ ํž˜๋“ฆ  ๋ฌธ์ œ ์ดํ•ด ๋ฐ ์„ค๊ณ„ ๋ฒ”์œ„ ํ™•์ • ID๋Š” ์œ ์ผ์ˆซ์ž๋กœ๋งŒ ๊ตฌ์„ฑ64 ๋น„ํŠธ๋กœ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’๋ฐœ๊ธ‰ ๋‚ ์งœ์— ๋”ฐ๋ผ ์ •๋ ฌ ๊ฐ€๋Šฅ์ดˆ๋‹น 10000๊ฐœ์˜ ID๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ   ๊ฐœ๋žต์  ์„ค๊ณ„์•ˆ ์ œ์‹œ ๋ฐ ๋™์˜ ๊ตฌํ•˜๊ธฐโœณ๏ธ ๋‹ค์ค‘ ๋งˆ์Šคํ„ฐ ๋ณต์ œ auto_increment ๊ธฐ๋Šฅ ํ™œ์šฉํ•˜์ง€๋งŒ ๋‹ค์Œ ID์˜ ๊ฐ’์„ ๊ตฌํ•  ๋•Œ 1๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ k๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ด(k๋Š” ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ DB ์„œ๋ฒ„ ์ˆ˜)๋‹จ์ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ๊ฑธ์ณ ๊ทœ๋ชจ๋ฅผ ๋Š˜๋ฆฌ๊ธฐ ์–ด๋ ค์›€ID์˜ ์œ ์ผ์„ฑ์€ ๋ณด์žฅ๋˜๋งŒ ๊ทธ ๊ฐ’์ด ์‹œ๊ฐ„ ํ๋ฆ„์— ๋งž์ถ”์–ด ์ปค์ง€๋„๋ก ๋ณด์žฅ X์„œ๋ฒ„๋ฅผ ..

soogoori
๐Ÿƒ๐Ÿป‍โ™€๏ธ์Šคํ…๋ฐ”์ด์Šคํ…