์คํฐ๋ ๋ชจ์ง๊ณผ ์ทจ์
์ค๋น์์ ์ํ ์ปค๋ฎค๋ํฐ ํ๋ซํผ์
๋๋ค.
Spring Boot ๊ธฐ๋ฐ MVC ํจํด์ผ๋ก ์ ์๋์์ผ๋ฉฐ, ํ์ ๊ด๋ฆฌ, ์คํฐ๋ ๊ธฐ๋ฅ, ๊ฒ์ํ, ๊ด๋ฆฌ์ ๊ธฐ๋ฅ๊น์ง ํฌํจํฉ๋๋ค.
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ํ๋ก์ ํธ๋ช | StudyHub |
| ๋ชฉ์ | ์คํฐ๋ ๋ชจ์ง ๋ฐ ์ทจ์ค์ ์ปค๋ฎค๋ํฐ ์๋น์ค |
| ๋์ | ๋ฐฑ์๋ ๊ฐ๋ฐ ์ทจ์ ์ฉ ํฌํธํด๋ฆฌ์ค |
| ๊ธฐ์ ์คํ | Java 17, Spring Boot 3.5, Spring Security 6.2, JPA/Hibernate, MySQL/H2, Thymeleaf, Gradle |
| ํด๋ผ์ฐ๋ ์๋น์ค | Cloudinary (์ด๋ฏธ์ง ์ ๋ก๋) |
| ๋ฐฐํฌ ํ๊ฒฝ | AWS EC2 |
- ํ์๊ฐ์
/๋ก๊ทธ์ธ/๋ก๊ทธ์์
- ์ฌ์ฉ์๋ช ๊ธฐ๋ฐ ๋ก๊ทธ์ธ ์์คํ
- BCrypt ๋น๋ฐ๋ฒํธ ์ํธํ
- Spring Security ๊ธฐ๋ฐ ์ธ์ฆ/์ธ๊ฐ
- ํ๋ ฅ ์ ๋ณด ๊ด๋ฆฌ
- ํ๋ ฅ ์ํ: ๊ณ ๋ฑํ๊ต ์กธ์ , ์ฌํ์ค, ์กธ์ , ์คํด, ํดํ
- ๋ํ๊ต๋ช , ์ ๊ณต ์ ๋ณด ๋ฑ๋ก
- ์ด๋ฉ์ผ์ ์ ํ์ฌํญ (์ฐ๋ฝ์ฒ์ฉ)
- ์ฌ์ฉ์ ์ฐจ๋จ ๊ธฐ๋ฅ
- ๊ด๋ฆฌ์๊ฐ ์ฌ์ฉ์ ์ฐจ๋จ/์ฐจ๋จํด์ ๊ฐ๋ฅ
- ์ฐจ๋จ๋ ์ฌ์ฉ์๋ ์๋น์ค ์ด์ฉ ์ ํ
- ์คํฐ๋ ๊ฐ์ค/์์ /์ญ์
- ์คํฐ๋ ์ ๋ชฉ, ์ค๋ช , ๋ชจ์ง ์ธ์ ์ ํ
- ๋ชจ์ง ์กฐ๊ฑด (์ ๊ณต, ํ๊ต, ๊ธฐํ ์กฐ๊ฑด)
- ๋ชจ์ง ๋ง๊ฐ์ผ ์ค์
- ์คํฐ๋์ฅ๋ง ์์ /์ญ์ ๊ฐ๋ฅ
- ์คํฐ๋ ์ ์ฒญ/์น์ธ ์์คํ
- ์ฌ์ฉ์๋ณ ์คํฐ๋ ์ ์ฒญ (์ค๋ณต ์ ์ฒญ ๋ฐฉ์ง)
- ์ ์ฒญ ์ํ: ๋๊ธฐ์ค, ์น์ธ๋จ, ๊ฑฐ์ ๋จ
- ์คํฐ๋์ฅ์ด ์ ์ฒญ์ ์น์ธ/๊ฑฐ์ ์ฒ๋ฆฌ
- ์น์ธ๋ ๋ฉค๋ฒ๋ง ๋๊ธ ์์ฑ ๊ฐ๋ฅ
- ์คํฐ๋ ๊ฒ์ ๋ฐ ๋ชฉ๋ก
- ์ ๋ชฉ ํค์๋ ๊ฒ์
- ํ์ด์ง ์ฒ๋ฆฌ
- ์ต์ ์ ์ ๋ ฌ
- ํ์ฑ ์คํฐ๋ (๋ง๊ฐ์ผ ๋ฏธ๋๊ณผ) ํํฐ๋ง
- ๊ฒ์๊ธ ๊ด๋ฆฌ
- ๊ฒ์๊ธ ์์ฑ, ์์ , ์ญ์
- ์กฐํ์ ์๋ ์ฆ๊ฐ
- ๊ณต์ง๊ธ ๊ธฐ๋ฅ
- ๋๊ธ ์์คํ
- ๋๊ธ ์์ฑ, ์ญ์
- ๋๊ธ ์์ฑ์/๊ด๋ฆฌ์๋ง ์ญ์ ๊ฐ๋ฅ
- ์ถ์ฒ/๋น์ถ์ฒ ์์คํ
- ์ฌ์ฉ์๋ณ ์ถ์ฒ/๋น์ถ์ฒ (์ค๋ณต ๋ฐฉ์ง)
- ์ถ์ฒ/๋น์ถ์ฒ ์ทจ์ ๋ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ์ค์๊ฐ ์ถ์ฒ/๋น์ถ์ฒ ์ ์ ๋ฐ์ดํธ
- ์ ๊ณ ์์คํ
- ๊ฒ์๊ธ, ๋๊ธ, ์ฌ์ฉ์ ์ ๊ณ
- ์ ๊ณ ์ฌ์ : ์คํธ, ๋ถ์ ์ ํ ๋ด์ฉ, ๊ดด๋กญํ, ์ ์๊ถ ์นจํด, ๊ธฐํ
- ์ ๊ณ ์ํ: ๋๊ธฐ์ค, ์น์ธ, ๊ฑฐ๋ถ, ์ฒ๋ฆฌ์๋ฃ
- Cloudinary ์ฐ๋
- ์ด๋ฏธ์ง ํ์ผ ์ ๋ก๋
- ์ธ๋ค์ผ, ์ด๋ ฅ์ ๋ฑ ํ์ผ ๊ด๋ฆฌ
- ํ๊ฒฝ๋ณ์ ๊ธฐ๋ฐ ์ค์
- ๋์๋ณด๋
- ์ ์ฒด ํต๊ณ: ์ฌ์ฉ์ ์, ๊ฒ์๊ธ ์, ๋๊ธ ์, ์คํฐ๋ ์, ์ ๊ณ ์
- ์ฐจ๋จ๋ ์ฌ์ฉ์ ์
- ์ต๊ทผ ์ ๊ณ ๋ด์ญ
- ์ฌ์ฉ์ ๊ด๋ฆฌ
- ์ ์ฒด ์ฌ์ฉ์ ๋ชฉ๋ก ์กฐํ
- ์ฌ์ฉ์ ์ฐจ๋จ/์ฐจ๋จํด์
- ๊ด๋ฆฌ์ ๊ณ์ ๋ณดํธ (์ฐจ๋จ ๋ถ๊ฐ)
- ์ฝํ
์ธ ๊ด๋ฆฌ
- ๊ฒ์๊ธ ์ญ์
- ๋๊ธ ์ญ์
- ์ ๊ณ ์ฒ๋ฆฌ
- Spring Boot 3.5: ๋ฉ์ธ ํ๋ ์์ํฌ
- Spring Security 6.2: ์ธ์ฆ/์ธ๊ฐ, ํผ ๋ก๊ทธ์ธ
- Spring Data JPA: ORM ๋ฐ ๋ฐ์ดํฐ ์ ๊ทผ
- Hibernate: JPA ๊ตฌํ์ฒด
- BCrypt: ๋น๋ฐ๋ฒํธ ์ํธํ
- Thymeleaf: ์๋ฒ์ฌ์ด๋ ํ ํ๋ฆฟ ์์ง
- ๊ฐ๋ฐ/ํ ์คํธ: H2 (์ธ๋ฉ๋ชจ๋ฆฌ)
- ์ด์: MySQL 8.0
- JPA ์ค์ :
- ๊ฐ๋ฐ:
create-drop(ํ ์ด๋ธ ์ฌ์์ฑ) - ์ด์:
update(์คํค๋ง ์๋ ์ ๋ฐ์ดํธ)
- ๊ฐ๋ฐ:
- Spring Security: URL๋ณ ์ ๊ทผ ๊ถํ ์ค์
- CSRF: ๊ฐ๋ฐํ๊ฒฝ์์ ๋นํ์ฑํ (์ด์ํ๊ฒฝ์์ ํ์ฑํ ํ์)
- ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ:
- H2 ์ฝ์: ๊ฐ๋ฐํ๊ฒฝ์์ ์ ๊ทผ ํ์ฉ
- Cloudinary: ์ด๋ฏธ์ง ์ ๋ก๋ ๋ฐ ๊ด๋ฆฌ
- ํ๊ฒฝ๋ณ์: API ํค, ํด๋ผ์ฐ๋๋ช , ์ํฌ๋ฆฟ ๊ด๋ฆฌ
- ์ฌ์ฉ์ ์ธ์ฆ ์์คํ (ํ์๊ฐ์ /๋ก๊ทธ์ธ/๋ก๊ทธ์์)
- ์คํฐ๋ CRUD ๋ฐ ์ ์ฒญ/์น์ธ ์์คํ
- ์ปค๋ฎค๋ํฐ ๊ฒ์ํ (๊ฒ์๊ธ/๋๊ธ/์ถ์ฒ)
- ์ ๊ณ ์์คํ
- ๊ด๋ฆฌ์ ๋์๋ณด๋ ๋ฐ ์ฌ์ฉ์ ๊ด๋ฆฌ
- ์ด๋ฏธ์ง ์ ๋ก๋ (Cloudinary)
- Spring Security ์ค์
- ํตํฉ ํ ์คํธ ๋ฐ ๋จ์ ํ ์คํธ
- ์คํฐ๋ ๊ฒ์ ๊ธฐ๋ฅ
- AWS EC2 ๋ฐฐํฌ
- API ๋ฌธ์ํ (Swagger/OpenAPI)
- ์ฝ๋ ํ์ง ๊ฐ์
- JWT ์ธ์ฆ ๋ฐฉ์ ์ถ๊ฐ
- ํ์ด์ง ์ฒ๋ฆฌ
- CI/CD ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
- REST API ํ์ฅ
StudyHub๋ SpringDoc OpenAPI๋ฅผ ์ฌ์ฉํ์ฌ REST API๋ฅผ ๋ฌธ์ํํ์ต๋๋ค.
- SpringDoc OpenAPI 2.8.9: API ๋ฌธ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ: http://localhost:8080/swagger-ui/index.html
- ๋ฐฐํฌ ํ๊ฒฝ: http://studyhub-env.eba-mhqi3ikj.ap-northeast-2.elasticbeanstalk.com/swagger-ui/index.html
GET /admin/dashboard/recent-reports- ์ต๊ทผ ์ ๊ณ ๋ด์ญ ์กฐํGET /admin/dashboard/stats- ๋์๋ณด๋ ํต๊ณ ์กฐํ
GET /admin/reports/api- ์ ๊ณ ๋ชฉ๋ก ์กฐํGET /admin/reports/api/{reportId}- ํน์ ์ ๊ณ ์์ธ ์กฐํPOST /admin/reports/api/{reportId}/resolve- ์ ๊ณ ์ฒ๋ฆฌGET /admin/reports/api/stats- ์ ๊ณ ํต๊ณ ์กฐํ
GET /admin/users/api- ์ฌ์ฉ์ ๋ชฉ๋ก ์กฐํGET /admin/users/api/{id}- ํน์ ์ฌ์ฉ์ ์์ธ ์กฐํPOST /admin/users/api/{id}/unblock- ์ฌ์ฉ์ ์ฐจ๋จ ํด์ POST /admin/users/api/{userId}/block- ์ฌ์ฉ์ ์ฐจ๋จGET /admin/users/api/list- ์ฌ์ฉ์ ๋ชฉ๋ก (ํ์ด์ง)
POST /community/comment/{commentId}/delete- ๋๊ธ ์ญ์
PUT /studies/{studyId}/comments/{commentId}- ์คํฐ๋ ๋๊ธ ์์ DELETE /studies/{studyId}/comments/{commentId}- ์คํฐ๋ ๋๊ธ ์ญ์
POST /api/images/upload- ์ด๋ฏธ์ง ํ์ผ ์ ๋ก๋
- DLST316 (GitHub)
์ด ํ๋ก์ ํธ๋ ๊ฐ์ธ ํฌํธํด๋ฆฌ์ค ๋ชฉ์ ์ผ๋ก ์ ์๋์์ต๋๋ค.