본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
모듈과 패키지
모듈이란?
- 파이썬 정의와 문장을 담고 있는 .py 파일
- 함수, 변수, 클래스 등을 포함
- 모듈을 통해 코드를 구조화하고, 유지보수하기 용이해짐
- 작성된 모듈은 다른 프로그램에서 재사용 가능
모듈 사용하기
- 모듈 생성하기 : .py 파일에 정의
- 모듈을 다른 프로그램에서 가져와 사용하기
- import '모듈명'
- 모듈 내에서 다른 모듈을 가져오는 것 또한 가능 - 모듈의 이름 :__name__으로 참조 가능
모듈 가져오기 - 지역 네임스페이스(.Namespace)
- 모듈을 지역 네임스페이스로 가져오기
- from '모듈명' import '개체명', '개체명2'
→ 이렇게 가져올 경우, 해당 개체 이름을 바로 사용할 수 있음
- from '모듈명' import*
→ 모듈 내의 모든 개체를 import 해올 수 있음 (_로 시작하는 것 제외)
→ 의도와 다르게 모듈 내 모든 정보를 가져오기 때문에, 가급적 사용하지 말 것
모듈 활용하기
- '모듈'로서 코드와, '메일 프로그램'으로서 코드를 어떻게 구분할 수 있을까?
- if__name__== "__main__":
- 파이썬 인터프리터로 실행한 파일은 모듈명이 '__main__'으로 고정됨
[import 방식에 따른 차이 예시]
#출처 명확
import math
math.sqrt(4)
#간결하지만 충돌 위험
from math import sqrt
sqrt(4)
⇒ 협업·대규모 프로젝트에서는 첫 번째 방식 선호
패키지란?
- 모듈의 계층구조를 만드는 방법
- 모듈을 계층화하고, 모듈을 포함하는 디렉토리의 집합
- 디렉토리 구조를 활용하여 연관성 있는 모듈을 그룹화하고 정리할 수 있음
- 코드의 구조화와 재사용을 용이하게 만들며, 대규모 프로젝트에 필수적으로 사용됨
패키지의 구성
- 디렉토리 패키지 아래에 모듈들이 구성
- 서브패키지는 디렉토리 계층구조로 정의
- 패키지 바깥에서 모듈 임포트하기 : import package.module
→ 실제 모듈을 활용 시 : package.module.function() - 별칭 이용하기 : import package.module as alias
→ alias.function() - 패키지 내의 모든 모듈 임포트하기 : from package import*
→ 허용된 모듈만 import 가능
패키지 초기화
- __init__.py
→ 이 디렉토리가 파이썬 패키지임을 알려주는 파일
→ 패키지 수준에서 사용되는 변수, 함수, 또는 초기화 로직이 정의됨
→ 하위 모듈을 미리 로드하거나, 전역변수를 정의하는 등
→ __all__ 을 활용하여, 참조하게 만들 모듈만 선택 가능
패키지 설계의 핵심
- 기능 기준으로 묶기 (데이터 흐름 기준으로 묶기 아님!!)
[예시]
rag/
├─ loaders/
├─ retrievers/
├─ prompts/
└─ utils/
모듈과 패키지는 '코드를 정리하는 단계'라고 할 수 있습니다.
- 함수 : 로직 단위
- 모듈(.py) : 기능 단위
- 패키지(디렉토리) : 도메인 단위
오늘은 파이썬에서 코드 구조화를 담당하는 핵심 개념인 모듈과 패키지에 대해 학습했어요. 모듈과 패키지는 코드를 나누는 방법이 아니라, 생각을 정리하는 방법이라는걸 깨달을 수 있는 수업이었죠. 함수가 하나의 작업 단위를 묶는 도구라면, 모듈과 패키지는 그 함수들을 어떻게 정리하고 관리할 것인가에 대한 해답이라고 이해했어요.
모듈은 파이썬 정의와 문장을 담고 있는 하나의 .py 파일로, 함수, 변수, 클래스 등을 포함할 수 있다고 합니다. 코드를 기능 단위로 분리해 재사용성과 유지보수성을 높여주죠. 한 번 작성한 모듈은 다른 프로그램에서도 그대로 가져다 쓸 수 있기 때문에, 중복 코드를 줄일 수 있어 매우 효율적이라고 할 수 있어요.
import 모듈명 형태로 가져와 쓸 수 있고, from 모듈명 import 개체명 처럼 특정 함수나 변수만 불러올 수도 있어요. 다만, from 모듈명 import * 형태는 의도치 않게 모든 개체를 가져올 수 있어 충돌 위험이 있죠. 가급적 사용하지 않는 것이 좋다고 하네요. 또한, 각 모듈은 __name__ 이라는 내장 변수를 가지고, 이를 통해 해당 파일이 직접 실행된 것인지 아니면 import 된 것인지를 구분할 수 있습니다.if__name__ == "__main__": 구문은 이 차이를 활용해서 실행 코드와 모듈 코드를 분리할 수 있습니다.
패키지는 이러한 모듈들을 계층 구조로 묶는 방법을 말합니다. 여러 개의 모듈을 하나의 디렉토리로 묶고, 관련 기능끼리 그룹화함으로써 대규모 프로젝트에서도 코드 구조를 체계적으로 유지할 수 있죠. 패키지 안에는 서브패키지를 둘 수도 있고, 이는 디렉토리 구조로 자연스럽게 표현됩니다. 패키지에는 __init__.py 파일이 포함될 수 있으며, 이는 해당 디렉토리가 파이썬 패키지임을 알리는 역할을 합니다. 이처럼 패키지는 단순한 폴더를 의미하는 것이 아니라, 하나의 명확한 인터페이스를 가진 구성 요소가 됩니다.
오늘 학습은 모듈과 패키지를 통해 구조화 방법을 배운 것 같아요. 단순히 파일을 나누는 기술 뿐만 아니라 프로그램의 구조와 사고를 정리하는 방법을 알 수 있었죠. 코드를 작성하다보면 제가 썼어도 '뭐가 어디에 있더라?'하면서 찾기 일쑤였는데, 앞으로는 '어디에 무엇을 어떤 형태로 둘 것인가'를 고민해서 개발자로서 실력을 키워야겠어요.




커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr
'RAG' 카테고리의 다른 글
| 패스트캠퍼스 환급챌린지 48일차 : 테디노트의 RAG 비법노트 강의 후기 (0) | 2025.12.29 |
|---|---|
| 패스트캠퍼스 환급챌린지 47일차 : 테디노트의 RAG 비법노트 강의 후기 (0) | 2025.12.28 |
| 패스트캠퍼스 환급챌린지 45일차 : 테디노트의 RAG 비법노트 강의 후기 (0) | 2025.12.26 |
| 패스트캠퍼스 환급챌린지 44일차 : 테디노트의 RAG 비법노트 강의 후기 (0) | 2025.12.25 |
| 패스트캠퍼스 환급챌린지 43일차 : 테디노트의 RAG 비법노트 강의 후기 (0) | 2025.12.24 |