Lab-Semtle / Semtle-Web-Server

μ•„μΉ˜μ…ˆν‹€ μ›Ή νŽ˜μ΄μ§€ ꡬ좕 ν”„λ‘œμ νŠΈ(μ„œλ²„)
1 stars 0 forks source link

Semtle Logo

Semtle-Web-Server

πŸ”₯ ν•œκ΅­ν•΄μ–‘λŒ€ν•™κ΅ 인곡지λŠ₯곡학뢀 컴퓨터곡학전곡 ν•™νšŒ μ•„μΉ˜μ…ˆν‹€ μ›ΉνŽ˜μ΄μ§€ ꡬ좕 ν”„λ‘œμ νŠΈ πŸ”₯

개발 ν™˜κ²½

사전 μ€€λΉ„

개발 λΉŒλ“œ

  1. 가상 ν™˜κ²½ 생성

    python -m venv .venv
  2. μ˜μ‘΄μ„± μ„€μΉ˜ λͺ¨λ“ˆ ν˜Έν™˜ μ—λŸ¬ λ‚  경우 개발 OS 차이 λ•Œλ¬Έμ΄λ‹ˆ poetry.toml 파일 μ°Έκ³ ν•΄μ„œ μš°μ„ μ€ μˆ˜λ™μœΌλ‘œ μ„€μΉ˜ν•΄μ£Όμ„Έμš”. μΆ”ν›„, window에도 ν˜Έν™˜λ˜κ²Œ μˆ˜μ •ν•΄λ‘κ² μŠ΅λ‹ˆλ‹€.

    poetry install
  3. PostgreSQL 이미지 λ‹€μš΄λ‘œλ“œ

    • μœˆλ„μš° CMDλ₯Ό κ΄€λ¦¬μž λͺ¨λ“œλ‘œ μ‹€ν–‰ν•˜μ—¬ 도컀가 μ„€μΉ˜λ˜μ—ˆλŠ”μ§€ 확인
      docker -v
    • λ„μ»€μ—μ„œ postgres 이미지λ₯Ό λ‹€μš΄λ°›λŠ”λ‹€.
      docker pull postgres:latest
    • 도컀 이미지λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ»¨ν„°μ΄λ„ˆ 생성
      docker run --name postgres -e POSTGRES_PASSWORD=postgres -e TZ=Asia/Seoul -p 5432:5432 -d postgres:latest
    • μ„€μΉ˜ν–ˆλ˜ 도컀 λ°μŠ€ν¬ν†±μ—μ„œ containerκ°€ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜λŠ”μ§€ ν™•μΈν•œλ‹€.
  4. 이후 DBeaver에 μ ‘μ†ν•΄μ„œ Dockerμ—μ„œ μ‹€ν–‰λ˜λŠ” PostgreSQLκ³Ό μ—°κ²°

    • 쒌츑 μ΅œμƒλ‹¨ μ½˜μ„ΌνŠΈλͺ¨μ–‘(+) λ₯Ό 클릭
    • Connect to a databse 창이 뜨면 PostgreSQL μ•„μ΄μ½˜ 클릭 ν›„ λ‹€μŒ 클릭
    • URL 칸에 jdbc:postgresql://localhost:5432/postgres μ ν˜€μžˆλŠ”μ§€ 확인 ν›„
    • 각 칸에 DB정보λ₯Ό κΈ°μž…ν•œλ‹€.
      • Host -> localhost
      • Port -> 5432
      • Database -> postgres
      • Username -> postgres
      • Password -> postgres (ν˜Ήμ€ κΈ°μž…X)
    • 이후 쒌츑 μ΅œν•˜λ‹¨ Test Connection 을 ν΄λ¦­ν•΄μ„œ μ •μƒμ μœΌλ‘œ DBμ„œλ²„μ— μ ‘μ†λ˜μ—ˆλŠ”μ§€ ν™•μΈν•œλ‹€.
  5. VScodeμ—μ„œ Uvicorn μ„œλ²„ μ‹€ν–‰

    uvicorn src.main:app --reload

    μ„œλ²„ μ‹€ν–‰ 이후 DBeaver μ—μ„œ postgres λ₯Ό μš°ν΄λ¦­ν•˜μ—¬ 검증/μž¬μ—°κ²° 을 λˆŒλŸ¬μ„œ 정상 μ—°κ²°λ˜κ³  μžˆλŠ”μ§€ ν™•μΈν•œ ν›„, public -> table -> user 을 ν΄λ¦­ν•΄μ„œ userν…Œμ΄λΈ”μ΄ μ •μƒμ μœΌλ‘œ μƒμ„±λ˜μ—ˆλŠ”μ§€ ν™•μΈν•œλ‹€.

ν”„λ‘œμ νŠΈ μ•„ν‚€ν…μ²˜ ꡬ쑰

Semtle-Web-Server/
β”‚
β”œβ”€β”€ asset                  # ν”„λ‘œμ νŠΈμ— μ‚¬μš©λ˜λŠ” 정적 μžμ›λ“€(이미지, CSS 파일 λ“±) λͺ¨μŒ
β”œβ”€β”€ src/                   # μ†ŒμŠ€ μ½”λ“œ 폴더, 여기에 ν”„λ‘œμ νŠΈμ˜ λͺ¨λ“  파이썬 μ½”λ“œκ°€ 듀어감
β”‚   β”œβ”€β”€ api/               # API κ΄€λ ¨ μ½”λ“œλ₯Ό λͺ¨μ•„λ‘” 폴더
β”‚   β”‚   β”œβ”€β”€ __init__.py    # API λͺ¨λ“ˆμ„ μ΄ˆκΈ°ν™”ν•˜λŠ” 슀크립트, api 폴더λ₯Ό 파이썬 νŒ¨ν‚€μ§€λ‘œ λ§Œλ“¬
β”‚   β”‚   β”œβ”€β”€ v1/            # API의 첫 번째 버전을 μ •μ˜ν•œ 폴더
β”‚   β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”‚   β”œβ”€β”€ post/      # 'post' κ΄€λ ¨ κΈ°λŠ₯듀을 μ²˜λ¦¬ν•˜λŠ” μ½”λ“œκ°€ λ“€μ–΄μžˆλŠ” 폴더
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ post_control.py   # μ—”λ“œν¬μΈνŠΈ 둜직 μž‘μ„±, HTTP μš”μ²­ 처리
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ post_dao.py       # λ°μ΄ν„°λ² μ΄μŠ€ μ ‘κ·Όν•˜λŠ” 둜직 κ΅¬ν˜„
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ post_dto.py       # 데이터 전솑 객체(λ°μ΄ν„°μ˜ ꡬ쑰λ₯Ό μ •μ˜)
β”‚   β”‚   β”‚   β”‚   └── post_service.py   # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 처리
β”‚   β”‚   ...
β”‚   β”‚
β”‚   β”œβ”€β”€ core/              # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 핡심 κΈ°λŠ₯ λͺ¨μŒ
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ config.py      # μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 섀정을 관리
β”‚   β”‚   β”œβ”€β”€ security.py    # λ³΄μ•ˆ κ΄€λ ¨ κΈ°λŠ₯ κ΅¬ν˜„
β”‚   β”‚   β”œβ”€β”€ error.py       # μ—λŸ¬ 핸듀링 κ΄€λ ¨ μ½”λ“œ κ΅¬ν˜„
β”‚   β”‚   β”œβ”€β”€ event.py       # μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°œμƒν•˜λŠ” 이벀트 핸듀링
β”‚   β”‚   β”œβ”€β”€ status.py      # HTTP μƒνƒœ μ½”λ“œ μΆ”κ°€ μ •μ˜(ν™•μž₯)
β”‚   β”‚   └── cors.py        # μš”μ²­ 필터링 미듀웨어 (μ›Ή μš”μ²­ μ‚¬μ΄μ˜ μžμ› 곡유λ₯Ό μœ„ν•œ μ„€μ •)
β”‚   β”‚
β”‚   β”œβ”€β”€ dependencies/      # API μ—”λ“œν¬μΈνŠΈμ˜ μ˜μ‘΄μ„±(쒅속성) 관리λ₯Ό μœ„ν•œ 파일 λͺ¨μŒ (API μš”μ²­ μ „ 검사)
β”‚   β”‚   β”œβ”€β”€ __init__.py.
β”‚   β”‚   └── authentication.py # μ—”λ“œν¬μΈνŠΈμ—μ„œ ν•„μš”ν•œ λͺ¨λ“  μ‚¬μš©μž 인증 κ΄€λ ¨ 쒅속성 관리 μ½”λ“œ
β”‚   β”‚
β”‚   β”œβ”€β”€ var/               # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λͺ¨λΈ, λ°μ΄ν„°λ² μ΄μŠ€ μ„Έμ…˜ 관리 μ½”λ“œ λͺ¨μŒ
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ dto.py         # μœ μ§€λ³΄μˆ˜μ„±μ„ μœ„ν•œ BaseDTO μ„€μ •
β”‚   β”‚   β”œβ”€β”€ models.py      # μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©λ˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈ μ •μ˜
β”‚   β”‚   └── session.py     # λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° 및 μ„Έμ…˜ 관리λ₯Ό μœ„ν•œ μ½”λ“œ
β”‚   β”‚
β”‚   β”‚
β”‚   β”œβ”€β”€ utils/             # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜ λͺ¨μŒ
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚
β”‚   β”œβ”€β”€ __init__.py        # μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ΄ˆκΈ°ν™”ν•˜λŠ” 슀크립트, λ™μΌν•œ python νŒ¨ν‚€μ§€λ‘œ λ§Œλ“¬
β”‚   └── main.py            # FastAPI μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ§„μž…μ 
β”‚
β”œβ”€β”€ tests/             # ν…ŒμŠ€νŠΈ μ½”λ“œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κΈ°λŠ₯ 검증
β”‚   β”‚   ...
β”‚
β”œβ”€β”€ .gitignore          # Git 버전 κ΄€λ¦¬μ—μ„œ μ œμ™Έν•  파일 λͺ©λ‘
β”œβ”€β”€ Dockerfile          # Dockerλ₯Ό μ‚¬μš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ»¨ν…Œμ΄λ„ˆν™”ν•˜λŠ” μ„€μ •
β”œβ”€β”€ docker-compose.yml  # μ—¬λŸ¬ μ»¨ν…Œμ΄λ„ˆλ₯Ό ν•¨κ»˜ κ΄€λ¦¬ν•˜κ³  μ‹€ν–‰ν•˜κΈ° μœ„ν•œ μ„€μ •
β”œβ”€β”€ poetry.lock         # ν”„λ‘œμ νŠΈ μ˜μ‘΄μ„± 관리, μ‹€μ œλ‘œ μ„€μΉ˜λœ νŒ¨ν‚€μ§€ 버전 잠금(κ³ μ •) μ„€μ •
β”œβ”€β”€ pyproject.toml      # μ„€μΉ˜ν•œ νŒ¨ν‚€μΉ˜ λͺ©λ‘, ν˜Έν™˜ κ°€λŠ₯ν•œ 버전 정보 λͺ…μ‹œ
└── README.md