common 앱 분석 정리
개괄
common 앱은 Django 프로젝트 전반에서 사용되는 공통 기능 및 리소스를 제공하는 앱입니다. 주요 기능은 다음과 같습니다.
- 템플릿: 베이스 템플릿, 네비게이션 바, 푸터 등 사이트 전반의 레이아웃 및 공통 UI 요소 제공
- 컨텍스트 프로세서: 모든 템플릿에서 사용 가능한 변수(활성 조직, 사용자 조직 개수) 제공
- 스타일: 기본 스타일, 네비게이션 바 스타일, 푸터 스타일, 홈페이지 스타일 제공
주제별 분석
1. 템플릿
- base.html: 모든 페이지의 기본 템플릿으로, head, body, navbar, footer, content 영역을 정의합니다.
{% block %}태그를 사용하여 자식 템플릿에서 각 영역을 커스터마이징할 수 있도록 합니다. 정적 파일(CSS, JS) 로드를 위한{% load static %}및{% static %}태그를 사용합니다. - navbar.html: 사이트 상단에 표시되는 네비게이션 바를 정의합니다. 로그인 여부에 따라 다른 메뉴를 표시하고, 활성 조직 정보를 표시하는 기능을 포함합니다.
accounts앱의 URL을 참조하여 로그인, 회원가입, 활성 조직 설정 페이지로 연결합니다. - footer.html: 사이트 하단에 표시되는 푸터를 정의합니다. 저작권 정보 및 현재 연도를 표시합니다.
- index.html: 홈페이지 템플릿으로,
base.html을 상속받아 hero 섹션을 표시합니다. ERP, CRM 페이지로 연결되는 버튼을 제공합니다.
2. 컨텍스트 프로세서
- context_processors.py:
active_organization함수는 모든 템플릿 렌더링 시 활성 조직 정보(active_organization)와 사용자의 조직 개수(user_orgs_count)를 컨텍스트 변수로 추가합니다. 세션에 저장된active_org_id를 기반으로 활성 조직을 가져오고,Organization모델이 존재하지 않을 경우None을 반환합니다.accounts앱의Organization모델을 사용합니다.
3. 스타일
- base.css: 사이트 전반에 적용되는 기본 스타일을 정의합니다. 폰트, 색상, 레이아웃 등을 설정합니다.
body에flex속성을 적용하여 footer를 하단에 고정합니다. - navbar.css: 네비게이션 바의 스타일을 정의합니다. 메뉴, 드롭다운 메뉴, 활성 조직 표시 등의 스타일을 포함합니다. 반응형 디자인을 위해
@media쿼리를 사용합니다. - footer.css: 푸터의 스타일을 정의합니다.
- home.css: 홈페이지의 hero 섹션 스타일을 정의합니다.
4. JavaScript
- navbar.js, common.js: 현재는 비어있는 파일로, 향후 자바스크립트 코드를 추가할 수 있습니다.
5. 모델
- models.py: 현재는 비어있는 파일로, common 앱에서 사용하는 모델이 없습니다. 필요에 따라 공통 모델을 추가할 수 있습니다.
6. 기타
admin.py: 현재는 비어있는 파일로, common 앱의 모델에 대한 Django admin 인터페이스를 커스터마이징할 수 있습니다.apps.py: common 앱의 설정을 담고 있습니다.default_auto_field는 Django 3.2 이상에서 필수이며, 기본 키 필드의 유형을 지정합니다.tests.py: 현재는 비어있는 파일로, common 앱의 기능을 테스트하는 코드를 작성할 수 있습니다.
향후 개발 방향
- 공통 컴포넌트 추가: 자주 사용되는 UI 컴포넌트 (버튼, 폼, 테이블 등)를 common 앱에 추가하여 재사용성을 높일 수 있습니다.
- 유틸리티 함수 추가: 다른 앱에서 공통적으로 사용될 수 있는 유틸리티 함수 (날짜/시간 처리, 문자열 처리 등)를 common 앱에 추가할 수 있습니다.
- JavaScript 기능 추가: navbar.js, common.js에 동적인 UI 기능을 추가할 수 있습니다. 예를 들어, 네비게이션 바의 드롭다운 메뉴를 자바스크립트로 제어할 수 있습니다.
- 테스트 코드 작성:
tests.py에 테스트 코드를 작성하여 common 앱의 기능을 검증하고, 코드 변경 시 발생할 수 있는 오류를 방지해야 합니다.

