Skip to content

DLST316/StudyHub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

71 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Java Spring Boot Spring Security JPA MySQL H2 Thymeleaf Gradle Cloudinary

๐Ÿง  StudyHub (์Šคํ„ฐ๋””/์ทจ์ค€์ƒ ์ปค๋ฎค๋‹ˆํ‹ฐ)

์Šคํ„ฐ๋”” ๋ชจ์ง‘๊ณผ ์ทจ์—… ์ค€๋น„์ƒ์„ ์œ„ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
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 ํ™•์žฅ

API ๋ฌธ์„œํ™” (Swagger/OpenAPI)

StudyHub๋Š” SpringDoc OpenAPI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ REST API๋ฅผ ๋ฌธ์„œํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์ˆ  ์Šคํƒ

  • SpringDoc OpenAPI 2.8.9: API ๋ฌธ์„œํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Swagger UI ์ ‘์†

API

๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ API

  • GET /admin/dashboard/recent-reports - ์ตœ๊ทผ ์‹ ๊ณ  ๋‚ด์—ญ ์กฐํšŒ
  • GET /admin/dashboard/stats - ๋Œ€์‹œ๋ณด๋“œ ํ†ต๊ณ„ ์กฐํšŒ

๊ด€๋ฆฌ์ž ์‹ ๊ณ  ์ฒ˜๋ฆฌ API

  • GET /admin/reports/api - ์‹ ๊ณ  ๋ชฉ๋ก ์กฐํšŒ
  • GET /admin/reports/api/{reportId} - ํŠน์ • ์‹ ๊ณ  ์ƒ์„ธ ์กฐํšŒ
  • POST /admin/reports/api/{reportId}/resolve - ์‹ ๊ณ  ์ฒ˜๋ฆฌ
  • GET /admin/reports/api/stats - ์‹ ๊ณ  ํ†ต๊ณ„ ์กฐํšŒ

๊ด€๋ฆฌ์ž ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ API

  • 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 - ์‚ฌ์šฉ์ž ๋ชฉ๋ก (ํŽ˜์ด์ง•)

์ปค๋ฎค๋‹ˆํ‹ฐ API

  • POST /community/comment/{commentId}/delete - ๋Œ“๊ธ€ ์‚ญ์ œ

์Šคํ„ฐ๋”” ๋Œ“๊ธ€ API

  • PUT /studies/{studyId}/comments/{commentId} - ์Šคํ„ฐ๋”” ๋Œ“๊ธ€ ์ˆ˜์ •
  • DELETE /studies/{studyId}/comments/{commentId} - ์Šคํ„ฐ๋”” ๋Œ“๊ธ€ ์‚ญ์ œ

์ด๋ฏธ์ง€ ์—…๋กœ๋“œ API

  • POST /api/images/upload - ์ด๋ฏธ์ง€ ํŒŒ์ผ ์—…๋กœ๋“œ

๐Ÿ‘ค ๊ฐœ๋ฐœ์ž


๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ฐœ์ธ ํฌํŠธํด๋ฆฌ์˜ค ๋ชฉ์ ์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published