기본 콘텐츠로 건너뛰기

__init__.py로 공개 API를 고정하는 법: 파이썬 코드리뷰에서 제일 먼저 합의할 한 가지

__init__.py로 공개 API를 고정하는 법: 파이썬 코드리뷰에서 제일 먼저 합의할 한 가지 패키지가 커지면, 실력 좋은 팀도 똑같은 데서 늦어진다. 기능이 복잡해져서가 아니라, import가 길어지고, import가 길어지면 코드리뷰가 길어진다. 리뷰 화면에서 from app.domain.user.handlers.signup import do_the_thing 같은 줄을 볼 때마다, 나는 기능 구현보다 “이 이름이 밖에서 보이는 이름이 되어도 괜찮나?”를 먼저 떠올린다. 밖에서 보이는 이름이 늘면, 유지보수는 늘어난다. 심지어 좋은 리팩터링도 “다 깨질까 봐” 못 하게 된다. 그래서 이 글은 여러 규칙을 이야기하지 않는다. 한 가지만 이야기한다. 패키지의 공개 API를 __init__.py 에서 고정하자. 그걸로 끝이다. 나머지는 팀 취향이다. 왜 하필 __init__.py인가: import 동선을 “짧고 일정하게” 만들기 __init__.py 는 파이썬 패키지의 얼굴이다. 어떤 팀은 여기를 비워두고, 어떤 팀은 여기서 이것저것 다 한다. 둘 다 가능하다. 문제는 “가능하다”와 “지속 가능하다”가 다르다는 점이다. 패키지가 작을 때는 누가 어디서 무엇을 import하든 큰 문제가 없다. 파일 하나 옮기면 IDE가 알아서 고쳐주기도 하고, 깨져도 금방 고친다. 그런데 패키지가 커지고, 기능이 늘고, 사람이 바뀌면 import 동선이 팀의 습관이 된다. 동네 팀에서 자주 보이는 패턴이 이거다. 처음엔 “그냥 여기에서 가져오면 되겠지”로 깊은 경로를 import한다. 다음엔 비슷한 코드를 다른 디렉터리에 또 만든다. 어느 날 파일을 정리하려고 옮기면, 생각보다 많은 곳이 깨진다. 깨진 걸 고치면서 “그냥 옮기지 말자”가 팀의 결론이 된다. 이때부터 코드리뷰는 “좋은 구조로 정리하는 시간”이 아니라 “깨질까 봐 확인하는 시간”이 된다. __init__.py 로 공개 API를 고정하면, ...
최근 글

Django 보안 릴리스가 뜬 날의 운영자 플레이북: 파이썬 팀이 덜 망가지는 업데이트 처리

Django 보안 릴리스가 뜬 날의 운영자 플레이북: 파이썬 팀이 덜 망가지는 업데이트 처리 그날은 알림이 먼저 울렸다. “Django security releases issued…” 아침에 커피 내리는 손으로 슬랙을 열었다가, 나는 바로 닫았다. 슬랙을 열면 사람의 말이 먼저 들어온다. “지금 배포 가능해요?” “오늘 일정 빡센데요.” “이거 진짜 위험한 건가요?” 보안 릴리스 날에는 감정이 먼저 움직인다. 그리고 감정이 먼저 움직이면, 결정은 흔들린다. 나는 운영자 모드로 스스로를 잠깐 고정한다. 이건 루틴 글을 쓰겠다는 얘기가 아니다. 그날은 루틴이 아니라 사건처럼 굴러간다. 보안 릴리스는 늘 “오늘의 변경”이 되어야 하고, 오늘의 변경은 누군가가 책임을 가져야 한다. 이 글은 그 하루를 어떻게 지나가는지, 내가 실제로 하는 순서(그리고 일부러 하지 않는 것들)를 기록한 플레이북이다. FastAPI나 uv, 새로운 런타임 실험 같은 이야기들은 그날의 배경으로만 짧게 스친다. 오늘 할 일과 섞이지 않게, 일부러 바깥에 둔다. 제일 먼저 하는 건 ‘패닉 방지’가 아니라 범위 고정 보안 릴리스가 뜨면 팀은 두 종류로 갈린다. “보안이면 무조건 당장 올리자” “그거 올렸다가 또 깨지면 누가 책임져요” 이 둘은 싸우는 게 아니라 서로 다른 위험을 보고 있는 거다. 전자는 ‘미적용 위험’을, 후자는 ‘적용 위험’을 본다. 그래서 제일 먼저 해야 할 일은 “우리가 오늘 무엇을 바꾸는지”를 아주 작게 고정하는 것이다. 그날의 범위는 이렇게 정한다. 애플리케이션 로직은 손대지 않는다. 의존성은 보안 릴리스가 요구하는 프레임워크 패치만 올린다. 테스트는 ‘핵심 사용 경로’만 확실히 돈다. 모든 걸 다 돌리는 날이 아니라, 오늘 살아남는 날이다. 이런 결정을 멋있게 포장하면 안 된다. 현실은 이렇다. 그날도 CI 러너가 묘하게 밀려서, “전체 테스트 한 번 돌리고 마음 편해지자”를 눌렀다가 10분을...

파이썬 팀의 업데이트 루틴이 실력을 만든다: FastAPI/uv/pandas를 다루는 현실적인 방식

파이썬 팀의 ‘업데이트 루틴’이 실력을 만든다: FastAPI/uv/pandas를 다루는 현실적인 방식 업데이트를 미루는 팀에는 공통 장면이 있다. 처음엔 다들 합리적이다. “지금 바쁜데요.” “이번 스프린트 끝나고요.” “장애 나면 책임이…” 그러다 어느 날, 미루던 게 한꺼번에 온다. 프레임워크가 올라가고, 패키지 매니저가 바뀌고, 데이터 작업은 계속 늘어난다. 그때부터 생산성 얘기가 “누가 더 빨리 코드를 짜냐”가 아니라 “누가 덜 자주 되돌리냐”가 된다. 요즘 파이썬 팀에서 실력 차이를 만드는 건 선택 그 자체보다 루틴이다. FastAPI 같은 프레임워크 업데이트를 어떤 간격으로, 어떤 절차로 받아들이는지 uv 같은 도구를 ‘설치’가 아니라 ‘정착’시키는지 pandas DataFrame을 다룰 때 같은 실수를 반복하지 않게 팀이 어떤 최소 습관을 갖는지 오늘 글은 “최신이 최고” 같은 얘기가 아니다. 업데이트를 ‘언젠가’가 아니라 ‘정해진 루틴’으로 돌리는 법에 대한 메모다. FastAPI 업데이트를 ‘기능’이 아니라 ‘리스크’로 읽는 법 FastAPI 업데이트를 논할 때 대화가 자주 어긋난다. 한쪽은 “새 기능/버그 픽스니까 올리자”라고 하고, 다른 쪽은 “올리면 뭔가 깨질 것 같다”라고 한다. 둘 다 맞다. 그래서 실전에서는 질문을 바꾼다. “이번 업데이트는 기능이 추가됐나?”가 아니라 “이번 업데이트를 지금 올려도 될 만큼, 우리가 리스크를 통제할 수 있나?” 이 관점으로 보면, 릴리스 노트는 ‘새로운 장난감 목록’이 아니라 ‘검증 항목 목록’이 된다. 그리고 검증 항목은 팀의 현실을 드러낸다. 우리는 요청/응답 경계를 테스트로 잡고 있나? 의존성(특히 Pydantic/Starlette 쪽) 업데이트가 같이 들어올 때, 어디까지 자동으로 확인하나? 문서/스키마(OpenAPI) 출력이 바뀌면, 그걸 소비하는 다른 팀(프론트/파트너/QA)은 어떻게 확인하나? 마이너/패치...

개발자, 당신의 손목은 괜찮습니까?

1.1 개발자의 손목 건강 현황과 문제점 코드를 작성하는 당신, 지금 손목은 괜찮습니까? 하루 종일 키보드와 마우스를 사용하는 개발자들은 반복적인 손목 사용으로 인한 건강 문제에 직면할 위험이 매우 높습니다. 이 장에서는 개발자들의 손목 건강 현황과 주요 문제점들을 자세히 살펴보고, 앞으로 다가올 건강 문제에 대한 경각심을 일깨워드리겠습니다. 단순히 문제점만 나열하는 것이 아니라, 실제 개발 현장에서 겪을 수 있는 상황과 연관 지어 설명함으로써 더욱 현실적인 이해를 돕고자 합니다. 1.1.1 반복적인 작업과 손목 통증: 개발자의 직업병 개발자의 업무는 대부분 컴퓨터 앞에서 장시간 동안 이루어집니다. 코드 작성, 디버깅, 테스트 등의 작업들은 손목과 손가락의 반복적인 움직임을 필요로 합니다. 하루 8시간 이상, 심지어 야근까지 고려하면 10시간 이상 같은 자세로 키보드와 마우스를 사용하는 경우가 흔합니다. 이러한 반복적인 동작은 손목 관절과 인대에 과도한 부담을 주어 손목터널증후군(Carpal Tunnel Syndrome), 건초염(Tenosynovitis), 방아쇠수지증후군(Trigger Finger)과 같은 질환을 유발할 수 있습니다. 예를 들어, 하루 종일 짧은 코드를 반복적으로 입력하거나, 마우스를 사용하여 디자이너의 디자인을 픽셀 단위로 수정하는 작업은 손목에 미세한 손상을 지속적으로 누적시킵니다. 이러한 미세한 손상은 초기에는 가벼운 통증이나 저림으로 나타나지만, 방치할 경우 만성적인 통증과 기능 저하로 이어질 수 있습니다. 특히, 부적절한 자세를 유지하며 작업할 경우 문제는 더욱 심각해집니다. 1.1.2 잘못된 자세와 작업 환경: 문제를 악화시키는 요소들 개발자들은 장시간 컴퓨터 앞에 앉아 있기 때문에 잘못된 자세를 취하기 쉽습니다. 어깨가 굽거나, 손목이 꺾인 채로 타이핑을 하는 자세는 손목에 과도한 부담을 줍니다. 또한, 높이가 맞지 않는 책상이나 의자, 불편한 키보드와 마우스 역시 손목 건강에 ...

uv 활용 & uv.lock 관리 가이드

📌 uv 활용 & uv.lock 관리 가이드 ✅ 1) 개발 단계(Development stage) 목적 최신 의존성 테스트 가능 로컬에서 기능 개발 Dev 툴(lint/test 등) 포함 설치 권장 작업 흐름 작업 명령어 설명 의존성 추가 uv add --dev pytest 개발 dependency 그룹으로 관리 환경 동기화 uv sync .venv 에 의존성 설치 락 파일 업데이트 uv lock pyproject.toml 변경 후 실행 락 파일 기반 설치 테스트 uv sync --locked lock 파일만으로 동일 환경 재현 확인 개발자 로컬 환경 uv sync # dev 포함 설치 OK → 개발자는 uv.lock 을 자동 생성/갱신하여 커밋 합니다 ✅ ✅ 2) 패키징 단계(Build / Packaging stage) 목적 artifacts(예: wheel, sdist) 생성 운영환경에 불필요한 Dev deps 제외 권장 작업 흐름 작업 명령어 설명 lock 파일 기반 설치 검증 uv sync --locked --no-dev 재현 가능한 production deps 패키지 빌드 uv build wheel/SDist 생성 런타임 검사 uv run app:main 의존성 정상 반영 검증 예시 명령 uv sync --locked --no-dev uv build → 배포되는 artifact는 dev deps 없이, lock 파일 기반 버전 확정 ✅ 3) Repository 관리(협업 / Git 공유) 목적 모든 팀원이 동일한 패키지 버전 환경 을 사용하도록 강제 Git에 반드시 포함해야 하는 것 ✅ 파일 목적 pyproject.toml 의존성 요구 정의 uv.lock 의존성 정확 버전 고정 Git에 포함하지 않는 것 ❌ 제외 파일 이유...

Jira 이슈관리: 개발자 입장에서 보는 베스트 활용법

자, Jira 이야기 좀 해볼까요? 요즘 소프트웨어 개발 현장에서 Jira는 그냥 도구가 아니라, 마치 숨 쉬는 것처럼 필수적인 존재가 됐죠. 저도 처음엔 그냥 이슈 등록하고 상태 바꾸는 정도로만 사용했는데, 알고 보니 훨씬 강력한 기능들이 숨어있더라고요. 제가 직접 부딪히면서 터득한 Jira 활용 팁들을 공유해 드릴 테니까, 함께 Jira 고수의 길로 나아가 보자고요! 먼저, 개발자 입장에서 Jira가 왜 중요한지부터 생각해 보죠. 단순히 상사가 시키는 일 목록이 아니라, 제 업무의 전부라고 할 수 있거든요. 현재 진행 중인 일, 다음에 해야 할 일, 그리고 끝낸 일들을 한눈에 볼 수 있으니 얼마나 편리해요! 게다가 동료들이랑, 팀장님이랑, 심지어 다른 부서 사람들이랑도 제 작업 상황을 깔끔하게 공유할 수 있고요. 버그 수정 과정이나 새로운 기능 구현 과정 같은 것들도 다 기록으로 남으니, 나중에 문제 해결이나 회고할 때 정말 큰 도움이 되더라고요. 댓글 기능이나 멘션 기능으로 궁금한 점을 바로바로 물어볼 수 있는 것도 엄청 편리하죠. 아, 그리고 팀워크 향상에도 도움이 된다는 건 덤이에요! 그럼 이제 Jira를 제대로 활용하는 방법을 알려드릴게요. 제가 가장 먼저 추천하는 건 바로 JQL, Jira Query Language를 마스터하는 거예요. 처음엔 좀 어렵게 느껴질 수도 있지만, 익숙해지면 Jira에서 원하는 정보를 엄청 빠르게 찾을 수 있답니다. 예를 들어, 제게 할당된 미완료 이슈만 골라보고 싶다면, assignee = currentUser() AND statusCategory != Done ORDER BY lastViewed DESC 이렇게 쿼리를 입력하면 끝! currentUser() 는 현재 로그인한 저를 뜻하고, statusCategory != Done 은 완료되지 않은 이슈들을 의미해요. 저는 여기에 ORDER BY lastViewed DESC 를 추가해서, 가장 최근에 본 이슈부터 보이도록 정렬해요....

개발 공부, 막막하다면? 가장 먼저 '이것'부터 시작하세요: 방향 설정 가이드

개발 공부? 막막하다면, 나침반부터 찾아봐요! 새로운 기술 배우는 거, 짜릿하잖아요? 특히 개발은 매일매일 새로운 게 쏟아지니까 더 흥미진진해요. 근데 동시에… 웹 개발? 앱 개발? 머신러닝? 도대체 어디서부터 시작해야 할지 막막하죠? 저도 처음엔 그랬어요. 프로그래밍 언어만 해도 몇 개인데, 온갖 프레임워크랑 학습 자료에 파묻혀서 시간만 허비하는 기분이었거든요. 결국 시작도 못 하고 포기할 뻔했죠. 😅 이 글은 바로 그런 저처럼 막막함에 빠진 초보 개발자들을 위한 거예요. 개발 공부, 무작정 시작하기 전에 꼭 필요한 게 있죠. 바로 나만의 '방향'을 잡는 거예요! 이 글에서 어떻게 나만의 학습 로드맵을 만들 수 있는지, 실제로 제가 경험한 팁까지 풀어볼게요. 1. 방향 설정? 왜 중요해요? (길 잃은 개발자가 되지 않으려면!) 처음 개발 공부 시작할 때 제가 했던 실수? '일단 다 해보자!' 였어요. 인기 많은 언어부터 시작하고, 친구 추천 받은 기술 따라 배우고… 유명 강의는 무조건 다 들었죠. 처음엔 뭔가 하는 것 같았지만… 금방 한계에 부딪혔어요. 갈팡질팡: 파이썬 배우다가 자바스크립트가 끌려서 바꾸고, 또 다른 프레임워크에 눈독 들이고… 결국 어느 것도 제대로 못하게 되더라고요. 동기 부여 급감: 왜 배우는지 모르니까, 조금만 어려워도 금방 지쳐서 포기하고 싶어졌어요. 비효율 폭발: 사실 저한테 필요 없는 내용에 시간 쏟고, 비슷한 내용을 반복해서 배우는 낭비도 많았죠. 결과물? 없음: 뚜렷한 목표 없이 공부하니까, 실제로 돌아가는 프로그램 하나 제대로 못 만들었어요. 마치 목적지 없이 여행하는 것 같았어요. 어디든 갈 수 있지만, 정작 어디에도 도착하지 못하는… 방향 설정은 마치 나침반과 지도 같은 거예요. 쓸데없는 시간 낭비 줄이고, 목표에 빨리 도착하도록 도와주는, 가장 중요한 첫걸음이죠! 2. 나만의 '왜(Why)' 찾기: 개발 공부...