본문 바로가기

데이터 엔지니어링은 또 뭐죠?

파이썬 개발 환경 구축 및 관계형 데이터베이스(ft.Git_SQL)

I. 개발 환경

1. 터미널

  • 글자 기반 명령을 전달할 수 있는 어플리케이션

2. CLI; Command Line Interface

  • 글자 기반 명령과 결과가 진행되는 환경
  • 개발 도구들이 주로 CLI를 기반으로 만들어졌기에 필수적으로 공부해야함
  • 맥/리눅스-기본터미널 및 iterm, 윈도우-git bash를 활용하여 CLI 이용함
  • <-> GUI: 그래픽 기반 환경

3. 가상환경 

  • 어플리케이션 개발하는 환경 독립시키고 배포 환경에서도 개발 환경이 똑같이 재현될 수 있도록 함
  • 하나의 파이썬 환경에는 하나의 파이썬의 패키지당 하나의 버전만 설치될 수 있음
  • 두 개의 어플리케이션을 개발하는 상황에서 서로 다른 패키지 버전이 필요하다면,
  • 즉 동시에 하나의 환경에서 두 가지의 패키지 버전이 필요한 상황에서는 패키지간 충돌이 일어남(의존성 충돌)
  • 이러한 충돌 문제를 해결하기 위해 독립적인 가상환경 구축해야함

 

4. Git 과 GitHub

  • GitHub은 원격 코드 저장소이고, GIt을 사용해 인터넷 상에서 개발과 버전 관리를 해준다. 
  • 필요성: 로컬에서 작업하던 내용이 부주의로 날라가는 경우에 복구할 수 있는 방법 제공, 하나의 하드웨어에 제한되지 않고 여러 하드웨어에서 작업하던 내용에 접근할 수 있다. 
  • Git은 버전 관리 시스템(VCS; Version-Control System)이며, 로컬에서 작업한다. 
  • Git은 변경 이력 및 기록 등을 쉽게 추적하고 파악할 수 있게 해준다. 따라서 번호를 통해 이전 기록으로 돌아갈 수 있다. 

  • 온라인에서 로컬로 레포지토리 가져오기
$ git clone {깃헙주소}
  • 로컬 레포지토리 지우기
$ rm -rf .git #'.git'이라는 폴더 제거하기
  • 로컬에서 온라인 레포지토리 주소 추가하기/지우기
$ git remote add origin {깃헙주소} #origin이라는 원격 주소 이름으로 깃헙주소를 연결한다.  
$ git remote remove origin #origin 원격주소 삭제

 

II. SQL

1. DataBase vs DB Management System vs DB system

  • Data는 저장되는 값, 정보를 의미한다.
  • Database는 공유하며 사용할 목적으로 체계화하여 통합관리하는 데이터의 집합
  • DBMS는 데이터베이스에 접근하여 데이터베이스 정의, 조작, 제어 등 관리를 지원하는 소프트웨어
  • DB system은 DB + DBMS + 연관된 applications

**MySQL vs SQL

  • MySQL은 데이터베이스를 의미하고, SQL은 데이터베이스에서 데이터를 관리하는 기능을 의미한다. 

**관계형 데이터베이스와 비관계형 데이터베이스

  • 관계형 데이터베이스(RDB): 구조화된 데이터의 집합이 하나의 테이블로 구성된다. 테이블 간의 관계/상호작용이 이뤄진다. 
  • 비관계형 데이터베이스(NRDB): 관계없는 데이터의 집합, 특정된 관계가 존재하지 않으며 데이터 구조가 고정되어 있지 않다.  

**RDB, SQL의 프로세스

  • 쿼리 → 분석 → 요청 →  메가 데이터 확인 →  해당 데이터 반환

**Data Model

  • DB의 구조를 기술(설명)하는데 사용될 수 있는 개념들의 집합
  • DB 구조를 추상화해서 표현할 수 있는 수단 제공
  • * DB구조: Data 유형, 관계, 제약사항 등등
  • 종류
conceptual data models high-level - 쉬운 이해도, 추상화 수준 ↑
logical data models representational
physical data models low-level

2. SQL

  • Database: 데이터의 크기 상관없이 안정적으로 저장하고 빠르게 검색하기 위해 필요하다.
  • SQL(구조화된 쿼리 언어)를 통해 DB에 쿼리문을 보내어 원하는 데이터만 검색할 수 있다.
  • SQL 종류 - 쿼리에 따라 기능 및 작업이 달라진다. 
Data Definition Language; DDL DB의 오브젝트 정의
Data Manipulation Language; DML 데이터 변경
Data Control Language; DCL DB 접근 권한
Data Query Language; DQL 정해진 스키마 내 쿼리
Transaction Control Language; TCL DML을 거친 데이터 변경사항 수정

3. 관계형 데이터베이스

  • 키워드
Data 각 항목에 저장되는 값
Table 사전에 정의된 행/열로 구성된 구조화 데이터
Field/Column 테이블의 열
Record/Tuple 데이블 한 행에 저장된 정보
Key 데이블의 각 레코드를 구분할 수 있는 값, 각 레코드마다 고유값(Primary/Foreign)
  • 종류
테이블 간 관계 테이블 자체 관계
1 : 1 self-referencing
1 : N
N :N

4. 스키마 디자인

  • model 바탕으로 실제 DB 구조를 기술(표현)하는 설계도
  • * model은 DB구조 모델링 방법을 제공한다.
  • DB state: 특정 시점의 DB 내의 데이터
  • three-schema architecture: 지속적으로 변경되는 물리적 DB 구조가 실제 사용되는 user application에 영향받지 않도록 분리시키는 것 - external, conceptual, internal

5. 트랜잭션

  • DB 상태를 변화시키는 작업의 모음 - 정보의 교환이나 데이터베이스 갱신 등 일련의 작업들에 대한 연속처리 단위
  • 데이터베이스의 무결성이 보장되는 상태에서 요청된 작업을 완수하기 위한 작업의 기본 단위
  • * 무결성: 데이터가 오염되거나 위조되지 않고 정확성과 안정성을 나타내는 것
  • 각 트랜잭션은 하나의 작업으로 시작해 묶여 있는 모든 작업을 완료해야 끝나게 되어있다. 만약 하나의 작업이 실패하게 된다면 전부 실패하게 되는 것이다. 
  • COMMIT: 트랜잭션은 확정 신호를 알려줘야 데이터베이스에 반영된다. 이때의 확정신호를 Commit이라 한다. 
  • DBeaver는 기본적으로 auto-commit이 설정되어 있어 따로 Commit을 보내지 않아도 된다. 
  • Rollback: 변경 작업의 내용을 취소하는 개념
  • 아래와 같은 경우, id4만 데이터베이스에 입력된다.  

6. ACID ; 트랜잭션이 보장하는 네가지 성질

  • Atomicity: 원자성; 하나의 트랜잭션을 구성하는 작업들이 모두 성공하거나 모두 실패해야 한다.
  • Consistency: 일관성; 트랜잭션 이전과 이후 데이터베이스 상태는 이전과 같이 유효해야 한다.
    • 데이터베이스의 기본 제약 및 규칙에 의거한 트랜잭션(작업들)이어야 한다.
  • Isolation: 고립성; 하나의 트랜잭션이 다른 트랜잭션과 독립되어야 한다. 
    • 동시에 여러 트랜잭션이 수행되더라도 연속으로 실행된 것과 동일한 결과가 나타나야 한다. 

  • Durability: 지속성; Commit 후 디스크에 저장된 데이터베이스의 상태는 유지되어야 한다. 
    • 하나의 트랜잭션이 성공적으로 수행되었다면 해당 트랜잭션에 대한 로그가 남고 런타임 및 시스템 오류가 발생하더라도 해당 기록은 영구적이어야 한다.  

 

III. DB-API

1. Python DB API: 파이썬과 데이터베이스 연결

  • PEP 249: 파이썬과 데이터베이스 연결 모듈 제작 가이드라인, 함수, 메소드, 파라미터, 키워드 등에 관한 설명
  • 파일형 데이터베이스 sqlite 활용 연결법
    • 가벼운 파일형 관계형 데이터베이스 - 서버를 띄우지 않고 작업하며 기능적 제한으로 고급 쿼리 실행 어려움
    • 간단하고 빠르게 데이터베이스 구축하거나 개발 단계에서 단순한 실험 등을 진행하기에 적합함
import sqlite3
con=sqlite3.connect('test.db') #데이터베이스파일과 연결
con=sqlite3.connect(':memory:') #메모리에서 연결
cur=con.cursor() #데이터베이스와 소통하기 위한 커서 생성
# 커서 메소드----------------------------------------------
cur.execute("""CREATE TABLE test_table(
				name VARCHAR(32),
                age INT);
                """)
# 커밋-----------------------------------------------------
con.commit()
# 추가한 데이터 조회----------------------------------------
cur.execute("SELECT * FROM test_table;")
cur.fetchall()

2. 클라우드 데이터베이스

  • 서버형 데이터베이스 PostgreSQL 활용 연결법
  • PostgreSQL를 클라우드 서비스로 만든 뒤에 연결한다. 
  • * 클라우드 데이터베이스: 원격으로 관리되는 데이터베이스이므로 해당 데이터베이스에 대한 접근 정보가 있어야 접근이 가능함
  • * 반대 개념: 온프레미스 방식 - 관리비용이 클라우드 서버보다 많이 들고 직접 환경을 구축해야하지만, 정보보안, 속도감이 좋음. 
  • 원격으로 데이터베이스 연결할 때에는 URI 형식으로 연결한다. 
  • ElephantSQL: PostgreSQL 기반 데이터베이스 관리 시스템(DBMS)을 제공하는 클라우드 서비스

3. PostgreSQL -Python연결

  • 클라우드 서비스에서 생성한 데이터베이스 활용하여 파이썬과 연결한다

데이터베이스 연결