기본 콘텐츠로 건너뛰기

라벨이 코드 품질인 게시물 표시

Python 프로젝트에서 linters & formatters 통합 설정 (black, isort, flake8)

자, Python 프로젝트를 좀 더 깔끔하게 관리하고 싶으신가요? 저도 한때 코드가 엉망이 되는 바람에 엄청 고생했던 기억이 나네요. 그래서 Black, Isort, Flake8 이 세 친구를 만나게 된 거죠! 이 셋이 있으면 코드 품질 유지, 협업, 유지보수가 정말 쉬워져요. 지금부터 제가 직접 써먹은 방법을 알려드릴게요. 마치 제가 옆에서 코딩하는 것처럼 말이죠! 먼저, 이 녀석들이 뭔지 간단히 설명해 드릴게요. Flake8은 코드 스타일 가이드라인을 지키는지, 혹시 버그가 숨어있는지, 코드가 너무 복잡하지는 않은지 살펴주는 린터(Linter)예요. 마치 코드의 문법 교정 선생님 같은 존재죠. PyFlakes, pycodestyle, McCabe 세 가지 도구를 하나로 묶은 슈퍼 린터라고 생각하면 돼요. 그리고 Black과 Isort는 포매터(Formatter)입니다. 코드를 자동으로 예쁘게 정리해주는 친구들이죠. Black은 들여쓰기나 줄 바꿈 같은 걸 알아서 깔끔하게 맞춰주고, Isort는 import 문들을 알파벳 순서대로 정렬해줘요. 덕분에 코드 읽기가 훨씬 편해졌어요. Black은 특히 설정을 거의 건드릴 필요가 없어서 정말 편리하더라고요. 저처럼 귀찮은 걸 싫어하는 분들께 강력 추천합니다! 자, 이제 실제로 사용하는 방법을 알려드릴게요. 먼저 requirements.txt 파일에 black , isort , flake8 를 추가해야 합니다. 이게 없으면 위 세 친구를 사용할 수 없으니까 꼭 추가해야 해요! 그리고 pyproject.toml 파일을 만들어 설정을 해야 하는데, 이 파일이 없으면 새로 만들면 됩니다. 저는 처음에 이 파일을 만드는 걸 깜빡해서 꽤 애를 먹었던 기억이 나네요. pyproject.toml 파일에는 이렇게 설정을 써 넣으면 됩니다. line-length는 코드 한 줄의 최대 길이를 정하는 건데, 저는 88로 설정했어요. target-versi...

Python 타입 힌팅과 mypy로 안전한 코드 작성하기

파이썬으로 꽤 큰 프로젝트를 진행하다 보니, 코드가 산으로 가는 경험을 여러 번 했어요. 특히 팀으로 작업할 때는요. 변수 타입을 일일이 확인하지 않아도 되는 파이썬의 동적 타이핑이 오히려 독이 되는 순간이었죠. 그래서 제가 찾은 해결책이 바로 '타입 힌팅'과 'mypy'입니다. 이 둘을 활용하면 훨씬 안전하고 효율적인 파이썬 코딩이 가능해져요! 한 번 같이 살펴볼까요? 타입 힌팅? mypy? 뭐가 뭔가요? 쉽게 말해 타입 힌팅은 파이썬 코드에 변수나 함수의 타입을 명시적으로 적어주는 거예요. 예를 들어 name: str = "철수" 라고 하면 name 변수는 문자열 타입이라는 걸 미리 알려주는 거죠. : 기호 뒤에 타입을 적어주면 됩니다. int, float, str, bool 같은 기본 타입은 물론이고, list, dict, tuple도 당연히 가능해요. 함수의 매개변수와 반환값에도 타입을 지정할 수 있는데, 이걸 타입 어노테이션이라고 합니다. def greet(name: str) -> str: 이렇게요. 함수 greet 는 문자열을 입력받아 문자열을 반환한다는 뜻이죠. 그럼 mypy는 뭘까요? mypy는 이렇게 타입 힌팅을 해놓은 코드를 검사하는 도구입니다. 코드를 실행하기 전에 미리 타입 오류를 찾아주는 거죠. "어? 여기서 int 타입을 기대했는데 str 타입이 들어왔네?" 이런 식으로요. 마치 코드의 문법 검사기 같은 역할이라고 생각하면 돼요. mypy your_script.py 명령어로 간단하게 실행할 수 있습니다. 저는 처음에 이걸 몰라서 엄청 헤맸는데, 알고 나니 정말 신세계였어요. 실제로 어떻게 쓰는 거예요? 제가 예전에 만들었던 코드를 조금 수정해서 보여드릴게요. 두 점 사이의 거리를 계산하는 함수와, 유저 정보를 가져오는 함수, 그리고 데이터 리스트의 합을 계산하는 함수예요. fro...