Skip to content

Commit 742e366

Browse files
authored
Merge pull request #135 from ODOICHON/chore/template
README ์—…๋ฐ์ดํŠธ
2 parents a3f1889 + 89106b7 commit 742e366

5 files changed

Lines changed: 156 additions & 18 deletions

File tree

โ€ŽREADME.mdโ€Ž

Lines changed: 156 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,164 @@
1515

1616
"์ฃผ๋ง์˜์ง‘"์€ ๋“€์–ผ ๋ผ์ดํ”„๋ฅผ ๊ฟˆ๊พธ๊ณ  ์‹ค์ฒœํ•˜๋Š” ์‚ฌ์šฉ์ž๋“ค ๊ฐ„์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ˜•์„ฑ์„ ๋„์™€์ฃผ๋Š” ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
1717

18+
๋ณธ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝํ—˜๊ณผ ์ง€์‹์„ ์Œ“๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
19+
20+
- SpringBoot ์™€ Kotlin ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์•  ์ฃผ๊ธฐ ๊ธฐํš๋ถ€ํ„ฐ ๋ฐฐํฌ ๋ฐ ์šด์˜๊นŒ์ง€ ๊ฒฝํ—˜
21+
- AWS ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ๊ธฐ๋ฐ˜์˜ CICD ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ์ธํ”„๋ผ ๊ตฌ์ถ• ๊ฒฝํ—˜
22+
- JPA, Hibernate๋ฅผ ์‚ฌ์šฉํ•œ ๋„๋ฉ”์ธ ์„ค๊ณ„ ๊ฒฝํ—˜
23+
- MVC ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ๊ตฌ์ถ•
24+
- SSR ๋ฐฉ์‹์˜ ๋ฐฑ์˜คํ”ผ์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜
25+
1826
### ๊ธฐ์ˆ  ์Šคํƒ
19-
1. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ( Language & Framework )
27+
**์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ( Language & Framework & Library )**
2028
- Kotlin
21-
- Spring Framework ( Spring Boot, Spring MVC )
22-
- MySQL ( JPA ), Redis
29+
- Spring Framework ( Spring Boot 2.7.8, Spring MVC )
30+
- Spring Data JPA, Redis, QueryDsl
2331
- Junit5, AssertJ, Mockito
32+
33+
**Build Tool**
2434
- Gradle( Kotlin )
2535

26-
2. ์ธํ”„๋ผ ์•„ํ‚คํ…์ฒ˜
36+
**Database**
37+
- MySQL
38+
39+
**์ธํ”„๋ผ**
2740

2841
![แ„Œแ…ฎแ„†แ…กแ†ฏแ„‹แ…ดแ„Œแ…ตแ†ธ แ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ](https://user-images.githubusercontent.com/61505572/220286737-8b62ca94-a38e-4b68-b0a3-54d85a4b622c.png)
2942

30-
- Route 53
31-
- EC2
32-
- ALB, Nginx, S3, CodeDeploy
33-
- MySQL( RDS )
34-
- Git, Github Actions CI/CD
43+
- AWS Route 53
44+
- AWS EC2
45+
- Nginx, AWS S3, AWS CodeDeploy(Agent)
46+
- AWS RDS
47+
- Git, Github Actions
3548
- CloudWatch, Slack
36-
- Jacoco, SonarlCloud
49+
- Jacoco, SonarCloud
50+
- Docker
51+
52+
**WEB**
53+
- Javascript
54+
- HTML/CSS
55+
- Thymeleaf
56+
- Bootstrap 5
57+
58+
**๊ธฐํƒ€ ์ฃผ์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ**
59+
- JWT
60+
- Bucket4j
61+
62+
### E-R ๋‹ค์ด์–ด๊ทธ๋žจ
63+
![๋‹ค์ด์–ด๊ทธ๋žจ](img/erd-img.png)
64+
65+
### ํ•ต์‹ฌ ๊ธฐ๋Šฅ ( ๋ฐฐํฌ ์ดํ›„ )
66+
**๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ swap์œผ๋กœ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์„ค์ •**
67+
68+
ํ”„๋ฆฌํ‹ฐ์–ด ํ™˜๊ฒฝ์—์„œ EC2 ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๋ฉด์„œ CD๋ฅผ ํ†ตํ•ด ๋ฐฐํฌํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์ฃฝ๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. swap์„ ํ†ตํ•ด ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์„ค์ •์„ ํ†ตํ•ด ํ•ด๋‹น ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.
69+
70+
**์‚ฌ์šฉ์ž ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ๋ฅผ ์œ„ํ•œ ์•”ํ˜ธํ™” ์ฒ˜๋ฆฌ**
71+
72+
ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ ๊ด€๋ จ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์ดํ›„, ๋ฐฐํฌ๋œ ์‚ฌ์ดํŠธ๋ฅผ ํ†ตํ•ด QA๋ฅผ ํ•˜๋ฉด์„œ ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ์— ๋Œ€ํ•œ ๊ฑฑ์ •์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
73+
74+
์‹ค์ œ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•ด์„œ ํšŒ์›๊ฐ€์ž… ๊ณผ์ •์„ ๊ฑฐ์ณ ์‚ฌ์ดํŠธ์— ์ œ๊ณตํ•˜๋Š” ์ •๋ณด์— ๋Œ€ํ•ด ์ œ3์ž๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•˜์ง€๋งŒ, ์ด๋ฅผ ์šด์˜ํ•˜๋Š” ๊ด€๋ฆฌ์ž๋“ค๋กœ๋ถ€ํ„ฐ๋„ ๋ณดํ˜ธ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
75+
76+
๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ƒ์„ฑ/์ˆ˜์ •/์กฐํšŒ ์‹œ, ์•”ํ˜ธํ™”์™€ ๋ณตํ˜ธํ™” ์ฒ˜๋ฆฌ๋ฅผ ๊ฑฐ์น˜๋„๋ก ๋ฆฌํŽ™ํ† ๋งํ•˜์˜€์Šต๋‹ˆ๋‹ค. DB์— ์ฝ˜์†”๋กœ ์ ‘๊ทผํ•˜์—ฌ select ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ์กฐํšŒํ•˜๋”๋ผ๋„ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์•”ํ˜ธํ™” ์ฒ˜๋ฆฌ๋œ ์ƒํƒœ๋กœ ์กฐํšŒ๋ฉ๋‹ˆ๋‹ค.
77+
78+
๋ฆฌํŽ™ํ† ๋ง ๊ณผ์ •์€ [์œ ์ € ํ…Œ์ด๋ธ” ์•”ํ˜ธํ™”](https://github.com/ODOICHON/server/wiki/%5B%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%84%A4%EA%B3%84%5D-%EC%9C%A0%EC%A0%80-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%95%94%ED%98%B8%ED%99%94)์—์„œ ์ž์„ธํžˆ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
79+
80+
**์‚ฌ์šฉ์ž ํƒˆํ‡ด ์ดํ›„์˜ ์ฒ˜๋ฆฌ**
81+
82+
์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์–ป๋Š” ๋ฐ์ดํ„ฐ๋กœ ์šด์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ํƒˆํ‡ด๋ฅผ ํ•˜๋”๋ผ๋„ ๊ฐœ์ธ์ •๋ณด๋ฅผ ์ œ์™ธํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ณด์œ ํ•˜๊ณ  ์žˆ๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ delete ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ "" ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ๋„ฃ์–ด ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”๊ณผ Cascade๊ฐ€ ๊ฑธ๋ฆฐ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌํŽ™ํ† ๋งํ•˜์˜€์Šต๋‹ˆ๋‹ค.
83+
84+
๋ฆฌํŽ™ํ† ๋ง ๊ณผ์ •์€ [์œ ์ € ํƒˆํ‡ด ์ฒ˜๋ฆฌ](https://github.com/ODOICHON/server/wiki/%5BAPI-%EA%B5%AC%ED%98%84%5D-%EC%9C%A0%EC%A0%80-%ED%83%88%ED%87%B4-%EC%B2%98%EB%A6%AC)์—์„œ ์ž์„ธํžˆ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
85+
86+
**๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์ €์žฅ๋ฐฉ์‹์˜ ๋ณ€๊ฒฝ**
87+
88+
๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์ค‘์— JWT ํ† ํฐ ํ˜•ํƒœ์˜ Access-token๊ณผ Refresh-token์„ Frontend์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ localstorage์— ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. Server์—์„œ๋Š” Redis ์„œ๋ฒ„์— Refresh-token์„ ์ €์žฅํ•˜์—ฌ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
89+
90+
์œ ํšจ๊ธฐ๊ฐ„์ด ๊ธด Refresh-token์ด localstorage์— ์ €์žฅ๋˜๋ฉด XSS ๊ณต๊ฒฉ ๋“ฑ์œผ๋กœ ํƒˆ์ทจ ๋‹นํ•  ์œ„ํ—˜์ด ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ Cookie์— ๋‹ด์•„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.
91+
92+
๋ฆฌํŽ™ํ† ๋ง ๊ณผ์ •์€ [๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์ €์žฅ๋ฐฉ์‹ ๋ณ€๊ฒฝ](https://github.com/ODOICHON/server/wiki/%5B%EC%9D%B4%EC%8A%88%5D-%EB%A6%AC%ED%94%84%EB%A0%88%EC%8B%9C-%ED%86%A0%ED%81%B0-%EC%A0%80%EC%9E%A5%EB%B0%A9%EC%8B%9D-%EB%B3%80%EA%B2%BD)์—์„œ ์ž์„ธํžˆ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
93+
94+
### ํ•ต์‹ฌ ๊ธฐ๋Šฅ ( ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์ค‘ )
95+
**๋ฐ˜์‘ํ˜• ์›น ํ™”๋ฉด**
96+
![img.png](img/img.png)
97+
![img_1.png](img/img_1.png)
98+
[๋ฐฑ์˜คํ”ผ์Šค ์ค‘ ๊ด€๋ฆฌ์ž ๋ฉ”์ธ ํ™”๋ฉด]
99+
100+
Bootstrap์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ๋กœ ์ ‘์†์€ ๋ฌผ๋ก  ๋ชจ๋‹ˆํ„ฐ ํ™”๋ฉด์—์„œ๋„ ๋ฌธ์ œ์—†์ด ๋™์ž‘ํ•˜๋Š” ๋ฐ˜์‘ํ˜• ์›น์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
101+
102+
**๋กœ์ปฌ ๋กœ๊ทธ์ธ**
103+
๋กœ์ปฌ ๋กœ๊ทธ์ธ ๊ตฌํ˜„์„ ์œ„ํ•ด Spring Security๊ฐ€ ์•„๋‹Œ ArgumentResolver์™€ AOP๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
104+
105+
@Auth ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— HTTP Request Authorization Header์— ๋‹ด๊ธด JWT ํ† ํฐ์— ๋Œ€ํ•ด ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
106+
107+
@AuthUser ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ @Auth ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๊ฒ€์ฆ๋œ ํ† ํฐ ๊ฐ’์— ๋‹ด๊ธด ์‚ฌ์šฉ์ž์˜ ์•„์ด๋””๋กœ User๋ฅผ ์ฐพ์€ ํ›„, ๋ฐ˜ํ™˜๋œ ๊ฐ’์„ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์†Œ๋“œ์˜ Argument๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
108+
109+
๋กœ์ปฌ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ๊ณผ์ •์€ [Spring Security ์—†์ด ์ธ์ฆ์ธ๊ฐ€ ๊ตฌํ˜„ํ•˜๊ธฐ](https://github.com/ODOICHON/server/wiki/%5BAPI-%EA%B5%AC%ED%98%84%5D-Spring-Security-%EC%97%86%EC%9D%B4-%EC%9D%B8%EC%A6%9D%EC%9D%B8%EA%B0%80-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0)์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
110+
111+
**์‚ฌ์šฉ์ž ๊ถŒํ•œ**
112+
113+
๋กœ์ปฌ ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ํšŒ์›๊ฐ€์ž…์„ ํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์„ ๊ฐ€์ง€๋ฉฐ, ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์„ ๊ฐ–๋Š” ์‚ฌ์šฉ์ž๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Authority๋ฅผ ADMIN์œผ๋กœ ๋ถ€์—ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
114+
115+
์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ/์ˆ˜์ •/์‚ญ์ œ/์ƒ์„ฑ ๋ฐ ๋Œ“๊ธ€ ์ž‘์„ฑ/์ˆ˜์ •/์‚ญ์ œ, ์ข‹์•„์š” ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
116+
117+
๊ด€๋ฆฌ์ž๋Š” ์†Œ๊ฐœ ํŽ˜์ด์ง€ ๋‚ด ํ›„๊ธฐ/ํŠธ๋ Œ๋“œ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ/์ˆ˜์ •/์‚ญ์ œ ๊ถŒํ•œ์„ ๊ฐ€์ง€๋ฉฐ, ์ด๋Š” ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
118+
119+
๊ด€๋ฆฌ์ž๋Š” ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์˜ ์•…์˜์„ฑ ๊ฒŒ์‹œ๊ธ€ ๋ฐ ๋Œ“๊ธ€์— ๋Œ€ํ•ด ์˜๊ตฌ ์‚ญ์ œ ๊ถŒํ•œ์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
37120

38-
### API ๋ช…์„ธ์„œ
121+
**React-Quill ๊ธฐ๋ฐ˜ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ**
122+
123+
๊ธ€ ์ž‘์„ฑ ์‹œ, ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ์ž๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ๊พธ๋ฐ€ ์ˆ˜ ์žˆ๋Š” ์—๋””ํ„ฐ ํ˜•์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
124+
125+
![img_2.png](img/img_2.png)
126+
127+
๋Œ€ํ‘œ ์ธ๋„ค์ผ ์ด๋ฏธ์ง€์™€ ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ์— ํฌํ•จ๋˜๋Š” ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด์„œ๋Š” Frontend ์ธก์—์„œ AWS S3๋กœ ์ง์ ‘ ์—…๋กœ๋“œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
128+
129+
์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ํ›„ url ์ฃผ์†Œ์— ๋Œ€ํ•ด์„œ Server๋กœ ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ๊ณผ ํ•จ๊ป˜ ์ „๋‹ฌํ•˜์—ฌ DB์—์„œ ์ด๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
130+
131+
**ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…** (2023.04.17) <br/>
132+
๊ฒŒ์‹œ๊ธ€ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์ตœ๋Œ€ ํฌ๊ธฐ ์ดˆ๊ณผ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
133+
134+
Board(Id, CreatedAt, UpdatedAt, Category, Code, Content, Fixed, FixedAt, ImageUrls, PrefixCategory, Title, UseYn, UserId )
135+
136+
๊ฒŒ์‹œ๊ธ€ ํ…Œ์ด๋ธ”์€ ์œ„์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„ ๋˜์–ด ์žˆ์—ˆ์œผ๋ฉฐ, Code ์ปฌ๋Ÿผ์€ Frontend ์ธก์—์„œ ๋„˜์–ด์˜ค๋Š” HTML ํƒœ๊ทธ๊ฐ€ ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.
137+
138+
๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰ ์‹œ, ๊ฒŒ์‹œ๊ธ€์˜ ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ–ˆ๊ธฐ์— ๊ฒŒ์‹œ๊ธ€ ๋ฐ์ดํ„ฐ๊ฐ€ insert ๋˜๊ธฐ ์ด์ „์— Code ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ HTML ํƒœ๊ทธ๋ฅผ ํŒŒ์‹ฑํ•ด์„œ ์ˆœ์ˆ˜ํ•œ ๊ฐ’๋งŒ ๊ฐ–๋Š” Content ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ์ปฌ๋Ÿผ์œผ๋กœ ์ €์žฅํ•˜์—ฌ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
139+
140+
๊ฒŒ์‹œ๊ธ€ ํ…Œ์ด๋ธ” ๋‚ด์— ์ด๋ฏธ ๋งŽ์€ ์ปฌ๋Ÿผ์ด ์กด์žฌํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ๊ฒŒ์‹œ๊ธ€์˜ ๊ธ€์ž์ˆ˜ ์ œํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— Code์™€ Content ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํ•˜๋‚˜์˜ Row๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋ฉด์„œ insert ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
141+
142+
์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ”์„ ๋ถ„๋ฆฌํ•˜์—ฌ board์™€ board_code๋ฅผ One-To-One์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
143+
144+
ํ•ด๋‹น ์ด์Šˆ์˜ ๋ฐœ์ƒ ๊ณผ์ • ๋ฐ ํ•ด๊ฒฐ ๊ณผ์ •์€ [๊ฒŒ์‹œ๊ธ€ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ํฌ๊ธฐ ์ดˆ๊ณผ๋กœ ์ธํ•œ ํ…Œ์ด๋ธ” ๋ถ„๋ฆฌ ์ž‘์—…](https://github.com/ODOICHON/server/wiki/%5B%EC%9D%B4%EC%8A%88%5D-%EA%B2%8C%EC%8B%9C%EA%B8%80-%ED%85%8C%EC%9D%B4%EB%B8%94-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B8%B8%EC%9D%B4-%EC%B4%88%EA%B3%BC%EB%A1%9C-%EC%9D%B8%ED%95%9C-%ED%85%8C%EC%9D%B4%EB%B8%94-%EB%B6%84%EB%A6%AC-%EC%9E%91%EC%97%85)์—์„œ ์ž์„ธํžˆ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
145+
146+
**๊ฒŒ์‹œ๊ธ€ CRUD**
147+
148+
๊ฒŒ์‹œ๊ธ€์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ CRUD๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์€ ์œ„์˜ ๋‚ด์šฉ์ฒ˜๋Ÿผ ์—๋””ํ„ฐ ํ˜•์‹์œผ๋กœ ๊ฒŒ์‹œ๊ธ€์ด ์ž‘์„ฑ๋˜์–ด ๋“ฑ๋ก๋˜๋ฉฐ, ์กฐํšŒ ์‹œ์—๋„ HTML๋กœ ํŒŒ์‹ฑ ํ›„ ๋ Œ๋”๋ง ๋˜์–ด ๋ณด์—ฌ์ง‘๋‹ˆ๋‹ค.
149+
150+
์ˆ˜์ •๊ณผ ์‚ญ์ œ์˜ ๊ฒฝ์šฐ, ๊ด€๋ฆฌ์ž ์œ ์ €์™€ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์ž ๋ณธ์ธ์— ๋Œ€ํ•ด์„œ๋งŒ ์ธ๊ฐ€ํ•˜์—ฌ ๊ถŒํ•œ์„ ์ œํ•œํ•˜์˜€์Šต๋‹ˆ๋‹ค.
151+
152+
**Soft Delete ๋ฐฉ์‹์˜ ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ**
153+
154+
์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์–ป๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์šด์˜๋˜๋Š” ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณง ์ž์‚ฐ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๋ˆ„์ ๋˜์–ด ๊ทธ ์•ˆ์—์„œ ์œ ์˜๋ฏธํ•œ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ณ , ์ด๊ฒƒ์ด ์‹ ๊ทœ ๊ธฐ๋Šฅ์ด์ž ์„œ๋น„์Šค๋กœ ๋ฐœ์ „๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
155+
156+
๊ธฐํš์˜ ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€๊ฒฝ์œผ๋กœ ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋…ธ์ถœํ•ด์•ผ ํ•˜๋Š” ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด Soft Delete ๋ฐฉ์‹์„ ์ ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
157+
158+
์ด๋ฅผ ์œ„ํ•ด ๊ฒŒ์‹œ๊ธ€ ํ…Œ์ด๋ธ” ๋‚ด์— UseYn ์ปฌ๋Ÿผ์„ ๋‘์–ด ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒŒ์‹œ๊ธ€์„ ์‚ญ์ œํ•œ ๊ฒฝ์šฐ์—๋Š” ์กฐํšŒ๋˜์ง€ ์•Š๊ณ , ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์—์„œ ๊ด€๋ฆฌ์ž๊ฐ€ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์˜๊ตฌ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
159+
160+
soft delete ์ ์šฉ ๊ณผ์ •์€ [Soft Delete ๋ฐฉ์‹ ์ ์šฉ](https://github.com/ODOICHON/server/wiki/%5BAPI-%EA%B5%AC%ED%98%84%5D-Soft-Delete-%EB%B0%A9%EC%8B%9D-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0)์—์„œ ์ž์„ธํžˆ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
161+
162+
**๋Œ“๊ธ€๊ณผ ์ข‹์•„์š”**
163+
164+
๊ฒŒ์‹œ๊ธ€ ๋‚ด์— ๋Œ“๊ธ€ ์ž‘์„ฑ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋‚˜, ๋Œ€๋Œ“๊ธ€ ์ž‘์„ฑ ๊ธฐ๋Šฅ์€ ์ œ๊ณตํ•˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
165+
166+
๊ฒŒ์‹œ๊ธ€์— ๋Œ€ํ•ด ์ข‹์•„์š” ํ‘œ์‹œ๋ฅผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๊ฒŒ์‹œ๊ธ€ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ ์‹œ ํ•„ํ„ฐ๋ง์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
167+
168+
**๋ง๋จธ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ**
169+
170+
์ผ์ข…์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ง๋จธ๋ฆฌ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋Š” ๊ฐ ๊ฒŒ์‹œํŒ ๋งˆ๋‹ค ๊ณ ์œ ์˜ ๋ง๋จธ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ๋Š” ๊ด€๋ฆฌ์ž๋งŒ์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
171+
172+
ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋Š” ์„œ๋ฒ„ ์ธก DB์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์—๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก Frontend์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ DB๋กœ๋ถ€ํ„ฐ ์กฐํšŒํ•˜์—ฌ ํ™”๋ฉด์— ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
173+
174+
175+
### REST DOCS ๊ธฐ๋ฐ˜ API ๋ช…์„ธ์„œ
39176

40177
- [์‚ฌ์šฉ์ž API ๋ช…์„ธ์„œ](https://odoichon.github.io/server/src/main/resources/static/docs/user.html)
41178
- [๊ฒŒ์‹œ๊ธ€ API ๋ช…์„ธ์„œ](https://odoichon.github.io/server/src/main/resources/static/docs/board.html)
@@ -45,26 +182,27 @@
45182
- [ErrorCode ๋ช…์„ธ์„œ](https://odoichon.github.io/server/src/main/resources/static/docs/error.html)
46183
<br/>
47184

48-
### ํšŒ๊ณ  ๋ฐ ๋ฌธ์„œํ™”
185+
### ๊ธฐํƒ€ ํšŒ๊ณ  ๋ฐ ๋ฌธ์„œํ™”
49186
- [์€๋น„ - ์ธํ”„๋ผ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๊ตฌ์„ฑ ๊ณผ์ •](https://github.com/ODOICHON/server/wiki/%5B%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%84%A4%EA%B3%84%5D-%EC%9D%B8%ED%94%84%EB%9D%BC-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EA%B5%AC%EC%84%B1)
50187
- [ํƒœ๋ฏผ - ์ธํ”„๋ผ ๊ตฌ์ถ• ๋ฐ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค](https://github.com/ODOICHON/server/wiki/%5B%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%84%A4%EA%B3%84%5D-%EC%9D%B8%ED%94%84%EB%9D%BC-%EA%B5%AC%EC%B6%95-%EB%B0%8F-%EB%AC%B4%EC%A4%91%EB%8B%A8-%EB%B0%B0%ED%8F%AC-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4)
51188
- [์€๋น„ - ERD ์„ค๊ณ„](https://github.com/ODOICHON/server/wiki/%5B%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%84%A4%EA%B3%84%5D-ERD-%EC%84%A4%EA%B3%84)
52-
- [๋ฏผํ˜ - Spring Security ์—†์ด ์ธ์ฆ์ธ๊ฐ€ ๊ตฌํ˜„ํ•˜๊ธฐ](https://github.com/ODOICHON/server/wiki/%5BAPI-%EA%B5%AC%ED%98%84%5D-Spring-Security-%EC%97%86%EC%9D%B4-%EC%9D%B8%EC%A6%9D%EC%9D%B8%EA%B0%80-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0)
53189
- [์€๋น„ - Jasypt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•œ YML ํŒŒ์ผ ์•”ํ˜ธํ™”ํ•˜๊ธฐ](https://github.com/ODOICHON/server/wiki/%5Bproject%5D-Jasypt-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-YML-%ED%8C%8C%EC%9D%BC-%EC%95%94%ED%98%B8%ED%99%94%ED%95%98%EA%B8%B0)
54190
- [์€๋น„ - ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ด์œ ](https://github.com/ODOICHON/server/wiki/%5B%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BD%94%EB%93%9C%5D-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BD%94%EB%93%9C%EB%A5%BC-%EC%9E%91%EC%84%B1%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0)
55191
- [์€๋น„ - RestDocs ์ ์šฉ ๊ณผ์ •](https://github.com/ODOICHON/server/wiki/%5B%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BD%94%EB%93%9C%5D-RestDocs-%EC%82%AC%EC%9A%A9%EC%97%90-%EB%94%B0%EB%A5%B8-Controller-%EB%8B%A8%EC%9C%84-%ED%85%8C%EC%8A%A4%ED%8A%B8-(-e2e-Test-))
56-
- [์€๋น„ - Soft Delete ๋ฐฉ์‹ ์ ์šฉ](https://github.com/ODOICHON/server/wiki/%5BAPI-%EA%B5%AC%ED%98%84%5D-Soft-Delete-%EB%B0%A9%EC%8B%9D-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0)
192+
57193
- [์€๋น„ - findByIdOrThrow ํ•จ์ˆ˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๊ธฐ](https://github.com/ODOICHON/server/wiki/%5BAPI-%EA%B5%AC%ED%98%84%5D--Select-%EC%BF%BC%EB%A6%AC-%EB%B0%9C%EC%83%9D-%EC%8B%9C,-Exception-%EC%B2%98%EB%A6%AC-%ED%95%9C-%EB%B2%88%EC%97%90-%ED%95%98%EA%B8%B0)
58194
- [์€๋น„ - Jacoco + SonarlCloud ์ ์šฉ๊ณผ์ •](https://github.com/ODOICHON/server/wiki/%5B%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%84%B8%ED%8C%85%5D-Jacoco-&-SonarCloud-%EC%A0%81%EC%9A%A9)
59195
- [์€๋น„ - SonarCloud ์„ธํŒ… ์ค‘ ๋งˆ์ฃผํ•œ ์ด์Šˆ ์ •๋ฆฌ](https://github.com/ODOICHON/server/wiki/%5B%EC%9D%B4%EC%8A%88%5D-SonarCloud-%EC%84%A4%EC%A0%95-%ED%8A%B8%EB%9F%AC%EB%B8%94-%EC%8A%88%ED%8C%85)
60196
- [์€๋น„ - Github Actions์™€ SonarCloud ์‚ฌ์šฉ ์ค‘ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ์ •๋ฆฌ](https://github.com/ODOICHON/server/wiki/%5B%ED%8A%B8%EB%9F%AC%EB%B8%94%EC%8A%88%ED%8C%85%5D-Github-Actions---SonarCloud)
61-
- [๋ฏผํ˜ - ์œ ์ € ํƒˆํ‡ด ์ฒ˜๋ฆฌ](https://github.com/ODOICHON/server/wiki/%5BAPI-%EA%B5%AC%ED%98%84%5D-%EC%9C%A0%EC%A0%80-%ED%83%88%ED%87%B4-%EC%B2%98%EB%A6%AC)
62-
- [๋ฏผํ˜ - ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์ €์žฅ๋ฐฉ์‹ ๋ณ€๊ฒฝ](https://github.com/ODOICHON/server/wiki/%5B%EC%9D%B4%EC%8A%88%5D-%EB%A6%AC%ED%94%84%EB%A0%88%EC%8B%9C-%ED%86%A0%ED%81%B0-%EC%A0%80%EC%9E%A5%EB%B0%A9%EC%8B%9D-%EB%B3%80%EA%B2%BD)
63-
- [๋ฏผํ˜ - ์œ ์ € ํ…Œ์ด๋ธ” ์•”ํ˜ธํ™”](https://github.com/ODOICHON/server/wiki/%5B%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%84%A4%EA%B3%84%5D-%EC%9C%A0%EC%A0%80-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%95%94%ED%98%B8%ED%99%94)
197+
64198
- [๋ฏผํ˜ - DDOS ๋Œ€์‘ ๋ฐฉ์•ˆ](https://github.com/ODOICHON/server/wiki/%5B%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%84%A4%EA%B3%84%5D-DDOS-%EB%8C%80%EC%9D%91-%EB%B0%A9%EC%95%88)
65199

66200
### ๋ฒ„์ „ ๊ด€๋ฆฌ
67-
๐Ÿท VERSION 1 - ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… API ์—ฐ๋™ ๋ฐ ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋ทฐ ์ž‘์—…
201+
๐Ÿท VERSION 0.0.1 - ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… API ์—ฐ๋™ (2023.03.39)
202+
203+
๐Ÿท VERSION 0.0.2 - ๋ฉ”์ธ ํŽ˜์ด์ง€ ํ™”๋ฉด ์ž‘์—… ๋ฐ ์†Œ๊ฐœ ๊ฒŒ์‹œํŒ API ์—ฐ๋™ (2023.04.25)
204+
205+
๐Ÿท VERSION 0.0.3 - ๋ฐฑ์˜คํ”ผ์Šค ๋ฉ”์ธ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ (2023.04.xx)
68206

69207
### ํŒ€ ๊ตฌ์„ฑ
70208
| Name | <center>์ด์€๋น„</center>|<center>์œคํƒœ๋ฏผ</center> |<center>๋ฌธ๋ฏผํ˜</center> |

โ€Žimg/erd-img.pngโ€Ž

202 KB
Loading

โ€Žimg/img.pngโ€Ž

39.5 KB
Loading

โ€Žimg/img_1.pngโ€Ž

39.7 KB
Loading

โ€Žimg/img_2.pngโ€Ž

66.5 KB
Loading

0 commit comments

Comments
ย (0)