Sparta Store ๋ ์์ฌ๋ชฐ ํ๋ซํผ์ผ๋ก, ์ํ ํ๋งค ๋ฐ ์ฃผ๋ฌธ, ๋ฆฌ๋ทฐ ๊ด๋ฆฌ, ์ฌ์ฉ์ ๋ง์ถคํ ์๋ฆผ ์๋น์ค ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ฐฑ์๋ ํ๋ก์ ํธ์ ๋๋ค
- ๐ Team
- ๐ค Notion Document
- ๐ Commit Convention
- ๐ Technology
- ๐ฏ Features
- ๐ ERD
- ๐จ Trouble Shooting
- ๐ฐ Performance Comparison
์ฐํ | ์ฃผ์ | ์์ฐ | ์งํ | ํ์ฐ |
---|---|---|---|---|
![]() |
||||
GitHub | GitHub | GitHub | GitHub | GitHub |
๐น Leader: ๊น์ฐํ
โข Spring Boot, JPA ๊ธฐ๋ฐ์ผ๋ก ์ํ ๋ฐ ๋ฆฌ๋ทฐ ๊ด๋ฆฌ, ์นดํ
๊ณ ๋ฆฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ
โข ํ์ ์ํ ์ฌ์
๊ณ ์ ์๋ฆผ ๊ธฐ๋ฅ ๊ตฌํ
โข Redis Distributed Lock์ ํ์ฉํด ๋์์ฑ ์ด์ ํด๊ฒฐ ๋ฐ ๋ฐ์ดํฐ ์ ํฉ์ฑ ์ ์ง
โข GitHub Actions๋ฅผ ํ์ฉํด ์๋ํ๋ ๋น๋, ํ
์คํธ, ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
โข Docker Compose๋ก ์ผ๊ด๋ ๊ฐ๋ฐ ํ๊ฒฝ ์ ๊ณต ๋ฐ ๋ฐฐํฌ ํจ์จ์ฑ ํฅ์
โข Grafana & Prometheus๋ฅผ ์ฌ์ฉํด ์๋ฒ ์ํ ๋ฐ ์๋ต ์๊ฐ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง
โข ELK Stack (Elasticsearch, Logstash, Kibana) ๊ธฐ๋ฐ ๋ก๊ทธ ์์ง ๋ฐ ์๊ฐํ
โข Prometheus AlertManager๋ฅผ ํตํด ์๋ฒ ์ค๋ฅ ๋ฐ ์๋ต ์๊ฐ ์ด๊ณผ ์ Slack ์๋ฆผ ์ ์ก
๐น Sub-Leader: ์ฃผ์ โข ์ฅ๋ฐ๊ตฌ๋, ์ฐ ๊ธฐ๋ฅ ๊ฐ๋ฐ
๐น Member: ์์ฐ โข ์ฃผ๋ฌธ ๋ฐ ๊ฒฐ์ ๊ธฐ๋ฅ ๊ฐ๋ฐ
๐น Member: ์งํ โข ํ์๊ฐ์ , ๋ก๊ทธ์ธ, ๊ถํ ๊ด๋ฆฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ
๐น Member: ํ์ฐ โข ์ฌ์ฉ์ ๊ด๋ฆฌ ๋ฐ ๊ธฐ์ค๋ณ ์ธ๊ธฐ ์ํ ์กฐํ ๊ธฐ๋ฅ ๊ฐ๋ฐ
- Team Notion ๋ณด๋ฌ๊ฐ๊ธฐ ๐ Team Notion
feat
: ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ
fix
: bug fix
docs
: ๋ฌธ์ ์์
style
: ์ธ๋ฏธ์ฝ๋ก ๊ฐ์ ์ฝ๋์ ์ฌ์ํ ์คํ์ผ ๋ณํ.
refactor
: ๋ณ์๋ช
์์ ๊ฐ์ ๋ฆฌํฉํฐ๋ง
test
: ํ
์คํธ ์ฝ๋ ์ถ๊ฐ & ์์
chore
: ์ค์ํ์ง ์์ ์ผ
๋ถ์ผ | ๊ธฐ์ |
---|---|
Backend | Java 17, Spring Boot 3.x, JPA, QueryDSL |
DB | MySQL 8.0 |
Cache | Spring Cache, Redis Cache |
Concurrency Control | Redis Lock |
Testing | JUnit5, MockMvc |
DevOps | Docker |
erDiagram
User {
Long id PK
String name
String email
String password
Address address
tinyint is_deleted
LocalDateTime created_at
LocalDateTime updated_at
}
Item {
Long id PK
String name
String img_url
Integer price
String description
Integer stockQuantity
Category category
LocalDateTime created_at
LocalDateTime updated_at
}
Orders {
Long id PK
User user_id FK
OrderStatus status
Integer totalPrice
LocalDateTime created_at
LocalDateTime updated_at
}
OrderItem {
Long id PK
Orders order_id FK
Item item_id FK
Integer orderPrice
Integer quantity
LocalDateTime created_at
LocalDateTime updated_at
}
Address {
String city
String street
String zipcode
}
CartItem {
Long id PK
Cart cart_id FK
Item item_id FK
Integer quantity
LocalDateTime created_at
LocalDateTime updated_at
}
Cart {
Long id PK
User user_id FK
LocalDateTime created_at
LocalDateTime updated_at
}
REVIEW {
Long id PK
User user_id FK
Item item_id FK
String content
String img_url
int rating
LocalDateTime created_at
LocalDateTime updated_at
}
Category {
Long category_id PK
String name
Category parent_id FK "Parent Category"
}
Likes {
Long id PK
User user_id FK
Item item_id FK
LocalDateTime created_at
LocalDateTime updated_at
}
SalesSummary {
Long id pk
Item item_id FK
int totalSales
LocalDateTime created_at
LocalDateTime updated_at
}
User ||--o{ Orders : "has many"
User ||--|| Cart : "has one"
Cart ||--o{ CartItem : "contains"
Item ||--o{ CartItem : "is in"
Orders ||--o{ OrderItem : "has many"
Item ||--o{ OrderItem : "has many"
User }|..|{ Address : "embedded"
REVIEW }o--|| User : "has many"
REVIEW }o--|| Item : "has many"
Category ||--o| Category : "parent"
Category ||--|{ Category : "children"
Category ||--|{ Item : "has"
User ||--o{ Likes : "likes"
Item ||--o{ Likes : "liked by"
SalesSummary ||--|| Item : "has one"
โ solution