Skip to content

bongbong-90/it_da

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

204 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

IT-DA (์ž‡๋‹ค) - ์ทจ๋ฏธ ๊ธฐ๋ฐ˜ ๋ชจ์ž„ ๋งค์นญ ํ”Œ๋žซํผ

๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

IT-DA๋Š” ๋‹ค์–‘ํ•œ ์ทจ๋ฏธ๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์ด ๋ชจ์ž„์„ ๋งŒ๋“ค๊ณ  ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ข…ํ•ฉ ๋ชจ์ž„ ๋งค์นญ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • ๐ŸŽฏ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ชจ์ž„ ๊ฒ€์ƒ‰ ๋ฐ ์ฐธ์—ฌ (์šด๋™, ์Œ์‹, ๋ฌธํ™”/์˜ˆ์ˆ , ์Šคํ„ฐ๋””, ์‚ฌ๊ต)
  • ๐Ÿ“ ์ง€์—ญ ๊ธฐ๋ฐ˜ ๋ชจ์ž„ ์ฐพ๊ธฐ
  • ๐Ÿ‘ฅ ์‹ค์‹œ๊ฐ„ ๋ชจ์ž„ ๊ด€๋ฆฌ ๋ฐ ์ฐธ์—ฌ์ž ๊ด€๋ฆฌ
  • ๐Ÿ” ์•ˆ์ „ํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ์„ธ์…˜ ๊ด€๋ฆฌ
  • ๐Ÿ“Š ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ (์‚ฌ์šฉ์ž/๋ชจ์ž„/์‹ ๊ณ  ๊ด€๋ฆฌ)
  • ๐Ÿค– AI ๊ธฐ๋ฐ˜ ์ถ”์ฒœ ์‹œ์Šคํ…œ (์˜ˆ์ •)

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

Backend

  • Framework: Spring Boot 3.x
  • Language: Java 17
  • Database: MySQL 8.0
  • Cache/Session: Redis
  • Authentication: Redis Session (JWT ๋ฏธ์‚ฌ์šฉ)
  • API: RESTful API

Frontend

  • Framework: React 19
  • Language: TypeScript
  • Build Tool: Vite
  • State Management: Zustand
  • Styling: Tailwind CSS + shadcn/ui
  • HTTP Client: Axios

AI (์˜ˆ์ •)

  • Language: Python
  • Framework: FastAPI / Flask
  • Integration: REST API ์—ฐ๋™

๐Ÿ— ์•„ํ‚คํ…์ฒ˜ ํŠน์ง•

์„ฑ๋Šฅ ์ตœ์ ํ™”

  • N+1 ๋ฌธ์ œ ๋ฐฉ์ง€: LEFT JOIN FETCH๋ฅผ ํ™œ์šฉํ•œ ์ฟผ๋ฆฌ ์ตœ์ ํ™”
  • Redis ์บ์‹ฑ: ์„ธ์…˜ ๊ด€๋ฆฌ ๋ฐ ์ž์ฃผ ์กฐํšŒ๋˜๋Š” ๋ฐ์ดํ„ฐ ์บ์‹ฑ
  • Soft Delete: ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€

์ธ์ฆ ๋ฐฉ์‹

  • Redis Session ๊ธฐ๋ฐ˜ ์ธ์ฆ
    • JWT ๋Œ€์‹  Redis Session ํ™œ์šฉ
    • HttpSession์„ ํ†ตํ•œ ๊ฐ„ํŽธํ•œ ์„ธ์…˜ ๊ด€๋ฆฌ
    • ์„œ๋ฒ„ ์ธก ์„ธ์…˜ ์ œ์–ด๋กœ ๋ณด์•ˆ์„ฑ ๊ฐ•ํ™”

๐Ÿ‘ฅ ํŒ€์› ๋ฐ ์—ญํ• 

์ด๋ฆ„ ๋‹ด๋‹น ์˜์—ญ
๊น€๋ด‰ํ™˜ Admin ๊ธฐ๋Šฅ, Redis ์„ค์ •, Auth ์„ค์ •, ๋ฐฑ์—”๋“œ ์ธํ”„๋ผ
๊น€๋™๋ฏผ ์‚ฌ์šฉ์ž(User) ๊ด€๋ จ ๊ธฐ๋Šฅ, ํ”„๋กœํ•„ ๊ด€๋ฆฌ
์ตœ๋™์› ๋ชจ์ž„(Meeting) ๊ด€๋ จ ๊ธฐ๋Šฅ, ๋ชจ์ž„ CRUD
๊น€๋ณด๋ฏผ ํ”„๋ก ํŠธ์—”๋“œ UI/UX, ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ
์‹ ์˜์ง„ ์‹ ๊ณ (Report) ๊ธฐ๋Šฅ, ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ด€๋ฆฌ
๋ฐ•์„ฑํ›ˆ ๋ฆฌ๋ทฐ(Review) ๊ธฐ๋Šฅ, ํ‰๊ฐ€ ์‹œ์Šคํ…œ

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

IT-DA/
โ”œโ”€โ”€ backend/                    # Spring Boot ๋ฐฑ์—”๋“œ
โ”‚   โ”œโ”€โ”€ src/main/java/
โ”‚   โ”‚   โ””โ”€โ”€ com/example/itda/
โ”‚   โ”‚       โ”œโ”€โ”€ config/        # Redis, Security ์„ค์ •
โ”‚   โ”‚       โ”œโ”€โ”€ controller/    # REST API ์ปจํŠธ๋กค๋Ÿฌ
โ”‚   โ”‚       โ”œโ”€โ”€ service/       # ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
โ”‚   โ”‚       โ”œโ”€โ”€ repository/    # JPA Repository
โ”‚   โ”‚       โ”œโ”€โ”€ entity/        # JPA ์—”ํ‹ฐํ‹ฐ
โ”‚   โ”‚       โ””โ”€โ”€ dto/           # ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ์ฒด
โ”‚   โ””โ”€โ”€ src/main/resources/
โ”‚       โ”œโ”€โ”€ application.yml    # ์„ค์ • ํŒŒ์ผ
โ”‚       โ””โ”€โ”€ data.sql          # ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ
โ”‚
โ”œโ”€โ”€ frontend/                  # React ํ”„๋ก ํŠธ์—”๋“œ
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ components/       # ์žฌ์‚ฌ์šฉ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ pages/           # ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ stores/          # Zustand ์ƒํƒœ ๊ด€๋ฆฌ
โ”‚   โ”‚   โ”œโ”€โ”€ api/             # API ํ˜ธ์ถœ ํ•จ์ˆ˜
โ”‚   โ”‚   โ”œโ”€โ”€ types/           # TypeScript ํƒ€์ž… ์ •์˜
โ”‚   โ”‚   โ””โ”€โ”€ utils/           # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜
โ”‚   โ”œโ”€โ”€ public/
โ”‚   โ””โ”€โ”€ package.json
โ”‚
โ””โ”€โ”€ ai/                       # Python AI ์„œ๋ฒ„ (์˜ˆ์ •)
    โ”œโ”€โ”€ main.py
    โ”œโ”€โ”€ models/
    โ””โ”€โ”€ requirements.txt

๐Ÿš€ ์‹œ์ž‘ํ•˜๊ธฐ

์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

  • Java 17+
  • Node.js 18+
  • MySQL 8.0+
  • Redis 6.0+
  • Python 3.9+ (AI ๊ธฐ๋Šฅ ์‚ฌ์šฉ ์‹œ)

Backend ์‹คํ–‰

cd backend

# MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ
mysql -u root -p
CREATE DATABASE itda;

# Redis ์„œ๋ฒ„ ์‹œ์ž‘
redis-server

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰
./mvnw spring-boot:run

Frontend ์‹คํ–‰

cd frontend

# ์˜์กด์„ฑ ์„ค์น˜
npm install

# ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run dev

AI ์„œ๋ฒ„ ์‹คํ–‰ (์˜ˆ์ •)

cd ai

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํ™œ์„ฑํ™”
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# ์˜์กด์„ฑ ์„ค์น˜
pip install -r requirements.txt

# ์„œ๋ฒ„ ์‹คํ–‰
python main.py

๐Ÿ”‘ ์ฃผ์š” API ์—”๋“œํฌ์ธํŠธ

์ธ์ฆ (Authentication)

  • POST /api/auth/signup - ํšŒ์›๊ฐ€์ž…
  • POST /api/auth/login - ๋กœ๊ทธ์ธ
  • POST /api/auth/logout - ๋กœ๊ทธ์•„์›ƒ
  • GET /api/auth/check - ์„ธ์…˜ ํ™•์ธ

์‚ฌ์šฉ์ž (User)

  • GET /api/users/{id} - ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ
  • PUT /api/users/{id} - ์‚ฌ์šฉ์ž ์ •๋ณด ์ˆ˜์ •
  • DELETE /api/users/{id} - ํšŒ์› ํƒˆํ‡ด

๋ชจ์ž„ (Meeting)

  • GET /api/meetings - ๋ชจ์ž„ ๋ชฉ๋ก ์กฐํšŒ
  • GET /api/meetings/{id} - ๋ชจ์ž„ ์ƒ์„ธ ์กฐํšŒ
  • POST /api/meetings - ๋ชจ์ž„ ์ƒ์„ฑ
  • PUT /api/meetings/{id} - ๋ชจ์ž„ ์ˆ˜์ •
  • DELETE /api/meetings/{id} - ๋ชจ์ž„ ์‚ญ์ œ
  • POST /api/meetings/{id}/join - ๋ชจ์ž„ ์ฐธ์—ฌ

๊ด€๋ฆฌ์ž (Admin)

  • GET /api/admin/users - ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ
  • GET /api/admin/meetings - ๋ชจ์ž„ ๊ด€๋ฆฌ
  • GET /api/admin/reports - ์‹ ๊ณ  ๊ด€๋ฆฌ

๐Ÿ“Š ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ

์ฃผ์š” ํ…Œ์ด๋ธ”

  • users - ์‚ฌ์šฉ์ž ์ •๋ณด
  • meetings - ๋ชจ์ž„ ์ •๋ณด
  • meeting_participants - ๋ชจ์ž„ ์ฐธ์—ฌ์ž
  • reports - ์‹ ๊ณ  ๋‚ด์—ญ
  • reviews - ๋ฆฌ๋ทฐ ๋ฐ ํ‰๊ฐ€
  • categories - ์นดํ…Œ๊ณ ๋ฆฌ ์ •๋ณด

๐Ÿ”ง ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ

์ฝ”๋”ฉ ์ปจ๋ฒค์…˜

  • Backend: Java ํ‘œ์ค€ ์ปจ๋ฒค์…˜ ์ค€์ˆ˜
  • Frontend: Airbnb React/TypeScript Style Guide
  • Naming: camelCase (๋ณ€์ˆ˜/๋ฉ”์„œ๋“œ), PascalCase (ํด๋ž˜์Šค/์ปดํฌ๋„ŒํŠธ)

Git ๋ธŒ๋žœ์น˜ ์ „๋žต

  • main - ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์•ˆ์ • ๋ฒ„์ „
  • develop - ๊ฐœ๋ฐœ ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜
  • feature/๊ธฐ๋Šฅ๋ช… - ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜
  • hotfix/๋ฒ„๊ทธ๋ช… - ๊ธด๊ธ‰ ์ˆ˜์ • ๋ธŒ๋žœ์น˜

Commit ๋ฉ”์‹œ์ง€ ๊ทœ์น™

feat: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
fix: ๋ฒ„๊ทธ ์ˆ˜์ •
docs: ๋ฌธ์„œ ์ˆ˜์ •
style: ์ฝ”๋“œ ํฌ๋งทํŒ…
refactor: ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ
chore: ๋นŒ๋“œ/์„ค์ • ๋ณ€๊ฒฝ

๐Ÿ“ ๊ฐœ๋ฐœ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

N+1 ๋ฌธ์ œ ๋ฐฉ์ง€

// โŒ Bad - N+1 ๋ฌธ์ œ ๋ฐœ์ƒ
@Query("SELECT m FROM Meeting m WHERE m.deletedAt IS NULL")
List<Meeting> findAll();

// โœ… Good - JOIN FETCH ์‚ฌ์šฉ
@Query("SELECT m FROM Meeting m " +
       "LEFT JOIN FETCH m.participants " +
       "WHERE m.deletedAt IS NULL")
List<Meeting> findAllWithParticipants();

Redis Session ํ™œ์šฉ

// ์„ธ์…˜์— ์‚ฌ์šฉ์ž ์ •๋ณด ์ €์žฅ
session.setAttribute("userId", user.getId());

// ์„ธ์…˜์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
Long userId = (Long) session.getAttribute("userId");

Soft Delete ์ฒ˜๋ฆฌ

// ๋ชจ๋“  ์กฐํšŒ ์ฟผ๋ฆฌ์— deletedAt ํ•„ํ„ฐ ์ถ”๊ฐ€
WHERE entity.deletedAt IS NULL

๐Ÿงช ํ…Œ์ŠคํŠธ

# Backend ํ…Œ์ŠคํŠธ
./mvnw test

# Frontend ํ…Œ์ŠคํŠธ
npm run test

# E2E ํ…Œ์ŠคํŠธ
npm run test:e2e

๐Ÿ“ฆ ๋ฐฐํฌ

Backend

# JAR ํŒŒ์ผ ๋นŒ๋“œ
./mvnw clean package

# ์‹คํ–‰
java -jar target/itda-0.0.1-SNAPSHOT.jar

Frontend

# ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run build

# ๋นŒ๋“œ ํŒŒ์ผ์€ dist/ ํด๋”์— ์ƒ์„ฑ

๐ŸŽฏ ํ–ฅํ›„ ๊ณ„ํš

  • AI ๊ธฐ๋ฐ˜ ๋ชจ์ž„ ์ถ”์ฒœ ์‹œ์Šคํ…œ ๊ณ ๋„ํ™”
  • ์•Œ๋ฆผ ๊ธฐ๋Šฅ ๊ฐ•ํ™”
  • UI ๊ณ ๋„ํ™”

About

Himedia Team 2 Final-Project(Third)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 37.0%
  • Java 31.1%
  • Python 14.3%
  • CSS 10.2%
  • JavaScript 6.9%
  • PowerShell 0.4%
  • Other 0.1%