Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
181 changes: 180 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,180 @@
# main-back
## 📖 프로젝트 소개

> 시니어내일은 5060 퇴직자 및 중장년층 구직를 위한 서비스
시니어 맞춤형 일자리 추천 알고리즘을 통해 다양한 채용공고를 접하고 간편이력서를 통해 지원까지 보다 쉽게 사용 가능한 반응형 웹 💚
---
## :link: 배포 링크

> ### FE : https://senior-tomorrow.kro.kr/
> ### BE : https://senior-naeil.life/

---
## 🗣️ 프로젝트 발표 영상 & 발표 문서

> ### 🗓️ 2025.05.13
> ### [📺 발표 영상 예시]()
> ### [📑 발표 문서 예시]()

---

## 🧰 사용 스택

### FE
<div align="center">

<!-- 프레임워크 및 언어 -->
<img src="https://img.shields.io/badge/Next.js-000000?style=for-the-badge&logo=next.js&logoColor=white">
<img src="https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white">
<img src="https://img.shields.io/badge/Tailwind CSS-06B6D4?style=for-the-badge&logo=tailwindcss&logoColor=white">
<br>

<!-- 상태 관리 및 폼 -->
<img src="https://img.shields.io/badge/Zustand-000000?style=for-the-badge&logo=zustand&logoColor=white">
<img src="https://img.shields.io/badge/React Hook Form-EC5990?style=for-the-badge&logo=reacthookform&logoColor=white">
<img src="https://img.shields.io/badge/Zod-8A2BE2?style=for-the-badge&logo=zod&logoColor=white">
<img src="https://img.shields.io/badge/TanStack Query-FF4154?style=for-the-badge&logo=react-query&logoColor=white">
<br>

<!-- HTTP -->
<img src="https://img.shields.io/badge/Axios-5A29E4?style=for-the-badge&logo=axios&logoColor=white">
<br>

<!-- 협업 툴 -->
<img src="https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white">
<img src="https://img.shields.io/badge/Figma-F24E1E?style=for-the-badge&logo=figma&logoColor=white">
<img src="https://img.shields.io/badge/Notion-000000?style=for-the-badge&logo=notion&logoColor=white">
<img src="https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white">
<br>

<!-- 린팅 / CI / 배포 -->
<img src="https://img.shields.io/badge/ESLint-4B32C3?style=for-the-badge&logo=eslint&logoColor=white">
<img src="https://img.shields.io/badge/Prettier-F7B93E?style=for-the-badge&logo=prettier&logoColor=black">
<img src="https://img.shields.io/badge/GitHub Actions-2088FF?style=for-the-badge&logo=githubactions&logoColor=white">
<img src="https://img.shields.io/badge/Vercel-000000?style=for-the-badge&logo=vercel&logoColor=white">

</div>

### BE
<div align="center">

<!-- 언어 & 프레임워크 -->
<img src="https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white">
<img src="https://img.shields.io/badge/Django-092E20?style=for-the-badge&logo=django&logoColor=white">
<br>

<!-- 데이터베이스 -->
<img src="https://img.shields.io/badge/PostgreSQL-4169E1?style=for-the-badge&logo=postgresql&logoColor=white">
<img src="https://img.shields.io/badge/Redis-DC382D?style=for-the-badge&logo=redis&logoColor=white">
<br>

<!-- 라이브러리 & 패키지 -->
<img src="https://img.shields.io/badge/Pydantic-2E86AB?style=for-the-badge&logo=pydantic&logoColor=white">
<img src="https://img.shields.io/badge/PostGIS-0099CC?style=for-the-badge&logo=postgresql&logoColor=white">
<img src="https://img.shields.io/badge/Gunicorn-499848?style=for-the-badge&logo=gunicorn&logoColor=white">
<img src="https://img.shields.io/badge/Boto3-569A31?style=for-the-badge&logo=amazonaws&logoColor=white">
<img src="https://img.shields.io/badge/django--storages-0C4B33?style=for-the-badge&logo=django&logoColor=white">
<img src="https://img.shields.io/badge/Pytest-0A9EDC?style=for-the-badge&logo=pytest&logoColor=white">
<img src="https://img.shields.io/badge/unittest-6E6E6E?style=for-the-badge">
<br>

<!-- 배포 & 서버 -->
<img src="https://img.shields.io/badge/Nginx-009639?style=for-the-badge&logo=nginx&logoColor=white">
<img src="https://img.shields.io/badge/Gunicorn-499848?style=for-the-badge">
<img src="https://img.shields.io/badge/NCP-03C75A?style=for-the-badge&logo=naver&logoColor=white">
<br>

<!-- 협업 툴 -->
<img src="https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white">
<img src="https://img.shields.io/badge/Notion-000000?style=for-the-badge&logo=notion&logoColor=white">
<img src="https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white">
<br>

<!-- CI/CD -->
<img src="https://img.shields.io/badge/GitHub Actions-2088FF?style=for-the-badge&logo=githubactions&logoColor=white">
<img src="https://img.shields.io/badge/Zero Downtime Deployment-3B82F6?style=for-the-badge">

</div>


---

## :busts_in_silhouette: 팀 동료

### FE

| <a href="https://github.com/KIMDOTS"><img src="https://avatars.githubusercontent.com/u/168804702?v=4" width=100px/><br/><sub><b>@KIMDOTS</b></sub></a><br/> | <a href="https://github.com/chiyo-an"><img src="https://avatars.githubusercontent.com/u/52526916?v=4" width=100px/><br/><sub><b>@chiyo-an</b></sub></a><br/> | <a href="https://github.com/sasha-designer"><img src="https://avatars.githubusercontent.com/u/186126648?v=4" width=100px/><br/><sub><b>@sasha-designer</b></sub></a><br/> |
|:------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------:|
| 김민정 | 안정은 | 박정현 |
### BE

| <a href="https://github.com/Anianim"><img src="https://avatars.githubusercontent.com/u/188424203?v=4" width=100px/><br/><sub><b>@Anianim</b></sub></a><br/> | <a href="https://github.com/rodzlen"><img src="https://avatars.githubusercontent.com/u/162860800?v=4" width=100px/><br/><sub><b>@rodzlen</b></sub></a><br/> | <a href="https://github.com/parkh12"><img src="https://avatars.githubusercontent.com/u/186007221?v=4" width=100px/><br/><sub><b>@parkh12</b></sub></a><br/> |
|:-------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------------------------------------------------:|
| 고영주 | 김휘수 | 박현성 |

---

## ✨ 백엔드 개발 규칙

### Branch Strategy
> - main / dev 브랜치 기본 생성
> - main과 dev로 직접 push 제한
> - PR 시 poetry, migration 변동 사항 작성
> - 문제 발생시 Isues 혹은 Discord로 공유
> - PR 전 최소 2인 이상 승인 필수

### Git Convention
> 1. 적절한 커밋 접두사 작성
> 2. 커밋 메시지 내용 작성

>| 접두사 | 이모지 | 설명 |
>| ------------ | ------ | -------------------------------------------------------------------- |
>| Feat | ✨ | 새로운 기능 추가 |
>| Fix | 🐛 | 기능 수정 및 버그 수정 |
>| Chore | 💡 | 오타 수정, 주석 추가 등 기능 변경 없이 코드 수정 |
>| Docs | 📝 | 문서 수정 (예: README.md) |
>| Build | 🚚 | 빌드 관련 파일 수정 또는 삭제 |
>| Test | ✅ | 테스트 코드 추가 및 수정 (프로덕션 코드 변경 없음) |
>| Refactor | ♻️ | 코드 리팩토링 (기능 변화 없이 구조 개선) |
>| Hotfix | 🚑 | 긴급 수정

### Git Flosw
main(메인) - dev(개발중) - feature/(작업중인브런치) - release(배포테스트) - prod(배포)

---

### 폴더 구조 (기능 중심 구조)

```
main-back/
├── .github/ # GitHub CI / CD
├── config/ # 장고프로젝트 설정 (Settings, Urls)
├── job-posting/ # 공고 관련 API
├── resume/ # 이력서 관련 API
├── search/ # 필터링 관련 API
├── staticfiles/ # Django Admin 정적파일
├── users/ # 유저 관련 API
└── utils/ # 유저 관련 API
```




---
---

## :clipboard: Documents
> [📜 API 명세서](https://www.notion.so/API-1cfcaf5650aa80b6999bf3a2733a030f)
>
> [📜 사업기획팀 요구사항 정의서](https://www.notion.so/1cecaf5650aa80c1ae32ff4f2efff850)
>
> [📜 FE 요구사항 정의서](https://docs.google.com/document/d/1rmbJZBB7H0fK-2nM2vk_Fqd1gL9m1Rmp0jahHoRzJXg/edit?tab=t.0)
>
> [📜 BE 요구사항 정의서](https://docs.google.com/document/d/1DVcntERD_Ypr-7SBBtSy8bu_6zjl6Ka7e1It-mRyq0U/edit?tab=t.0)
>
> [📜 ERD](https://www.erdcloud.com/d/4Qn2DHKPTvoSmR9BQ)
>
> [📜 테이블 명세서](https://docs.google.com/spreadsheets/d/1MutR7L5QezUi0IUW9aGQy_QuUHMVsSGfpqtv0PHUV3s/edit?gid=0#gid=0)
>
> [📜 와이어프레임 및 화면정의서](https://www.figma.com/design/kcE3AdbnTxhmsYeaMLBWtH/1%ED%8C%80-%EC%82%AC%EB%B3%B8---%EC%8B%9C%EB%8B%88%EC%96%B4-%EB%82%B4%EC%9D%BC-%EC%99%80%EC%9D%B4%EC%96%B4%ED%94%84%EB%A0%88%EC%9E%84?node-id=92-5561&p=f&t=P4E3JUVuuh8WciXv-0))
>
> [📜 플로우차트](https://www.figma.com/design/kcE3AdbnTxhmsYeaMLBWtH/1%ED%8C%80-%EC%82%AC%EB%B3%B8---%EC%8B%9C%EB%8B%88%EC%96%B4-%EB%82%B4%EC%9D%BC-%EC%99%80%EC%9D%B4%EC%96%B4%ED%94%84%EB%A0%88%EC%9E%84?node-id=161-8740&p=f&t=P4E3JUVuuh8WciXv-0))
76 changes: 76 additions & 0 deletions config/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,3 +202,79 @@

NAVER_TOKEN_URL = os.getenv("NAVER_TOKEN_URL") or ""
NAVER_USER_INFO_URL = os.getenv("NAVER_USER_INFO_URL") or ""

log_dir = BASE_DIR / "logs"

# 로그 디렉터리가 존재하지 않으면 생성
if not log_dir.exists():
log_dir.mkdir(parents=True)

LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"verbose": {
"format": "{levelname} {asctime} {filename}:{lineno} - {funcName} - {message}",
"style": "{",
},
},
"handlers": {
"user_file": {
"level": "ERROR",
"class": "logging.FileHandler",
"filename": log_dir / "user.log",
"formatter": "verbose",
},
"job_posting_file": {
"level": "ERROR",
"class": "logging.FileHandler",
"filename": log_dir / "job_posting.log",
"formatter": "verbose",
},
"resume_file": {
"level": "ERROR",
"class": "logging.FileHandler",
"filename": log_dir / "resume.log",
"formatter": "verbose",
},
"search_file": {
"level": "ERROR",
"class": "logging.FileHandler",
"filename": log_dir / "search.log",
"formatter": "verbose",
},
"utils_file": {
"level": "ERROR",
"class": "logging.FileHandler",
"filename": log_dir / "utils.log",
"formatter": "verbose",
},
},
"loggers": {
"user": {
"handlers": ["user_file"],
"level": "DEBUG",
"propagate": True,
},
"job_posting": {
"handlers": ["job_posting_file"],
"level": "DEBUG",
"propagate": True,
},
"resume": {
"handlers": ["resume_file"],
"level": "DEBUG",
"propagate": True,
},
"search": {
"handlers": ["search_file"],
"level": "DEBUG",
"propagate": True,
},
"utils": {
"handlers": ["utils_file"],
"level": "DEBUG",
"propagate": True,
},
},
}