공부/AIFFEL

FUNDAMENTAL 25. 더 많이! 더 깔끔하게! 데이터를 관리하는 데이터베이스

dong_dong_2 2021. 3. 3. 20:22

1. 파일 시스템 활용
    - 오늘 노드의 컨셉은 내가 데이터 관리 어플리케이션을 제작하는 파이썬 개발자가 된 것이다.
    - 파이썬을 이용해서 텍스트 파일에 담긴 데이터를 읽어와서 필요한 정보를 출력하는 어플을 만든다는 가정으로 진행되었다.
    - 1단계 : 문제 설명
       1) 어떤 파일에 사원들의 정보가 담긴 데이터가 있는데 이 파일을 읽어와서 월급을 계산하고, 월급이 가장 높은 사원을 찾는 프로그램을 만들 것이다.
    - 2단계 : 필요한 함수 만들기
       1) 코딩을 하기 전에 전체 프로그램을 어떻게 구성할지 대략적으로 생각해 본다.
       2) 어떤 프로그램을 만들지, 그 안에는 어떤 함수가 필요한지, 함수들은 어떤 기능을 할지 등
       3) 여기서는 summarize()라는 함수를 만드는 것을 예시로 듬
    - 3단계 : Class 설계
       1) 여기서는 Employee 라는 Class를 설계했다.
       2) 인스턴스 변수로 무엇을 넣을지 생각하고 코딩한다. 그 후 잘 작동되는지 확인해본다.
    - 4단계 : 함수 선언
       1) 여기서는 make_emplyee() 함수를 만들었다.
       2) 위의 클래스는 한두명 사원은 타이핑 할 수 있지만 사원이 많으면 그러기 힘드니 함수를 만들어서 그 안에 클래스를 넣어줬다.
       3) 그 후 파일을 열어서 반복문을 사용해서 모든 라인에 함수를 돌렸다.
    - 5단계 : Class 이어서..
       1) 위에서 만든 Class의 설계가 사실 끝난게 아니라 한다.
       2) 인스턴스, 속성값과 같은 형식을 사용하여 인스턴스 변수에 접근할 수도 있지만, 보통은 메소드로 구현해 값을 반환받는 것이 일반적이다.
       3) 이는 Clean Code 운동과 관련된 내용이니 통상 이런 식으로 구현한다 정도로만 이해하면 된다.
       4) 그 후 급여 계산하는 함수를 만들고 클래스에 집어넣어서 클래스를 완성시켰다.
    - 6단계 : 전체 코드
       1) 1 ~ 5단계에서 한 것을 다 묶어서 실행하고 기획의도대로 동작하는지 확인했다.
2. Pandas와 csv파일
    - 데이터 합치기 : merge, join, concat
       1) merge : on으로 키값을 잡고, how로 방법(inner, outer, left, right)를 써서 두 개의 데이터프레임을 합칠 수 있다.
       2) join : merge 대신 이용할 수 있다.
       3) concat : 적층 또는 연결이라고 표현하기도 한다. 데이터를 이어 붙이는 방식이다.
3. Pandas의 유용한 기능들
    - 필터링 연산
       1) df["컬럼"]
       2) loc 사용 : label을 이용하여 행 또는 열을 지정, 데이터를 추출한다. ex) loc[행, 열]
       3) iloc 사용 : 정수 인덱스를 사용하여 행 또는 열을 지정, 데이터를 추출한다. ex) iloc[행, 열]
    - 그룹 연산
       1) groupby() : 키 값에 따라 그룹을 묶은 뒤 원하는 연산을 수행할 수 있다.
          (1) groupby() 객체 생성 -> groupby() 객체의 연산 수행(sum, max, min, mean 등)
       2) groupby 객체에 apply()를 통해 특수 수식(lambda같은) 연산 수행
4. Pandas Transform 실전 연습
    - 위에서 배운 Pandas를 10개의 문제를 통해 실습을 수행함.
5. 다중 사용자 환경
    - 현실에서는 데이터를 어떻게 관리할까? 예를 들어 은행과 같은 곳
    - 이런 데이터의 영속성을 어떻게 관리해야 할까? 이전 스텝까지 배운 내용으로 잘 다룰 수 있을까?
    - 결론은 어렵다. 왜냐하면 트랜잭션(Transaction)의 개념이 없기 때문이다.
    - 그래서 우리는 실시간 트랜잭션 처리 기능을 갗춘, 데이터의 정합성을 보장하는 데이터 관리 프로세스를 필요하게 되고, 배울 것이다.
    - 다음으로 배울 것은 데이터베이스 관리 시스템(DBMS)이다.
6. 데이터베이스의 세계로
    - 데이터베이스라고 말하는 시스템은 컴퓨터가 개발된 1960년대부터 시작된 개념이다. 처음에는 "파일 시스템"이라고 불렸다.
    - 그리고 현재 많이 사용되고 있는 관계형 데이터베이스(RDB : relational database)는 1970년대 Ted Codd에 의해 최초로 고안됬다.
    - 데이터 베이스, 서버, 데이터만 관리하는 컴퓨터
       1) 앞에서 다룬 프로그램(사원을 관리하는)은 모두 하나의 컴퓨터에서 실행했다. 그런데 실무에서의 데이터는 굉장히 복잡하기에 데이터만 저장하는 공간을 만든다.
       2) 흔히 물리적 컴퓨터에 방점을 두어 데이터 서버 컴퓨터, 또는 추상적인 정보의 집합에 방점을 두어 데이터베이스라고 한다.
       3) 구조를 생각해 보면 데이터 서버 컴퓨터 <-> 서버에 접근할 수 있는 전용 프로그램 <-> 내가 사용하는 컴퓨터 의 구조를 생각 해 볼 수 있다.
       4) 이런 데이터를 요청하는 쿼리(query)를 작성하기 위한 언어 중 하나가 SQL(Structured Query Language)이다.
    - 소프트웨어의 요소와 소프트웨어를 만드는 사람들
       1) 보통 사용자는 소프트웨어 어플리케이션을 설치해서 사용한다. 편의상 어플이라 부르겠다.
       2) 그리고 어플이 사용자가 직접 사용하는 프로그램(프론트엔드)과 뒤에서 이 프로그램을 지원해주기 위한 서버(백엔드)를 모두 통칭한다고 가정하자.
       3) 통상 개발자라 하면 이 어플을 개발하는 사람들을 뜻한다.
       4) 그리고 DBA(Database Architect)는 데이터를 어떻게 관리할지, 어떤 항목으로 관리할지 등을 설계하고 데이터베이스에 접근하기 위한 쿼리를 작성한다.
       5) 이 때 설계하는 데이터베이스의 구조를 스키마(schema)라고 부른다.
    - 관계형 데이터베이스(Relational Database)
       1) 여러 가지 종류의 데이터베이스가 있는데, 가장 오랜 시간 많이 쓰이고 있는 데이터베이스가 관계형 데이터베이스이다.
       2) 관계형 베이스란 데이터를 행과 열을 가진 표 형태로 표현하고 어떤 관계가 있는 항목끼리 묶어서 관리하는 체계를 뜻한다.
       3) 우리가 아는 표와 비교해보면 row(행) = tuple, record / column(열) = attribute(속성), field / table(표) = relation(관계), base relvar(기초 관계변수) / view, 결과 집합 = derived relvar(파생 관계 변수) 이다.
    - 데이터베이스 관리 제품
       1) 데이터베이스라는 추상적인 자료 형태를 만들고 관리하기 위해 여러 가지 소프트웨어가 나와 있다. 유료로 판매한 제품도 있고 오픈소스 제품도 있다.
          (1) Oracle (오라클에서 개발)
          (2) DB2 (IBM에서 개발)
          (3) SQL Server (Microsoft에서 개발)
          (4) PostgreSQL (오픈소스)
          (5) MySQL (오픈소스)
          (6)  SQLite (오픈소스)
7. SQL
    - SQL은 어떤 결과를 얻기 위해 수행 과정을 나열하는 것이 아닌 원하는 결과를 질의하는 언어의 형태를 띄고 있다는 점이 특별하다.
    - 웹의 번성을 가능하게 했던 것이 HTML이라는 간단한 문법의 언어로 표준화할 수 있었기 때문이라면, 데이터베이스 또한 SQL이라는 표준 인터페이스를 누구나 제공할 수 있었기 때문에 대중화가 가능했다.
    - SQL문 종류
       1) DDL(Data Definition Language, 데이터 정의어) : 테이블이나 관계의 구조를 생성하는 데 사용한다. 테이블, 데이터베이스, 사용자에 대한 생성, 삭제 제약조건(constraint), 권한(permission)을 설정한다.

 출처 : https://lms.aiffel.io/steps/619


       2) DML(Data Manipulation Language, 데이터 조작어) : 테이블의 데이터를 조회, 삽입, 갱신, 삭제할 때 사용한다. 이 때 이런 데이터의 기본 조작 행위를 CRUD라고 줄여서 부른다.
          (1) 생성(Create) : INSERT 문 사용
          (2) 조회(Read) : SELECT 문 사용
          (3) 갱신(Update) : UPDATE 문 사용
          (4) 삭제(Delete) : DELETE 문 사용

 출처 : https://lms.aiffel.io/steps/619


8. 파이썬으로 데이터베이스 다루기
    - 파이썬 DB-API
       1) 파이썬 인터프리터는 데이터베이스를 바로 사용할 수 있도록 표준 API를 지원한다. PEP249가 바로 그 스펙이다.
       2) 파이썬 데이터베이스 표준 API는 MySQL만 지원하는 것이 아니라 SQL기반 데이터베이스를 어떤 것이든 사용할 수 있도록 한다.
       3) SQLite는 이미 내장되어 있어서 별도의 설치가 필요없고, 다른 것은 데이터베이스 전용 드라이버만 설치하면 된다.
       4) API 메인 함수
          (1) connect() : 데이터베이스의 연결을 만든다.
          (2) cursor() : 질의를 관리하기 위한 커서 객체를 만든다. (file의 open과 비슷)
          (3) execute(), excutemany() : 데이터베이스에 하나 이상의 SQL 명령을 실행한다.
          (4) fetchone(), fetchmany(), fetchall() : 실행 결과를 얻는다.
    - 파이썬 튜토리얼 : 위에서 배운 함수를 사용해 보고, 데이터베이스에 반영하기 위해 commit() 함수를 추가로 사용했다.
9. DB-API
    - 여기서는 실제로 데이터베이스를 구현해봤다.
       1) 1단계 : 메모리에 SQLite3 데이터베이스를 만들고 4가지 속성을 지닌 sales 테이블을 만든다.
       2) 2단계 : sales 테이블에 데이터를 삽입한다.
       3) 3단계 : sales 테이블에 질의한다.
       4) 4단계 : 출력 데이터의 개수를 샌다.
       5) 전체코드를 합쳐서 실행해 본다.