RAG

패스트캠퍼스 환급챌린지 46일차 : 테디노트의 RAG 비법노트 강의 후기

Sssadie 2025. 12. 27. 01:17
반응형

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

 

모듈과 패키지

모듈이란?

  • 파이썬 정의와 문장을 담고 있는 .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

 

 

반응형