Skip to content

Commit c4f9428

Browse files
authored
[DOCS] README ๋ณด์ถฉ
2 parents e002f64 + ca0a1eb commit c4f9428

1 file changed

Lines changed: 188 additions & 1 deletion

File tree

โ€ŽREADME.mdโ€Ž

Lines changed: 188 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,188 @@
1-
<img width="1920" height="1080" alt="Raillo-Server-Architecture" src="https://github.com/user-attachments/assets/d5ca3e3d-c5bc-497a-aa31-83c1ba7fb65e" />
1+
# ๐Ÿš… Raillo
2+
3+
## ๐Ÿ™Œ๐Ÿป ๋ฉค๋ฒ„
4+
<table>
5+
<tbody>
6+
<tr>
7+
<td align="center">
8+
<a href="https://github.com/Ogu1208"><img src="https://avatars.githubusercontent.com/u/76902448?v=4" width="100px;" alt="๊น€๋ฏผ์•„"/><br /></a>
9+
</td>
10+
<td align="center">
11+
<a href="https://github.com/EndlessMilkyway"><img src="https://avatars.githubusercontent.com/u/26517746?v=4" width="100px;" alt="๊น€์˜๋ ฌ"/><br /></a>
12+
</td>
13+
<td align="center">
14+
<a href="https://github.com/karlislepark"><img src="https://avatars.githubusercontent.com/u/64067168?v=4" width="100px;" alt="๋ฐ•๋ฒ”์ง„"/><br /></a>
15+
</td>
16+
<td align="center">
17+
<a href="https://github.com/Jimin730"><img src="https://avatars.githubusercontent.com/u/108002997?v=4" width="100px;" alt="์‹ ์ง€๋ฏผ"/><br /></a>
18+
</td>
19+
<td align="center">
20+
<a href="https://github.com/Friox"><img src="https://avatars.githubusercontent.com/u/10986386?v=4" width="100px;" alt="์ด์Šนํ›ˆ"/><br /></a>
21+
</td>
22+
<td align="center">
23+
<a href="https://github.com/chanwonlee"><img src="https://avatars.githubusercontent.com/u/116537544?v=4" width="100px;" alt="์ด์ฐฌ์›"/><br /></a>
24+
</td>
25+
<td align="center">
26+
<a href="https://github.com/Yunsung-Jo"><img src="https://avatars.githubusercontent.com/u/135187534?v=4" width="100px;" alt="์กฐ์œค์„ฑ"/><br /></a>
27+
</td>
28+
</tr>
29+
<tr>
30+
<td align="center"><a href="https://github.com/Ogu1208">๊น€๋ฏผ์•„</a></td>
31+
<td align="center"><a href="https://github.com/EndlessMilkyway">๊น€์˜๋ ฌ</a></td>
32+
<td align="center"><a href="https://github.com/karlislepark">๋ฐ•๋ฒ”์ง„</a></td>
33+
<td align="center"><a href="https://github.com/Jimin730">์‹ ์ง€๋ฏผ</a></td>
34+
<td align="center"><a href="https://github.com/Friox">์ด์Šนํ›ˆ</a></td>
35+
<td align="center"><a href="https://github.com/chanwonlee">์ด์ฐฌ์›</a></td>
36+
<td align="center"><a href="https://github.com/Yunsung-Jo">์กฐ์œค์„ฑ</a></td>
37+
</tr>
38+
</tbody>
39+
</table>
40+
41+
## ๐Ÿ“‹ ๋ชฉ์ฐจ
42+
- [ํ”„๋กœ์ ํŠธ ๊ฐœ์š”](#-ํ”„๋กœ์ ํŠธ-๊ฐœ์š”)
43+
- [๊ธฐ์ˆ  ์Šคํƒ](#-๊ธฐ์ˆ -์Šคํƒ)
44+
- [์•„ํ‚คํ…์ฒ˜](#-์•„ํ‚คํ…์ฒ˜)
45+
- [์ฃผ์š” ๊ธฐ๋Šฅ](#-์ฃผ์š”-๊ธฐ๋Šฅ)
46+
- [๋ชจ๋‹ˆํ„ฐ๋ง & ์šด์˜](#-๋ชจ๋‹ˆํ„ฐ๋ง--์šด์˜)
47+
- [ํ…Œ์ŠคํŠธ](#-ํ…Œ์ŠคํŠธ)
48+
- [์ฃผ์š” ์—”๋“œํฌ์ธํŠธ](#-์ฃผ์š”-์—”๋“œํฌ์ธํŠธ)
49+
50+
## ๐Ÿ“– ํ”„๋กœ์ ํŠธ ๊ฐœ์š”
51+
**Raillo**๋Š” ์ฝ”๋ ˆ์ผ(KORAIL) ์˜ˆ๋งค ์‹œ์Šคํ…œ์„ ํด๋ก ์ฝ”๋”ฉํ•œ ๊ธฐ์ฐจ ์˜ˆ์•ฝ ํ”Œ๋žซํผ์œผ๋กœ,
52+
์‹ค์ œ ์„œ๋น„์Šค์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋“ค์„ ์ตœ๋Œ€ํ•œ ์œ ์‚ฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜์—ฌ ํ˜„์—…์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ  ์Šคํƒ๊ณผ ์„ค๊ณ„ ํŒจํ„ด์„ ํ•™์Šตํ•˜๊ณ  ์ ์šฉํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
53+
54+
### ๐Ÿ“… ์ง„ํ–‰ ๊ธฐ๊ฐ„
55+
- 1์ฐจ (๊ธฐํš ๋ฐ ๊ฐœ๋ฐœ) : 2025. 05. 28. ~ 2025. 07. 01.
56+
- 2์ฐจ (ํด๋ผ์ด์–ธํŠธ ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ˜์˜) : 2025. 07. 02. ~ 2025. 07. 15.
57+
- 3์ฐจ (์นด์นด์˜ค API ํ†ตํ•ฉ) : 2025. 07. 16. ~ 2025. 08. 08.
58+
- ์ง€์† ๊ฐœ์„  : 2025. 08. 09. ~ endless
59+
60+
### ๐ŸŽฏ ํ•ต์‹ฌ ๋ชฉํ‘œ
61+
- **์‹ค์ œ ์„œ๋น„์Šค์™€ ์œ ์‚ฌํ•œ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„** : ์‹ค์ œ ์ฝ”๋ ˆ์ผ์—์„œ ์ œ๊ณตํ•˜๋Š” ํšŒ์› ์ธ์ฆ ๋ฐ ์ฃผ์š” ์˜ˆ๋งค ํ๋ฆ„์„ ์ตœ๋Œ€ํ•œ ๋น„์Šทํ•˜๊ฒŒ ๊ตฌํ˜„
62+
- **ํ™œ๋ฐœํ•œ ํ˜‘์—…๊ณผ ์—ญํ•  ๋ถ„๋‹ด ๊ฒฝํ—˜** : ํŒ€ ๋‚ด๋ถ€์—์„œ ์—ญํ• ์„ ๋ถ„๋‹ด, ํ˜‘์—…ํˆด์„ ์ด์šฉํ•œ ๋ฒ„์ „๊ด€๋ฆฌ, ์ด์Šˆ ํŠธ๋ž˜ํ‚น, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋“ฑ ํ˜‘์—… ๋ฐฉ์‹์„ ์ ์šฉ
63+
- **์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ  ์Šคํƒ ํ•™์Šต ๋ฐ ๊ฒฝํ—˜** : ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ  ์Šคํƒ์„ ํ•™์Šต, ๊ฒฝํ—˜ํ•˜๊ณ  ๊ด€๋ จ ํŒจํ„ด์„ ์ ์šฉ
64+
65+
## ๐Ÿ”ง ๊ธฐ์ˆ  ์Šคํƒ
66+
### Backend
67+
[![backend](https://skillicons.dev/icons?i=java,spring,redis,mysql,gradle)](https://skillicons.dev)
68+
- **Language** : Java
69+
- **Framework** : Spring Boot, Spring Security, Spring Batch
70+
- **ORM** : Spring Data JPA, QueryDSL
71+
- **DB** : MySQL (Production), H2 (Test)
72+
- **Cache** : Redis
73+
- **Authentication** : JWT
74+
- **File Processing** : Apache POI
75+
- **Build Tool** : Gradle
76+
77+
### Infrastructure & DevOps
78+
[![infra,devops](https://skillicons.dev/icons?i=git,github,docker,kubernetes,aws,prometheus,grafana,githubactions)](https://skillicons.dev)
79+
- **Cloud Platform** : AWS (EKS, RDS, Route53, Load Balancer)
80+
- **Container** : Docker, Kubernetes
81+
- **CI/CD** : GitHub Actions, ArgoCD (GitOps)
82+
- **Monitoring** : Prometheus, Grafana
83+
- **VCS** : Git, GitHub
84+
85+
### Testing
86+
- **Framework** : JUnit, Spring Boot Test
87+
- **DB** : H2 (in-memory)
88+
- **Cache** : Embedded Redis
89+
- **Test Utils** : AssertJ
90+
- **Performance Testing** : K6
91+
- **Email Testing** : GreenMail
92+
- **Coverage** : JaCoCo
93+
94+
## ๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜
95+
<img width="1920" alt="Raillo-Server-Architecture" src="https://github.com/user-attachments/assets/d5ca3e3d-c5bc-497a-aa31-83c1ba7fb65e" />
96+
97+
### ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ (DDD)
98+
```
99+
src/main/java/com/sudo/railo/
100+
โ”œโ”€โ”€ auth/ # ์ธ์ฆ ๋„๋ฉ”์ธ
101+
โ”œโ”€โ”€ booking/ # ์˜ˆ์•ฝ ๋„๋ฉ”์ธ
102+
โ”œโ”€โ”€ global/ # ๊ณตํ†ต ๊ธฐ๋Šฅ
103+
โ”œโ”€โ”€ member/ # ํšŒ์› ๋„๋ฉ”์ธ
104+
โ”œโ”€โ”€ payment/ # ๊ฒฐ์ œ ๋„๋ฉ”์ธ
105+
โ””โ”€โ”€ train/ # ์—ด์ฐจ ๋„๋ฉ”์ธ
106+
```
107+
108+
## ๐Ÿš€ ์ฃผ์š” ํŠน์ง•
109+
### ๐Ÿ”‘ Auth ๋„๋ฉ”์ธ
110+
- **JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ** : Access Token๊ณผ Refresh Token์„ ํ™œ์šฉํ•œ Stateless ์ธ์ฆ ๋ฐ ์ธ๊ฐ€
111+
- **์ด๋ฉ”์ผ ์ธ์ฆ** : Redis๋ฅผ ํ™œ์šฉํ•œ ์ธ์ฆ ์ฝ”๋“œ ๋ฐœ์†ก ๋ฐ ๊ฒ€์ฆ ์‹œ์Šคํ…œ
112+
- **๋ณด์•ˆ ๊ฐ•ํ™”** : ๋กœ๊ทธ์•„์›ƒ๋œ ํ† ํฐ Redis ๊ด€๋ฆฌ, ์ฟ ํ‚ค ๊ธฐ๋ฐ˜ Refresh Token ๊ด€๋ฆฌ
113+
114+
### ๐Ÿ‘ค Member ๋„๋ฉ”์ธ
115+
- **๊ณ ์œ  ํšŒ์›๋ฒˆํ˜ธ ์‹œ์Šคํ…œ** : Redis ๊ธฐ๋ฐ˜ ์ผ์ผ ์ฆ๋ถ„ ์นด์šดํ„ฐ๋ฅผ ํ™œ์šฉํ•œ ํšŒ์›๋ฒˆํ˜ธ ์ž๋™ ์ƒ์„ฑ (`yyyyMMddCCCC` ํ˜•์‹)
116+
- **Soft-Delete** : ์‹ค์ œ ํšŒ์› ์‚ญ์ œ๊ฐ€ ์•„๋‹Œ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌ
117+
- **๋งŒ๋ฃŒ ํšŒ์› ์ผ๊ด„ ์‚ญ์ œ** : ๋งŒ๋ฃŒ๋œ ํšŒ์› ๋ฐ์ดํ„ฐ ์ •๋ฆฌ๋ฅผ ์œ„ํ•œ Spring Batch ํ™œ์šฉ
118+
119+
### ๐ŸŽซ Booking ๋„๋ฉ”์ธ
120+
- **์žฅ๋ฐ”๊ตฌ๋‹ˆ ์‹œ์Šคํ…œ** : ์˜ˆ์•ฝ ํ›„ ๊ฒฐ์ œ ์ „ ์ž„์‹œ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ
121+
- **์ขŒ์„ ์˜ˆ์•ฝ ๊ด€๋ฆฌ** : ์Šน๊ฐ ์œ ํ˜•๋ณ„ ์ขŒ์„ ๋ฐฐ์ • ๋ฐ ์˜ˆ์•ฝ ์ƒํƒœ ๊ด€๋ฆฌ
122+
- **์š”๊ธˆ ๊ณ„์‚ฐ** : ๊ฑฐ๋ฆฌ๋ณ„, ์Šน๊ฐ ์œ ํ˜•๋ณ„, ์ฐจ๋Ÿ‰ ๋“ฑ๊ธ‰๋ณ„ ์š”๊ธˆ ์ž๋™ ๊ณ„์‚ฐ
123+
124+
### ๐Ÿ’ต Payment ๋„๋ฉ”์ธ
125+
- **๊ฒฐ์ œ ์ˆ˜๋‹จ ํ™•์žฅ์„ ์œ„ํ•œ ์œ ์—ฐํ•œ ๊ตฌ์กฐ** : ์ ˆ์ฐจ๋ฅผ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์ถ”ํ›„ ๊ฒฐ์ œ ์ˆ˜๋‹จ ํ™•์žฅ ์šฉ์ดํ•จ
126+
- **๊ฒฐ์ œ ํ‚ค ์ƒ์„ฑ** : ๊ณ ์œ ํ•œ ๊ฒฐ์ œ ์‹๋ณ„์ž ์ž๋™ ์ƒ์„ฑ
127+
- **๊ฒฐ์ œ ๊ฒ€์ฆ** : ๊ธˆ์•ก ๊ฒ€์ฆ ๋ฐ ์ค‘๋ณต ๊ฒฐ์ œ ๋ฐฉ์ง€
128+
- **์ž๋™ ํ‹ฐ์ผ“ ๋ฐœ๊ธ‰** : ๊ฒฐ์ œ ์™„๋ฃŒ ์‹œ ํ‹ฐ์ผ“ ์ƒ์„ฑ
129+
- **์ทจ์†Œ ๋ฐ ํ™˜๋ถˆ** : ๊ฒฐ์ œ ์ทจ์†Œ ๋ฐ ํ™˜๋ถˆ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ
130+
131+
### ๐Ÿš… Train ๋„๋ฉ”์ธ
132+
- **์‹ค์ œ ๋ฐ์ดํ„ฐ ํ™œ์šฉ** : ์ฝ”๋ ˆ์ผ์˜ ์‹ค์ œ ์šด์˜ ์Šค์ผ€์ค„ Excel ํŒŒ์ผ์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ตฌ์ถ•
133+
- **์—‘์…€ ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ** : Apache POI๋ฅผ ํ™œ์šฉํ•œ ๋ณต์žกํ•œ ์Šค์ผ€์ค„ ๋ฐ์ดํ„ฐ ์ž๋™ ํŒŒ์‹ฑ
134+
- **์—ด์ฐจ ๊ฒ€์ƒ‰ ์ตœ์ ํ™”** : ๋ฐฐ์น˜ ์ฟผ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ ๋Œ€์šฉ๋Ÿ‰ ์Šค์ผ€์ค„ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ์ตœ์ ํ™”
135+
- **์ขŒ์„ ํ˜„ํ™ฉ ๊ด€๋ฆฌ** : ์‹ค์‹œ๊ฐ„ ์ขŒ์„ ์˜ˆ์•ฝ ํ˜„ํ™ฉ ๋ฐ ์—ฌ์œ ์„ ์ •๋ณด ์ œ๊ณต
136+
- **์—ญ ๊ฐ„ ์š”๊ธˆ ์‹œ์Šคํ…œ** : ๊ตฌ๊ฐ„๋ณ„ ์„ธ๋ถ„ํ™”๋œ ์š”๊ธˆ ์ฒด๊ณ„ ๊ตฌํ˜„
137+
138+
## ๐Ÿ“Š ๋ชจ๋‹ˆํ„ฐ๋ง & ์šด์˜
139+
- `GitHub Actions`์™€ `ArgoCD`๋ฅผ ํ™œ์šฉํ•ด ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ์ž๋™ ๋นŒ๋“œ, ๋ฐฐํฌ, ํด๋Ÿฌ์Šคํ„ฐ ์ ์šฉ
140+
- `AWS EKS` ๊ธฐ๋ฐ˜์—์„œ ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ด€๋ฆฌ
141+
- `Prometheus`, `Grafana`๋“ฑ์„ ๋„์ž…ํ•˜์—ฌ ๋…ธ๋“œ ๋ณ„ ์„œ๋น„์Šค ์ƒํƒœ, ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์ง‘ ๋ฐ ๊ฐ€์‹œํ™”
142+
- ์—ฌ๋Ÿฌ `Node Group`๊ณผ ๋ถ„์‚ฐ๋œ ๋ฐฑ์—”๋“œ ๋ฐ Redis๋กœ ๊ตฌ์„ฑ๋˜์–ด ๊ณ ๊ฐ€์šฉ์„ฑ ํ™•๋ณด
143+
- `RDS`, `Route53`, `LB` ๋“ฑ `AWS ์„œ๋น„์Šค`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์™€ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ ๋ฐ ๋„๋ฉ”์ธ ์šด์˜ ์ง€์›
144+
145+
## ๐Ÿงช ํ…Œ์ŠคํŠธ
146+
### ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ตฌ์ถ•
147+
- ๋กœ์ปฌ์—์„œ ์šด์˜ํ™˜๊ฒฝ๊ณผ ๋น„์Šทํ•œ ํ™˜๊ฒฝ ๊ตฌ์ถ• ํ›„ ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ ์ง„ํ–‰
148+
- Spring Boot, LB, Redis, Prometheus, Grafana, AWS RDS ์ด์šฉ
149+
150+
### K6๋ฅผ ์ด์šฉํ•œ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ
151+
- K6๋กœ API ํ˜ธ์ถœ -> ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ -> Spring Boot Application -> DB
152+
- ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๋ชฉํ‘œ ์„ค์ • (์˜ˆ: Target TPS 500, Avg Latency 800ms ์ดํ•˜)
153+
- ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์ง„ํ–‰ ํ›„ ๋ณ‘๋ชฉ ์ง€์  ํŒŒ์•…, ์„ฑ๋Šฅ ๊ฐœ์„ 
154+
- ๊ฐœ์„ ํ•œ ์‹œ์Šคํ…œ์ด ์–ด๋А ์ •๋„ ํŠธ๋ž˜ํ”ฝ๊นŒ์ง€๋ฅผ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธ ๊ณผ์ • ๋ฐ˜๋ณต
155+
156+
## ๐Ÿ“Œ ์ฃผ์š” ์—”๋“œํฌ์ธํŠธ
157+
```http
158+
# Auth
159+
POST /auth/signup
160+
POST /auth/login
161+
POST /auth/logout
162+
POST /auth/emails/verify
163+
POST /auth/reissue
164+
165+
# Booking
166+
GET /api/v1/booking/reservation
167+
GET /api/v1/booking/reservation/{reservationId}
168+
POST /api/v1/booking/reservation
169+
DELETE /api/v1/booking/reservation
170+
GET /api/v1/booking/ticket
171+
172+
# Member
173+
DELETE /api/v1/members
174+
GET /api/v1/members/me
175+
PUT /api/v1/members/password
176+
177+
# Payment
178+
GET /api/v1/payments
179+
POST /api/v1/payments/{paymentKey}/cancel
180+
POST /api/v1/payments/bank-account
181+
POST /api/v1/payments/card
182+
183+
# Train
184+
GET /api/v1/trains/calendar
185+
POST /api/v1/trains/cars
186+
POST /api/v1/trains/search
187+
POST /api/v1/trains/seats
188+
```

0 commit comments

Comments
ย (0)