Section3 1주차 학습목표 정리

Pream·2022년 4월 3일
0

개발환경

🌱 Level 1 :

Lecture Note 에 있는 주요 개념을 정의할 수 있으며 예제 코드를 이해하고 재현할 수 있다.

->

  • CLI : keyboard로 컴퓨터에게 명령
  • GUI : Graphic으로 컴퓨터에게 명령
  • 가상환경 : 독립적인 개발환경으로 만들어주고 배포환경에서도 해당환경과 동일하게 해줌.
  • git : 로컬 코드 저장소. 변경사항 추적 및 버전관리에 용이함
  • github : 원격 코드 저장소. 작성한 코드를 원격으로 공유할 수 있음.

ㅤ터미널을 이용하여 CLI에 접근하고, 노트에 기재된 TOP 5 기본 명령어를 이용한 작업들을 수행할 수 있다.

->

  • cd : 폴더에 들어가는 명령어

  • pwd : 현재 디렉토리

  • mkdir : 폴더 생성

  • cat : 파일을 터미널에 출력

  • ls : 현재 디렉토리안의 파일 및 폴더 출력

    ls -l : 상세 정보 출력
    ls -a : 숨긴 파일까지 표시
    ls -al : 숨긴 파일까지 상세정보 표시


ㅤ파이썬 가상환경이 왜 필요한지 설명할 수 있고, conda 예제를 재현할 수 있다.

-> 하나의 환경에는 한 패키지당 하나의 버전만 사용가능한데 만약 2개의 어플리케이션을 개발하는 상황이고 각자 사용하는 버전이 다르다면 이 둘은 동시에 작동할 수 없다. 이것을 가능하게 하고자 독립적인 환경을 만들어 주는것이다.


ㅤGit과 Github를 분류하여 설명할 수 있으며, 깃을 이용하여 버전 관리를 할 수 있다.

-> git은 작성한 코드를 로컬에 저장하고 github은 원격 코드 저장소이다. github은 git의 add,commit,push 기능을 이용해 github로 전송할 수 있다.

  • git add : stage area 에 파일저장
  • git commit : stage area -> local repository 로 파일 저장
  • git log : 커밋 기록 확인
  • git log --stat : 변경 사항 확인
  • git status : git 상태 확인

🔝 Level 2 : 예제 코드를 해석하고 응용할 수 있으며 과제를 수행할 수 있다.


ㅤ워킹 디렉토리(작업 폴더)와 git, 가상환경을 분리해서 설명할 수 있다.

-> 가상환경으로 독립적인 환경을 만들어준다. git은 로컬 코드 저장소로 변경사항추적 이나 버전관리를 도와준다. 작업폴더를 만들고 git init을 선언해주면 git하고 그 작업폴더가 연결되어 git의 기능을 사용할 수 있게 된다.


ㅤconda를 이용하여 의도하는 가상환경을 생성 및 삭제할 수 있고, 코드를 해석하여 설명할 수 있다.

->

  • 가상환경 만들기 : conda create --name 이름 python='버전'

  • 가상환경 제거 : conda env remove --name 이름


ㅤrequirements.txt 의 필요성을 설명할 수 있고, 제작할 수 있다.

-> 다른사람과 프로젝트를 공유하거나 환경을 다른 위치에 복사할때 conda create로 가상환경만 딸랑 만들어준다고 공유 혹은 복사가 되지 않는다. 왜냐하면 그때 사용되었던 패키지들을 설치 하지 않았기 때문이다. requirements.txt는 기존 환경에서 사용되었던 패키지를 한번에 설치할수 있게 만든 파일이다.

pip freeze > requirements.txt 로 제작할 수 있다.


ㅤ코드의 변경 사항을 Git을 이용하여 기록하고 원격 레포에 반영하여 PR을 생성할 수 있다.

-> add -> commit -> push -> pull request


🔥 Level 3 : Lecture Note 에 있는 주요 개념과 코드를 연결하여 설명할 수 있으며 도전 과제를 수행할 수 있다.


ㅤ기본 터미널 명령어를 찾아보지 않고 사용할 수 있다.

-> 자주 사용하는 것들은 이제 익숙해졌다. find 같은 명령어는 필요할때마다 찾아보면 될 것 같다.


ㅤconda 외의 파이썬 가상환경을 이용하여 의도하는 개발환경을 구축할 수 있다.

-> 2가지를 소개 하자면

  • pip env
  • virtual env

1.pipenv
설치 : pip install pipenv
파이썬버전 : pipenv --python 3.X
가상환경실행 O : pipenv shell
가상환경실행 X : pipenv run
requirements.txt : pipenv lock

2.virtual env
설치 : pip3 install pyenv
가상환경생성 : pyenv virtualenv
가상환경실행 : pyenv activate
가상환경종료 : pyenv deactivate


ㅤGit branch를 이용할 수 있고, git pull 혹은 git merge 과정에서 발생하는 충돌을 해결할 수 있다.

-> branch 를 사용해 동시에 여러 작업을 독립적으로 진행할 수 있다. 충돌은 merge 방법과 rebase 방법이 있는데 merge는 master 의 충돌부분을 수정한후 commit 처리시켜 HEAD로 뺀 다음에 merge를 하면 된다. rebase도 merge와 마찬가지로 충돌부분을 수정해야 하지만 commit이 아니라 --continue로 처리한다. 처리하고나면 HEAD에 위치하게 되는데 master 보다 앞에 있게 되므로 git checkout master 로 브랜치 전환후 merge 하면 된다.


🚀 Level 4 : Lecture Note 에 있는 개념 중 자신이 모르는 것을 구분해 낼 수 있으며 스스로 목표를 세우고 추가 학습을 진행할 수 있다.


ㅤCLI, 터미널, 쉘을 분리해서 설명할 수 있다.


  • CLI : 텍스트로 명령어를 내리고 결과값도 텍스트로 받는 컴퓨팅 인터페이스. 개발시 입출력 전달 및 자동화에 최적화 되어있어 개발에 있어 매우 간편함.
  • 터미널 : 운영체제 커널과 연결된 문자 입출력 기능을 가진 소프트웨어.
  • 쉘 : 컴퓨터에 명령을 내리기 위한 인터페이스 역할. 흔히 보는 명령줄이 바로 쉘 이다.

ㅤ리눅스 역사와 철학을 설명할 수 있고, 우분투 리눅스 환경에서 파일 권한 설정을 할 수 있다.

-> 우분투 파일권한 설정 : chmod [변경될 퍼미션 값][변경할 파일]

읽기 ( r ) : 파일의 읽기권한
쓰기 ( w ) : 파일의 쓰기권한
실행 ( x ) : 파일의 실행권한

EX) rwx - rx - rx 일때 소유자 - 소유자의 그룹원 - 일반유저 형식이다.
퍼미션 값의 계산은 다음과 같다.
r = 4 , w = 2 , x = 1

4+2+1 - 4+1 - 4+1
= 755

퍼미션값은 755가 나온다.

적용하면 $ chmod 755 변경할파일


ㅤGit의 기본요소를 구성하는 스냅샷을 설명할 수 있다.

-> 파일을 복사하여 관리하던 기존의 방법은 같은 내용을 반복해서 저장하기 때문에 용량이 많이 들고 수정된 부분을 일일이 찾아야 하기 때문에 검색도 매우 불편하지만 스냅샷은 수정된 부분만 기록하는 방법이므로 이런 단점들을 보완한 방법이라 보면 된다. git에서 add , status , diff 등으로 스냅샷을 관리할 수 있다.


SQL


🌱 Level 1 : Lecture Note 에 있는 주요 개념을 정의할 수 있으며 예제 코드를 이해하고 재현할 수 있다.


ㅤ데이터베이스의 필요성과 관계형 데이터베이스의 특징을 설명할 수 있다.

-> 분산 되어있는 데이터들을 통합하여 보안,저장공간,데이터 일관성 등의 장점이 있기에 데이터베이스가 필요하다. 관계형 데이터베이스는 테이블 형태로 이루어져 있고 키(key)와 값(value)의 관계를 나타낸다.즉, 데이터의 종속성을 관계로 표현하는 것이 관계형 데이터베이스 이다.


ㅤSQL 특징을 설명할 수 있고, 스키마를 통해 관계를 설명할 수 있다.

-> 관계형 데이터베이스에서 사용되는 언어로 영어문장과 비슷한 구조를 가지고 있어 쉽고 데이터의 연산이 절차에 따라 진행되는것이 아니라 데이터의 집합 단위로 처리된다.
관계는 1:1 , 1:N , N:N , Self Refferencing 이 있다.

  • 1:1 : 테이블간의 레코드의 관계가 1:1인 경우 (ex. 주민번호는 한사람당 하나)

  • 1:N : 레코드 하나가 다른 테이블의 여러개의 레코드들과 관계가 있는 경우(ex. 한사람당 여러개의 핸드폰번호를 사용하는 경우)

  • N:N : 양쪽 테이블의 레코드들이 서로 관계가 있는 경우 (ex. 고객과 상품의 관계의 경우 한 고객은 여러개의 상품을 선택할 수 있고 상품도 여러명의 고객을 가질 수 있다.)

  • Self Refferencing : 아직 잘 모르겠다 설명하기 힘들다.


ㅤSQL Basics를 이해하고 예제를 재현할 수 있다.

-> DISTINCT , GROUP BY , ORDER BY 등 예제 재현 가능하다.


🔝 Level 2 : 예제 코드를 해석하고 응용할 수 있으며 과제를 수행할 수 있다.


ㅤ주어진 스키마를 SQL을 활용하여 구현할 수 있다.

-> CREATE TABLE , PRIMARY KEY , FOREIGN KEY 로 구현 가능하다.


ㅤSQL 쿼리문을 활용하여 원하는 조건의 데이터를 출력할 수 있다.

-> O


🔥 Level 3 : Lecture Note 에 있는 주요 개념과 코드를 연결하여 설명할 수 있으며 도전 과제를 수행할 수 있다.


ㅤ주어진 데이터와 출력값을 살펴보고 어떤 SQL 쿼리문을 사용할지 판단하고 구현할 수 있다.

-> O


ㅤSQL JOIN 의 종류를 분류하고 활용 예시를 들어 설명할 수 있다.

-> INNER JOIN , OUTER JOIN 이 있다. inner은 공통부분만 연결한다. outer은 left에 있는 데이터 테이블은 모두 보존하고 right에 있는 테이블은 흡수(?)당한다.


🚀 Level 4 : Lecture Note 에 있는 개념 중 자신이 모르는 것을 구분해 낼 수 있으며 스스로 목표를 세우고 추가 학습을 진행할 수 있다.


ㅤ3층 스키마에 대해 데이터베이스를 보는 관점과 연관지어 간단하게 설명할 수 있다.

->

  • 외부단계 : 사용자 관점

  • 개념단계 : 설계자 관점 / 논리적 독립성 : 개념스키마가 바뀌어도 외부스키마에 영향을 미치지 않도록 하는것

  • 내부단계 : 개발자 관점 / 내부스키마가 변경 되어도 개념/외부스키마에 영향을 미치지 않도록 하는것


ㅤ함수 종속과 정규화(제3정규형까지)를 연관지어 설명할 수 있고, 정규화가 필요한 이유에 대해 설명할 수 있다.

->

  • 1 정규화 : 각 로우마다 컬럼의 값이 1개만 있어야 한다.

  • 2 정규화 : 테이블의 모든 컬럼이 완전 함수적 종속을 이루어야함. 만약 컬럼 기본키 A , 일반컬럼B , 일반컬럼C 가 있다고 하자. A 와 B는 종속관계, A 와 C도 종속관계인데 B와 C는 종속관계가 아니라면 이것은 2 정규화에 위배되므로 테이블을 쪼개주어야 한다.

  • 3 정규화 : 기본키 외의 다른컬럼이 또다른 컬럼을 결정할 수 없다.


SQL 2


🌱 Level 1 : Lecture Note 에 있는 주요 개념을 정의할 수 있으며 예제 코드를 이해하고 재현할 수 있다.


ㅤ트랜잭션에 대해서 설명할 수 있고, COMMIT 과 Rollback 예제를 재현할 수 있다.

-> 트랜잭션은 데이터베이스의 상태변화를 위한 작업단위를 말한다. 트랜잭션은 확정신호를 알려줘야 데이터베이스에 반영이 된다. 이 확정신호가 바로 Commit이다. Rollback은 트랜잭션중에 지금까지 트랜잭션에 수행한 내용을 전부 취소하겠단 명령어 이다.


ㅤACID의 특징에 대해서 각각 설명할 수 있다.

->

  • Acid 는 원자성이다. 하나의 트랜잭션을 구성하는 작업들은 서로 유기적인 관계가 있다. 모든 작업이 완료되어야만 트랜잭션이 끝난다. 하나라도 작업이 실패하면 트랜잭션 자체에 오류가 난다.

  • Consistency 는 일관성이다. 예를들어 create table user(id, name) 을 생성했다고 한다면 id가 없는 유저는 테이블에 추가할 수 없다.

  • Isolation 은 독립성이다. 예를들어 1만원이 있는 계좌에서 A라는 사람에게 7천원을 보내는 트랜잭션 , B라는 사람에게 6천원을 보내는 트랜잭션이 있다면 이 트랜잭션은 하나가 먼저 끝나야 한다. 만약 두개의 트랜잭션이 동시에 완료되면 -1만3천원이 되기 때문이다.

  • Durability 는 지속성이다. 트랜잭션이 성공적으로 수행됬을시 기록이 남는다. 런타임 오류나 시스템 오류가 발생해도 해당 기록은 영구적이어야 한다.


ㅤSQL 내장함수와 서브쿼리에 대해서 설명할 수 있다.

-> 파이썬의 내장함수와 마찬가지로 여러개의 내장함수가 존재한다. 서브쿼리는 쿼리문을 작성할때 다른 쿼리문을 포함하는것이 서브쿼리 이다.


🔝 Level 2 : 예제 코드를 해석하고 응용할 수 있으며 과제를 수행할 수 있다.


ㅤSQL 내장 함수와 CASE문을 활용하여 SQL 다중 테이블 쿼리를 할 수 있다.

-> 다중 테이블은 join 을 이용하면 된다.


ㅤSELECT 실행 순서에 대해 설명할 수 있다.

->
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY

테이블 열고, 조건걸고 , 조회하고 , 데이터 정렬한다.


🔥 Level 3 : Lecture Note 에 있는 주요 개념과 코드를 연결하여 설명할 수 있으며 도전 과제를 수행할 수 있다.


ㅤ서브쿼리를 활용하여 원하는 데이터를 쿼리 해올 수 있다.

-> O


ㅤ서브쿼리를 포함한 SELECT 쿼리문의 실행 순서를 설명할 수 있다.

-> 서브쿼리를 포함해도 실행순서는 변하지 않는다. 서브쿼리는 FROM 과 JOIN에 포함된다.


🚀 Level 4 : Lecture Note 에 있는 개념 중 자신이 모르는 것을 구분해 낼 수 있으며 스스로 목표를 세우고 추가 학습을 진행할 수 있다.


ㅤ슈퍼 키, 후보 키, 기본 키, 대체 키, 외래 키에 대해서 설명할 수 있다.

->

    1. 슈퍼키 : 테이블에 존재하는 필드들의 부분집합으로 유일성을 만족해야 한다. 보통 식별자가 슈퍼키.
    1. 후보키 : 유일성과 최소성을 만족해야 하는 키이다. 유일성은 말그대로 중복되지 않는 유일한 값을 가져야 하고 최소성은 최소한의 필드로 레코드를 유일하게 구별할 수 있는 속성이다.
    1. 기본키 : 후보키 중에서 NULL값을 가질수 없는 키이다. 기본키는 자주값이 바뀌지 않는것을 선택하는 것이 좋고 단순한 값을 가지는것을 선택하는것이 좋다.
    1. 대체키: 후보키 중에서 기본키로 선택된 것들을 제외한 키이다.
    1. 외래키: 한 테이블의 키 중에서 다른 테이블의 레코드를 유일하게 식별할 수 있는 키를 말한다.

ㅤ데이터베이스의 옵티마이저의 종류와 그 특징에 대해 설명할 수 있다.

-> 옵티마이저는 DBMS 의 두뇌다. SQL 쿼리문을 작성하고 실행하면 바로 실행이 되는것이 아니라 이 옵티마이저 라는 곳에서 이 실행문을 어떻게 수행하겠다는 여러가지 실행계획을 세우게 되고 각 실행계획을 비교해서 최고의 효율을 가지는 실행계획을 판별하여 그 계획에 따라 쿼리를 수행하게 된다.

옵티마이저의 종류는 크게 2가지 이다.

  • 규칙 기반 옵티마이저 : 실행 속도가 빠른순서대로 규칙을 먼저 세워두고 우선순위가 앞서는 방법을 채택한 것이다.

규칙 순서 리스트이다. 이 순서를 잘 공부해두면 효율적인 쿼리문을 작성하는데 도움이 될 수 있다고 한다.

  • 비용 기반 옵티마이저 : 비용이 최소한으로 나오는 실행계획을 수행한다. 비용을 예측하기 위해 규칙 기반 옵티마이저가 사용하지 않는 테이블, 인덱스, 칼럼 등의 다양한 객체 정보와 시스템 통계정보를 이용한다.


ㅤ데이터베이스의 인덱스에 대해 간단하게 설명할 수 있다.

-> 데이터베이스의 테이블에 대한 검색 성능의 속도를 높여주는 자료구조이다. 인덱스는 굉장히 중요한데 그 이유는 검색을 할때 레코드를 처음부터 끝까지 다 읽게 되면 속도가 굉장히 떨어진다. 데이터가 많아지면 더 오래 걸릴것이다. 하지만 인덱스 테이블은 데이터들이 정렬되어 저장되있기 때문에 해당 조건에 맞는 데이터들을 빠르게 찾아낼 수 있다.


DB API


🌱 Level 1 : Lecture Note 에 있는 주요 개념을 정의할 수 있으며 예제 코드를 이해하고 재현할 수 있다.


ㅤDB API를 사용하는 이유에 대해서 설명할 수 있다.

-> 만약 DB API가 없다면 DB 접속정보가 바뀔때마다 각 어플리케이션에서 접속정보를 바꿔줘야 한다. 하지만 API가 있다면 각자 어플리케이션마다 접속정보를 바꿀 필요가 없다. 단지 API가 접속정보만 변경해주면 어플리케이션 모두 다 접속정보가 바뀌게 되어 효율적이다.


ㅤ로컬과 클라우드 데이터베이스를 분류하여 설명할 수 있다.

-> 클라우드 베이스는 원격으로 데이터베이스를 관리하기 때문에 관리 비용이 적게 들어가고 구축 비용이 거의 없다. 그에반해 로컬인 온프레미스 방식은 초기 구축비용이 많이 들고 관리 비용 또한 많이 들어간다. 하지만 로컬은 상대적으로 보안성이 좋으며 이용비용이 없다.


ㅤ클라우드 데이터베이스를 생성하고 DBeaver를 통해 연결할 수 있다.

-> 클라우드 데이터베이스의 서버주소 및 id,패스워드를 Dbeaver Connection에 입력하면 된다. 만약 클라우드 서버의 sql이 Postgres라면 그에 맞게 Connection을 해주면 된다.


ㅤPython DB API의 객체와 메서드를 설명할 수 있으며, 노트 예제인 sqlite3 활용을 재현할 수 있다.

-> .connect() : DB에 연결 , .cursor() : DB 와 소통할수 있는 메서드, .execute() : 쿼리문을 DB로 넘기는 메소드 , .commit() : 현재 트랜잭션을 commit한다. , .cursor().close() : 커서 닫기를 하지 않으면 메모리 낭비도 많이 되고 동일한 커서를 다른 PL/SQL BLOCK에 사용하면 오류가 나게 된다. , .connect().close() : 마찬가지로 메모리 반환 및 오류를 방지하는 목적으로 사용한다.


🔝 Level 2 : 예제 코드를 해석하고 응용할 수 있으며 과제를 수행할 수 있다.


ㅤsqlite3를 통해 SQLite을 다룰 수 있다.

-> import sqlite3 하고 connect(), cursor(), execute() 등의 메소드를 이용하면 된다.


ㅤ여러 형태의 자료구조를 가진 데이터를 데이터베이스에 적재할 수 있다.

-> 각 자료구조에 대한 접근방법을 알고 그거에 맞춰 INSERT INTO VALUES 를 이용해 적재 가능하다.


🔥 Level 3 : Lecture Note 에 있는 주요 개념과 코드를 연결하여 설명할 수 있으며 도전 과제를 수행할 수 있다.


ㅤ클라우드 데이터베이스를 생성하고 DB API를 활용하여 데이터베이스와 소통할 수 있다.

-> 파이썬 PEP 문서를 참조해 서버에 맞는 DB API를 설치해서 사용하면 된다.


ㅤpsycopg2를 통해 PostgreSQL을 다룰 수 있다.

-> psycopg2.connect() 함수를 이용해 서버정보,id,DB이름,password 를 입력하면 된다.


ㅤDB API를 활용하여 주어진 스키마에 따라 테이블을 생성하고, csv 형태의 데이터를 적재할 수 있다.

-> pandas로 csv파일을 불러온후 value값을 변수에 담은후 테이블 생성해서 거기에다 INSERT INTO VALUES로 대입하면 된다.


🚀 Level 4 : Lecture Note 에 있는 개념 중 자신이 모르는 것을 구분해 낼 수 있으며 스스로 목표를 세우고 추가 학습을 진행할 수 있다.


ㅤPandas를 사용하지 않고 csv 데이터를 다룰 수 있다.

-> import sqlite3 , csv로 다룰수 있다.


ㅤ파일형, 서버형, 인메모리형 데이터베이스를 구별하여 설명할 수 있다.

->

  • 파일형 : 파일형은 각각의 응용 프로그램이 자신의 데이터를 파일형태로 관리하는것.

  • 서버형 : 디스크에 저장된 데이터를 더욱 사용하기 쉽게 만들어주는것. (ex. 페이스북에서 친구 이름을 검색하면 그 친구의 연락처나 세부사항까지 확인할 수 있다.)

  • 인메모리형 : 메인 메모리에 설치되어 운영되는 방식의 데이터베이스 시스템이다. 디스크 접근식 데이터베이스보다 더 빠른데 그 이유는 디스크 접근이 메모리 접근보다 느리기 때문이다. 인메모리형의 단점은 시스템 파워가 끊어지면 휘발성으로 인해 데이터가 소실되는 단점이 있었는데 최근에 비휘발성RAM의 기술로 인해 단점이 보완 되었다.


ㅤ데이터베이스의 인덱스와 B-Tree 자료구조를 이해하고 연관지어 설명할 수 있다.

-> 데이터베이스를 풀스캔(Full Scan) 검색해서 자료를 출력하게 되면 시간이 굉장히 오래 걸린다. 하지만 B-Tree로 key값을 이용해 값을 빠르게 찾는다. 풀스캔은 테이블의 크기가 커짐에 따라 소요시간도 늘어나지만 인덱스를 사용할 경우 실행시간의 저하는 원만한 곡선을 그리게 된다. B-Tree의 장점은 어느 값이라도 출력하는데에 소요되는 시간이 같다.


profile
예비 데이터개발자

0개의 댓글