Skip to content

sanghee2359/WorkoutMate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

693 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

header

์˜ค๋Š˜๋ถ€ํ„ฐ ์šด๋™๋ฉ”๐Ÿ’ช

  • ์šด๋™์€ ์„ ํƒ์ด ์•„๋‹Œ ํ•„์ˆ˜! ํ˜ผ์ž๊ฐ€ ์•„๋‹Œ ๋‹ค๊ฐ™์ด ํ•˜์ž~!
  • ์‚ฌ์šฉ์ž์—๊ฒŒ ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•œ ์šด๋™๋ฉ”์ดํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์„œ๋น„์Šค ์ œ๊ณต!
  • ์ƒˆ๋กœ์šด ์ง€์—ญ์—์„œ๋„ ์šด๋™์œผ๋กœ ์ด์›ƒ๋“ค๊ณผ ์นœํ•ด์ง€๊ณ  ์ƒํ™œ์ฒด์œก ํ™œ์„ฑํ™” ๊ธฐ๋Œ€!
  • ๋ฉ‹์Ÿ์ด์‚ฌ์ž์ฒ˜๋Ÿผ๐Ÿฆ ๋ฐฑ์—”๋“œ์Šค์ฟจ 2๊ธฐ ํŒ€ํ”„๋กœ์ ํŠธ
"๋™๋„ค ์šด๋™ ๋ฉ”์ดํŠธ๋ฅผ ์ฐพ์•„ ํ•จ๊ป˜ ์Šคํฌ์ธ ๋ฅผ ์ฆ๊ธฐ๋Š” ์„œ๋น„์Šค"

๐Ÿ“ข ํŒ€์› ์†Œ๊ฐœ


๐Ÿคพโ€ ํ”„๋กœ์ ํŠธ ์‹œ์—ฐ ์˜์ƒ


๐Ÿ‹๏ธโ€โ™€๏ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • ์—๋””ํ„ฐ : Intellij Ultimate
  • ๊ฐœ๋ฐœ ํˆด : SpringBoot 2.7.7
  • ์ž๋ฐ” : JAVA 11
  • ๋นŒ๋“œ : Gradle
  • ์„œ๋ฒ„ : AWS EC2, AWS RDS, AWS S3
  • CI/CD : Docker, Gitlab
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค : MySql, Redis
  • ํ•„์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : Spring Data JPA, Lombok, Spring Security, thymeleaf, JWT, WebSocket, OAuth2.0, Email
  • ETC : Git, IntelliJ, JS, KakaoMap API

๐Ÿšดโ€โ™€๏ธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ณ

image

๐Ÿคธโ€โ™€ ERD

img_1.png


๐Ÿ„โ€โ™‚ ๊ตฌํ˜„ ๊ธฐ๋Šฅ

USER

  • ๋กœ๊ทธ์ธ
    • ID/PW ์ด์šฉํ•œ ๊ธฐ๋ณธ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ
    • OAuth ๋กœ๊ทธ์ธ (๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ)
    • JWT๋ฅผ ์ฟ ํ‚ค์— ๋‹ด์•„ ์ธ์ฆ, ์ธ๊ฐ€์ฒ˜๋ฆฌ ์ง„ํ–‰
  • ํšŒ์›๊ฐ€์ž…
    • ์ด๋ฉ”์ผ ์ธ์ฆ์„ ํ†ตํ•œ ๊ธฐ๋ณธ ํšŒ์› ๊ฐ€์ž… (ID, PW, Email, ์ด๋ฆ„, ์ฃผ์†Œ ๋“ฑ)
    • OAuth ํšŒ์›๊ฐ€์ž… (๊ตฌ๊ธ€ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ)
  • ID/PW ์ฐพ๊ธฐ
    • ๊ฐ€์ž…ํ•œ ์ด๋ฉ”์ผ์„ ํ†ตํ•ด์„œ ์ธ์ฆ๋ฒˆํ˜ธ๊ฐ€ ๋ฐœ์†ก๋˜๋ฉฐ, ์ธ์ฆ๋จ์— ๋”ฐ๋ผ PW ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

CREW

  • ํฌ๋ฃจ CRUD ๊ธฐ๋Šฅ
    • ์ง€์—ญ๋ณ„, ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์›ํ•˜๋Š” ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ
    • ๊ฒ€์ƒ‰์–ด๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ
    • ํšŒ์›์— ํ•œํ•ด์„œ ์ž‘์„ฑ ๊ฐ€๋Šฅ
    • ์ž‘์„ฑ์ž๋งŒ ์ˆ˜์ •, ์‚ญ์ œ ๊ฐ€๋Šฅ
  • ํฌ๋ฃจ ๋Œ“๊ธ€/๋Œ€๋Œ“๊ธ€
    • ๋Œ“๊ธ€, ๋Œ€๋Œ“๊ธ€ CRUD ๊ธฐ๋Šฅ
    • ํšŒ์› ํ•œํ•ด์„œ ์ž‘์„ฑ ๊ฐ€๋Šฅ
    • ์ž‘์„ฑ์ž ํ•œํ•ด์„œ ์ˆ˜์ •, ์‚ญ์ œ ๊ฐ€๋Šฅ
  • ํฌ๋ฃจ ์ข‹์•„์š”
    • ๊ฒŒ์‹œ๊ธ€ ์ข‹์•„์š”, ์ทจ์†Œ ๊ธฐ๋Šฅ
  • ์ƒ์„ธ ํŽ˜์ด์ง€ ์ƒ์„ฑ
    • ์ œ๋ชฉ, ๋‚ด์šฉ, ์œ„์น˜(์นด์นด์˜ค๋งต API), ๋‚ ์งœ(Date/TimePicker), ์นดํ…Œ๊ณ ๋ฆฌ, ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ(S3) ํ™œ์šฉ
  • ์ƒ์„ธ ํŽ˜์ด์ง€ ์กฐํšŒ
    • ํฌ๋ฃจ ์ •๋ณด์— ๋Œ€ํ•œ ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ
    • ์ด์ „๊ธ€, ๋‹ค์Œ๊ธ€ ์กฐํšŒ ๊ธฐ๋Šฅ
  • ํฌ๋ฃจ ์ฐธ์—ฌ ์Šน์ธ/๊ฑฐ์ ˆ/๋ฐ˜๋ ค
    • ํšŒ์›์€ ํ•˜๋‚˜์˜ ์ฐธ์—ฌํ•˜๊ณ  ์‹ถ์€ ํฌ๋ฃจ์— ์ฐธ์—ฌ ์‹ ์ฒญ์„ํ•˜์—ฌ ์Šน์ธ์„ ๋ฐ›์•„ ์†Œ์†
    • ๊ฑฐ์ ˆ, ๋ฐ˜๋ ค ์‹œ ์†Œ์† ๋  ์ˆ˜ ์—†์Œ
  • ์ฐธ์—ฌ์ž ๋ช…๋‹จ ์กฐํšŒ
    • ํ•˜๋‚˜์˜ ํฌ๋ฃจ์— ์ฐธ์—ฌํ•œ ํšŒ์›๋“ค์˜ ์ฐธ์—ฌ ์—ฌ๋ถ€๋ฅผ ํ†ตํ•ด ๋ช…๋‹จ์„ ์กฐํšŒ

REVIEW

  • ํฌ๋ฃจ ์ข…๋ฃŒ ์‹œ ํ›„๊ธฐ ํ‰๊ฐ€ ๋ฐ ๋ฉ”์„ธ์ง€ ์ž‘์„ฑ
    • ์ฐธ์—ฌํ•œ ํšŒ์›๋“ค์— ํ•œํ•ด์„œ ์ƒํ˜ธ ํ‰๊ฐ€ ๊ธฐ๋Šฅ (1~5์  ๋ถ€์—ฌ)
  • ์˜จ๋„์ง€์ˆ˜ ์ฒดํฌ
    • ํ‰๊ฐ€ํ•œ ์ ์ˆ˜๋ฅผ ํ† ๋Œ€๋กœ ํŽธ์ฐจ๋ฅผ 36.5 ๊ธฐ์ค€์œผ๋กœ ์ ์ˆ˜ ๋ฐ˜์˜
  • ํ›„๊ธฐ ์กฐํšŒ
    • ํฌ๋ฃจ ์ข…๋ฃŒ ํ›„ ์ž‘์„ฑ๋œ ํ›„๊ธฐ๋“ค์„ ๋ชจ์•„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ

ALARM

  • ์•Œ๋ฆผ ๊ธฐ๋Šฅ
    • SSE๋ฅผ ํ†ตํ•œ ์•Œ๋ฆผ ๊ธฐ๋Šฅ ๊ตฌํ˜„
    • ๋Œ“๊ธ€, ๋Œ€๋Œ“๊ธ€, ์ข‹์•„์š”, ํŒ”๋กœ์šฐ, ์ฐธ์—ฌ ์‹ ์ฒญ ๋ฐ ์Šน์ธ, ์ด์šฉ์ž ํ›„๊ธฐ, ์‹ค์‹œ๊ฐ„ ๋งค์นญ์— ๋Œ€ํ•œ ์•Œ๋ฆผ์ด ๋ฐœ์ƒ

MATCHING

  • ์‹ค์‹œ๊ฐ„ ๋งค์นญ๊ธฐ๋Šฅ
    • ์šด๋™ ์ข…๋ชฉ๋ณ„ ์‹ค์‹œ๊ฐ„ ๋งค์นญ ๊ธฐ๋Šฅ
    • ๋งค์นญ ์„ฑ๊ณต ์ดํ›„ ์•Œ๋ฆผ์ฒ˜๋ฆฌํ•˜์—ฌ ์ฑ„ํŒ…๋ฐฉ ์ด๋™ ๊ธฐ๋Šฅ

CHAT

  • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…
    • ํ•˜๋‚˜์˜ ํฌ๋ฃจ๋งˆ๋‹ค ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ ์ œ๊ณต
    • ์ฐธ์—ฌํ•œ ํšŒ์›์— ํ•œํ•ด์„œ ์ฑ„ํŒ…๋ฐฉ ์ž…์žฅ ๊ฐ€๋Šฅ
  • ์ ‘์†์ž ํ™•์ธ
    • ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฐธ์—ฌ์ค‘์ธ ํšŒ์›์ •๋ณด๋“ค์— ๋Œ€ํ•ด์„œ ๋ฆฌ์ŠคํŠธ์— ๋ฐ˜์˜
  • ์ฑ„ํŒ… ๋‚ด์—ญ ์กฐํšŒ
    • ํ•ด๋‹น ์ฑ„ํŒ…๋ฐฉ์—์„œ ์ฃผ๊ณ ๋ฐ›์€ ๋‚ด์šฉ๋“ค์— ๋Œ€ํ•ด์„œ ์กฐํšŒ
  • ์ฝ์Œ ์ฒ˜๋ฆฌ
    • ํ‡ด์žฅํ•œ DateTime ๊ธฐ์ค€ ๋‹จ์ฒด ์ฑ„ํŒ…๋ฐฉ ๋‚ด ๊ฐ๊ฐ์˜ ์‚ฌ์šฉ์ž์— ๋”ฐ๋ฅธ ์ฝ์€ ๋‚ด์—ญ ์ œ๊ณต
  • ์ฑ„ํŒ…๊ณผ ๋™์‹œ ํฌ๋ฃจ ์ƒ์„ธ๋‚ด์—ญ ์ œ๊ณต (์นด์นด์˜ค๋งต API ์ ์šฉ)

FOLLOW

  • ํŒ”๋กœ์šฐ
    • ๋‹ค๋ฅธ ํšŒ์›์„ ํŒ”๋กœ์šฐ, ํŒ”๋กœ์šฐ ์ทจ์†Œ
  • ํŒ”๋กœ์šฐ ๋ชฉ๋ก ์กฐํšŒ
    • ๋‚˜๋ฅผ ํŒ”๋กœ์šฐ ํ•œ ์œ ์ €(ํŒ”๋กœ์ž‰), ๋‚ด๊ฐ€ ํŒ”๋กœ์šฐํ•œ ์œ ์ €(ํŒ”๋กœ์›Œ) ์กฐํšŒ ๊ธฐ๋Šฅ

MYPROFILE

  • ๋งˆ์ดํ”„๋กœํ•„ ์กฐํšŒ
  • ๋งˆ์ดํ”„๋กœํ•„ ์ˆ˜์ •
    • ์ด๋ฆ„, ๋‹‰๋„ค์ž„, ๊ด€์‹ฌ์ข…๋ชฉ, ์ฃผ์†Œ, ๊ฐœ์ธ์ •๋ณด(์ด๋ฉ”์ผ, ์ „ํ™”๋ฒˆํ˜ธ, ์„ฑ๋ณ„) ์ˆ˜์ • ๊ธฐ๋Šฅ ์ œ๊ณต
  • ๊ฐœ์ธ์‚ฌ์ง„ ๋“ฑ๋ก
    • ๊ฐœ์ธ USER ๋งˆ๋‹ค ํ”„๋กœํ•„ ์‚ฌ์ง„ ๋“ฑ๋ก/์ˆ˜์ • ๊ธฐ๋Šฅ
  • ์ •๋ณด์ œ๊ณต
    • ํ˜„์žฌ ์ฐธ์—ฌ์ค‘์ธ ํฌ๋ฃจ์— ๋Œ€ํ•œ ์ •๋ณด ์ œ๊ณต ๊ธฐ๋Šฅ
    • ํ˜„์žฌ ์ข…๋ฃŒ๋œ ํฌ๋ฃจ์— ๋Œ€ํ•œ ์ •๋ณด ์ œ๊ณต ๊ธฐ๋Šฅ
    • ๋ฐ›์€ ํ›„๊ธฐ์— ๋Œ€ํ•ด์„œ ์กฐํšŒ ๊ธฐ๋Šฅ

ADMIN

  • ์‚ฌ์šฉ์ž ์ „์ฒด ์กฐํšŒ
    • ์ „์ฒด ์ด์šฉ์ž ์กฐํšŒ, Redis์— ๊ธฐ๋ก๋œ ํ˜„์žฌ ์ ‘์†์ค‘์ธ ์ด์šฉ์ž ์กฐํšŒ
  • ํฌ๋ฃจ ์ „์ฒด ๊ด€๋ฆฌ
    • ํฌ๋ฃจ ์ „์ฒด ์กฐํšŒ, ์‚ญ์ œ ๊ธฐ๋Šฅ
    • ์ƒ์„ธํŽ˜์ด์ง€ ๋‚ด ์ด์šฉ์ž ๊ฐ•ํ‡ด ๊ธฐ๋Šฅ

๐Ÿ‘ฉโ€๐Ÿฆฏ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋กœ์ง

์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ

  • SockJS๋ฅผ ์ด์šฉํ•œ STOMP ๋ฐฉ์‹ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ
  • ๊ฐ๊ฐ์˜ ์ฑ„ํŒ…๋ฐฉ์„ /sub + id ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ /pub ๋ฉ”์‹œ์ง€๋กœ ๊ตฌ๋…ํ•œ endpoint ์— ์ฑ„ํŒ… ์ „๋‹ฌํ•œ๋‹ค.
  • ์ž…/ํ‡ด์žฅ ์‹œ /pub ๋ฉ”์‹œ์ง€ ๋ฅผ ๋ณด๋‚ด ํ˜„์žฌ ์ฐธ์—ฌ์ž ํ˜„ํ™ฉ์— ๋Œ€ํ•œ ์ตœ์‹ ํ™” ์™€ ์ฑ„ํŒ… ๋‚ด์—ญ๋“ค์„ ์ €์žฅํ•˜๋ฉฐ ์ฝ์—ˆ๋˜ ์‹œ๊ฐ„๋Œ€๋ฅผ ์ €์žฅ ํ•œ๋‹ค
    • ์ฐธ์—ฌ์ž ํ˜„ํ™ฉ ์ตœ์‹ ํ™”๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋‹จ์—์„œ UserID KEY ๊ฐ’์œผ๋กœ ํ•˜๊ณ  ์ฑ„ํŒ…๋ฐฉ ID ๋ฅผ Value๋กœ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ ๋ณด๋‚ธ๋‹ค.
    • ์ฑ„ํŒ… ๋‚ด์—ญ๋“ค์€ /pub ๋ฉ”์‹œ์ง€ ๋ณด๋‚ผ๋•Œ ๋งˆ๋‹ค ajaxํ†ต์‹ ์„ ํ•˜์—ฌ fetch ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•˜๋Š” API๋ฅผ ํ˜ธ์ถœํ•ด ํ•ด๋‹น ์ฑ„ํŒ…๋‚ด์—ญ์„ ์ €์žฅํ•œ๋‹ค.
  • ์ž…์žฅ ์‹œ ํ•ด๋‹น ์ฑ„ํŒ…๋ฐฉ ๋‚ด์—ญ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ์—ˆ๋˜ ์‹œ๊ฐ„๋Œ€์™€ ๋น„๊ตํ•˜์—ฌ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ฝ์€ ์œ„์น˜๊นŒ์ง€ ์Šคํฌ๋กค๋ง ํ•œ๋‹ค.
    • ์ฑ„ํŒ…๋ฐฉ ํ‡ด์žฅ์‹œ ํ˜„์žฌ์‹œ๊ฐ„์„ chat-config-entity ์— ์ €์žฅํ•˜๋ฉฐ ์ดํ›„ ์ฑ„ํŒ…๋ฐฉ ์žฌ์ž…์žฅ ์‹œ ํ˜„์žฌ ์‹œ๊ฐ„๊ณผ ๋น„๊ตํ•˜์—ฌ ์ฝ์—ˆ๋˜ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค.

์‚ฌ์šฉ์ž ์•Œ๋ฆผ ๋ฐ ๋งค์นญ ๊ธฐ๋Šฅ

  • SSE๋ฅผ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์‚ฌ์šฉ์ž ์•Œ๋ฆผ ๊ธฐ๋Šฅ
    • JavaScript ์—์„œ ํŽ˜์ด์ง€๋ฅผ ์—ด๋•Œ SSE ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐ ํ•œ๋‹ค. /sse + userId
    • SSE Controller ์—์„œ ํ•ด๋‹น UserID ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด Emitter ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, static Map ์— KEY(UserID):VALUE(emitter) ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•œ๋‹ค.
    • ํ•ด๋‹น Emitter๋ฅผ Controller ์—์„œ return ํ•ด์ฃผ๊ณ  JavaScript ์—์„œ ๋ฐ์ดํ„ฐ์†Œ์Šค๋กœ ์•„๋ž˜ ์•Œ๋ฆผ์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.
    • ๋Œ“๊ธ€, ๋Œ€๋Œ“๊ธ€, ์ข‹์•„์š”, ํŒ”๋กœ์šฐ, ์ฐธ์—ฌ ์‹ ์ฒญ ๋ฐ ์Šน์ธ, ์ด์šฉ์ž ํ›„๊ธฐ, ์‹ค์‹œ๊ฐ„ ๋งค์นญ์— ๋Œ€ํ•œ ์•Œ๋ฆผ์ด ๋ฐœ์ƒ
  • ์‹ค์‹œ๊ฐ„ ๋งค์นญ ๊ธฐ๋Šฅ *

์ƒ์„ธ ์กฐํšŒ ๋ฐ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์กฐํšŒ

  • ์ƒ์„ธ ์กฐํšŒ

    • ์ƒ์„ธ ์กฐํšŒ ์‹œ ๋จผ์ € CREW ๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ๋Š”๊ฐ€ ํ™•์ธํ•œ๋‹ค.
    • ํ•ด๋‹น USER ์™€ CREW์˜ ๊ด€๊ณ„๋ฅผ PARTICIPATION ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ Status๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
      • 0 or null : ์ฐธ์—ฌํ•˜์ง€์•Š์Œ
      • 1 : ์‹ ์ฒญ๋Œ€๊ธฐ
      • 2 : ์ฐธ์—ฌ์ค‘
      • 3 : ์ข…๋ฃŒ๋จ
      • Status ์— ๋”ฐ๋ฅธ ์ƒ์„ธ์กฐํšŒ ํŽ˜์ด์ง€์˜ ๋ฒ„ํŠผ์ด ๋ณ€๊ฒฝ๋œ๋‹ค.
    • ์ฐธ์—ฌํ•˜์ง€ ์•Š์Œ๊ณผ ์‹ ์ฒญ๋Œ€๊ธฐ ์ƒํƒœ์—์„œ๋Š” ํฌ๋ฃจ ์ž‘์„ฑ์ž์˜ ์ฐธ์—ฌ ์Šน์ธ ์ „๊นŒ์ง€ ์ด์šฉ ๋ถˆ๊ฐ€ํ•˜๋‹ค.
    • ์ฐธ์—ฌ์ค‘์ธ ์ƒํƒœ์—์„œ๋Š” ์ฑ„ํŒ…๋ฐฉ ์ด์šฉ๊ณผ ํ˜„์žฌ ์ฐธ์—ฌํ•œ UserList ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ข…๋ฃŒ๋จ ์ƒํƒœ์—์„œ๋Š” ์ฐธ์—ฌํ•œ User์— ๋Œ€ํ•œ Review ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

  • ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์šด๋™์ข…๋ชฉ๋ณ„ ์กฐํšŒ ๊ธฐ๋Šฅ

    • GET ๋ฐฉ์‹์œผ๋กœ View ์—์„œ ์ง€์—ญ๊ฒ€์ƒ‰, ์šด๋™์ข…๋ชฉ ์„ ํƒ ๋ณ€์ˆ˜๋“ค์„ Controller ์— ๋ฐ›๋Š”๋‹ค.
    • ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋กœ ๊ฒŒ์‹œ๋ฌผ์„ ์กฐํšŒ ํ•œ๋‹ค.
    • ์กฐํšŒ ์ดํ›„ ์œ ์ง€๋ฅผ ์œ„ํ•ด View ์— ๋‹ค์‹œ ๊ฒ€์ƒ‰์–ด๋ฅผ ๋„˜๊ธด๋‹ค.
      • View ์—์„œ ๊ฒ€์ƒ‰์–ด(์ง€์—ญ,์šด๋™์ข…๋ชฉ) ๋ณ€๊ฒฝ์ด ์—†์„ ๊ฒฝ์šฐ ๋„˜๊ฒจ ๋ฐ›์•˜๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ธฐ๋ฉฐ
      • ๋ณ€๊ฒฝ์ด ์žˆ์„ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Controller ์— ๋„˜๊ธด๋‹ค.
      • ์œ„๋ฅผ ๋ฐ˜๋ณต์œผ๋กœ ์กฐํšŒํ•œ๋‹ค.
    • ์ฒ˜์Œ ๋กœ๊ทธ์ธ์‹œ์—๋Š” ์œ ์ €์˜ ์ €์žฅ๋œ ์ง€์—ญ, ์„ ํ˜ธ ์šด๋™ ์ข…๋ชฉ์„ ์ฐพ์•„ View ์— ๋„˜๊ธด๋‹ค.
      • ๊ฒ€์ƒ‰์–ด ์œ ์ง€๋ฅผ ํ•˜๋ฉด์„œ ๋กœ๊ทธ์ธ ์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด false๋ฅผ ์œ ์ง€ํ•˜๋‹ค
      • ๋กœ๊ทธ์ธ ์‹œ true ๋กœ ๋ฐ”๋€Œ์–ด ์œ ์ €์ •๋ณด๋ฅผ View ์— ๋ณด์—ฌ์ค€๋‹ค.

์ด๋ฏธ์ง€ ์ €์žฅ, ์กฐํšŒ

  • S3 ๋ฅผ ํ™œ์šฉํ•œ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐ ์ €์žฅ ๊ธฐ๋Šฅ
  • ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ
    • ์ด๋ฏธ์ง€ ์ด๋ฆ„ + ๋žœ๋คํ•œ ๊ธ€์ž ๋ฅผ KEY ๋กœ ํ•˜์—ฌ S3์™€ DataBase์— ์ €์žฅํ•œ๋‹ค.
      • UUID๋กœ ์ง„ํ–‰์— ๋”ฐ๋ฅธ crpto.uuid ์ธ์‹์— ๋Œ€ํ•œ ๋ฌธ์ œ๋กœ ์ธํ•œ
      • Math.random(20)์œผ๋กœ ํ•ด์„œ 20์ง„์ˆ˜๋กœ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•ด์„œ(0~9์™€ ์•ŒํŒŒ๋ฒณ) substring ์œผ๋กœ ๋žœ๋ค๊ฐ’์„ ๋ถ€์—ฌํ•œ๋‹ค.
  • ์ด๋ฏธ์ง€ ์กฐํšŒ
    • ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์€ ์ด๋ฏธ์ง€์˜ KEY ๋ฅผ DataBase ์—์„œ ์กฐํšŒํ•œ๋‹ค.
    • JavaScript ๋กœ ์‚ฌ์šฉ์ž ํ™•์ธํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์™€ KEY ๋ฅผ ๋„ฃ๋Š”๋‹ค.
    • S3 ์—์„œ ํ•ด๋‹น ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ URL์„ ๋ฐ›์•„ id ๊ฐ’์„ ์ด์šฉํ•ด html ์— ํ‘œํ˜„ํ•œ๋‹ค.

๐Ÿฆ ETC

About

๐Ÿ’ช ๋‚ด ์ฃผ๋ณ€ ์ด์›ƒ๊ณผ ํ•จ๊ป˜ ์šด๋™์˜ ์ฆ๊ฑฐ์›€์„ ๋‚˜๋ˆ„๋Š” ๋™๋„ค ๊ธฐ๋ฐ˜ ์Šคํฌ์ธ  ๋ฉ”์ดํŠธ ํ”Œ๋žซํผ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors