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

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