Skip to content

DailyDevQ is a platform designed to help users prepare for technical interviews and enhance their skills. It supports social logins via Google, GitHub, Kakao, and Naver, along with user management features powered by AWS DynamoDB.

License

Notifications You must be signed in to change notification settings

DailyDevQ/dailydevq-main

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

DailyDevQ-Main-Repo

EN KR

Python Terraform AWS GitHub Actions OpenAI Contributions Welcome License

DailyDevQλŠ” 개발자λ₯Ό μœ„ν•œ AI 기반의 기술 λ©΄μ ‘ 질문 및 ν•™μŠ΅ 관리 ν”Œλž«νΌμž…λ‹ˆλ‹€. AWS μ„œλ²„λ¦¬μŠ€ μ•„ν‚€ν…μ²˜μ™€ λ‹€μ–‘ν•œ μ†Œμ…œ 둜그인 κΈ°λŠ₯을 ν™œμš©ν•˜μ—¬ μ‚¬μš©μž μΉœν™”μ μ΄κ³  효율적인 ν•™μŠ΅ ν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€.


μ£Όμš” κΈ°λŠ₯

  • μ†Œμ…œ 둜그인: Google, GitHub, Kakao, Naverλ₯Ό ν†΅ν•œ κ°„νŽΈν•œ 둜그인 지원
  • DynamoDB 데이터 μ €μž₯: μ‚¬μš©μž 정보λ₯Ό μ•ˆμ „ν•˜κ²Œ 관리
  • AI 기반 λ©΄μ ‘ 질문 제곡: OpenAI APIλ₯Ό ν™œμš©ν•˜μ—¬ λ§žμΆ€ν˜• λ©΄μ ‘ 질문 생성
  • E-mail ꡬ독 μ„œλΉ„μŠ€: AWS SESλ₯Ό ν†΅ν•œ 일일 λ©΄μ ‘ 질문 이메일 λ°œμ†‘
  • ν•™μŠ΅ μ§„ν–‰ 상황 관리: Flask 기반 λŒ€μ‹œλ³΄λ“œλ‘œ ν•™μŠ΅ 데이터λ₯Ό μ‹œκ°ν™”

기술 μŠ€νƒ

ν”„λ‘ νŠΈμ—”λ“œ

  • Flask: μ›Ή ν”„λ ˆμž„μ›Œν¬
  • Jinja2: ν…œν”Œλ¦Ώ μ—”μ§„
  • Bootstrap 5: UI ꡬ성

λ°±μ—”λ“œ

  • Python: 3.10+
  • AWS DynamoDB: NoSQL λ°μ΄ν„°λ² μ΄μŠ€
  • AWS Lambda: μ„œλ²„λ¦¬μŠ€ μ»΄ν“¨νŒ…
  • OpenAI API: GPT-3.5 Turbo
  • AWS SES: 이메일 μ„œλΉ„μŠ€

인프라

  • AWS: EC2, S3, IAM, VPC
  • Terraform: 인프라 μ½”λ“œ 관리
  • GitHub Actions: CI/CD νŒŒμ΄ν”„λΌμΈ ꡬ좕

μ„€μΉ˜ 및 μ‹€ν–‰

1. 클둠 및 κ°€μƒν™˜κ²½ μ„€μ •

git clone https://github.com/DailyDevQ/dailydevq-main.git
cd dailydevq-main

# κ°€μƒν™˜κ²½ 생성 및 ν™œμ„±ν™”
python -m venv dailydevq-venv
source dailydevq-venv/bin/activate  # WindowsλŠ” dailydevq-venv\Scripts\activate

2. μ˜μ‘΄μ„± μ„€μΉ˜

pip install -r requirements.txt

3. ν™˜κ²½ λ³€μˆ˜ μ„€μ •

ν”„λ‘œμ νŠΈ 루트 디렉토리에 .env νŒŒμΌμ„ μƒμ„±ν•˜κ³  μ•„λž˜ λ‚΄μš©μ„ μΆ”κ°€ν•©λ‹ˆλ‹€

GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret
KAKAO_CLIENT_ID=your_kakao_client_id
NAVER_CLIENT_ID=your_naver_client_id
NAVER_CLIENT_SECRET=your_naver_client_secret
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECRET_ACCESS_KEY=your_aws_secret_access_key

4. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰

flask run

디렉토리 ꡬ쑰 (지속적인 μ—…λ°μ΄νŠΈ μ˜ˆμ •.)

dailydevq-main/
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ static/
β”‚   β”‚   β”‚   β”œβ”€β”€ css/            # CSS 파일
β”‚   β”‚   β”‚   β”‚   └── style.css
β”‚   β”‚   β”‚   └── js/             # JavaScript 파일
β”‚   β”‚   β”œβ”€β”€ templates/
β”‚   β”‚   β”‚   β”œβ”€β”€ auth/           # 인증 κ΄€λ ¨ HTML ν…œν”Œλ¦Ώ
β”‚   β”‚   β”‚   β”‚   └── dashboard/
β”‚   β”‚   β”‚   β”œβ”€β”€ 404.html        # 404 μ—λŸ¬ νŽ˜μ΄μ§€
β”‚   β”‚   β”‚   β”œβ”€β”€ 500.html        # 500 μ—λŸ¬ νŽ˜μ΄μ§€
β”‚   β”‚   β”‚   β”œβ”€β”€ base.html       # 곡톡 λ ˆμ΄μ•„μ›ƒ ν…œν”Œλ¦Ώ
β”‚   β”‚   β”‚   └── index.html      # 메인 νŽ˜μ΄μ§€
β”‚   β”‚   β”œβ”€β”€ __init__.py         # νŒ¨ν‚€μ§€ μ΄ˆκΈ°ν™” 파일
β”‚   β”‚   β”œβ”€β”€ app.py              # Flask μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ§„μž…μ 
β”‚   β”‚   └── routes.py           # 라우트 관리
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ functions/
β”‚   β”‚   β”œβ”€β”€ email_sender/       # 이메일 λ°œμ†‘ κ΄€λ ¨ μ½”λ“œ
β”‚   β”‚   β”œβ”€β”€ handler.py          # Lambda ν•Έλ“€λŸ¬
β”‚   β”‚   └── user_service.py     # μ‚¬μš©μž 정보 관리 ν•¨μˆ˜
β”œβ”€β”€ infrastructure/
β”‚   β”œβ”€β”€ dynamodb.tf             # DynamoDB μ„€μ •
β”‚   β”œβ”€β”€ outputs.tf              # Terraform 좜λ ₯
β”‚   β”œβ”€β”€ providers.tf            # AWS ν”„λ‘œλ°”μ΄λ” μ„€μ •
β”‚   β”œβ”€β”€ terraform.tfvars        # Terraform λ³€μˆ˜ κ°’ (Git에 μ—…λ‘œλ“œ κΈˆμ§€) λ”°λ‘œ 생성 ν›„ μ‚¬μš©.
β”‚   └── variables.tf            # Terraform λ³€μˆ˜ μ •μ˜
β”œβ”€β”€ requirements/
β”‚   β”œβ”€β”€ base.txt                # κΈ°λ³Έ νŒ¨ν‚€μ§€ λͺ©λ‘
β”‚   β”œβ”€β”€ dev.txt                 # 개발용 νŒ¨ν‚€μ§€
β”‚   └── test.txt                # ν…ŒμŠ€νŠΈμš© νŒ¨ν‚€μ§€
β”œβ”€β”€ requirements_split.py       # requirements 파일 생성 슀크립트
β”œβ”€β”€ .gitignore                  # Gitμ—μ„œ μ œμ™Έν•  파일 λͺ©λ‘
β”œβ”€β”€ LICENSE                     # λΌμ΄μ„ μŠ€ 파일
β”œβ”€β”€ MAIN-LOGO.jpg               # DailyDevQ μƒ˜ν”Œ 둜고 이미지
β”œβ”€β”€ README.md                   # ν”„λ‘œμ νŠΈ μ„€λͺ… 파일
└── .env                        # ν™˜κ²½ λ³€μˆ˜ 파일 (Git에 μ—…λ‘œλ“œ κΈˆμ§€) λ”°λ‘œ 생성 ν›„ μ‚¬μš©.

μ£Όμš” μ—…λ°μ΄νŠΈ λ‚΄μš©

  1. auth/ 디렉토리:

    • 인증 κ΄€λ ¨ HTML νŒŒμΌμ€ /templates/auth/ 디렉토리에 μ €μž₯.
    • μ„ΈλΆ€ 인증 νŽ˜μ΄μ§€(예: λŒ€μ‹œλ³΄λ“œ λ“±)λŠ” /templates/auth/dashboard/μ—μ„œ 관리.
  2. μ—λŸ¬ νŽ˜μ΄μ§€ μΆ”κ°€:

    • 404.html (Not Found) 및 500.html (Internal Server Error) νŽ˜μ΄μ§€ μΆ”κ°€.
  3. 정적 파일 디렉토리 ꡬ쑰화:

    • static/ 디렉토리 μ•„λž˜ css/와 js/둜 νŒŒμΌμ„ κ΅¬λΆ„ν•˜μ—¬ 관리.
  4. Terraform 디렉토리 λͺ…ν™•ν™”:

    • .terraform/ λ””λ ‰ν† λ¦¬λ‘œ Terraform μžλ™ 생성 파일 ꡬ뢄.
    • μ£Όμš” μ„€μ • νŒŒμΌμ€ μƒμœ„ 디렉토리에 μœ„μΉ˜.

Note: 이 디렉토리 κ΅¬μ‘°λŠ” ν˜„μž¬ 개발 μ§„ν–‰ 쀑인 μƒνƒœλ₯Ό λ°˜μ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈκ°€ 진행됨에 따라 디렉토리와 파일이 좔가될 수 μžˆμŠ΅λ‹ˆλ‹€.


μ£Όμš” 파일 μ„€λͺ…

requirements_split.py

requirements_split.pyλŠ” Python ν”„λ‘œμ νŠΈμ˜ μ˜μ‘΄μ„±μ„ κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ μŠ€ν¬λ¦½νŠΈμž…λ‹ˆλ‹€. 이 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ requirements 디렉토리에 μ˜μ‘΄μ„±μ„ λͺ©μ λ³„λ‘œ λ‚˜λˆ  κ΄€λ¦¬ν•˜λŠ” νŒŒμΌλ“€μ„ μƒμ„±ν•©λ‹ˆλ‹€.

μ£Όμš” κΈ°λŠ₯:
  • μ˜μ‘΄μ„± 파일 μžλ™ 생성: base.txt, dev.txt, test.txt 생성
  • 쀑볡 관리 λ°©μ§€: base.txtλ₯Ό λ‹€λ₯Έ μ˜μ‘΄μ„± νŒŒμΌμ—μ„œ μž¬μ‚¬μš©
  • λͺ…ν™•ν•œ μ˜μ‘΄μ„± ꡬ뢄: 개발, ν…ŒμŠ€νŠΈ, 배포 λͺ©μ μ— λ§žλŠ” νŒ¨ν‚€μ§€ 뢄리
μ½”λ“œ μ˜ˆμ‹œ:
# ./requirements_split.py

import os

# κΈ°λ³Έ νŒ¨ν‚€μ§€ λͺ©λ‘
base_packages = """Flask==3.1.0
requests==2.32.3
python-dotenv==1.0.1
"""

# 개발용 νŒ¨ν‚€μ§€ λͺ©λ‘
development_packages = """black==24.10.0
flake8==7.1.1
"""

# ν…ŒμŠ€νŠΈμš© νŒ¨ν‚€μ§€ λͺ©λ‘
testing_packages = """pytest==8.3.3
coverage==7.3.1
"""

# requirements 디렉토리 생성
os.makedirs('requirements', exist_ok=True)

# 각 λͺ©μ λ³„ 파일 생성
with open('requirements/base.txt', 'w') as f:
    f.write(base_packages)

with open('requirements/dev.txt', 'w') as f:
    f.write("-r base.txt\n")  # κΈ°λ³Έ νŒ¨ν‚€μ§€ 포함
    f.write(development_packages)

with open('requirements/test.txt', 'w') as f:
    f.write("-r base.txt\n")  # κΈ°λ³Έ νŒ¨ν‚€μ§€ 포함
    f.write(testing_packages)

print("requirements 디렉토리와 κ΄€λ ¨ 파일이 μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.")

μ‚¬μš© 방법

  1. ν•΄λ‹Ή νŒŒμΌμ„ ν”„λ‘œμ νŠΈ 루트 디렉토리에 μœ„μΉ˜μ‹œν‚΅λ‹ˆλ‹€.
  2. μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€:
    python requirements_split.py
  3. requirements/ 디렉토리에 μƒμ„±λœ νŒŒμΌμ„ ν™•μΈν•©λ‹ˆλ‹€:
    • base.txt: κΈ°λ³Έ νŒ¨ν‚€μ§€
    • dev.txt: 개발용 νŒ¨ν‚€μ§€
    • test.txt: ν…ŒμŠ€νŠΈμš© νŒ¨ν‚€μ§€

이 μŠ€ν¬λ¦½νŠΈλŠ” μ˜μ‘΄μ„± 관리λ₯Ό κ°„μ†Œν™”ν•˜κ³ , μ½”λ“œ μΆ©λŒμ„ λ°©μ§€ν•˜λŠ” 데 도움을 μ€λ‹ˆλ‹€.


κΈ°μ—¬ 방법

  1. 이 μ €μž₯μ†Œλ₯Ό ν¬ν¬ν•©λ‹ˆλ‹€.
  2. κΈ°λŠ₯ μΆ”κ°€λ‚˜ 버그 μˆ˜μ •μ„ μœ„ν•œ 브랜치λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  3. μ½”λ“œλ₯Ό μ»€λ°‹ν•˜κ³  git push ν•©λ‹ˆλ‹€.
  4. Pull Requestλ₯Ό μƒμ„±ν•˜μ—¬ λ³€κ²½ 사항을 μš”μ²­ν•©λ‹ˆλ‹€.

브랜치 μ „λž΅

이 ν”„λ‘œμ νŠΈλŠ” GitHub Flowλ₯Ό 기반으둜 κ΄€λ¦¬λ©λ‹ˆλ‹€.

  1. master 브랜치

    • 항상 배포 κ°€λŠ₯ν•œ μƒνƒœλ₯Ό μœ μ§€ν•©λ‹ˆλ‹€.
    • 직접 컀밋 κΈˆμ§€, λͺ¨λ“  변경은 PR을 톡해 λ³‘ν•©λ©λ‹ˆλ‹€.
  2. μž‘μ—… 브랜치

    • μƒˆλ‘œμš΄ μž‘μ—…μ„ μœ„ν•΄ feature/ λ˜λŠ” hotfix/둜 μ‹œμž‘ν•˜λŠ” 브랜치λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
    • 브랜치 이름 κ·œμΉ™:
      • κΈ°λŠ₯ μΆ”κ°€: feature/<κΈ°λŠ₯λͺ…> (예: feature/add-login)
      • 버그 μˆ˜μ •: hotfix/<버그λͺ…> (예: hotfix/fix-login-error)
  3. Pull Request(PR)

    • PR 생성 ν›„, μ½”λ“œ 리뷰가 μ™„λ£Œλ˜λ©΄ λ³‘ν•©ν•©λ‹ˆλ‹€.
    • λ³‘ν•©λœ λΈŒλžœμΉ˜λŠ” μžλ™μœΌλ‘œ μ‚­μ œλ©λ‹ˆλ‹€.

λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” Apache License 2.0 ν•˜μ— λ°°ν¬λ©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ LICENSEλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.


문의

About

DailyDevQ is a platform designed to help users prepare for technical interviews and enhance their skills. It supports social logins via Google, GitHub, Kakao, and Naver, along with user management features powered by AWS DynamoDB.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •