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연결
- 클라우드 서비스에서 생성한 데이터베이스 활용하여 파이썬과 연결한다