분류 전체보기
프로그래밍/Database
2020. 8. 23.
[MySQL] Explain_Query 동작 방식 및 성능 파악하기
DB Schema 설계는 Business Logic에 대한 이해로부터 비롯된다. 이 때, Schema의 설계에는 2가지가 포함된다고 생각한다. Business Logic에 부합하는 Entity들을 구상하여 Entity들 간의 관계(Relation)를 확실하게 규정하는 것과 실제 사용성의 측면에서 지나치게 복잡한 구조는 지양하여, 효과적인 쿼리 수행 성능을 위한 구조를 마련하는 것이 포함된다. 이 중, Entity 들 간의 관계를 규정하는 부분에 대해서는 아래 링크의 포스팅을 통해 언급한 적이 있다. 2020/04/07 - [프로그래밍/Database] - [DB] 정규화(Normalization)와 역정규화(DeNormalization) [DB] 정규화(Normalization)와 역정규화(DeNorma..
프로그래밍/IoT
2020. 8. 20.
[AWS IoT] MQTT Republish Rule Action 사용시 주의점
요구사항은 다음과 같았다. IoT Device에서 발생한 특정한 이벤트에 대하여 실시간으로 정보를 받고 싶다는 외부의 요청이 있었다. 협업을 하는 외부 조직이다보니 빠르게 대응을 해줘야했지만, 우리가 갖춰야 하는 중요한 Business Logic과는 관련이 없는 부분이었기 때문에 로직을 관리하는 코드를 더럽히고(?) 싶지 않았다. 단순한 API 연동이었기 때문에 특정 Topic으로 발생한 이벤트를 catch하여, 전달받은 API로 POST요청을 하면 되는 상황이었다. 이 때 발생한 고민 포인트가 또 한가지 있었다. HTTPS API 연동을 Lambda와 같은 서비스를 사용해서 처리할 지, 다행스럽게도 AWS IoT에서 제공하는 HTTPS Downstream Rule을 사용하여 처리할 지.. 위의 고민 포..
프로그래밍/Database
2020. 8. 17.
[MySQL] Order By한 뒤, Group By하는 방법
Data가 적재된 방식에 따라 Group By의 결과가 달라지게 될 것이다. Group By를 통해 얻고자 하는 값이 Sum이거나 Count와 같이 가공이 이뤄지는 값이라면 아래의 쿼리 들은 큰 의미가 없을 것이다. 하지만 만약에 데이터가 기록된 시간 또는 업데이트 된 시간에 따라 정렬한 뒤 Group By를 하고자 하는 경우가 있을 것이다. 간단하게 생각하여 쿼리를 작성한다면 아래와 같을 것이다. SELECT * FROM order_book ORDER BY created_at DESC GROUP BY product; 하지만 위의 쿼리는 에러가 발생한다. Depth가 동일한 쿼리에서 Order By와 Group By를 동시에 사용할 수 없다는 의미의 쿼리 에러가 발생하는 것이다. 그렇다면, Sub Que..
프로그래밍/Database
2020. 8. 5.
[MySQL] Roll-Up Query
Roll Up 쿼리는 Group By와 함께 사용되는 조건 구문이다. Group By 쿼리에 의해서 grouping된 결과에 대해서 보다 상세한 정보를 반환하는 기능을 수행한다. ROLLUP 쿼리를 사용한다면 그룹화된 row들에 대한 중간 합(결과)에 대한 새로운 row가 추가되어 쿼리의 결과를 얻을 수 있게 된다. 아래의 정보들이 저장되어 있다고 할 경우, ROLLUP 쿼리를 쓴 결과는 아래와 같다. warehouse product model quantity San Francisco Apple iPhone XS 50 San Francisco Apple iPad Pro 10 San Francisco Apple Apple Watch 200 San Francisco Samsung Z Flip 200 San ..
프로그래밍/Big Data
2020. 7. 19.
[Big Data] 101 _ Big Data 어떻게 시작할까?
서비스의 운영을 위해서, 서비스의 향상을 위해서, 새로운 가치를 창출하기 위해서 Log라는 것을 정의하게 된다. 단순한 로깅을 넘어 서버, Web/App Client, IoT Device, Serverless 환경의 각 Instance나 Component들에서 발생하는 이벤트들에 대한 포괄적인 정의를 할 수 있다면 이는 더 이상 단순한 Log라 정의할 수 없으며 방대한 Data 즉, Big Data의 일환으로 기록될 것이다. 실제로 Big Data의 데이터 원천(Data Source)에 대한 개념들은 점차 확대되고 있다. IoT 서비스라면 IoT Device에서 발생하는 이벤트 로그들이나 센서 로그, 서버나 클라이언트에서의 Request/Response 로그나 사용자 행동 로그, 혹은 RDBMS에서 추출..
프로그래밍/Node.js
2020. 7. 12.
[JavaScript] JavaScript에서 Sleep 함수 사용하기
입력한 시간만큼 Code의 실행을 멈추는 일반적인 기능으로 sleep 함수가 있다. 하지만 JavaScript에서는 내장된 sleep 기능이 없기 때문에 필요하다면, node_modules 중 delay 모듈을 사용하는 방법이 있을 것이다. 만약, 외부 모듈을 설치하여 Sleep의 기능을 사용하는 것이 아니라고 한다면 JavaScript 내장 모듈 중에서 어떻게 활용할 수 있을까? JavaScript에서는 입력된 시간이 지난 뒤 주어진 함수나 지정된 코드를 실행시키는 setTimeout 함수가 있다. const timer = () => { setTimeout(() => {}, 1000) console.log('First'); setTimeout(() => {}, 1000); console.log('Sec..
프로그래밍/Node.js
2020. 7. 11.
[JavaScript] ES2020(ES11) 미리 살펴보기.
JavaScript는 그 어떤 프로그래밍 언어보다 빠르게 변화하며, 그간 부족했던 부분들을 보충하고 있다. 하지만 새로운 기능이 등장할 수록 각 프로그래밍 언어들의 세부적인 특징들 중, 공통적인 부분들이 많아지고 있지 않나 하는 생각도 들게 된다. ES2020(ES11)의 신규 기능들은 Chrome 79 버전에 탑재된 기능들로 현재 크롬 콘솔에서 쉽게 테스트가 가능하다. Private Class Variables Class 기반의 프로그래밍 언어들과 달리 JavaScript의 경우 Class 문법을 공식적으로 차용한 지 얼마되지 않았기 때문에 Class 문법을 사용할 때 부족한 부분들이 조금씩 느껴지기는 했다. 그 중 ES2020에서는 Private Class 변수가 신규로 도입되었다. Class App..
프로그래밍/IoT
2020. 6. 14.
[AWS IoT] aws-iot-device-sdk로 sample client 만들기 (1편)
함께 Bootcamp를 했었던 동료들과 각자 개발하고 있는 프로젝트에 대해서 공유를 한 적이 있었다. IoT Service를 개발하는 조직에서 Platform 개발을 하고 있다고 하니, Node.js로도 IoT 개발이 가능한 지 신기해하는 반응이 대다수였다. IoT에서 가장 중요한 것 중 하나가 T(Things)에 해당하는 Device일 텐데 당연히 Device하면 임베디드 개발과 C#과 같은 언어를 사용한 개발이 가장 먼저 떠오르니, 당연한 반응이다. 라즈베리파이와 같은 edge 장비의 역할을 할 수 있는 기기가 보편화되면서 다양한 언어로 IoT Device를 구현할 수 있는 방법이 생겼다. AWS IoT에서 제공하는 aws-iot-device-sdk도 다양한 언어로 제공하고 있다. (링크) aws-i..
프로그래밍/IoT
2020. 6. 8.
[IoT] MQTT Protocol - QoS(Quality of Service)
IoT Service는 무선 네트워크 망을 주로 사용하여 통신하기 때문에 유선 통신에 비해서 안정성이 상대적으로 낮다. 이러한 불안정함을 Protocol 상에서 보완하기 위해 QoS(Quality of Service)라는 안정성을 위한 서비스의 질이라는 개념을 도입했다. QoS Level 하지만 모든 통신에서 완전성을 갖춰야 하는 것은 아니다. 서비스의 요구 사항에 따라서, 그리고 통신이 이뤄지는 환경이나 메시지의 종류에 따라서 안정성이 강화되어야 하는 상황이 있을 것이다. QoS Level은 아래의 3가지로 정의한다. QoS 0 : At most once - Fire & Forgot QoS Level 0에서는 메시지를 전송(Publish)한 뒤, Publish Event를 잊는다. 즉, 전송한 메시지를..