모듈 영역의 코드를 사용하라

매일 공부(ML)·2022년 10월 19일
0

파이썬 코딩의 기술

목록 보기
23/27

배포 환경을 설정하기 위해서 모듈 영역의 코드를 사용할

배포 환경은 프로그램이 실행될 설정을 뜻하고 보통 모든 프로그램에는 배포 환경이 적어도 하나는 있는데 그것을 프로덕션 환경이라고 한다.

프로그램을 작성하는 궁국적인 목표는 프로덕션 환경에서 프로그램을 실행해 원하는 결과를 얻어내는 것이다.


프로그램에서 한 줄만 변경한 뒤 제대로 동작하는지 검증하고 싶을지라도 모든 작업을 다시 해야하기에 비용이 너무 비싸다

이러한 문제를 우회하는 가장 좋은 방식은 프로그램을 시작할 때 프로그램 일부를 오버라이드해서 배포되는 환경에 따라서 다른 기능을 제공하도록 만드는 것이다.

  • 예시
#dev_main.py

TESTING = True

import db_connection

db = db_connection.Database()

#prod_main.py
TESTING = False

import db_connection

db = db_connection.Database()

"""
두 파일의 차이는 TESTING 상수의 값이 다르다는 것이고, 프로그램의 다른 모듈들은 __main__모듈을 임포트해서 
TESTING의 값에 따라서 자신이 정의하는 애트리뷰트 값을 결정

"""

#db_connection.py

import __main__

class TestingDatabase:
	...
    
class RealDatabase:
	...

if __main__.TESTING:
	Database = TestingDatabase
    
else:
	Database = RealDatabas

모듈 영역에서 실행되는 코드가 일반적인 파이썬 코드이기에 if문을 모듈 수준에서 사용하면 모듈 안에서 이름이 정의되는 방식을 결정할 수 있어서 더 쉽게 다양한 배포 환경에 맞춰서 모듈을 구성하고 데이터베이스 설정저처럼 비용이 많이 드는 가정이 불필요한 배포 환경이라면 아예 이런 설정을 제외시킬 수 있다.

대화식 개발을 편하게 도와주는 로컬 구현이나 가짜 구현을 주입할 수 있고, 테스트를 위해서 목을 사용할 수도 있다.


위와 같은 접근 방법이 외부 환경에 대한 가정을 우회하기 위한 것 이상의 용도로 사용될 수 있다.

#db_connection.py

import sys

class Win32Database:
	...
    
class PosixDatabase:
    ...

if sys.platform.startswith('win32'):
	Database = Win32Database
else:
	Database = PosixDatabase
#비슷한 방식으로 os.environ에서 얻은 환경 변수를 모듈 정의에 참조할 수 있다.

Summary

  • 고유한 가정과 설정이있는 다양한 배포 환경에서 프로그램을 실행해야하는 경우가 많다.

  • 모듈 영역에서 일반적인 파이썬 문을 사용하면 각 배포 환경에 맞게 모듈 내용의 조정을 할 수 있다.

  • 모듈 내용은 모두 외부 조건에 따라서 달라질 수 있는 결과물이다.

  • 외부 조건에는 sys나 os 모듈을 사용해서 알아낸 호스트 인트로스팩션 정보가 포함된다.

profile
성장을 도울 아카이빙 블로그

0개의 댓글