์ด๋ ๋ถ์๋ณ ์ด๋ ์ ๋ณด, ์คํฌ์ธ ์ข ๋ฅ, ์ด๋ ๊ธฐ๊ตฌ ์ ๋ณด ๋ฐ ํ ์ธ ์ํ์ ์ ๊ณตํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
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
์ด ํ๋ก์ ํธ๋ 3-Layer Architecture๋ฅผ ๋ฐ๋ฆ ๋๋ค:
[Presentation Layer] โ [Business Logic Layer] โ [Data Layer]
(JSP) (DTO/Model) (CategoryData)
- CategoryData.java: ์ ์ ๋ฐ์ดํฐ ์ ๊ณต ํด๋์ค
getBodyParts(): ์ ์ฒด ๋ถ์๋ณ ์ด๋ ๋ฐ์ดํฐ (Triceps, Chest, Biceps ๋ฑ)getSports(): ์คํฌ์ธ ์ข ๋ฅ ๋ฐ์ดํฐ (Swimming, Soccer, Basketball ๋ฑ)getMachines(): ์ด๋ ๊ธฐ๊ตฌ ๋ฐ์ดํฐ (Lat Pulldown, Chest Press ๋ฑ)getProducts(): ํ ์ธ ์ํ ๋ฐ์ดํฐfilterByCategory(): ์นดํ ๊ณ ๋ฆฌ๋ณ ํํฐ๋ง ๋ฉ์๋
-
CategoryItem.java: ์นดํ ๊ณ ๋ฆฌ ์์ดํ ๋ชจ๋ธ
- ์์ฑ:
name(์ด๋ฆ),icon(์ด๋ชจ์ง),category(๋ถ๋ฅ) - ์ด๋ ๋ถ์, ์คํฌ์ธ , ๊ธฐ๊ตฌ๋ฅผ ํํํ๋ ๊ณตํต ๋ชจ๋ธ
- ์์ฑ:
-
ProductDTO.java: ์ํ ๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด
- ์์ฑ:
brand,name,originalPrice,price,image getDiscountRate(): ํ ์ธ์จ ์๋ ๊ณ์ฐ ๋ฉ์๋
- ์์ฑ:
- index.jsp: ๋ฉ์ธ ํ์ด์ง ๋ทฐ
- JSTL์ ์ฌ์ฉํ ๋์ ๋ ๋๋ง
CategoryData์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์pageContext์ ์ ์ฅ- JSTL์
<c:forEach>์<c:if>๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ถ๋ ฅ
1. ์ฌ์ฉ์๊ฐ index.jsp ์ ์
โ
2. JSP ์คํฌ๋ฆฝํ๋ฆฟ(<% %>)์ด CategoryData ๋ฉ์๋ ํธ์ถ
โ
3. CategoryData๊ฐ List<CategoryItem>, List<ProductDTO> ๋ฐํ
โ
4. pageContext.setAttribute()๋ก ๋ฐ์ดํฐ๋ฅผ JSP ์ปจํ
์คํธ์ ์ ์ฅ
โ
5. JSTL ํ๊ทธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด HTML๋ก ๋ ๋๋ง
โ
6. CSS๋ก ์คํ์ผ๋ง๋ ์ต์ข
ํ์ด์ง๊ฐ ๋ธ๋ผ์ฐ์ ์ ํ์
- Backend: Java (JSP, JSTL 3.0)
- Frontend: HTML5, CSS3
- Server: Apache Tomcat
- Architecture: MVC Pattern (Model-View-Controller)
- ๋ก๊ณ ๋ฐ ํ ๋งํฌ
- ๊ฒ์ ๊ธฐ๋ฅ (
search.jsp๋ก ์ฐ๊ฒฐ) - ์ธ์ด ์ ํ (EN/KR) - ๋ผ๋์ค ๋ฒํผ ๋ฐฉ์
- ์๋จ ๋ฉ๋ด: Store, Register, Login ๋งํฌ
- ๋ํ "WORK OUT" ํ์ดํ
- ์ค์ ๊ฒ์ ๋ฐ (๊ฒ์ ์์ด์ฝ ํฌํจ)
- ๊ทธ๋ผ๋ฐ์ด์ ๋ฐฐ๊ฒฝ ํจ๊ณผ
์ ์ฒด ๋ถ์๋ณ ์ด๋ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํญ ๊ตฌ์กฐ:
- ALL: ๋ชจ๋ ์ ์ฒด ๋ถ์ (13๊ฐ)
- UPPER: ์์ฒด ์ด๋ (Triceps, Chest, Biceps, Abs, Back, Shoulders, Trapezius, Forearms)
- LOWER: ํ์ฒด ์ด๋ (Hamstrings, Quads, Glutes, Adductors, Abductors)
๊ตฌํ ๋ฐฉ์:
- ๋ผ๋์ค ๋ฒํผ๊ณผ CSS์
:checked์ ํ์๋ฅผ ์ฌ์ฉํ ํญ ์ ํ - JavaScript ์์ด ์์ CSS๋ก ๊ตฌํ
- ๊ทธ๋ฆฌ๋ ๋ ์ด์์์ผ๋ก ์์ด์ฝ๊ณผ ์ด๋ฆ ํ์
๋ค์ํ ์คํฌ์ธ ์ข ๋ฅ๋ฅผ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ๋ถ๋ฅํฉ๋๋ค.
ํญ ๊ตฌ์กฐ:
- ALL: ๋ชจ๋ ์คํฌ์ธ (13๊ฐ)
- WATER: ์์ ์คํฌ์ธ (Swimming)
- GROUND: ์ผ์ธ ์คํฌ์ธ (Soccer, Basketball, Tennis, Golf, Football, Volleyball)
- HOME: ์ค๋ด ์คํฌ์ธ (Darts, Boxing, Table Tennis, Pool)
- ETC: ๊ธฐํ ์คํฌ์ธ (Fencing, Archery)
์ด๋ ๊ธฐ๊ตฌ ๋ฐ ๋จธ์ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํญ ๊ตฌ์กฐ:
- 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)
ํ ์ธ ์ํ ์ ๋ณด๋ฅผ ์นด๋ ํ์์ผ๋ก ํ์ํฉ๋๋ค.
ํ์ ์ ๋ณด:
- ๋ธ๋๋๋ช (GORNATION, Rogue ๋ฑ)
- ์ํ๋ช
- ์ ๊ฐ (์ทจ์์ ํ์)
- ํ ์ธ๊ฐ (๋นจ๊ฐ์ ๊ฐ์กฐ)
- ๋ถ๋งํฌ ์์ด์ฝ
์ํ ์์:
- GORNATION Dip Belt: $100 โ $88
- Rogue Monster Bands: $25 โ $22
- GORNATION Premium Pull Up Station: $122 โ $102
- Rogue Dumbbells: $50 โ $45
- ์ ์ฑ ๋งํฌ (Privacy Policy, Terms of Service, Medical Disclaimer, Cookie Policy)
- ์๋ฃ ๋ฉด์ฑ ์กฐํญ
- ์ ์๊ถ ์ ๋ณด (ยฉ 2025 2์กฐ ๊ฐ์ฐ์ ์ด์ค์ ์กฐ์ค์ฌ)
ํ์ฌ 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 ์ ํ์๋ก ํ์ํ ๊ทธ๋ฆฌ๋๋ฅผ ์ ์ดํฉ๋๋ค.
- JavaScript ์๋ ๊ตฌํ: ๋ชจ๋ ์ธํฐ๋์ ์ CSS์ HTML๋ง์ผ๋ก ๊ตฌํ
- ๋ฐ์ํ ๊ทธ๋ฆฌ๋:
repeat(auto-fill, minmax())๋ฅผ ์ฌ์ฉํ ์ ์ฐํ ๋ ์ด์์ - ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ:
CategoryItem๋ชจ๋ธ์ ๋ค์ํ ์น์ ์์ ์ฌ์ฌ์ฉ - ํ์ ์์ ์ฑ: DTO์ Model์ ํตํ ๋ช ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ
- ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง: JSP๋ฅผ ํตํ ์ด๊ธฐ ๋ ๋๋ง์ผ๋ก ๋น ๋ฅธ ํ์ด์ง ๋ก๋
- Apache Tomcat ์๋ฒ ์คํ
- ํ๋ก์ ํธ๋ฅผ Tomcat์ ๋ฐฐํฌ
- ๋ธ๋ผ์ฐ์ ์์
http://localhost:8080/WORK_OUT/์ ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ (ํ์ฌ๋ ํ๋์ฝ๋ฉ๋ ๋ฐ์ดํฐ ์ฌ์ฉ)
- ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ (
search.jsp) - ํ์๊ฐ์ /๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ
- ์ํ ์์ธ ํ์ด์ง
- ์ฅ๋ฐ๊ตฌ๋ ๋ฐ ๊ฒฐ์ ์์คํ
- ๋ค๊ตญ์ด ์ง์ (EN/KR ์ค์ ์ ์ฉ)
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
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
- 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 ํ์ผ์ ๋ค์ด์์ต๋๋ค -> ๋ก์ปฌ๋ก ๋๋ ค๋ณด๊ธฐ ์ํด์.