새소식

Dev Log

[python flask] 디렉토리 구조 원칙 세우기

  • -

1. 웹서버와 애플리케이션 로직 분리하기 (관심사 분리 측면)

-> 애플리케이션 로직이란?

웹앱이 작동하는 방식을 정의한 코드 (DB Query, Auth, Business Logics)

-> 왜?

(1) 웹서버의 가동 유무와 상관없이 애플리케이션을 관리하기 위함!

(2) 확장성 고려 (기능 추가, 더 많은 사용자 고려 등) -> 대규모 Flask 웹앱에서는 꼭 고려!

-> 어떻게?

(1) Logic Directory에 Database 관련, Auth 관련, Business Logic 관련 코드를 포함시키기

(2) Web Server Directory에 Route, View, Template 등 웹서버 관련 코드를 포함시키기

(3) 디렉토리 이름은 알잘딱깔센하기

 

 

2. Config를 분리하기

-> 왜?

(1) Config용 디렉토리를 분리해서 관리하면, 코드 및 설정을 체계적으로 유지하는 데 도움! (코드 내 검색 없이 구성 설정 관리가 쉬움)

(2) 개발환경, 스테이징환경, 프로덕션환경 등에 따라 다른 Config를 적용할 수 있음

-> 어떻게?

(1) config 디렉토리를 루트 디렉토리에 생성하고, 환경별로 하위 디렉토리를 생성해서 파일을 배치하기

(2) secret, API key 등 민감 정보는 암호화 등을 추가해서 더 민감하게 관리하기

 

 

3. Flask App 초기화를 위해 __init__.py 사용하기

-> __init__.py 란?

Python의 인터프리터가 __init__.py 파일이 있는 위치의 디렉토리를 같은 패키지로 인식할 수 있음.

-> 왜?

(1) __init__.py는 Python App이 실행될 때 가장 먼저 실행되는 코드 = Flask 초기 설정을 적용하기에 최적

-> 어떻게?

(1) app/__init__.py에서 Flask 인스턴스를 생성하고, Secret Key, DB Connect 등 설정을 구성하자!

(2) blueprint, extension 등 추가 설정도 관리 가능

 

 

4. Route를 분리하기

-> 왜?

(1) Route를 효율적으로 구성하여, 변경사항을 빠르게 찾고, 접근해서, 추적할 수 있음!

(2) 대규모 코드베이스 유지 관리에 도움

-> 어떻게?

(1) Route 디렉토리를 만들어, 특정 모듈에 대한 요청을 묶어 하위 디렉토리로 관리

 

 

5. 정적 자산을 Static으로 분리하기

-> 정적 자산이란?

Image, CSS, Javascript 등 자주 변경되지 않거나, 서버에서 처리해야하는 유형의 파일

-> 왜?

(1) 기본 애플리케이션 코드를 정리하여, 자주 바뀌는 코드들과 분리하면 더 양 코드를 더 쉽게 찾고 관리할 수 있음

(2) 정적 자산을 참조하기 위한 경로 탐색을 Flask에서 지원함

(3) 이미지 등 자산을 코드와 분리하여 중앙 위치에서 효율적으로 관리

-> 어떻게?

(1) Static 디렉토리를 만들고, url_for() 함수를 사용하면 템플릿에서 static 디렉토리에 접근할 수 있음

 

 

6. View를 여러 모듈로 분리하기

-> View란?

HTTP 요청에 대해 응답하는 함수 (url 기반). 

-> 왜?

(1) 분리 가능한 하위 주제로 구별하면, 재사용 가능한 로직은 재사용하여 생산성이 향상

(2) 대규모 코드베이스에서 여러 작업자들이 나누어, 공동작업할 때 효율 상승

(3) 기능 모듈을 독립적으로 개발하므로, 테스트, 디버깅 등을 독립적으로 수행할 수 있어 간단해짐

-> 어떻게?

(1) views 디렉토리를 만들고, 고유 기능별로 자체 모듈을 하위 디렉토리로 생성

 

 

7. Template 기반 HTML 작성하기

-> Template이란?

Jinja2 등 Renderer 기반으로 HTML 내에 템플릿 코드를 활용, HTML을 재사용할 수 있도록 하는 표현 장치

-> 왜?

(1) 템플릿을 사용함으로써, 애플리케이션의 논리 레이어와 표현 레이어를 더 구분할 수 있게 되고, HTML의 코드 체계화 등이 가능

(2) 특히 flask로 복잡한 페이지를 구성할 때, 구조적으로 유용

-> 어떻게?

(1) Flask Templates를 보고, 템플릿 언어를 참고해서 작성하면 된다............ 프론트를 할 일이 있을 때 건들기!

 

 

8. 데이터베이스 모델을 models로 분리하기

-> 왜?

(1) 데이터베이스 모델을 저장하는 곳을 분리하여 관리함으로써 코드베이스가 더 직관적으로 유지

-> 어떻게?

(1) models 디렉토리의 각 모델에 대해 별도로 데이터베이스 파일을 관리

 

 

9.  테스트를 분리하기

-> 왜?

(1) 테스트를 분리하여 다른 비즈니스 로직과 혼합되지 않도록 할 수 있음

(2) 테스트 자동화를 위해 관리

-> 어떻게?

(1) 테스트 유형별로 따로 하위 디렉토리를 관리 (unit, integration, ...)

(2) 테스트를 저장 시, 설명이 포함된 파일 이름을 작성하여 테스트의 기능을 한 눈에 알 수 있도록 하기

(3) 테스트 파일에 목적을 설명하는 주석 포함하기

 

 

10. requirements.txt로 프로젝트 종속성 관리하기

...요건 기본이지!

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.