본문 바로가기

분류 전체보기

(43)
AWS를 활용한 실시간 데이터 분석 파이프라인에 대한 이론적인 공부: Kinesis Data Streams, IoT Fleetwise 서비스 활용 본 포스팅은 다양한 레퍼런스 기준으로 작성되었습니다. 우리는 저지연 데이터 스트리밍 애플리케이션에 의해 주도되는 실시간 데이터와 통찰력의 시대에 살고 있습니다. 오늘날 모든 사람은 모든 애플리케이션에서 개인화된 경험을 기대하며, 조직은 비즈니스 운영 및 의사 결정 속도를 높이기 위해 끊임없이 혁신하고 있습니다. 생성되는 시간에 민감한 데이터의 양이 빠르게 증가하고 있으며, 새로운 비즈니스와 고객 사용 사례에 다양한 형식의 데이터가 도입되고 있습니다. 따라서 조직이 실시간 비즈니스 애플리케이션과 더 나은 고객 경험을 제공하기 위해 저지연, 확장 가능하고 안정적인 데이터 스트리밍 인프라를 도입하는 것이 중요합니다. [1] Amazon Kinesis Data Streams는 클라우드 네이티브, 서버리스 스트리..
서비스 평가 지표 서비스를 평가하는 데에 지표 수립은 과거부터 지속되어 왔습니다. 그리고 이러한 데이터 기반 의사결정은 서비스 기획에 있어서 매우 중요하고, 더욱 중요해지고 있습니다.  데이터를 기반으로 의사결정을 내리면 객관적인 판단이 가능합니다. 주관적인 견해나 감각에 의존하는 것보다 객관적으로 문제를 판단할 수 있습니다. 이는 오류나 편향을 줄이고 더 신속하고 효과적인 의사결정을 할 수 있도록 도와줍니다. 또한 데이터를 통해 사용자의 이해를 할 수 있는데, 이를테면 사용자의 행동이나 선호도를 분석할 수 있습니다. 이는 사용자의 니즈를 이해하고 서비스를 그에 맞게 개선할 수 있도록 도와줍니다. 데이터를 기반으로 사용자의 요구사항을 파악하여 서비스를 개선하면 사용자 만족도를 높일 수 있습니다. 데이터를 사용하여 시장분석..
Keras / Sequential Model vs Functional Model Keras 모델을 만드는 방법은 Sequential과 Functional로 두가지 방법이 있다. Sequential Model은 레이어를 층층이 쌓아가는 방법으로 일반적으로 딥러닝 네트워크 구조를 생각할 때 Sequential Model의 구조를 떠올린다. Layer-by-layer 쌓아올리는 방법으로, layer를 공유하는 구조나 다중 입력/출력을 사용하지 못한다는 한계가 있다. Functional Model은 Layer가 앞/뒤 layer에만 연결된 구조뿐 아니라 훨씬 더 자유자재로 그 구조를 정의하여 사용할 수 있게 된다. Layer를 어떤 layer에든지 연결해서 사용할 수 있는 것이다. 그래서 siamese 네트워크와 residual 네트워크 같은 복잡한 구조의 네트워크를 만들수 있게 된다. S..
SQL FullText Search / 웹 어플리케이션 로딩 성능이 낮다면, 쿼리 조회 성능을 확인! 이 포스팅에서는 MySQL의 FullText Search에 대해 주로 다뤄보고자 한다. 웹 어플리케이션을 설계할 때, 고려할 점은 참 많다. 그 중에서도 이번에는 Restful API에서 RDBMS 를 사용할 때 쿼리 조회 성능을 올리는 방법에 대해 소개하려고 한다. 검색에 대해 패턴 일치 검색 기능(LIKE 기능)을 사용한 조회 쿼리의 경우 조회 성능이 가장 낮다고 할 수 있다. 하지만 놀랍게도 많은 초심자들은 이 쿼리에는 문제가 없다고 생각한다(그리고 다른 곳에서 문제를 찾으려고 한다). 패턴 일치 검색 기능은 %를 사용함으로써 컬럼에 인덱스가 지정되어 있어도 인덱스를 사용하지 못할 수도 있다.  RDBMS는 정형화된 데이터를 저장하기에 매우 편리한 데이터베이스지만, 설계와 사용에서의 아주 세심한 주..
FutureWarning: 데이터프레임 행 subset 얻기 Python pandas.DataFrame 각 row의 Subset을 얻기 위해서(doc_data) 아래와 같이 코드를 작성했다.for i, row in my_df.iterrows(): doc_names = {"key_example1", "key_example2", "key_example3"} doc_data = {key:row[key] for key in row.keys() & doc_names} doc_dict = {"doc": doc_data} 그랬더니 아래와 같은 경고 문구가 떴다.FutureWarning: Index.__and__ operating as a set operation is deprecated, in the future this will be a logical ope..
파이썬은 모든 것이 객체다, is와 이항 연산자... 파이썬은 모든 것이 객체다.이 중에서 크게 불변 객체(immutable object)와 가변 객체(mutable object)로 구분할 수 있따.클래스설명불변 객체bool부울Oint정수Ofloat실수Olist리스트Xtuple리스트와 튜플의 차이는 불변 여부이며 이외에는 거의 동일하다. 튜플은 불변이므로 생성할 때 설정한 값은 변경할 수 없다.Ostr문자Oset중복된 값을 갖지 않는 집합 자료형Xdict딕셔너리X 불변 객체무엇보다 파이썬은 모든 것이 객체다. 파이썬에서 변수를 할당하는 작업은 해당 객체에 대해 참조를 한다는 의미다.여기에는 예외가 없으며 심지어 문자와 숫자도 모두 객체다.10a = 10b = aid(10), id(a), id(b)# (4393858752, 4393858752, 4393858..
uuid 식별자로 사용가능한가? uuid(universal unique identifier):실제 용도에서 안전하게 고유하다고 생각할 수 잇는 특정 형태의 식별자 정확하게 생성된 두 uuid는 서로 다른 당사자에 의해 두 개의 서로 다른 환경에서 작성된 경우에도 정확히 동일할 가능성이 거의 없다. 실제 uuid는 표준화된 형식에 의해 생성되고 표현되는 고유 식별자이다. 유효한 uuid는 RFC 4122에 의해 정의된다. 이 사양은 중앙 발급 기관 없이도 여러 구현 간에 고유성을 유지하는 데 사용할 수 있는 알고리즘을 설명한다. RFC에는 다음과 같은 다섯가지 다른 알고리즘이 포함되어 있고, 각 알고리즘은 값을 생성하기 위해 서로 다른 메커니즘을 사용한다.  uuid 버전요약설명버전1시간 기준타임 스탬프, 클럭 시퀀스 및 생성 장치별 값..
Python 딕셔너리 파이썬의 딕셔너리는 키/값 구조로 이루어진 딕셔너리를 말한다.3.7+ 부터는 입력 순서가 유지되며, 내부적으로 해시 테이블로 구현되어 있다. 언어해시 테이블파이썬dict()C++std:unordered_map자바HashMap 해싱파이썬의 딕셔너리는 해시할 수만 있다면 숫자 뿐만 아니라, 문자, 집합까지 불변 객체를 모두 키로 사용할 수 있다. 이 과정을 해싱이라고 하며, 해시 테이블을 이용해 자료를 저장한다. 무엇보다 해시 테이블은 다양한 타입을 키로 지원하면서도 입력과 조회 모두 O(1)에 가능하다. 분할 상환 분석(Amortized Analysis)에 따른 시간 복잡도는 O(1)이다. 이외에 해시 테이블의 주요 연산과 시간 복잡도는 아래와 같다.연산시간 복잡도설명len(a)O(1)요소의 개수를 리턴한..
리스트, 배열과 연결 리스트를 통합하고 속도는 양보한 파이썬의 객체 타입 파이썬의 리스트는 말 그대로 순서대로 저장하는 시퀀스이자 변경 가능한 목록을 말한다.입력 순서가 유지되며, 내부적으로는 동적 배열로 구현되어 있다. 각 언어 별 동적 배열을 구현한 자료형은 아래와 같다.언어동적 배열파이썬list()c++std::vector자바ArrayList 리스트의 주요 연산과 시간 복잡도리스트는 다양한 기능을 제공하면서도 O(1)에 실행 가능한 연산들도 있다.연산시간 복잡도설명len(a)O(1)전체 요소의 개수를 리턴한다.a[i]O(1)인덱스의 i 번째 요소를 가져온다.a[i:j]O(k)인덱스 i 번째부터 j-1 번째 까지의 슬라이스 길이만큼의 k개의 요소를 가져온다. 이 경우 객체 k에 대한 조회가 필요하므로 O(k)이다.elem in aO(n)elem 요소가 존재하는지 확인한다...
Introduction to Python 파이썬 문법인덴트파이썬의 대표적인 특징이기도 한 인덴트는 공식 가이드인 PEP 8에 따라 공백 4칸을 원칙으로 한다. 파이썬 개선 제안서(PEP, Python Enhancement Proposals) 프로세스는 새로운 기능을 제안하고 커뮤니티의 의견을 수렴하여 파이썬의 디자인 결정을 문서화 하는 파이썬의 주요 개발 프로세스를 일컫는다.https://peps.python.org/pep-0008/ PEP 8 – Style Guide for Python Code | peps.python.orgPEP 8 – Style Guide for Python Code Author Guido van Rossum , Barry Warsaw , Nick Coghlan Status Active Type Process Create..
Kafka에 대한 간단한 아키텍쳐 소개 Kafka는 대규모 메세지를 빠르게 처리할 수 있는 분산 스트리밍 메시징 플랫폼이다.   Apache Kafka는 수천개의 기업에서 분산 이벤트 스트리밍 플랫폼으로 사용되는 오픈소스이다. 고성능의 데이터 파이프라인 구축, 스트리밍 분석, 데이터 통합, 적용 등을 위해 사용될 수 있고, 클러스터링 되어 있기 때문에 안정적인 아키텍쳐를 갖고 있고 확장성도 용이하다. Kafka 에코시스템 기본 구성 요소와 동작 - 발행-구독(publish-subscribe) 모델- 크게 producer, consumer, broker로 구성됨Kafka의 broker는 topic을 기준으로 메시지를 관리한다. Kafka의 Producer는 특정 topic의 메시지를 생성한 뒤 해당 메시지를 broker에 전달한다. Broker..
AWS ECS에 대한 이해 개념Amazon ECS Anywhere는 고객 관리형 인프라에서 손쉽게 실행할 수 있는 아마존 웹 서비스의 컨테이너이다. ECS는 Elastic Container Service의 줄임말이다. LG전자에서도 전사 차원에서 AWS를 계약하고 사용하고 있는 것으로 알고 있다.  ECS Anywhere는 Amazon ECS의 단순성과 사용 용이성에 기반하여 컨테이너 기반 애플리케이션에서 일관된 도구 및 API 경험을 제공한다. 온프레미스 또는 클라우드 모두에서 Amazon ECS에서 확인하려는 유사한 클러스터 관리, 워크로드 예약 및 모니터링을 이용할 수 있다. ECS Anywhere가 제공하는 완전관리형 솔루션의 장점을 활용하여 복잡한 로컬 컨테이너 오케스트레이션을 완화하고 비용을 절감할 수 있다 ECS An..
Python 라이브러리를 활용한 Azure Blob 파일 획득 예제 Python 라이브러리를 활용해서 Azure Blob 스토리지의 Blob 파일을 획득하는 예제를 진행해보겠다. 이를 위해 azure-storage-blob 이라는 이름의 패키지를 설치한다. pip install azure-storage-blob사용할 때에는 azure.storage.blob으로 임포트한다. 단, 패키지 사이즈가 크므로 사용할 라이브러리만 이름으로 임포트하여 사용하는 것을 추천한다.from azure.storage.blob import * 1. MS Azure Blob File 획득1-1. MS Azure Blob File 이름 리스트 획득컨테이너 하위의 blob 파일 리스트에 대한 정보는 Python azure-storage-blob의 BlobServiceClient 클래스가 지원한다. ..
Azure Blob 스토리지에 대한 이해 클라우드 제품이 MS Azure 클라우드 기반으로 만들어진 많은 경우, 비용적인 측면과 사용에의 편리함 때문에 데이터 레이크로 Blob 스토리지를 사용할  가능성이 매우 높다. 본인 역시 회사에서 운영 중인 클라우드 제품 일부가 Azure 기반으로 설계되어, 데이터 파이프라인 구축할 때 Azure에 대한 이해가 필수적으로 필요했다. 예전에 정리해둔 내용을 공개해본다.. 1. MS Azure Blob Storage  Azure Blob Storage는 클라우드를 위한 Microsoft의 개체 스토리지 솔루션이다. Blob Storage는 대량의 비정형 데이터를 저장하도록 최적화되어 있다. 비정형 데이터는 텍스트 또는 이진 데이터와 같은 특정 데이터 모델이나 정의를 따르지 않는 데이터이다.사용자 또는 클라이..
Elasticsearch 퍼포먼스 튜닝 방법 - 인덱스 디자인 측면에서 Elasticsearch 퍼포먼스 튜닝 방법Apach 루씬을 기반으로 한 검색, 분선엔진인 Elasticsearch는 데이터를 실시간에 가깝게 보여주고 분석해준다. Real-Time 형태의 분석과 검색을 위해 퍼포먼스를 튜닝하려면, 많은 처리량, 낮은 검색 지연시간을 요구한다. 효율적인 인덱스 디자인1. 인덱스를 설계할 때하나의 인덱스에 모든 데이터를 넣고 쿼리로 찾을 것인지여러 인덱스로 나눌 것인지쿼리에 filter가 들어가고 그 값이 Enumerable 할 때는 인덱스를 나눠서 설계해야 한다. 기간이 정해져 있는 데이터의 경우, 기간별로 인덱스를 구성하여 사용하면 좋다. 일, 주, 월별 데이터를 모을 수 있기 때문에 날짜별로 데이터를 모으면 더 빠르게 데이터에 접근할 수 있다.  2. ID 부여할 때..
Elasticsearch 기본 엘라스틱 서치란엘라스틱 서치는 NoSQL 기반의 문서 지향 데이터베이스로 RDBMS와 같은 방법론으로 설계하는 것은 옳지 않다. 엘라스틱 서치에서는 기존에 알려진 방식으로 데이터 모델링을 할 수 없다. 엘라스틱 서치의 데이터 모델링은 데이터의 유형, 검색 조건, 집계·시각화 여부 등에 따라 적절한 데이터 모델링 방법을 선택하여 적용해야 한다. NoSQL (No Structured Query Language)분산 처리를 통해 빠른 검색 가능HTTP를 통해 JSON형식의 Restful API 이용RDBMS에서 LIKE 검색할 때와 달리 검색어의 대소문자에 유연비정형 데이터도 검색 가능분석 통계 유용전문 검색(Full-text Search; 내용 전체를 색인해서 특정 단어가 포함된 문서를 검색) 가능멀티테넌시..
머신러닝 엔지니어가 할 수 있는 Top 6 Error (출처: medium) 1. Default Loss Function을 사용하는 것Mean-squared error는 훌륭한다. 하지만 실제 비즈니스 데이터에 이 손실 함수는 적용이 잘 되지 않는다. Fraud Detection을 예로 들자면, fraud 때문에 달러 손실을 겪는 비즈니스 문제가 대두될 수 있다. mean squared error는 이것을 괜찮다고 오판할 수 있다.실제 데이터 문제에는 Custom Loss Function을 만들어서 문제 해결에 사용하는 것이 좋을 수 있다.많은 과학자들로부터 성능이 이미 입증된 훌륭한 통계적인 도구와 도메인을 반영한 custom 도구 사이에서 갈등할 수 밖에 없을 것이다. 일일히 검증 결과를 확인하는 것은 custom 도구를 사용하게 해줄 것이다. 2. 모든 문제에 대해 1가지 ..