4 minute read

데이터 직군에는 데이터 과학자, 데이터 분석가, 데이터 엔지니어 등 여러가지가 있다. 지금까지 데이터 분석가에 관련된 공부를 했다면, 이번에는 데이터 엔지니어와 관련된 백엔드 개념, 실전에서 사용되는 기술들을 공부해보자.

Terminal, CLI(Command Line Interface)

  • 터미널은 글자를 기반으로 컴퓨터에게 명령을 전달하는 어플리케이션이다.
  • 글자를 입력해서 명령과 결과가 수행되는 것을 CLI라고 하는데 터미널은 이 CLI 중 하나이다.
  • CLI와 대비되는 개념으로 GUI(Graphical User Interface)가 있는데 GUI는 그래픽을 기반으로 명령과 결과가 수행되는 인터페이스다.
  • 쉽게 말해서 우리가 글자 입력없이 마우스만으로 작업을 할 수 있는 환경이 GUI이다.

Python, Conda, Virtual Environment

  • 개발환경이란, 개발에 사용되는 모든 셋팅들을 말한다. OS 뿐만 아니라 python 같은 프로그래밍 언어, github, conda 등 다양한 환경이 존재한다.
  • Conda는 파이썬의 가상 환경이다. 가상 환경으로 conda를 많이 사용하는 이유는 데이터 분석에 최적화 되어있는 가성환경이기 때문이다.
  • 가상환경을 사용하는 이유는 첫번째로, 패키지들간의 충돌을 방지하기 위해서다. 파이썬의 패키지들은 기본적으로 한 가지 버전만을 사용할 수 있는데 만약 한 프로젝트에서 여러가지 버전의 패키지를 사용해야 한다면 컴퓨터를 두 대를 가지고 있어야한다. 일반적으로 로컬로 작업을 하기 때문. 하지만 가상환경을 사용하면 하나의 로컬에 여러가지 가상환경을 사용함으로써 한 프로젝트이더라도 다양한 버전을 사용해서 최종 결과물을 만들 수 있다.
  • 두번째로는 협업에 용이하기 때문이다. 여러 사람들과 협업할 때 사용하는 패키지들이 모두 다르다면 이것을 통일 시키기가 어렵다. 따라서, 하나의 가상환경을 사용하면 동일한 패키지 환경에서 작업을 할 수 있기때문에 좋다. 또한, 프로젝트를 진행시 어떠한 라이브러리들을 어떤 버전으로 사용했는지 쉽게 알 수 있다.

ex)

Project A: pandas 1.1.2미만 사용

Project B: pandas 1.1.2이상 사용

한 프로젝트인데 다양한 시도를 위해 다른 패키지를 써야할 때 가상환경을 독립적으로 2개를 만들면 두 패키지 모두 다른 가상환경을 사용해서 충돌을 방지하고, 효율을 높일 수 있다.

가상환경 사용시 주의사항

사용하는 가상환경 외의 다른 가상환경은 deactivate 해줘야 한다.(특히 기본 가상환경인 base는 비활성화 해줘야 다른 가상환경과 겹쳐서 발생하는 충돌이 일어나지 않는다.)

base 비 활성화

#base가 활성화되어있는 상태에서
conda config --set auto_activate_base false

사용하고 있는 다른 가상환경 비활성화

# 만약 어떤 가상 환경을 쓰고 있었다면
conda deactivate

내가 사용할 가상 환경 생성 및 활성화

# 만약 kim이라는 가상환경을 만들 거면
conda create --name kim python=내가 사용할 버전(ex) 3.8)
conda activate kim

#활성화 되면 밑에처럼 (가상환경)이렇게 뜸

image

내가 가지고 있는 가상 환경들

conda env list

가상환경 삭제

conda env remove --name '가상환경이름'

Git & Github

  • Git은 내 로컬 컴퓨터에서 작업할 수 있는 로컬 레포지토리를 말한다.
  • Github는 인터넷 상에 있는 원격 레포지토리를 말한다.
  • Git은 변경 사항을 추적하고, 버전을 관리 하는 등의 기능을 제공하므로 매우 유용해서 개발 분야에서 많이 사용된다. 기록이 있기 때문에 백업이 가능해진다.
  • Github는 git이나 다른 툴로 개발된 코드들을 사람들과 공유하기 위해서 사용한다. 협업에 매우 유용하다.
  • 로컬이냐 원격이냐에 따라 git과 github로 나눠진다.
  • Branch: 깃에서 하나의 프로젝트로 여러가지 시도를 할텐데, 이 여러가지 시도들을 폴더 하나에 덮어쓰지 않고 다양한 방법을 통해 진행을 하게 될 것이다. 이때 사용하는 개념이 branch다. 동일한 가상환경 내에서 여러가지 시도를 각각 다른 branch에 저장하고, 결과를 사람들과 공유한다. 쉽게 말하면 branch는 사람 한명 한명의 폴더라고 생각하면 된다. 만약 다른 가상환경을 써야할만큼 패키지들의 버전이 다르다면 그 프로젝트는 다른 프로젝트로 분류하는 것이 효율적이다.
  • Fetch: 원격 레포의 변경 사항을 로컬 레포에 적용하는 것.
  • Merge: merge는 위에서 언급한 branch를 합치는 것이다. 합치는 것보다 복사해서 똑같이 만든다라고 생각하면 된다. 기존에 사용하던 branch가 완벽하지 않은 상태이기 때문에 다른 branch에 기존과 똑같은 branch를 하나 더 merge하고 여기서 작업을 한 다음 최종적으로 문제가 없을 때 이 branch를 main으로 사용하거나 하는 방법을 사용한다.

Git과 Github를 사용한 협업 프로세스

이전에 가상환경이 세팅 되어있다는 가정 하에.

1) github에서 내가 원하는 원격 레포를 Fork

2) Fork한 경로를 git(로컬)에서 작업하기 위해 원하는 디렉토리로 이동 및 clone

mkdir test # 현재 내 위치에서 원하는 폴더 생성
cd test # 현재 위치에서 test라는 폴더로 이동
git clone {원격레포에서 포크한 주소} # test 폴더 안에 github의 레포 가져오기

3) 내가 원하는 작업 수행

#보통 vscode 편집기를 열어 수행하고 저장한다.
code ./ #이렇게 하면 내 위치의(현재는 test 폴더) 모든 폴더를 다 가져와서 vscode에 띄운다. 여기서 작업

4) 작업 변경 사항 로컬 레포에 추가하기 위해 stage 단계로 add

git add ./ #이렇게 하면 내 폴더 내에서 내가 변경한 모든 사항들 적용. 파일만 따로 할 수도 있기함.

5) stage 단계에 어떤게 있나 확인

git status

6) stage에서 로컬 레포로 이동

git commit -m '커밋에 사용할 메세지'

7) 로컬 레포에서 커밋된 내용 확인

git log

8) 로컬 레포에서 원격 레포로 변경사항 적용

git push {내브랜치_별명} {원격에 업데이트할 브랜치}
#git branch #내가 로컬에서 사용하고 있는 브랜치
#git branch -r # 원격에서 사용하고 있는 브랜치
#git branch -a #원격과 로컬 브랜치 모두

9) 원격레포에서 내가 처음에 가져왔던 레포로 Pull Request

Git에서 merge

하나의 브랜치에 계속 업데이트를 시킨다면 commit이 계속 쌓이고, 이전의 기록들이 너무 많아져서 백업을 할 때 과거로 돌아가기가 힘들 것이다. 따라서 브랜치를 merge시킴으로써 기존의 내용을 그대로 옮기면서 새로운 브랜치에서 이어서 작업을 할 수 있다. 아마 정리할 때 더 도움이 되고, 여러가지 시도를 할 때 유용할 것 같다.

1) 새로운 브랜치 만들기

git branch 새로운_브랜치_이름
#git branch -d 브랜치_이름 # 제거

2) 만든 브랜치로 변경

git checkout 새로운_브랜치_이름
# git checkout -b 새로운_브랜치_이름 #-b를 붙이면 생성과 동시에 변경

3) 복사하고 싶은 브랜치로 merge

git merge 복사하고_싶은_브랜치이름

4) 여기서 다른 작업한 뒤 똑같이 원래 깃허브에 올리면 새로운 브랜치가 생성됨.

파일 생성 및 출력 결과 저장

파일 생성

touch 파일이름.종류

출력 결과 저장(text 입력후 저장)

echo 텍스트 > 파일이름.종류

함수 실행 결과 저장

conda env list > 파일이름.종류

Categories:

Updated: