AIB 섹션 4 데이터 엔지니어링 회고
데이터 직군에서 사용하는 기초 지식 배웠다. 데이터의 흐름을 배웠다고 말할 수 있다. 이걸 모든 데이터 직군이 기본으로 알고 있어야 하냐면 협업에서 기본 지식을 갖고 있어야 하고, 상황마다 투입되는 인원이 제한적일 수 있기 때문이다. 전체적인 큰그림은 아래처럼.
개발자로서는 Git을 다룰 줄 알아야 한다. 제품의 변경사항을 기록하고, 협업하여 기능을 추가할 수 있다. 데이터 직군으로서는 데이터를 다루기 위해 역시 데이터베이스를 다룰 줄 알아야 한다. 항상 pandas
에서 .csv
파일을 불러올 수 없다. 데이터는 아주 방대한 양이 있을 것이고, 제한적 권한이 있을 수 있으며, 일부만 다룰 수도 있기 때문이다.
데이터베이스는 관계형 데이터베이스(Relational Database, RDB)와 그렇지 않은 데이터베이스(NoSQL)로 구분할 수 있다. RDB는 테이블의 컬럼들이 다른 테이블과 연관이 있을 때, 데이터 형식이 정해져 있을 때 주로 사용한다. 반면 NoSQL은 형식에 구애받지 않고 데이터를 저장하고 싶을 때 사용한다. RDB는 한 번 정리 된 데이터, NoSQL은 정리되지 않고 빠르게 데이터를 수집할 때 주로 사용한다.
RDB의 주요 기능은 트랜젝션. 여러 작업들이 연속적으로 처리되는 단위이다. 은행 용어랑 매우 비슷한 의미를 가지는데, 송금 작업이 성공적으로 이루어지기 위해 일련의 과정들이 있을 것이고 한 쪽에서 보내고 다른 쪽에서 받는 것이 둘 다 성공적으로 이루어져야 송금이 완료되어야 하지, 한 쪽에서는 보냈는데 다른 쪽에서 받지 못 한다면 그것은 성사되어서는 안 되며 실패로 처리되어 원래 상태로 돌아가야 한다. 트랜젝션은 이것이 기본적으로 적용된다.
이 트랜젝션을 수행하고 나서 이를 확정지어 데이터베이스를 업데이트 하는 행위를 COMMIT이라고 한다. git에서 staging하고 나서 commit하는 것과 비슷하다. ROLLBACK은 트랜젝션을 취소하는 개념이다. git에서 restore –staged와 비슷하다.
트랜젝션에는 ACID가 보장된다. Atomicity: 트랜젝션을 구성하는 하나 하나(atom)가 전부 성공하거나 전부 실패해야 한다. Consistency: 데이터베이스의 상태는 트랜젝션 전과 후에 이전과 같은 유효한 상태여야 한다; 즉 스키마에 위배되는 트랜젝션은 있을 수 없다. Isolation: 하나의 트랜젝션이 다른 트랜젝션에게 보여지는 정도이다; 예를 들어 은행에서 계좌이체를 할 때 전액을 동시에 다른 두 계좌로 각각 이체한다고 했을 때 하나의 트랜젝션으로 인해 전액이 이체되었기 때문에 다른 트랜젝션에서는 이를 알고 실행되지 않아야 한다. Durability: 트랜젝션의 COMMIT은 영구적으로 기록되어야 한다; 시스템이 다운되어도 그 COMMIT 기록은 남는다.
RDB에서 중복을 최소화, 유연성을 최대화, 오류를 최소화하기 위해 정규화를 한다. 여러 가지 이상현상을 해결할 수 있다. 함수종속 부터 확인하면 되는데, 제대로 이해하려면 연습이 많이 필요할 것이다.
NoSQL에서 공통된 점이라고 할 수 있는 것은 데이터베이스 형식이 제한적이지 않다는 것이다. 나머지는 각 NoSQL 시스템마다 다르다. 주로 다뤘던 MongoDB는 Document 형식이며, JSON 타입으로 저장할 수 있다. 웹에서 데이터 전송 형태가 대부분 JSON이기 때문에 유용하고, 기존 RDB와는 다르게 수평적 확장에 용이하다. 보다 자세한 차이점
API를 이용하여 더 세밀하게 데이터를 다룰 수 있다. API는 Application Programming Interface의 약자로, 프로그램 간 소통이 가능하게 해주는 일종의 창구라고 할 수 있다. 이를 이용하여 파이썬에서 RDB 또는 NoSQL에 연결할 수 있다. RDB로는 주로 sqlite3
와 psycopg2
가 있고, NoSQL은 Pymongo
를 배웠었다.
또한 Web API를 이용해서 웹에서 CRUD(CREATE-POST, READ-GET, UPDATE-PATCH/PUT, DELETE-DELETE)을 할 수 있다. 이를 활용하여 데이터 수집 가능. 만약 API를 통해 데이터 수집이 어렵다면 크롤링을 해볼 수도 있다. requests
, BeautifulSoup
으로 데이터를 요청하고 parsing한다. 크롤링은 자동적으로 데이터를 수집하도록 RPA와 연계된다.
이런 내용으로 데이털를 관리했고, 데이터를 활용해서 고객/팀원/누군가에게 무언가 보여주고자 할 때 배포를 생각해봐야 한다. Docker는 가상환경인데, 어떤 OS 환경에서든지 이 가상환경에 접근하면 정해진 명령어에 따라 정확한 행동을 수행할 수 있다. 그리고 웹에서 앱을 배포할 때는 파이썬에서 Flask, Django 등을 사용할 수 있는데, Flask를 배웠다. 그리고 데이터를 보기 좋은 형식으로 나타내는 대시보드도 시도해보았다.
위 내용은 데이터 직군에 전부 공통으로 어느 정도 알고 있어야 하는 내용이라 데이터 직군과 그 업무에 대해 배운 것들도 있는데, 시간 나면 정리해봐야 겠다.
일단 몸 상태가 별로 좋지 않아서 집중이 잘 되지 않고, 마지막에는 과제가 없어서 놀았던 부분도 있다. 그리고 시간 나면 개인 프로젝트 보고 있어서 문제임.
그래도 우선순위를 정해보자면
- Docker
- Dashboard
oreily 책
http://www.yes24.com/Product/Goods/66277191
AARRR
- Acquisition : 어떻게 우리 서비스를 접하고 있는가
- Activation : 사용자가 처음 서비스를 이용할 때 긍정적인 경험을 제공하는가
- Retention : 이후의 서비스 재사용률은 어떻게 되는가
- Referral : 사용자가 자발적 바이럴, 공유를 일으키고 있는가
- Revenue : 최종 목적(매출)으로 연결되고 있는가
댓글남기기