
Python 규칙은 뭐가 있을까?
네이밍 규칙?
프로젝트 구성?
그외 등등?
궁금해서 한번 제너럴 한 내용을 찾아봤다
my_python_project/
├── .git/ # Git 저장소 (버전 관리)
├── .github/ # GitHub Actions (CI/CD 파이프라인)
├── venv/ # 가상 환경 (가상 환경 폴더)
├── docs/ # 프로젝트 문서 (예: README, API 문서)
│ ├── index.md
│ └── usage.md
├── src/ # 소스 코드 (핵심 애플리케이션 로직)
│ ├── __init__.py # 패키지 초기화 파일
│ ├── main.py # 진입점 (Entry Point)
│ ├── module1.py
│ └── module2.py
├── tests/ # 테스트 코드
│ ├── __init__.py
│ ├── test_module1.py
│ └── test_module2.py
├── scripts/ # 유틸리티 스크립트 (예: 데이터베이스 초기화, 배포 스크립트)
│ ├── deploy.sh
│ └── setup.py
├── requirements.txt # 프로젝트 의존성 목록
├── setup.py # 패키지 메타데이터 및 배포 설정 파일
├── .gitignore # Git에서 무시할 파일 목록
└── README.md # 프로젝트 설명 파일
📌 디렉토리 및 파일 설명
venv/: Python 가상 환경으로, 프로젝트 의존성이 격리됨.
src/: 애플리케이션의 핵심 소스 코드.
tests/: unittest, pytest 등으로 작성된 테스트 코드.
scripts/: 관리 및 배포 관련 스크립트.
setup.py: 패키징 및 배포 설정 파일.
requirements.txt: 필요한 라이브러리 목록.
README.md: 프로젝트 설명, 사용법, 설치 방법 안내.
my_fastapi_project/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI 엔트리 포인트
│ ├── api/ # 라우팅, 엔드포인트 정의
│ │ ├── v1/
│ │ │ ├── __init__.py
│ │ │ └── endpoints.py
│ ├── models/ # Pydantic 모델 정의
│ ├── schemas/ # 데이터 스키마 정의
│ ├── core/ # 핵심 설정 (예: config.py)
│ └── tests/ # 테스트 코드
├── .env # 환경 변수 파일
├── requirements.txt
└── README.md
my_django_project/
├── myproject/ # Django 프로젝트 폴더
│ ├── __init__.py
│ ├── settings.py # 설정 파일
│ ├── urls.py # URL 라우팅
│ ├── wsgi.py # WSGI 엔트리 포인트
│ ├── asgi.py # ASGI 엔트리 포인트
├── apps/ # Django 앱 폴더
│ ├── app1/
│ │ ├── migrations/
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ └── views.py
├── static/ # 정적 파일
├── templates/ # HTML 템플릿 파일
├── requirements.txt
└── manage.py # Django 관리 명령어 도구
my_java_project/
├── .git/ # Git 저장소
├── src/
│ ├── main/ # 애플리케이션 소스 코드
│ │ ├── java/ # Java 코드
│ │ │ └── com/example/app/
│ │ │ ├── App.java # 메인 클래스
│ │ │ ├── controller/
│ │ │ ├── service/
│ │ │ ├── repository/
│ │ │ └── model/
│ │ ├── resources/ # 설정 파일, SQL 스크립트
│ │ ├── application.yml
│ │ ├── schema.sql
│ │ └── data.sql
│ ├── test/ # 테스트 코드
│ │ ├── java/
│ │ │ └── com/example/app/
│ │ │ ├── AppTest.java
│ │ ├── resources/ # 테스트 설정 파일
├── pom.xml # Maven 프로젝트 설정 파일
└── README.md # 프로젝트 설명
my_gradle_project/
├── .git/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/app/
│ │ │ ├── App.java
│ │ │ ├── controller/
│ │ │ ├── service/
│ │ │ ├── repository/
│ │ │ └── model/
│ │ ├── resources/
│ │ ├── application.yml
│ ├── test/
│ │ ├── java/
│ │ │ └── com/example/app/
│ │ │ ├── AppTest.java
├── build.gradle # Gradle 빌드 설정
└── README.md # 프로젝트 설명
📌 디렉토리 및 파일 설명
src/main/java: 핵심 애플리케이션 소스 코드.
src/main/resources: 설정 파일, SQL 스크립트.
src/test/java: 단위 및 통합 테스트 코드.
pom.xml (Maven): 의존성 및 빌드 설정.
build.gradle (Gradle): Gradle 빌드 설정.
4칸 공백(space) 사용 (탭 대신 공백 사용).
한 줄이 너무 길 경우 들여쓰기하여 가독성을 유지.
예시:
def my_function():
print("Hello, world!")
한 줄은 최대 79자까지 사용합니다.
긴 코드는 \로 줄을 나누거나 괄호 안에 넣어서 나눕니다.
# 올바른 예
total = (first_variable + second_variable + third_variable
+ fourth_variable + fifth_variable)
연산자 앞뒤로 공백을 사용합니다.
괄호 안에는 공백을 넣지 않습니다.
a = b + c
my_list = [1, 2, 3]
잘못된 예:
python
코드 복사
a=b+c
my_list = [ 1, 2, 3 ]
함수나 클래스 정의 사이에는 두 줄 공백을 둡니다.
클래스 내 메서드 사이에는 한 줄 공백을 둡니다.
class MyClass:
def method_one(self):
pass
def method_two(self):
pass
소문자 + 밑줄(_) 사용 (snake_case).
예시:
user_name = "Alice"
def calculate_sum(a, b):
return a + b
PascalCase 사용 (단어의 첫 글자는 대문자).
class UserAccount:
pass
대문자 + 밑줄(_) 사용.
MAX_RETRY = 5
PI = 3.14159
주석은 코드의 목적이나 복잡한 부분을 설명하기 위해 사용합니다.
주석은 영어로 작성하는 것이 권장됩니다.
# Calculate the sum of two numbers
def add(a, b):
return a + b
함수, 클래스, 모듈에는 """ """를 사용해 Docstrings를 작성합니다.
def add(a, b):
"""
두 숫자를 더한 값을 반환합니다.
Args:
a (int): 첫 번째 숫자
b (int): 두 번째 숫자
Returns:
int: 두 숫자의 합
"""
return a + b
예외는 try-except 블록을 사용합니다.
구체적인 예외를 명시합니다.
try:
value = int(input("Enter a number: "))
except ValueError:
print("Invalid input. Please enter a valid number.")
Python에서는 unittest 또는 pytest를 사용하여 테스트를 작성합니다.
테스트 파일은 test_*.py 형태로 작성합니다.
import unittest
from my_module import add
class TestAddFunction(unittest.TestCase):
def test_add(self):
self.assertEqual(add(2, 3), 5)
if __name__ == '__main__':
unittest.main()
각 디렉터리에는 init.py를 포함합니다.
모듈명은 소문자 + 밑줄(_)로 작성합니다.
my_project/
├── __init__.py
├── module_one.py
└── module_two.py
Black: 코드 스타일 자동 정리
isort: import 순서 정리
pip install black isort
black my_project/
isort my_project/
✅ 7.2 코드 품질 검사 (Linting)
flake8: 코드 규칙 검사
pylint: 코드 품질 검사
pip install flake8 pylint
flake8 my_project/
pylint my_project/
| 항목 | 규칙 |
|---|---|
| 들여쓰기 | 4칸 공백 |
| 줄 길이 | 최대 79자 |
| 네이밍 | 변수/함수: snake_case, 클래스: PascalCase, 상수: UPPERCASE |
| 주석 | Docstring 사용, 주석은 명확하고 간결하게 작성 |
| 모듈 구조 | 패키지 초기화 파일 (__init__.py) 포함 |
| 테스트 | unittest 또는 pytest 사용 |
| 코드 포매팅 | Black, isort 사용 |
| 코드 린트 | flake8, pylint 사용 |