✔ Git Hub
원격 저장소 사용
기본 작업
- clone
- 원격 저장소 복제
- remote
- 원격 저장소를 추가하고 조회하고 삭제하기
- push
- 원격 저장소에 저장
- fetch
- 원격 저장소의 내용을 가져오기만 하기
- pull
- 원격 저장소의 내용을 가져와서 합치기
clone
- 원격 저장소의 내용을 그대로 가져오는 작업
git clone 원격저장소url
git clone 원격저장소url 특정경로
- 특정 경로를 설정할 떄는 문자열 형태로 설정해야 하고, 빈 디렉을 설정
- 현재 로그인 되어있는 계정의 repository(fork된 repo)를 clone하면 자동으로 연결
git remote
- 원격 저장소를 추가하고 조회하고 삭제할 수 있는 명령
- 원격 저장소를 생성
- git hub 페이지에서 repositorys 누르고 new 하면 생성
- repo 안비게 만들면 clone해서 연결, 아니면 바로 연결 해서 push가능
- 원격 저장소와 로컬 저장소를 연결
- git remote add <원격 저장소 이름> <원격 저장소 url>
- 원격 저장소 이름은 대부분 origin을 많이 쓰긴함
- 원격 저장소 이름 변경
- git remote rename <기존> <new>
- 기존 연결 해제
- git remote remove <저장소이름>
git push
- 로컬 저장소의 내용을 원격 저장소에 업로드하는 작업
- 기본적으로 local repository에 존재하는 내용만 업데이트 합니닫.
- push이전에 stage 영역에 등록하고 commit으로 변화가 발생한 파일들만 push 합니다.
git push -u origin main
이렇게 하면 다음에는 git push
만 해도 origin main은 자동으로 알아서 처리해준다.
- 물론 pull도 마찬가지이다.
git status
- 현재 git 상태를 확인할 수 있음
- 작업 디렉토리의 변경 내용과 stage 영역의 변경 내용을 확인할 수 있습니다.
pull request
- 협업 작업을 위해서 git hub에서 제공하는 기능
- 하나의 프로젝트를 가지고 작업을 하는 경우에 reviwer나 작업자를 등록을 해서 메시지를 전송한 뒤에 그 답장을 보고 다음 작업을 수행할 수 있도록 해주는 기능
repository를 생성할 때 reviwer를 등록시켜서 push 할 때 pr을 선택적으로 보내서 리뷰를 받는 방법
repository를 fork에서 작업을 수행하고 원래 repository 관리자에게 pr을 보내서 merge를 하도록 하는 방법
Git Hub Action
개요
- 새로운 기능으 개발하고 프로젝트 코드를 테스트하고 빌드하고 원격 저장소에 반영하고 배포하는 일련의 과정이 완료되어야 실제 작업이 마무리 됨
- 이러한 일련의 작업을 자동화하는 다양한 도구가 있는데 그 중의 하나가 git hub action
- 소프트웨어 개발에 필요한 작업 주기를 자동화하는 도구
- 액션은 이벤트 기반으로 특정 이벤트가 발생했을 때 특정 명령 혹은 명령 집합을 자동으로 실행 시킬 수 있음
- 이벤트로는 repository에 발생하는 pull, request, push와 같은 이벤트 사용이 가능하고 크론도 있습니다.
이벤트 기반 명령 실행
- 이벤트(repository 관련 이벤트, cron 이벤트) → Job → Step → Action
✔ TDD (Test Driven Development)
개요
- 소프트웨어 개발 방법론 중 하나
- 이전에는 테스트 코드의 작성을 프로덕션 코드가 작성된 이후에 했지만, TDD를 적용하면, 프로덕션 코드보다 실패하는 테스트 코드를 먼저 작성하고 코드를 테스트를 통과하기 위해 최소한으로 개선하고 테스트를 통과한 프로덕션 코드를 리팩토링 하는 방식
- TDD는 테스트만을 위한 기술이 아니며, 오히려 소프트웨어 설계 방법론에 가까움
TDD Cycle
RED
- 테스트 코드 작성
- 동작하는 프로덕션 코드가 없는 상황에서 테스트 코드를 먼저 작성하는 것으로, 앞으로 작성될 프로덕션 코드가 어떤 동작을 하면 좋을지 작성
- 요구사항을 작성하는 거과 유사
- 테스트 코드를 먼저 작성하기 때문에 테스트 코드가 기대하는 로직이 실행되지 않아서 테스트는 실패
- 실패하는 테스트 코드를 작성하는 것이 목적
GREEN
- 테스트를 통과하는 최소의 코드를 작성
- 실패하는 테스트 코드를 통과하도록 만드는 최소한의 코드를 작성
- 현재 목적은 빠르게 GREEN을 보는 것
- 에러가 없어야 한다.
- 코드를 깔끔하게 만드는 작업이 시간이 걸린다면, 테스트 코드를 통과하는 데에만 집중을 해서 코드를 작성
- 죄악
- GREEN을 보기 위해서는 어떤 죄악을 저질러도 된다.
- 빠르게 결과를 확인하기 위해서 상수를 반환하는 코드를 많이 사용
REFACTORING
- GREEN을 통과하기 위해 저지른 죄악을 수습
- 좋은 코드로 리팩토링
원칙
- 실패하는 단위 테스트를 작성하기 전에는 프로덕션 코드를 작성하지 않음
- 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성
- 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성
필요한 이유
- 변화에 대한 불안감 해소
- 어느 정도 테스트 코드가 작성되어 있기 때문에, 변화에 대한 영향력을 빠르게 파악할 수 있음
- 한 번에 하나의 일에만 집중할 수 있음
- 빠른 피드백
- 테스트 코드 자체가 문서화
- 테스트를 나중에 작성하는 귀찮음
- 코드 퀄리티
- 결합도를 낮추고 응집도를 높일 수 있음
- 느슨한 커플링(마이크로 서비스, 애자일, 컨테이너 등)
✔ 파이썬의 테스트 모듈 - pytest
- test로 시작하는 모든 파일을 로드하고 test로 싲가하는 모든 함수를 실행하는 패키지
- 설치
- pip install pytest
- 실행
- pytest
- 테스트 코드는 옳고 그름만 판단
- 테스트를 건너뛰기
- pytest.skip()
함수를 사용하여 테스트를 건너뛴 것으로 표시하고 다음 함수로 이동 가능
- pytest.mark.skip
데코레이터를 이용해서 테스트를 건너뛸 수 있음
✔ MongoDB 연동하는 Flask web application만들어서 파싱을 수행하는 함수를 테스트하고 테스트를 통과하면 Dockerfile을 이용해서 빌드하고 배포하는 애플리케이션
MongoDB 컨테이너 실행
docker run --name mongodb -v ~/data:/data/db -dit -p 27017:27017 mongo
- bash 접속
- docker exec -it mongodb bash
가상 환경 만들기
- 빈 디렉토리 생성
- flaskweb
python -m venv (이름)
- venv -> Scripts 까지 있는지 확인해보자.
- flaskweb 디렉이 이제 루트인거야
필요한 패키지 설치
- flask, requests(html 파싱), beautifulsoup4(파싱), pymongo(db)
- pip install 해주자.
mongodb 연동하는 flaskweb 만들기
- 프로젝트에 app.py 파일을 추가하고 작성해보자.
- 프로젝트에 templates 디렉토리 만들고 index.html 만들어보자.
- 다 만들면 localhost:5000으로 해서 확인해보자.
영화 정보를 파싱해서 결과를 넘겨주는 함수
테스트에 사용할 함수를 소유할 test_utils.py파일 생성하고 함수를 작성