- Innter Class
- Local Class
- Anonymous Class
- Lamda Expression
2016년 8월 28일 일요일
2016년 8월 20일 토요일
[AWS]Interactive Tutorial - AWS IoT
AWS IoT 는 연결된 장치들이 -- 자동차, 전구, 감지기 연결망 등 -- 쉽고 안전하게 클라우드 애플리케이션과 다른 장치과 상호작용할 수 있도록 하는 관리되는 클라우드 서비스이다.
이 대화형의 튜토리얼은 다음 서비스 특성들을 보여줌으로써 빠르게 시작하는데 도움을 줄 것이다:
- 사물을 Device Gateway에 연결하기
- Rules Engine으로 데이터를 처리하고 작업하기
- Device Shadows를 가지고 장치 상태를 읽고 설정하기
이 대화형의 튜토리얼로 AWS IoT가 어떻게 동작하는지 배우기
사물을 Device Gateway에 연결하기
AWS IoT Device Gateway는 장치들이 안전하고 효율적으로 AWS IoT와 통신할 수 있게 해준다. 여기를 클릭해서 AWS IoT에 의해 지원되는 프로토콜에 대해 더 많은 것을 배워라.
사물들은 Device Gateway를 통해 각각 통신할 수 있다. 심지어 그들이 다른 프로토콜을 사용하고 있더라도
왼쪽 예제는 두 가지를 보여주고 있다 -- 연결된 전구와 제어 장치 -- 두 가지 모두 Device Gateway에 연결되어 있다. 제어 장치는 Device Gateway로 명령을 발행할 수 잇다. 그리고 전구는 관련있는 명령을 구독 신청하고 들을 수 있다.
Gateway를 통해 어떻게 명령이 전달되는지 보기 위해 제어장치로부터 명령을 발행해 보아라.
R, G, B 버튼을 클릭하면 전구의 색상이 변경된다.
Rules Engine을 가지고 데이터를 처리하고 작업하기
rules engine은 AWS IoT로 들어오는 발행된 메시지들을 평가하고 그것을 변형해서 다른 사물이나 당신이 정의한 business rules에 기초한 클라우드로 전달한다.
rules engine에 대해 더 많이 알려면 여기를 클릭해라.
왼쪽의 예제는 다음의 rule을 묘사하고 있다:
- 제어 장치로부터 발행된 명령을 평가한다.
- 명령이 "B"인지 판단한다.
- 만약 명령이 "B"이면, rule은 메시지를 "G"로 변경하고 "G"를 전구에 전달한다.
rule engine이 메시지를 어떻게 처리하는지 관찰하기 위해 제어장치로 부터 "R""G""B" 명령을 보내 보아라.
Rules Engine을 가지고 데이터를 처리하고 작업하기
rules engine은 또한 메시지를 AWS Lambda functions 이나 DynamoDB table 과 같은 클라우드 endpoints 로 전달할 수도 있다. 여기를 클릭해서 rules를 통해 실행할 수 있는 더 많은 액션들에 대해 알아보아라.
왼쪽의 예제는 두번째 rule의 추가를 보여준다:
- 제어장치로부터 발행된 명령을 평가한다.
- 명령이 "R"인지 판단한다.
- 만약 명령이 "R"이면 명령의 복사본을 세개의 endpoints로 전달한다 -- DynomoDB database table, Lambda compute function, 그리고 모바일 장치로 알림을 푸시하기 위한 Simple Notification Service(SNS)
Rules engine이 메시지를 어떻게 처리하는지 관찰하기 위해 "R""G""B" 명령을 제어장치로부터 보내 보아라. 또한 각 rule을 활성화하거나 비활성화해 보아라.
Device Shadows를 가지고 장치 상태를 읽고 설정하기
왼쪽의 예제는 클라우드 상에 가상의 대상물을 가진 물리적인 전구를 표시하도록 생성된 사물을 보여준다.
물리 전구를 꺼 보아라. 당신은 Device Shadow가 물리 전구의 색상을 기억하고 있다는 것을 알게될 것이다.
다음으로 물리 전구가 여전이 꺼진 상태에서 제어장치로부터 새로운 "R""G""B" 명령을 보내어 보아라.
shadow는 전구의 바라는 미래 상태를 유지할 것이다. 당신이 물리전구를 다시 켰을 때 AWS IoT는 물리 전구에게 그것의 shadow와 매치되도록 명령할 것이다.
Shadow 를 가지고 장치 상태를 읽고 셋팅하기
AWS IoT 는 당신의 연결된 사물과 상호동작하는 companion application의 생성을 쉽게 한다.
왼쪽의 예제는 당신의 전구 색상을 반영하는 모바일 애플리케이션을 보여준다. 모바일 앱은 결코 전구와 직접 통신하지 않는다. 정확히 말해 모바일 앱은 REST API를 사용해서 전구의 Device Shadow의 상태를 읽고 셋팅한다.
모바일 앱을 통해 전구와 상호작용해 보아라.
시작하기
이 대화형식의 튜토리얼은 AWS IoT의 다음 특성들에 대해 설명한다:
- 사물을 Device Gateway에 연결하기
- Rules Engine으로 데이터를 처리하고 작업하기
- Device Shadows를 가지고 장치 상태를 읽고 설정하기
이제 당신은 자신만의 사물을 생성하여 시작할 수 있다.
Getting started guide를 읽거나 이 튜토리얼을 반복해서 더 많은 것을 배울 수 있다.
[퍼온글]초보 개발자가 꼭 알아 두어야 할 다섯 가지 기술들
초보 개발자가 꼭 알아 두어야 할 다섯 가지 기술들
오늘은 아무도 가르쳐 주지 않는, 그리고 이제 와서 누군가 에게 물어보기도 뻘쭘한 초보 개발자를 탈출하기 위해 필요한 테크닉에 대해 이야기 해 보고자 한다.
초보 개발자가 고급 개발자가 되어가는 과정을 한마디로 정의하자면 "좀 더 게을러지기 위한 강렬하고 적극적인 의지의 표현"이 되겠다. "생산성"이니 "효율성", "정확성"같은 것 들은 프로그래머에게 있어서 부수적으로 얻어지는 것일 뿐 목적이 될 수 없다. 오로지 끊임없이 편하고 게을러지기 위한 노력만이 있을 뿐이다.
이러한 이유로 필자는 마우스(터치패드나 트랙패드를 포함) 안 쓰기를 초보 프로그래머에게 있어서 익혀야 할 기술의 첫번째로 이름을 올렸다.
결론부터 말하자면 마우스는 프로그래머의 적이다. 마우스는 인체공학적인 면에 있어서도 손가락만 움직이면 되는 키보드와는 그 편의성과 정확성,속도면 에서 엄청나게 차이가 날 뿐만 아니라, 심리학에서 말해지는 몰입(flow) 상태를 방해 한다는 점에서도 프로그래머와는 궁합이 좋지 않다.
그럼에도 불구하고 마우스를 사용하게 되는 것은 순전히 직관에 끌리는 사람의 본능 때문 이다. 오늘날의 컴퓨팅 환경은 직관, 즉 시각과 청각을 최대한 활용하도록 설계되고 있다. 그러니까 마우스를 사용하지 않는 다는 것은 자연스러운 본능과의 싸움인 것이다. 하지만 걱정하지 말라, 결국 컴퓨팅 환경을 만들어내고 있는 것 들 또한 프로그래머 이며, 이들은 자신이 만든 프로그램에 키보드 사용자를 배려한 여러 장치를 해 놓는다. 단축키와 매크로 같은 것들 말이다.
일단 오늘부터라도 작업에 주로 사용하는 어플리케이션의 주요 기능들을 반드시 단축키를 사용해서 진행하는 습관을 들여보자. IDE뿐만 아니라 워드나 오피스, 그리고 윈도우와 같은 OS 관련 단축키도 포함해서 말이다. 상급 개발자라고 하는것은 무언가 대단한 이치를 깨달은 사람이 아닌 별거 아닌 작은 습관들을 몸에 익힌 사람들일 뿐이다.
CLI는 쉘 자체로도 다양한 작업이 가능하지만 AWK나 GREP와 같은 툴을 함께 사용한다면 엄청난 시너지 효과를 낼 수 있다는 사실도 잊지 말자. 윈도우의 경우 powershell을 사용한다면 DOS스타일의 bat보다 훨씬 다양한 작업이 가능하지만, cygwin이나 unix utils를 이용한 유닉스 스타일의 쉘 작업을 익혀 둔다면, 윈도우 뿐만 아니라 유닉스, 리눅스는 물론이오 BSD를 기반으로 한 Mac OS에서도 요긴하게 써 먹을 수 있다.
어찌 되었든, 무조건 하루에 두 번 이상 행하는 작업들은 CLI를 이용해 자동화 할 궁리를 하자!
이 정규표현식은 텍스트 데이터를 다루는데 있어서 엄청난 편의성을 제공한다. 특히 개발 도중 자주 직면하게 되는 복잡한 검색이나 치환 작업 들을 다루는데 있어서 대단히 편리한 도구이며, 게을러지기 위해서는 약간의 수고를 들여 꼭 익힐 필요가 있는 기술임에 의심의 여지가 없다.
초보 개발자들에게는 다소 어려울 수 도 있지만 대부분의 이 바닥의 기술들이 그러하듯이 알고 나면 별거 아니다. 게다가 요즘에는 친절한 웹 튜토리얼들이 넘쳐난다!
필자는 20년 가까이 vi를 사용해 오다가 얼마전에 Emacs로 넘어간 변절자 종 한 사람 이지만 양쪽 다 개발자에게 훌륭한 에디터 라고 생각한다. emacs를 사용한다 하더라도 vi는 대부분의 unix/bsd계열 os에서 기본 텍스트 에디터로 채용하고 있으므로 기초적인 사용법은 꼭 익혀 두도록 하자.
아니다. 개발자에게는 개발자 다운 구글 사용법이 따로 있다.
구글은 오늘날 프로그래머에게 있어서 문제 해결의 단서를 찾는 데에 절대 빼 놓을 수 없는 도구이지만 의외로 구글이 제공하는 강력한 검색 옵션 기능들을 제대로 사용하는 개발자는 많지 않다.
속는 셈 치고 구글에서 제공하는 파워 Power Searching과 Advanced Power Searching 강의를 수강 해 보자. 아니 최소한 무슨 내용을 다루는지 만이라도 살펴보자. 단언컨데, 적은 노력으로 큰 편의를 제공할 것이다.
초보 개발자가 고급 개발자가 되어가는 과정을 한마디로 정의하자면 "좀 더 게을러지기 위한 강렬하고 적극적인 의지의 표현"이 되겠다. "생산성"이니 "효율성", "정확성"같은 것 들은 프로그래머에게 있어서 부수적으로 얻어지는 것일 뿐 목적이 될 수 없다. 오로지 끊임없이 편하고 게을러지기 위한 노력만이 있을 뿐이다.
1. 마우스 안 쓰기
오늘날의 컴퓨팅 환경은 시간과 청각과 같은 인지 영역에 의거한 인간의 자연스러운 본능에 모든 행동이 정의되고 제약되는 게슈탈트 심리학의 세계이다. 그러니까 버튼은 누르고 싶게 생겨야 하고 이벤트 알람은 귀에 거슬리게 하여 주의를 끌 수 있어야 한다. 하지만 프로그래밍의 세계는 추상의 세계이다. 보이지 않는 본질을 파악하고 이를 다시 추상화 해 나가는 작업의 반복인 것이다.이러한 이유로 필자는 마우스(터치패드나 트랙패드를 포함) 안 쓰기를 초보 프로그래머에게 있어서 익혀야 할 기술의 첫번째로 이름을 올렸다.
결론부터 말하자면 마우스는 프로그래머의 적이다. 마우스는 인체공학적인 면에 있어서도 손가락만 움직이면 되는 키보드와는 그 편의성과 정확성,속도면 에서 엄청나게 차이가 날 뿐만 아니라, 심리학에서 말해지는 몰입(flow) 상태를 방해 한다는 점에서도 프로그래머와는 궁합이 좋지 않다.
![]() |
| 명필은 붓을 가리지 않는다고 하지만 손에 맞는 키보드 선택은 개발자에게 무척 이나 중요하다. |
그럼에도 불구하고 마우스를 사용하게 되는 것은 순전히 직관에 끌리는 사람의 본능 때문 이다. 오늘날의 컴퓨팅 환경은 직관, 즉 시각과 청각을 최대한 활용하도록 설계되고 있다. 그러니까 마우스를 사용하지 않는 다는 것은 자연스러운 본능과의 싸움인 것이다. 하지만 걱정하지 말라, 결국 컴퓨팅 환경을 만들어내고 있는 것 들 또한 프로그래머 이며, 이들은 자신이 만든 프로그램에 키보드 사용자를 배려한 여러 장치를 해 놓는다. 단축키와 매크로 같은 것들 말이다.
일단 오늘부터라도 작업에 주로 사용하는 어플리케이션의 주요 기능들을 반드시 단축키를 사용해서 진행하는 습관을 들여보자. IDE뿐만 아니라 워드나 오피스, 그리고 윈도우와 같은 OS 관련 단축키도 포함해서 말이다. 상급 개발자라고 하는것은 무언가 대단한 이치를 깨달은 사람이 아닌 별거 아닌 작은 습관들을 몸에 익힌 사람들일 뿐이다.
2. Command Line Interface
상징적인 의미 이외에 현실적으로도 Command Line Interface(이하CLI)는 프로그래머가 보다 적극적이고 강렬하게 게을러지기 위해 꼭 필요한 중요한 도구이다. CLI는 동일한 작업의 반복 수행 뿐만 아니라 바로 위에서 언급한 마우스 사용의 억제에도 큰 도움이 된다.![]() |
| 대표적인 CLI화면인 Dos Prompt |
CLI는 쉘 자체로도 다양한 작업이 가능하지만 AWK나 GREP와 같은 툴을 함께 사용한다면 엄청난 시너지 효과를 낼 수 있다는 사실도 잊지 말자. 윈도우의 경우 powershell을 사용한다면 DOS스타일의 bat보다 훨씬 다양한 작업이 가능하지만, cygwin이나 unix utils를 이용한 유닉스 스타일의 쉘 작업을 익혀 둔다면, 윈도우 뿐만 아니라 유닉스, 리눅스는 물론이오 BSD를 기반으로 한 Mac OS에서도 요긴하게 써 먹을 수 있다.
어찌 되었든, 무조건 하루에 두 번 이상 행하는 작업들은 CLI를 이용해 자동화 할 궁리를 하자!
- The Command Line Crash Course : CLI의 세계에 입문하기 위한 훌륭한 길잡이.
- Youtube Command Line tutorial : 유튜브 에서 입맛에 맞는 강의를 골라 들어보자.
3. 정규표현식
부끄러운 이야기지만 필자 또한 정규 표현식을 제대로 다룰 수 있게 된 것은 비교적 최근의 일이다. 물론, 그 이전에도 정규표현식을 전혀 사용하지 않은 것은 아니지만 대부분 구글 검색에 의존해 완성된 식을 가져다가 파라메터를 바꿔서 쓰는 수준이었다. 변명을 하자면, 초보 개발자 시절 처음 접한 Perl 코드의 미칠듯한 정규표현식 해석 경험이 일종의 트라우마로 남아 있었던 듯 하다.이 정규표현식은 텍스트 데이터를 다루는데 있어서 엄청난 편의성을 제공한다. 특히 개발 도중 자주 직면하게 되는 복잡한 검색이나 치환 작업 들을 다루는데 있어서 대단히 편리한 도구이며, 게을러지기 위해서는 약간의 수고를 들여 꼭 익힐 필요가 있는 기술임에 의심의 여지가 없다.
초보 개발자들에게는 다소 어려울 수 도 있지만 대부분의 이 바닥의 기술들이 그러하듯이 알고 나면 별거 아니다. 게다가 요즘에는 친절한 웹 튜토리얼들이 넘쳐난다!
- RegexOne : 온라인 정규표현식 튜토리얼
4. 터미널 기반 텍스트 에디터
이클립스나 IntelliJ, Sublime, Brackets와 같은 뛰어난 IDE가 넘처나는 시대이지만 아직까지 텍스트 편집기나 코딩 툴 로서 ViEditor(이하 Vim)이나 Emacs를 애용하는 개발자가 많이 있다. 텍스트 환경 위에서 움직이는 이러한 툴들은 위에서 언급한 키보드만 이용한 작업이라던지 터미널 상의 CLI인터페이스와 궁합이 좋기 때문이다.필자는 20년 가까이 vi를 사용해 오다가 얼마전에 Emacs로 넘어간 변절자 종 한 사람 이지만 양쪽 다 개발자에게 훌륭한 에디터 라고 생각한다. emacs를 사용한다 하더라도 vi는 대부분의 unix/bsd계열 os에서 기본 텍스트 에디터로 채용하고 있으므로 기초적인 사용법은 꼭 익혀 두도록 하자.
- Vim demo: Vim을 이용한 텍스트 에디팅 데모
- Emacs demo: Emacs를 이용한 텍스트 에디팅 데모
- vi 튜토리얼
- 초보자를 위한 emacs튜토리얼
5. 구글 파워 서칭
응? 이 양반이 초보라고 사람 무시하나? 아무리 초보 개발자라고 해도 구글 못 쓰겠냐고?아니다. 개발자에게는 개발자 다운 구글 사용법이 따로 있다.
구글은 오늘날 프로그래머에게 있어서 문제 해결의 단서를 찾는 데에 절대 빼 놓을 수 없는 도구이지만 의외로 구글이 제공하는 강력한 검색 옵션 기능들을 제대로 사용하는 개발자는 많지 않다.
속는 셈 치고 구글에서 제공하는 파워 Power Searching과 Advanced Power Searching 강의를 수강 해 보자. 아니 최소한 무슨 내용을 다루는지 만이라도 살펴보자. 단언컨데, 적은 노력으로 큰 편의를 제공할 것이다.
[원본글]
http://www.moreagile.net/2014/12/HowtoBecomeAnExpertDeveloper.html
2016년 8월 12일 금요일
[AWS]What Is AWS IoT? - AWS IoT
AWS IoT
Developer Guide
- What Is AWS IoT?
- AWS IoT Button Quickstart
- Getting Started with AWS
IoT
- Sign in to the AWS IoT Console
- Create a Device in the Thing Registry
- Create and Activate a Device Certificate
- Create an AWS IoT Policy
- Attach an AWS IoT Policy to a Device Certificate
- Attach a Thing to a Certificate
- Configure Your Device
- View Device MQTT Messages with the AWS IoT MQTT Client
- Configure and Test Rules
- AWS IoT Rule Tutorials
- Managing Things with AWS IoT
- Security and Identity
- Message Broker
- Rules
- Device Shadows
- AWS IoT SDKs
- Monitoring
- Troubleshooting
- AWS IoT Limits
What Is AWS IoT?
AWS IoT Components
- Message broker—사물과 AWS Iot 애플리케이션 서로 간에 메시지를 퍼블리시하고 수신하기 위한 안전한 메커니즘을 제공한다. 퍼블리시와 구독하기 위해 직접 MQTT 프로토콜을 사용하거나 WebSockets 상에 MQTT를 사용할 수 있다: 퍼블리시를 위해 HTTP REST를 사용할 수 있다.
- Rules engine—다른 AWS 서비스들과 메시지 처리와 통합을 제공한다. payloads로부터 데이터를 선택하고 데이터를 처리하고 Amazon S3, Amazon DynamoDB, 그리고 AWS Lambda와 같이 다른 서비스로 데이터를 보내기 위해 SQL 기반의 언어를 사용할 수 있다. 또한 다른 구독자들에게 메시지를 republish 하기 위해 message broker를사용할 수 있다.
- Thing registry—종종 Device Registry로 언급된다. 각각의 사물과 연관된 리소스들을 조직해라. 사물을 등록하고 사물들과 세개의 custom attributes와 연관지어라. 또한 당신의 사물을 관리하고 고장수리하는 능력을 개선학기 위해 각 사물들과 함께 certificates와 MQTT 클라이언트 ID들을 연관지을 수 있다.
- Thing Shadows service—AWS 클라우드에서 당신 사물의 지속적인 표현을 제공한다. 당신은 업데이트된 상태 정보를 thing shadow에 퍼블리싱할 수 있다. 그리고 당신의 사물은 접속되었을 때 그것의 상태를 동기화할 수 있다. 또한 당신의 사물은 애플리케이션이나 장치에서 사용할 수 있도록 thing shadow에 그들의 현재 상태를 퍼블리싱할 수 있다.
- Thing shadow— 종종 device shadow라고도 불린다. 사물을 위한 현재 상태 정보를 저장하거나 받아올 때 JSON 문서가 사용된다(device, app, 등등)
- Device gateway—장치가 AWS IoT와 안전하고 효율적으로 통신할 수 있도록 한다.
- Security and Identity service—AWS cloud 상에서 보안을 위해 공유 책임을 제공한다. 당신의 사물은 message broker로 데이터를 안전하게 보내기 위해 인증서(자격, credentials)를 안전하게 유지해야 한다. message broker와 rules engine은 장치와 다른 AWS 서비스들에 데이터를 안전하게 보내기 위해 AWS security features를 사용한다.
How to Get Started with AWS IoT
- AWS IoT에 대해 더 많이 알려면, How AWS IoT Works를 보아라.
- 사물을 AWS IoT와 어떻게 연결하는지 알려면, Getting Started with AWS IoT 를 보아라.
Accessing AWS IoT
- AWS Command Line Interface (AWS CLI)—Window, MAC 그리고 리눅스 상에서 AWS IOT 명령을 실행한다. 시작하려면 AWS Command Line Interface User Guide 보아라. AWS IoT를 위한 명령에 대해 더 많은 정보는 AWS Command Line Interface Reference에 있는 iot 를 보아라.
- AWS SDKs—특정 언어의 API를 이용해 IoT 애플리케이션을 생성해라. 더 많은 정보는 AWS SDKs and Tools 를 보아라.
- AWS IoT API—HTTP 도는 HTTPS 요청을 이용해 당신의 IoT 애플리케이션을 만들어라. AWS IoT를 위한 API 액션에 대한 더 많은 정보는 AWS IoT API Reference에 있는 Actions 를 보아라.
- AWS IoT Thing SDK for C—마이크로 컨트롤러와 같은 리소스가 제약되는 사물을 위한 IoT 애플리케이션을 만들어라.
Related Services
AWS IoT integrates directly with the following AWS services:
- Amazon Simple Storage Service—AWS 클라우드 상에서 scalable storage를 제공한다. 더많은 정보는 Amazon S3 를 보아라.
- Amazon DynamoDB—managed NoSQL 데이터베이스를 제공한다. 더 많은 정보는 Amazon DynamoDB 를 보아라.
- Amazon Kinesis— 거대한 규모의 실시간 스트리밍 데이터처리를 가능케한다. 더 많은 정보는 Amazon Kinesis 를 보아라.
- AWS Lambda—이벤트에 응답하는 아마존 EC2 상의 가상 서버에서 당신의 코드를 실행해라. 더 많은 정보는 AWS Lambda 를 보아라.
- Amazon Simple Notification Service—노티피케이션을 보내고 수신해라. 더 많은 정보는 Amazon SNS 를 보아라.
- Amazon Simple Queue Service—애플리케이션에 의해 가져올 데이터를 큐에 저장해라. 더 많은 정보는 Amazon SQS 를 보아라.
© 2016, Amazon Web Services, Inc. or its
affiliates. All rights reserved.
2016년 8월 11일 목요일
[AWS]Message Broker for AWS IoT - AWS IoT
AWS IoT
Developer Guide
- What Is AWS IoT?
- AWS IoT Button Quickstart
- Getting Started with AWS
IoT
- Sign in to the AWS IoT Console
- Create a Device in the Thing Registry
- Create and Activate a Device Certificate
- Create an AWS IoT Policy
- Attach an AWS IoT Policy to a Device Certificate
- Attach a Thing to a Certificate
- Configure Your Device
- View Device MQTT Messages with the AWS IoT MQTT Client
- Configure and Test Rules
- AWS IoT Rule Tutorials
- Managing Things with AWS IoT
- Security and Identity
- Message Broker
- Rules
- Device Shadows
- AWS IoT SDKs
- Monitoring
- Troubleshooting
- AWS IoT Limits
|
|
Message Broker for AWS IoT
토픽 namespace 는 각 AWS account와 region 쌍에 따라 격리된다. 예를 들어, 한 AWS account 를 위한 Sensor/temp/room1 토픽은 다른 AWS account 를 위한 "Sensor/temp/room1"에 대해 독립적이다. 이는 regions에 대해서도 동일하다. us-east-1에 있는 동일한 AWS account를 위한 Sensor/temp/room1 토픽은 us-west-2에 있는 동일한 토픽에 대해 독립적이다. AWS Iot는 AWS account와 regions을 가로질러 메시지를 송수신하는 것을 지원하지 않는다.
message broker는 모든 클라이언트 세션과 각 세션에 대한 구독 리스트를 유지한다. 메시지가 토픽에 대해 퍼블리시되면 broker는 토픽에 대해 매핑되는 구독 세션들을 체크한다. 그리고 나서 broker는 publish message를 현재 연결된 클라이언트를 가지고 있는 모든 세션으로 전달한다.
© 2016, Amazon Web Services, Inc. or its
affiliates. All rights reserved.
[AWS]Protocols - AWS IoT
AWS IoT
Developer Guide
- What Is AWS IoT?
- AWS IoT Button Quickstart
- Getting Started with AWS
IoT
- Sign in to the AWS IoT Console
- Create a Device in the Thing Registry
- Create and Activate a Device Certificate
- Create an AWS IoT Policy
- Attach an AWS IoT Policy to a Device Certificate
- Attach a Thing to a Certificate
- Configure Your Device
- View Device MQTT Messages with the AWS IoT MQTT Client
- Configure and Test Rules
- AWS IoT Rule Tutorials
- Managing Things with AWS IoT
- Security and Identity
- Message Broker
- Rules
- Device Shadows
- AWS IoT SDKs
- Monitoring
- Troubleshooting
- AWS IoT Limits
Protocols
message broker는 발행하고 구독을 위한 MQTT 프로토콜과 발행을 위한 HTTPS 프로토콜의 사용을 지원한다. 두 프로토콜 모두 IP v4와 IP v6를 통해 지원된다. message broker는 또한 WebSocket 프로토콜을 통해 MQTT를 지원한다.
MQTT는 constrained device를 위해 고안된 널리 채용되는 가벼운 메시징 프로토콜이다. 더 많은 정보는 MQTT 를 방문해라. AWS IoT message broker 구현은 MQTT 버전 3.1.1에 기반하고 있지만 다음과 같이 규격으로부터 벗어난다:
- AWS IoT에서 Qaulity of Service (QoS) 0으로 topic에 구독하는 것은 메시지가 0번 이상 전달될 것이라는 것을 의미한다. 메시지는 한 번 이상 전달될 수 있다. 메시지는 다른 ID를 가지고 한번 이상 전달될 것이다. 이러한 경우 DUP 플래그는 셋팅되지 않는다.
- AWS IoT는 QoS 2로 배포하고 구독하는 것을 지원하지 않는다. AWS IoT message broker는 QoS 2 가 요청될 때 PUBACK 나 SUBACK를 보내지 않는다.
- topic 에 대해 구독하고 발행하기 위한 QoS 레벨은 서로 관련이 없다. 한 클라이언트는 다른 클라이언트가 QoS0으로 동일한 topic에 대해 발행하더라도 QoS 1을 이용해 topic을 구독할 수 있다.
-
connection 요청에 대해 응답할 때 message broker는 CONNACK 메시지를 보낸다. 이 메시지는 connection이 이전 세션을 재시작하는지를 가리키는 플래그를 포함한다. 이 플래그의 값은 두 MQTT 클라이언트가 동시에 동일한 클라이언트 ID를 가지고 접속할 때 부정확할 수 있다.
- 클라이언트가 topic을 구독할 때 message broker가 SUBACK를 보내는 시간과 클라이언트가 새로운 매칭 메시지를 수신하기 시작하는 시간 사이에 지연이 발생할 수 있다.
- MQTT 규격은 발행인이 broker가 topic에 대해 보낸 마지막 메시지를 유지하고 그것을 모든 미래 topic 구독자에게 보내도록 요청하는 것을 제공한다. AWS IoT는 메시지를 유지하는 것을 지원하지 않는다. 메시지를 유지하는 요청이 만들어지면 접속이 해제된다.
-
The message broker uses the client ID to identify each client. The client ID
is passed in from the client to the message broker as part of the MQTT payload.
Two clients with the same client ID are not allowed to be connected concurrently
to the message broker. When a client connects to the message broker using a
client ID that another client is using, a CONNACK message will be sent to both
clients and the currently connected client will be disconnected.
-
The message broker does not support persistent sessions (clean session set to
0). All sessions are assumed to be clean sessions and messages are not stored
across sessions. If an MQTT client sends a message with the clean session
attribute set to false, the client will be disconnected.
-
On rare occasions, the message broker may resend the same logical publish
message with a different packet ID.
- The message broker does not guarantee the order in which messages and ACK are received.
HTTP
<AWS IoT Endpoint>/topics/<url_encoded_topic_name>?qos=1".MQTT Over the WebSocket Protocol
A WebSocket connection is initiated on a client by sending an HTTP GET request. The URL you use is of the following form:
wss://<endpoint>.iot.<region>.amazonaws.com/mqtt
- wss
- Specifies the WebSocket protocol.
- endpoint
- Your AWS account-specific AWS IoT endpoint. You can use the AWS IoT CLI describe-endpoint command to find this endpoint.
- region
- The AWS region of your AWS account.
- mqtt
- Specifies you will be sending MQTT messages over the WebSocket protocol.
Using the WebSocket Protocol in a Web Application
The following JavaScript defines some utility functions used in generating a signature version 4 request.
/**
* utilities to do sigv4
* @class SigV4Utils
*/
function SigV4Utils(){}
SigV4Utils.sign = function(key, msg){
var hash = CryptoJS.HmacSHA256(msg, key);
return hash.toString(CryptoJS.enc.Hex);
};
SigV4Utils.sha256 = function(msg) {
var hash = CryptoJS.SHA256(msg);
return hash.toString(CryptoJS.enc.Hex);
};
SigV4Utils.getSignatureKey = function(key, dateStamp, regionName, serviceName) {
var kDate = CryptoJS.HmacSHA256(dateStamp, 'AWS4' + key);
var kRegion = CryptoJS.HmacSHA256(regionName, kDate);
var kService = CryptoJS.HmacSHA256(serviceName, kRegion);
var kSigning = CryptoJS.HmacSHA256('aws4_request', kService);
return kSigning;
};
To create a Signature Version 4 request
-
Create a canonical request for Signature Version 4.
The following JavaScript code creates a canonical request:
var time = moment.utc(); var dateStamp = time.format('YYYYMMDD'); var amzdate = dateStamp + 'T' + time.format('HHmmss') + 'Z'; var service = 'iotdevicegateway'; var region = this.options.regionName; var secretKey = this.options.secretKey; var accessKey = this.options.accessKey; var algorithm = 'AWS4-HMAC-SHA256'; var method = 'GET'; var canonicalUri = '/mqtt'; var host = this.options.endpoint; var credentialScope = dateStamp + '/' + region + '/' + service + '/' + 'aws4_request'; var canonicalQuerystring = 'X-Amz-Algorithm=AWS4-HMAC-SHA256'; canonicalQuerystring += '&X-Amz-Credential=' + encodeURIComponent(accessKey + '/' + credentialScope); canonicalQuerystring += '&X-Amz-Date=' + amzdate; canonicalQuerystring += '&X-Amz-SignedHeaders=host'; var canonicalHeaders = 'host:' + host + '\n'; var payloadHash = SigV4Utils.sha256(''); var canonicalRequest = method + '\n' + canonicalUri + '\n' + canonicalQuerystring + '\n' + canonicalHeaders + '\nhost\n' + payloadHash; console.log('canonicalRequest ' + canonicalRequest); -
Create a string to sign, generate a signing key, and sign the string.
Take the canonical URL you created in the previous step and assemble it into a string to sign. You do this by creating a string composed of the hashing algorithm, the date, the credential scope, and the SHA of the canonical request. Next, generate the signing key and sign the string, as shown in the following JavaScript code.
var stringToSign = algorithm + '\n' + amzdate + '\n' + credentialScope + '\n' + SigV4Utils.sha256(canonicalRequest); var signingKey = SigV4Utils.getSignatureKey(secretKey, dateStamp, region, service); var signature = SigV4Utils.sign(signingKey, stringToSign); -
Add the signing information to the request.
The following JavaScript code shows how to add the signing information to the query string.
canonicalQuerystring += '&X-Amz-Signature=' + signature; var requestUrl = 'wss://' + host + canonicalUri + '?' + canonicalQuerystring; -
If you have session credentials (from an STS server, AssumeRole, or Amazon
Cognito), append the session token to the end of the URL string after
signing:
requestUrl += "&X-Amz-Security-Token=" + encodeURIComponent(sessionToken); -
Open the WebSocket.
The following JavaScript code shows how to create a Paho MQTT client and call CONNECT to AWS IoT. Theendpointargument is your AWS account-specific endpoint. TheclientIdis a text identifier that is unique among all clients simultaneously connected in your AWS account.
var client = new Paho.MQTT.Client(requestUrl, clientId); var connectOptions = { onSuccess: function(){ // connect succeeded }, useSSL: true, timeout: 3, mqttVersion: 4, onFailure: function() { // connect failed } }; client.connect(connectOptions);
Using the WebSocket Protocol in a Mobile Application
You can find a reference implementation for connecting a web application to AWS IoT using MQTT over the WebSocket protocol here: AWS Labs WebSocket sample.
If you are using a programming or scripting language that is not currently supported, any existing WebSocket library can be used as long as the initial WebSocket upgrade request (HTTP POST) is signed using AWS Signature Version 4. Some MQTT clients, such as Eclipse Paho for JavaScript, support the WebSocket protocol natively.
© 2016, Amazon Web Services, Inc. or its
affiliates. All rights reserved.
피드 구독하기:
글 (Atom)









