Git과 GitHub으로 코드 버전 관리하기
·
BI&Programming-Tools/Python
전 글에서 모듈과 패키지를 직접 만드는 방법을 정리했습니다.이제 만든 코드를 어떻게 관리하고 공유할지를 다룰 차례입니다.이번 편에서는 버전 관리 시스템인 Git과 원격 저장소 서비스인 GitHub을 처음부터 설정하는 과정을 정리합니다.Git이 필요한 이유코드를 혼자 작성하다 보면 어느 순간 "방금 전 버전으로 돌아가고 싶다"거나, "이 코드가 언제, 왜 바뀌었는지 알고 싶다"는 상황이 생깁니다.파일 이름 끝에 버전 이름을 붙여가며 관리해본 경험이 있다면 그 불편함을 알 것입니다. 팀으로 작업할 때는 이 문제가 훨씬 복잡해집니다.여러 사람이 같은 파일을 동시에 수정하면 누군가의 변경사항이 덮어씌워질 수 있기 때문입니다. Git은 이 문제를 해결하기 위해 만들어진 분산 버전 관리 시스템(Distributed..
패키지로 코드 구조화하기
·
BI&Programming-Tools/Python
파이썬 환경에서 프로젝트 규모가 작을 때는 모듈 몇 개로 충분하지만, 기능이 늘어나고 파일이 많아지면 관련 모듈들을 하나로 묶어서 체계적으로 관리할 필요가 생깁니다.그게 바로 패키지입니다.패키지란패키지는 연관된 모듈 여러 개를 하나의 디렉토리로 묶어서 공통 네임스페이스 아래에 두는 구조입니다.단순히 디렉토리를 만드는 것만으로는 패키지가 되지 않고, 그 안에 __init__.py라는 특수 파일이 있어야 파이썬 인터프리터가 해당 디렉토리를 패키지로 인식합니다. 패키지를 사용하는 이유는 크게 두 가지입니다.첫째는 모듈 간의 이름 충돌을 네임스페이스로 방지할 수 있다는 것이고, 둘째는 프로젝트가 커졌을 때 기능 단위로 코드를 분리해서 유지보수를 쉽게 만들 수 있다는 점입니다.패키지 이름 짓는 규칙PEP 8 기준..
파이썬 모듈: 재사용 가능한 코드의 최소 단위
·
BI&Programming-Tools/Python
모듈이란파이썬에서 모듈은 함수, 변수, 클래스를 담고 있는 .py 파일 하나를 말합니다.정의 자체는 단순하지만, 모듈을 제대로 이해하면 코드의 재사용성을 높이고 프로젝트 구조를 훨씬 깔끔하게 만들 수 있습니다.같은 기능을 여러 파일에 중복으로 작성하지 않아도 되고, 필요한 곳에서 불러다 쓰기만 하면 됩니다.모듈 이름 짓는 규칙이름을 어떻게 짓느냐가 나중에 import할 때 가독성에 큰 영향을 줍니다. 파이썬 컨벤션 기준으로 정리하면 이렇습니다.소문자로 작성합니다. MyModule.py보다 mymodule.py가 맞습니다.짧고 명확하게 씁니다. calc.py, dataprocessing.py처럼 기능이 바로 읽히는 이름이 좋습니다.단어 구분이 필요하면 밑줄(_)을 씁니다. data_processing.py..
의존성 관리: Poetry로 해결하기
·
BI&Programming-Tools/Python
이번 글에서는 그 다음 단계인 "그 버전 위에 어떤 패키지를, 어떤 조합으로 관리할지"를 다루는 도구인 Poetry를 정리합니다.pip만으로 충분하지 않은 이유지금까지는 패키지를 설치할 때 보통 pip을 써왔습니다.pip install requests 문제는 프로젝트가 커질수록 이 방식이 점점 번거로워진다는 점입니다.어떤 패키지를 어떤 버전으로 설치했는지 기록해두려면 별도로 requirements.txt를 직접 만들어야 하고, 가상환경도 따로 venv로 만들어서 관리해야 합니다.게다가 패키지 간의 버전 충돌이 생기면 이걸 수동으로 풀어내야 합니다. Poetry는 이 모든 과정(가상환경 생성, 의존성 기록, 버전 충돌 해결, 빌드, 배포)을 하나의 도구와 하나의 설정 파일(pyproject.toml)로 통..
파이썬 버전 관리: pyenv
·
BI&Programming-Tools/Python
이번 편에서는 본격적으로 개발 환경을 세팅합니다.가장 먼저 부딪히는 문제가 "파이썬 버전을 어떻게 관리할 것인가"인데, 이걸 제대로 이해하지 않고 넘어가면 나중에 패키지 의존성 충돌 같은 문제를 맞닥뜨렸을 때 원인 파악이 한참 걸립니다.시스템에 기본 설치된 파이썬을 그대로 쓰면 안 되는 이유처음엔 "그냥 컴퓨터에 깔려있는 파이썬 쓰면 되는 거 아닌가" 싶은데, 찾아보면 생각보다 문제가 많습니다.sudo pip install로 패키지를 깔면 시스템 전체에 영향을 주는데, 프로젝트마다 원하는 패키지 버전이 다를 수 있습니다. 같은 패키지라도 버전이 섞이면 예상치 못한 오류가 발생하기 쉽습니다.OS에 기본 설치된 파이썬 버전이 너무 오래된 경우도 많습니다.일부 운영체제는 내부적으로 시스템 동작에 파이썬을 사용..
생물정보학에서의 프로그래밍, 환경 세팅
·
BI&Programming-Tools/Python
프로그래밍이란프로그래밍은 결국 어떤 문제를 해결하기 위한 절차(알고리즘)를 사람이 아니라 컴퓨터가 이해할 수 있는 언어로 옮기는 작업입니다.사람과 사람이 대화할 때 통역사가 필요하듯, 사람과 컴퓨터 사이에서는 프로그래밍 언어가 그 통역사 역할을 한다고 생각하면 이해하기 쉽습니다.생물정보학에서 프로그래밍이 필수인 이유처음에는 "엑셀이나 기존 분석 툴로도 충분하지 않나" 싶었는데, 막상 실제 데이터를 다뤄보면 생각이 달라집니다.정리한 이유는 대략 이렇습니다. 1. 데이터 규모 자체가 사람 손으로 처리할 수준이 아님유전자 서열이나 유전체 데이터는 한두 개를 들여다보는 수준이 아니라 수만~수십만 건 단위로 다뤄야 하는 경우가 많습니다.수작업으로는 애초에 불가능한 양이기 때문에 자동화가 선택이 아니라 필수가 됩니..
[파이썬] 리스트 컴프리헨션(List Comprehension)
·
BI&Programming-Tools/Python
리스트 컴프리헨션은 리스트를 만드는 간결한 문법입니다.for 루프로 리스트를 만드는 과정을 한 줄로 표현할 수 있어서 파이썬에서 자주 쓰이는 패턴입니다.기본 구조[표현식 for 변수 in 반복가능객체] for 루프로 각 원소를 순회하면서 표현식을 계산하고, 그 결과를 모아 리스트로 만듭니다.일반 for 루프와 비교하면 다음과 같습니다.# for 반복문result = []for x in range(5): result.append(x * 2)# 리스트 컴프리헨션result = [x * 2 for x in range(5)] 두 코드는 완전히 같은 결과를 냅니다.리스트 컴프리헨션은 이 과정을 대괄호 안에 한 줄로 담은 것입니다.조건 추가if를 뒤에 붙이면 조건을 만족하는 원소만 포함합니다.[표현식 for ..
[파이썬] 함수 데코레이터
·
BI&Programming-Tools/Python
일급 함수 (First-class Function)파이썬에서 함수는 일급 객체(first-class object)로 작동합니다.일급 객체는 다른 값(숫자, 문자열 등)과 동일하게 취급할 수 있는 대상을 말합니다. 즉, 숫자를 변수에 담고 다른 함수에 전달하고 반환할 수 있듯이, 함수도 똑같이 할 수 있다는 의미라고 이해하면 됩니다.함수를 변수에 할당함수를 호출하지 않고 이름만 쓰면 함수 객체 자체를 가리킵니다.이 함수 객체를 변수에 담을 수 있습니다.def greet(): print("hello")say_hi = greetsay_hi() # hello 위 코드를 통해 greet와 say_hi는 이제 같은 함수 객체를 가리키고 있습니다.greet()처럼 괄호가 붙으면 함수를 실행하는 것이고, g..
[Python TDD] Mocking
·
BI&Programming-Tools/Python
Mock이란?테스트할 때 실제 객체 대신 사용하는 가짜 객체입니다.예를 들어 외부 API를 호출하는 함수를 테스트한다고 가정합니다.테스트를 실행할 때마다 실제 API를 호출하면 여러 문제가 생깁니다.인터넷 연결이 없으면 테스트가 실패합니다.API 호출마다 비용이 발생할 수 있습니다.서버 상태에 따라 결과가 달라져서 테스트가 불안정해집니다.이럴 때 실제 API 대신 "항상 이 값을 반환하는 가짜 객체"를 만들어 테스트하는 게 mocking입니다.테스트하고 싶은 건 API 자체가 아니라 API 응답을 받아서 처리하는 내 코드이기 때문입니다. 실제 테스트: 내 코드 → 실제 API 호출 → 응답 처리Mock 사용: 내 코드 → 가짜 객체 (미리 정해둔 값 반환) → 응답 처리 Mock이..
[Python TDD] pytest
·
BI&Programming-Tools/Python
pytest란?unittest보다 간결하고 강력한 서드파티 테스트 프레임워크입니다. 실무에서 가장 많이 쓰입니다.unittest는 Java의 테스트 방식을 따라 클래스와 상속 구조가 필요합니다. pytest는 파이썬답게 함수만으로도 테스트를 작성할 수 있고, 검증도 파이썬 기본 assert문 하나로 처리합니다. 코드가 훨씬 간결해지고 실패 메시지도 더 읽기 쉽습니다.pytest는 unittest로 작성된 테스트도 그대로 실행할 수 있어서, 기존 unittest 코드를 굳이 바꾸지 않아도 됩니다.pip install pytestunittest와의 핵심 차이 unitestpytest클래스 상속unittest.TestCase 필수불필요, 함수만으로 가능검증 방법self.assertEqual() 등파이썬 기본 ..
[Python TDD] unittest
·
BI&Programming-Tools/Python
unittest란?Python 표준 라이브러리에 내장된 테스트 프레임워크입니다.별도 설치 없이 바로 사용할 수 있습니다.Java의 JUnit에서 영향을 받아 설계됐으며, 클래스 기반으로 테스트를 구성합니다. Python에서 TDD를 실천할 때 주로 쓰는 도구는 unittest와 pytest 두 가지입니다.unittest는 표준 라이브러리라 설치 없이 쓸 수 있고 구조가 명확해서 테스트의 기본 개념을 익히기에 좋습니다. 실무에서는 코드가 더 간결하고 기능이 풍부한 pytest를 더 많이 쓴다고 합니다.pytest는 unittest로 작성된 테스트도 그대로 실행할 수 있어서 서로 호환됩니다.기본 구조import unittestfrom filter import filter_by_quality # 테스트할 함..
TDD 개념 — Test Driven Development
·
BI&Programming-Tools/Python
테스트란?코드가 의도한 대로 동작하는지 확인하는 작업입니다.보통 개발하면서 코드를 짜고 나서 직접 실행해보거나 print()로 값을 찍어보는 방식으로 확인하는데, 이게 사실 비공식적인 테스트입니다. 공식적인 테스트는 이 확인 과정을 코드로 작성해서 자동으로 반복 실행할 수 있게 만드는 것입니다.# 직접 눈으로 확인하는 방식 (비공식)result = add(2, 3)print(result) # 5 나오면 됐다고 넘어감# 테스트 코드로 작성하는 방식 (공식)def test_add(): assert add(2, 3) == 5 # 틀리면 자동으로 오류 발생 테스트 코드를 쌓아두면 나중에 코드를 수정했을 때 기존 기능이 그대로인지 한 번에 검증할 수 있습니다. TDD란?Test Driven Devel..