기본 콘텐츠로 건너뛰기

7월, 2025의 게시물 표시

Python에서 CLI 도구 만들기 (argparse vs click)

파이썬으로 명령줄 도구 만드는 중이신가요? 저도 얼마 전에 비슷한 작업을 했었는데, argparse 랑 click 이라는 두 라이브러리 때문에 꽤 고민했거든요. 둘 다 훌륭하지만, 어떤 걸 써야 할지 정말 헷갈리더라고요. 그래서 제가 직접 써보고 느낀 점들을 바탕으로 얘기해 드릴게요! 먼저, argparse 는 파이썬에 기본적으로 포함된 라이브러리예요. 기능은 정말 막강하죠. 마치 스위스 아미 나이프처럼, 세세하게 옵션을 조절할 수 있어요. 복잡한 도구를 만들 때는 정말 유용해요. 하지만, 간단한 걸 만들 때는 쓸데없이 코드가 길어지는 느낌이 들더라고요. 마치 거대한 대포로 모기를 잡는 것 같은 느낌이랄까요? 저는 처음에 argparse 로 시작했는데, 코드가 너무 길어지니까 나중에 수정하기가 힘들더라구요. 괜히 힘들게 했나 싶었어요. 반면에 click 은 외부 라이브러리인데, 사용하기가 훨씬 쉽고 간결해요. 마치 레고 블록처럼, 몇 개의 코드만으로도 멋진 명령줄 도구를 만들 수 있죠. 특히 데코레이터라는 기능을 사용하는데, 처음엔 좀 어렵게 느껴질 수도 있지만, 익숙해지면 코드가 정말 깔끔해져요. 저는 간단한 도구를 만들 때 click 을 사용했는데, 정말 속도가 빨랐어요. 코드도 짧고 이해하기도 쉬워서 좋았습니다. 마치 마법처럼 뚝딱 만들어지는 느낌이었어요! 실제로 제가 만들었던 간단한 파일 처리 도구 예시를 보여드릴게요. argparse 로 만든 코드는 이렇게 길어졌지만, click 으로 만든 코드는 훨씬 짧고 보기 편하더라고요. 1. argparse 예제 import argparse def main(): parser = argparse.ArgumentParser(description="파일 내용을 출력하거나 줄 수를 세는 도구") parser.add_argument("filename", help="읽을 파일 이름"...

Python에서 시간 다루기 완전 가이드 (datetime, pendulum, arrow)

요즘 웹 개발하다 보면 시간 다루는 게 얼마나 중요한지 뼈저리게 느껴요. 데이터 분석할 때도 마찬가지고요. 파이썬 기본 라이브러리인 datetime 만 써선 솔직히 한계가 있더라고요. 시간대 설정 잘못하면… 아, 생각만 해도 끔찍해요. 그래서 pendulum 과 arrow 라는 녀석들을 써봤는데, 정말 신세계였습니다! 이 글에선 제가 직접 겪은 시행착오와 꿀팁을 풀어놓을 테니, 시간 때문에 골치 썩는 분들께 도움이 됐으면 좋겠네요. 먼저, 기본기부터 짚고 넘어갈게요. datetime 은 파이썬 기본 내장 모듈인데, 간단한 시간 출력 정도는 괜찮아요. 예를 들어, 현재 시간 출력하고 내일 날짜 구하는 건 식은 죽 먹기죠. import datetime now = datetime.datetime.now() print(f"지금 이 순간: {now}") # 쨍한 현재 시간이 출력될 거예요! tomorrow = now + datetime.timedelta(days=1) print(f"내일은 바로 이 날!: {tomorrow}") # 내일 날짜가 뿅! 근데 문제는 시간대 처리나 복잡한 계산이 필요할 때예요. datetime 만으론 힘들더라고요. 이럴 때 pendulum 이나 arrow 가 등장하는 거죠. 마치 시간 여행의 마법 지팡이처럼요! 두 라이브러리 모두 datetime 의 불편함을 해결해주는 슈퍼히어로 같은 존재입니다. pendulum 은 좀 더 강력하고 기능이 많고, arrow 는 API가 깔끔해서 취향따라 고르면 됩니다. 저는 개인적으로 pendulum 의 풍부한 기능이 더 마음에 들었어요. 자, 그럼 pendulum 을 써서 시간대까지 고려한 시간 출력을 해볼게요. import pendulum seoul_time = pendulum.now("Asia/Seoul") print(f"지금 서울 시간은?: {seoul_time}...

Pandas 없이도 할 수 있는 데이터 처리 - itertools, collections 정복하기

Pandas 없이 데이터 처리하기? 생각만 해도 머리가 지끈거리시죠? 저도 처음엔 그랬어요. Pandas는 정말 편리하니까요. 하지만 가끔은 Pandas의 무게가 부담스러울 때가 있잖아요? 특히 데이터가 엄청나게 클 때, 혹은 좀 더 가볍고 빠른 처리가 필요할 때 말이죠. 그럴 때 Python의 숨겨진 보물, itertools 와 collections 를 꺼내들면 됩니다! 이 두 모듈은 마치 숨겨진 비밀병기 같아요. Pandas처럼 화려하진 않지만, 제대로 활용하면 Pandas 못지않게 강력한 힘을 발휘하거든요. 저도 처음엔 낯설었지만, 쓰다 보니 매력에 푹 빠졌어요. 자, 이제부터 itertools 와 collections 의 세계로 함께 떠나볼까요? 먼저 itertools 부터 살펴볼게요. 이건 마치 데이터를 가지고 놀 수 있는 장난감 상자 같아요. 데이터를 만들고, 섞고, 필터링하고… 정말 다양한 일을 할 수 있죠. combinations , permutations 같은 함수는 순열 조합을 쉽게 계산해줘서 정말 편리해요. 그리고 무엇보다 메모리 효율이 뛰어나서, 데이터가 아무리 많아도 걱정 없답니다. 대용량 데이터 처리할 때 정말 빛을 발하는 친구예요. 그리고 collections 는요? 이건 데이터를 깔끔하게 정리하고 관리하는 데 딱이에요. namedtuple 은 데이터에 이름을 붙여서 관리할 수 있게 해주고, defaultdict 는 기본값을 설정해줘서 코드를 훨씬 간결하게 만들어줘요. Counter 는 데이터 빈도수를 척척 계산해주는 든든한 조력자고요. 제가 가장 자주 쓰는 건 deque 인데, 데이터를 효율적으로 추가하고 삭제할 때 정말 유용하더라고요. 자, 이제 실제 예제를 보여드릴게요. 먼저 itertools.groupby 를 이용해서 CSV 파일을 처리하는 방법인데요. 예전에 프로젝트에서 비슷한 작업을 했었는데, Pandas를 쓰려니 너무 무겁더라고요...

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 디버깅 고급 기법: pdb, ipdb, breakpoint(), rich

파이썬 디버깅, 막막하게 느껴지셨나요? 저도 처음엔 그랬어요. print() 함수로 변수 값 하나하나 확인하며 밤새 씨름했던 기억이 아직도 생생하네요. 하지만 이젠 훨씬 효율적으로 디버깅하는 방법을 알게 되었답니다! 오늘은 제가 터득한 파이썬 디버깅 고급 기법들을 여러분과 나누려고 해요. pdb , ipdb , breakpoint() 함수, 그리고 rich 라이브러리까지! 자, 하나씩 살펴볼까요? 먼저, 기본적인 개념부터 짚고 넘어가죠. pdb 는 파이썬 표준 라이브러리에 포함된 디버거예요. 명령어를 입력해서 코드 실행을 조절하고 변수 값을 확인할 수 있죠. 하지만 솔직히 말해서, 좀 불편한 점이 있더라고요. 그래서 제가 주로 쓰는 건 ipdb 인데요, IPython 기반이라 훨씬 사용하기 편리해요. 훨씬 직관적인 인터페이스와 강력한 기능들을 제공하거든요. 그리고 breakpoint() 함수는 파이썬 3.7 이상에서 사용 가능한데, pdb 나 ipdb 를 간편하게 실행할 수 있게 해줘요. 마지막으로 rich 라이브러리는 디버깅 출력을 컬러풀하고 보기 좋게 만들어줘요. 복잡한 데이터를 훨씬 쉽게 파악할 수 있게 해준다는 점이 정말 매력적이죠. 어떤 도구가 어떤 장단점을 가지는지는 아래 표를 참고하세요. 저도 처음엔 이런 표를 보면서 좀 헷갈렸는데, 직접 써보면서 차이점을 느끼게 되더라고요. 도구 설명 장점 단점 pdb 표준 파이썬 디버거 간편한 설치, 표준 라이브러리 포함 기능이 조금 제한적일 수 있음 ipdb IPython 기반 디버거 강력한 기능, 편리한 인터페이스 별도 설치 필요 breakpoint() 간편하게 디버깅 시작 코드가 깔끔해짐 Python 3.7 이상 필요 rich 디버깅 출력 향상 라이브러리 시각적으로 보기 좋음, 가독성 향상 별도 설치...

Python에서 logging을 실전적으로 구성하는 방법 (로그 포맷, 파일분리 등)

파이썬으로 앱 개발하다 보면, 로그(log) 관리가 얼마나 중요한지 절실히 느끼게 돼요. 처음엔 logging.info() 정도만 써도 될 줄 알았는데, 막상 서비스 운영하다 보니 훨씬 정교한 로그 시스템이 필요하더라고요. 그래서 이번에 파이썬 logging 모듈을 제대로 활용하는 방법을 정리해봤습니다! 이 글이 여러분의 개발 생활에 도움이 되었으면 좋겠네요. 먼저, 파이썬 logging 모듈의 기본 개념부터 살펴볼게요. DEBUG, INFO, WARNING, ERROR, CRITICAL 이렇게 다섯 가지 로그 레벨이 있는데, 각 레벨은 로그 메시지의 심각도를 나타내요. 예를 들어, DEBUG는 디버깅용 정보이고, CRITICAL은 시스템이 완전히 작동 불능 상태일 때 쓰는 레벨이죠. 보통 개발 단계에서는 DEBUG 레벨까지 다 출력해서 자세히 확인하지만, 실제 서비스에서는 INFO나 WARNING 이상의 레벨만 출력하도록 설정하는 게 좋습니다. 왜냐하면 DEBUG 레벨 로그가 너무 많으면 로그 파일이 금방 커져서 관리하기 힘들어지거든요. 그리고 logging.Handler 를 이용하면 로그를 콘솔이나 파일에 출력할 수 있고, Formatter 로 로그 메시지의 형식도 자유롭게 바꿀 수 있어요. 자, 이제 실제 코드를 보여드릴게요. 저는 로그 파일을 날짜별로 나누고, 원하는 형식으로 출력하도록 설정했어요. RotatingFileHandler 라는 녀석을 사용했는데, 이게 로그 파일 크기가 일정 크기(저는 10MB로 했어요)를 넘어가면 자동으로 새로운 파일을 만들어주는 아주 똑똑한 기능이 있어요. 백업 파일 개수도 지정할 수 있답니다. (저는 5개로 설정했어요.) 아래 코드를 한번 보세요. 처음 보시는 분들은 조금 복잡해 보일 수도 있지만, 차근차근 따라 해보시면 금방 이해하실 거예요. import logging import logging.handlers import os # 로그 파일 ...