Skip to content

usewooseok97/team_BACKEND

Repository files navigation

WORK OUT - ์šด๋™ ํ”Œ๋žซํผ

์šด๋™ ๋ถ€์œ„๋ณ„ ์šด๋™ ์ •๋ณด, ์Šคํฌ์ธ  ์ข…๋ฅ˜, ์šด๋™ ๊ธฐ๊ตฌ ์ •๋ณด ๋ฐ ํ• ์ธ ์ƒํ’ˆ์„ ์ œ๊ณตํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

WORK_OUT/
โ”œโ”€โ”€ src/
โ”‚   โ””โ”€โ”€ main/
โ”‚       โ”œโ”€โ”€ java/
โ”‚       โ”‚   โ”œโ”€โ”€ data/              # ๋ฐ์ดํ„ฐ ์ œ๊ณต ๊ณ„์ธต
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ CategoryData.java
โ”‚       โ”‚   โ”œโ”€โ”€ dto/               # ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ์ฒด
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ ProductDTO.java
โ”‚       โ”‚   โ””โ”€โ”€ model/             # ๋„๋ฉ”์ธ ๋ชจ๋ธ
โ”‚       โ”‚       โ””โ”€โ”€ CategoryItem.java
โ”‚       โ””โ”€โ”€ webapp/
โ”‚           โ”œโ”€โ”€ css/
โ”‚           โ”‚   โ””โ”€โ”€ style.css      # ์ „์ฒด ์Šคํƒ€์ผ์‹œํŠธ
โ”‚           โ”œโ”€โ”€ WEB-INF/
โ”‚           โ”‚   โ””โ”€โ”€ lib/           # JSTL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
โ”‚           โ””โ”€โ”€ index.jsp          # ๋ฉ”์ธ ํŽ˜์ด์ง€
โ””โ”€โ”€ README.md

์ฝ”๋“œ ๊ตฌ์กฐ ๋ฐ ์ž‘๋™ ์›๋ฆฌ

1. ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด

์ด ํ”„๋กœ์ ํŠธ๋Š” 3-Layer Architecture๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค:

[Presentation Layer] โ†’ [Business Logic Layer] โ†’ [Data Layer]
     (JSP)                    (DTO/Model)          (CategoryData)

2. ๊ณ„์ธต๋ณ„ ์„ค๋ช…

Data Layer (๋ฐ์ดํ„ฐ ๊ณ„์ธต)

  • CategoryData.java: ์ •์  ๋ฐ์ดํ„ฐ ์ œ๊ณต ํด๋ž˜์Šค
    • getBodyParts(): ์‹ ์ฒด ๋ถ€์œ„๋ณ„ ์šด๋™ ๋ฐ์ดํ„ฐ (Triceps, Chest, Biceps ๋“ฑ)
    • getSports(): ์Šคํฌ์ธ  ์ข…๋ฅ˜ ๋ฐ์ดํ„ฐ (Swimming, Soccer, Basketball ๋“ฑ)
    • getMachines(): ์šด๋™ ๊ธฐ๊ตฌ ๋ฐ์ดํ„ฐ (Lat Pulldown, Chest Press ๋“ฑ)
    • getProducts(): ํ• ์ธ ์ƒํ’ˆ ๋ฐ์ดํ„ฐ
    • filterByCategory(): ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํ•„ํ„ฐ๋ง ๋ฉ”์†Œ๋“œ

Model Layer (๋ชจ๋ธ ๊ณ„์ธต)

  • CategoryItem.java: ์นดํ…Œ๊ณ ๋ฆฌ ์•„์ดํ…œ ๋ชจ๋ธ

    • ์†์„ฑ: name (์ด๋ฆ„), icon (์ด๋ชจ์ง€), category (๋ถ„๋ฅ˜)
    • ์šด๋™ ๋ถ€์œ„, ์Šคํฌ์ธ , ๊ธฐ๊ตฌ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ณตํ†ต ๋ชจ๋ธ
  • ProductDTO.java: ์ƒํ’ˆ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ์ฒด

    • ์†์„ฑ: brand, name, originalPrice, price, image
    • getDiscountRate(): ํ• ์ธ์œจ ์ž๋™ ๊ณ„์‚ฐ ๋ฉ”์†Œ๋“œ

Presentation Layer (ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต)

  • index.jsp: ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋ทฐ
    • JSTL์„ ์‚ฌ์šฉํ•œ ๋™์  ๋ Œ๋”๋ง
    • CategoryData์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ pageContext์— ์ €์žฅ
    • JSTL์˜ <c:forEach>์™€ <c:if>๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ

3. ๋ฐ์ดํ„ฐ ํ๋ฆ„

1. ์‚ฌ์šฉ์ž๊ฐ€ index.jsp ์ ‘์†
   โ†“
2. JSP ์Šคํฌ๋ฆฝํ‹€๋ฆฟ(<% %>)์ด CategoryData ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
   โ†“
3. CategoryData๊ฐ€ List<CategoryItem>, List<ProductDTO> ๋ฐ˜ํ™˜
   โ†“
4. pageContext.setAttribute()๋กœ ๋ฐ์ดํ„ฐ๋ฅผ JSP ์ปจํ…์ŠคํŠธ์— ์ €์žฅ
   โ†“
5. JSTL ํƒœ๊ทธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด HTML๋กœ ๋ Œ๋”๋ง
   โ†“
6. CSS๋กœ ์Šคํƒ€์ผ๋ง๋œ ์ตœ์ข… ํŽ˜์ด์ง€๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ํ‘œ์‹œ

4. ์ฃผ์š” ๊ธฐ์ˆ  ์Šคํƒ

  • Backend: Java (JSP, JSTL 3.0)
  • Frontend: HTML5, CSS3
  • Server: Apache Tomcat
  • Architecture: MVC Pattern (Model-View-Controller)

์›น ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ

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

1. ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”

  • ๋กœ๊ณ  ๋ฐ ํ™ˆ ๋งํฌ
  • ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ (search.jsp๋กœ ์—ฐ๊ฒฐ)
  • ์–ธ์–ด ์„ ํƒ (EN/KR) - ๋ผ๋””์˜ค ๋ฒ„ํŠผ ๋ฐฉ์‹
  • ์ƒ๋‹จ ๋ฉ”๋‰ด: Store, Register, Login ๋งํฌ

2. Hero Section

  • ๋Œ€ํ˜• "WORK OUT" ํƒ€์ดํ‹€
  • ์ค‘์•™ ๊ฒ€์ƒ‰ ๋ฐ” (๊ฒ€์ƒ‰ ์•„์ด์ฝ˜ ํฌํ•จ)
  • ๊ทธ๋ผ๋ฐ์ด์…˜ ๋ฐฐ๊ฒฝ ํšจ๊ณผ

3. BODY ์„น์…˜

์‹ ์ฒด ๋ถ€์œ„๋ณ„ ์šด๋™ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํƒญ ๊ตฌ์กฐ:

  • ALL: ๋ชจ๋“  ์‹ ์ฒด ๋ถ€์œ„ (13๊ฐœ)
  • UPPER: ์ƒ์ฒด ์šด๋™ (Triceps, Chest, Biceps, Abs, Back, Shoulders, Trapezius, Forearms)
  • LOWER: ํ•˜์ฒด ์šด๋™ (Hamstrings, Quads, Glutes, Adductors, Abductors)

๊ตฌํ˜„ ๋ฐฉ์‹:

  • ๋ผ๋””์˜ค ๋ฒ„ํŠผ๊ณผ CSS์˜ :checked ์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•œ ํƒญ ์ „ํ™˜
  • JavaScript ์—†์ด ์ˆœ์ˆ˜ CSS๋กœ ๊ตฌํ˜„
  • ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ์•„์ด์ฝ˜๊ณผ ์ด๋ฆ„ ํ‘œ์‹œ

4. SPORTS ์„น์…˜

๋‹ค์–‘ํ•œ ์Šคํฌ์ธ  ์ข…๋ฅ˜๋ฅผ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.

ํƒญ ๊ตฌ์กฐ:

  • ALL: ๋ชจ๋“  ์Šคํฌ์ธ  (13๊ฐœ)
  • WATER: ์ˆ˜์ƒ ์Šคํฌ์ธ  (Swimming)
  • GROUND: ์•ผ์™ธ ์Šคํฌ์ธ  (Soccer, Basketball, Tennis, Golf, Football, Volleyball)
  • HOME: ์‹ค๋‚ด ์Šคํฌ์ธ  (Darts, Boxing, Table Tennis, Pool)
  • ETC: ๊ธฐํƒ€ ์Šคํฌ์ธ  (Fencing, Archery)

5. MACHINE ์„น์…˜

์šด๋™ ๊ธฐ๊ตฌ ๋ฐ ๋จธ์‹  ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํƒญ ๊ตฌ์กฐ:

  • ALL: ๋ชจ๋“  ๊ธฐ๊ตฌ (13๊ฐœ)
  • UPPER: ์ƒ์ฒด ๊ธฐ๊ตฌ (Lat Pulldown, Chest Press, Bicep Curl, Ab Machine, Row Machine, Shoulder Press)
  • LOWER: ํ•˜์ฒด ๊ธฐ๊ตฌ (Leg Press, Leg Extension, Glute Machine, Leg Curl)
  • ETC: ๊ธฐํƒ€ ๊ธฐ๊ตฌ (Cable Machine, Smith Machine, Treadmill)

6. Today's Discount ์„น์…˜

ํ• ์ธ ์ƒํ’ˆ ์ •๋ณด๋ฅผ ์นด๋“œ ํ˜•์‹์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์‹œ ์ •๋ณด:

  • ๋ธŒ๋žœ๋“œ๋ช… (GORNATION, Rogue ๋“ฑ)
  • ์ƒํ’ˆ๋ช…
  • ์ •๊ฐ€ (์ทจ์†Œ์„  ํ‘œ์‹œ)
  • ํ• ์ธ๊ฐ€ (๋นจ๊ฐ„์ƒ‰ ๊ฐ•์กฐ)
  • ๋ถ๋งˆํฌ ์•„์ด์ฝ˜

์ƒํ’ˆ ์˜ˆ์‹œ:

  • GORNATION Dip Belt: $100 โ†’ $88
  • Rogue Monster Bands: $25 โ†’ $22
  • GORNATION Premium Pull Up Station: $122 โ†’ $102
  • Rogue Dumbbells: $50 โ†’ $45

7. Footer

  • ์ •์ฑ… ๋งํฌ (Privacy Policy, Terms of Service, Medical Disclaimer, Cookie Policy)
  • ์˜๋ฃŒ ๋ฉด์ฑ… ์กฐํ•ญ
  • ์ €์ž‘๊ถŒ ์ •๋ณด (ยฉ 2025 2์กฐ ๊ฐ•์šฐ์„ ์ด์ค€์˜ ์กฐ์œค์žฌ)

index.jsp ํ˜„์žฌ ๊ตฌํ˜„ ๋‚ด์šฉ

ํ˜„์žฌ index.jsp๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๋ฐฉ์‹

<%
    // CategoryData๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
    pageContext.setAttribute("bodyParts", CategoryData.getBodyParts());
    pageContext.setAttribute("sports", CategoryData.getSports());
    pageContext.setAttribute("machines", CategoryData.getMachines());
    pageContext.setAttribute("products", CategoryData.getProducts());
%>

๋™์  ๋ Œ๋”๋ง ๋ฐฉ์‹

JSTL ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ˜๋ณต ๋ฐ ์กฐ๊ฑด ์ฒ˜๋ฆฌ:

<!-- ๋ชจ๋“  ์•„์ดํ…œ ์ถœ๋ ฅ -->
<c:forEach var="item" items="${bodyParts}">
    <div class="category-item">
        <div class="category-icon">${item.icon}</div>
        <div class="category-name">${item.name}</div>
    </div>
</c:forEach>

<!-- ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํ•„ํ„ฐ๋ง -->
<c:if test="${item.category == 'upper'}">
    <!-- UPPER ์นดํ…Œ๊ณ ๋ฆฌ๋งŒ ์ถœ๋ ฅ -->
</c:if>

ํƒญ ์ „ํ™˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜

๋ผ๋””์˜ค ๋ฒ„ํŠผ๊ณผ CSS๋ฅผ ํ™œ์šฉํ•œ ์ƒํƒœ ๊ด€๋ฆฌ:

<!-- ๋ผ๋””์˜ค ๋ฒ„ํŠผ (์ˆจ๊น€ ์ฒ˜๋ฆฌ) -->
<input type="radio" id="body-all" name="body-tab" class="tab-radio" checked>
<input type="radio" id="body-upper" name="body-tab" class="tab-radio">
<input type="radio" id="body-lower" name="body-tab" class="tab-radio">

<!-- ํƒญ ๋ ˆ์ด๋ธ” -->
<label for="body-all" class="category-tab">ALL</label>
<label for="body-upper" class="category-tab">UPPER</label>
<label for="body-lower" class="category-tab">LOWER</label>

<!-- ๊ฐ ํƒญ์— ํ•ด๋‹นํ•˜๋Š” ๊ทธ๋ฆฌ๋“œ -->
<div class="category-grid" id="bodyGrid-all">...</div>
<div class="category-grid" id="bodyGrid-upper">...</div>
<div class="category-grid" id="bodyGrid-lower">...</div>

CSS์—์„œ :checked ์„ ํƒ์ž๋กœ ํ‘œ์‹œํ•  ๊ทธ๋ฆฌ๋“œ๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ง•

  1. JavaScript ์—†๋Š” ๊ตฌํ˜„: ๋ชจ๋“  ์ธํ„ฐ๋ž™์…˜์„ CSS์™€ HTML๋งŒ์œผ๋กœ ๊ตฌํ˜„
  2. ๋ฐ˜์‘ํ˜• ๊ทธ๋ฆฌ๋“œ: repeat(auto-fill, minmax())๋ฅผ ์‚ฌ์šฉํ•œ ์œ ์—ฐํ•œ ๋ ˆ์ด์•„์›ƒ
  3. ์ปดํฌ๋„ŒํŠธ ์žฌ์‚ฌ์šฉ: CategoryItem ๋ชจ๋ธ์„ ๋‹ค์–‘ํ•œ ์„น์…˜์—์„œ ์žฌ์‚ฌ์šฉ
  4. ํƒ€์ž… ์•ˆ์ •์„ฑ: DTO์™€ Model์„ ํ†ตํ•œ ๋ช…ํ™•ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
  5. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง: JSP๋ฅผ ํ†ตํ•œ ์ดˆ๊ธฐ ๋ Œ๋”๋ง์œผ๋กœ ๋น ๋ฅธ ํŽ˜์ด์ง€ ๋กœ๋“œ

์‹คํ–‰ ๋ฐฉ๋ฒ•

  1. Apache Tomcat ์„œ๋ฒ„ ์‹คํ–‰
  2. ํ”„๋กœ์ ํŠธ๋ฅผ Tomcat์— ๋ฐฐํฌ
  3. ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:8080/WORK_OUT/ ์ ‘์†

ํ–ฅํ›„ ๊ฐœ์„  ๋ฐฉํ–ฅ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ (ํ˜„์žฌ๋Š” ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ)
  • ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (search.jsp)
  • ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ์ƒํ’ˆ ์ƒ์„ธ ํŽ˜์ด์ง€
  • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฐ ๊ฒฐ์ œ ์‹œ์Šคํ…œ
  • ๋‹ค๊ตญ์–ด ์ง€์› (EN/KR ์‹ค์ œ ์ ์šฉ)

WORKOUT_DB

Overview

This project contains the Docker configuration for a MongoDB database used in the Workout project.
๋ณธ ํ”„๋กœ์ ํŠธ๋Š” Docker Configuration์„ ํ†ตํ•œ MongoDB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • MongoDB 7.0
  • Docker Compose for container management
  • Database: WORKOUT_DB
  • Collections: users, exercises, workout_plans, logs, admin_logs

How to run

git clone https://github.com/usewooseok97/team_BACKEND.git
cd WORKOUT_DB
docker compose up -d
MongoDB URI: mongodb://admin:admin1234@localhost:27017/?authSource=admin

Notes

  • Do not commit mongo_data/, it contains local database files.
  • mongo_data/๋Š” ์ ˆ๋Œ€๋กœ ์ปค๋ฐ‹ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ๋“ค์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.
  • Passwords and sensitive info are stored in docker-compose.yml for local development only.
  • ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ์ค‘์š”ํ•œ ์ •๋ณด๋“ค์€ docker-compose.yml ํŒŒ์ผ์— ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค -> ๋กœ์ปฌ๋กœ ๋Œ๋ ค๋ณด๊ธฐ ์œ„ํ•ด์„œ.

About

No description, website, or topics provided.

Resources

License

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors