Skip to content

youngtakyoo/HAMA

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

541 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation


๋„ค๊ฐ€ ์›ํ•˜๋Š” ๊ทธ ์ผ ๋‚ด๊ฐ€ HAMA!

TEAMMATES

์ด๋ฆ„ ๊นƒํ—ˆ๋ธŒ ํฌ์ง€์…˜
๋ฐ•๊ฐ€ํ˜„ ๋Œ€์žฅ ํ•˜๋งˆ ๋ฆฌ๋”/ํ”„๋ก ํŠธ์—”๋“œ
๊น€๋ฏผ๊ธฐ ๋„๊นจ๋น„ ํ•˜๋งˆ ๋ถ€๋ฆฌ๋”/๋ฐฑ์—”๋“œ
๋ฐ•์žฌ๊ท  ์Šค๋งˆํŠธ ํ•˜๋งˆ ๋ฐฑ์—”๋“œ
์ด๊ทœ์ง„ ์žฌ๊ฐ„๋‘ฅ์ด ํ•˜๋งˆ ๋ฐฑ์—”๋“œ
์œ ์˜ํƒ ๋ง‰๋‚ด ํ•˜๋งˆ ํ”„๋ก ํŠธ์—”๋“œ

ํ•ต์‹ฌ๊ธฐ๋Šฅ

React-Player๋ฅผ ์ด์šฉํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค
  1. react-slick์„ ์ ์šฉํ•˜์—ฌ ๋งŒ๋“  ์‡ผ์ธ ๊ธฐ๋Šฅ

  2. useRef๋ฅผ ์‘์šฉํ•œ ํƒ€์ž„์Šคํƒฌํ”„ ๊ธฐ๋Šฅ

socket์„ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์•Œ๋žŒ๊ธฐ๋Šฅ
  1. ๋‹ค์–‘ํ•œ ํ™œ๋™๋“ค์— ๋Œ€ํ•œ ์ฆ‰๊ฐ์ ์ธ ์•Œ๋žŒ
์œ ์ €์˜ ์„ฑํ–ฅ์„ ์ •ํ•˜๊ธฐ ์œ„ํ•œ ์„ค๋ฌธ์กฐ์‚ฌ ๊ธฐ๋Šฅ
  1. ์„ค๋ฌธ์กฐ์‚ฌ๋ฅผ ํ†ตํ•œ ์ด 8๊ฐ€์ง€ ์„ฑํ–ฅ์˜ ํ•˜๋งˆ์„ ํƒ ๊ฐ€๋Šฅ

  2. ๋‹ค์–‘ํ•œ ํ™œ๋™์„ ํ•˜๋ฉด ์–ป๋Š” ๊ฒฝํ—˜์น˜๋ฅผ ํ†ตํ•˜์—ฌ ์—…๊ทธ๋ ˆ์ด๋“œ ๊ฐ€๋Šฅ

๊ธฐ์ˆ  ์Šคํƒ

FrontEnd





BackEnd


๐Ÿ“š ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๐Ÿ’ก ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž 2๋ช…, ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž 3๋ช…, ๋””์ž์ด๋„ˆ 2๋ช… ์ด 7๋ช…์ด ์ฐธ์—ฌํ•˜์—ฌ ๊ธฐํš๋ถ€ํ„ฐ MVP ๊ฐœ๋ฐœ, ์„œ๋น„์Šค ๋ฐฐํฌ, ์‹ค์ œ ์‚ฌ์šฉํ•œ ๊ณ ๊ฐํ”ผ๋“œ๋ฐฑ ์ ์šฉ๊นŒ์ง€ **ํ’€ ์‚ฌ์ดํด ๊ฐœ๋ฐœ** ๊ฒฝํ—˜์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๊ฐ„ : 2022-02-24 ~ 2022-04-08 (44์ผ)

โœ” ๊ธฐํš ์˜๋„

๐Ÿ’ก ์ตœ๊ทผ MZ์„ธ๋Œ€๋“ค์„ ์ค‘์‹ฌ์œผ๋กœ ์ด๋Ÿฐ๊ฒƒ๊นŒ์ง€ ๋ณด๋‚˜? ํ•  ์ •๋„์˜ ๋Œ€๋ฆฌ๋งŒ์กฑ ์ปจํ…์ธ ๋“ค์ด ์—ฐ์˜ˆ์ธ, ์ŠคํŠธ๋ฆฌ๋จธ๋“ค์„ ์ค‘์‹ฌ์œผ๋กœ ๋จน๋ฐฉ, ๋ธŒ์ด๋กœ๊ทธ ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ์ธ๊ธฐ๋ฅผ ๋Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ๋Š” ์ปจํ…์ธ  ์ œ์ž‘์ž๊ฐ€ ์ฃผ์ œ๋ฅผ ์„ ์ •ํ•ด ์ปจํ…์ธ ๋ฅผ ์šฐ์„  ์ œ์ž‘ํ•˜๊ณ  ์œ ์ €๋“ค์€ ๋‹ค์–‘ํ•œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์—์„œ ๋Œ€๋ฆฌ๋งŒ์กฑ ํ•˜๊ณ ์‹ถ์€ ๋ฏธ๋””์–ด๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ฆ๊ธฐ๋Š” ํ˜•์‹์œผ๋กœ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์ปจํ…์ธ ๊ฐ€ ๊ณต๊ธ‰์ด ๋˜๊ณ  ์žˆ๋Š”๋ฐ,

๊ฑฐ๊ธฐ์„œ ๋” ๋‚˜์•„๊ฐ€ ๊ฐœ๊ฐœ์ธ๋“ค์ด ์š”์ฒญ๊ณผ ๋‹ต๋ณ€์„ ํ†ตํ•ด ์ƒํ˜ธ์ ์œผ๋กœ ๋Œ€๋ฆฌ๋งŒ์กฑ์„ ์‹œ์ผœ์ฃผ๋Š” ์„œ๋น„์Šค๊ฐ€ ์žˆ์œผ๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์žฌ๋ฏธ์žˆ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๋‚ด๊ฐ€HAMA ์„œ๋น„์Šค๋ฅผ ๊ธฐํšํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ ์‚ฌ์šฉ ๊ธฐ์ˆ  ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

FrontEnd

  • React
  • ์ƒํƒœ๊ด€๋ฆฌ : Redux, Reduxjs/toolkit
  • ๋ฏธ๋“ค์›จ์–ด : Reduxjs์˜ applyMiddleware๋ฅผ ์‚ฌ์šฉ
  • ๋ฐฐํฌ : AWS S3, AWS Amplify
  • ํ†ต์‹  : Axios
  • ๋ผ์šฐํ„ฐ : connected-react-router
  • ์Šคํƒ€์ผ : styled-components (theme-provider, createGlobalStyle)
  • ๋ถ„์„ : Google Analytics
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
Library Appliance
axios ์„œ๋ฒ„ ํ†ต์‹ 
redux-toolkit ์ƒํƒœ๊ด€๋ฆฌ, ๋ฏธ๋“ค์›จ์–ด
connected-react-router history ๊ฐ์ฒด ๊ด€๋ฆฌ
styled-component ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ๋ง
firebase google analytics ์‚ฌ์šฉ
moment ๋žญํ‚น ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ ํ‘œ์‹œ
material ui ๊ฒŒ์‹œํŒ ๊ธ€ ์ •๋ ฌ์— select ์‚ฌ์šฉ
react-slick ๋ฐฐ๋„ˆ ์Šฌ๋ผ์ด๋”, ์‡ผ์ธ , ์ด๋ฏธ์ง€ ์ƒ์„ธ๋ณด๊ธฐ์— ์‚ฌ์šฉ
react-player ์˜์ƒ ๊ด€๋ จ ๊ธฐ๋Šฅ๋“ค์— ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ ์‚ฌ์šฉ
stompjs ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ์— ์‚ฌ์šฉ
sockjs ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ์— ์‚ฌ์šฉ

BackEnd

๋ฐฑ์—”๋“œ

  • ํ”„๋ ˆ์ž„์›Œํฌ : Spring
  • DB : Mysql, Redis
  • DB๊ธฐ์ˆ : JPA(Spring Data Jpa, Querydsl)
  • ๋ฐฐํฌ : EC2, AWS S3, CodeDeploy, GithubAction(CI/CD),Nginx,https
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
Library Appliance
ffmpeg ๋™์˜์ƒ ์ธ์ฝ”๋”ฉ
stomp ์†Œ์ผ“ ํ†ต์‹ 
sentry ์˜ค๋ฅ˜ ํ™•์ธ

๐Ÿ”—Link

Website ๋‚ด๊ฐ€ํ•˜๋งˆ!

instagram ๋‚ด๊ฐ€ํ•˜๋งˆ ์ธ์Šคํƒ€๊ทธ๋žจ

Github Link

FrontEnd

https://github.com/GAHYUN-P/HAMA

BackEnd

GitHub - rlaalsrl715/naegahama

๊ณต์šฉ ๋…ธ์…˜ ๋‚ด๊ฐ€ํ•˜๋งˆ Notion

๊ฐœ๋ฐœ์ž ์—ฐ๋ฝ์ฒ˜

๐Ÿ’ป ๊ธฐ์ˆ ์ ์ธ ๋„์ „

FrontEnd

1. ์‡ผ์ธ  ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • react slick ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์นด๋กœ์…€์ด ๋Œ์•„๊ฐˆ๋•Œ๋งˆ๋‹ค ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๋‚ด์žฅํ•จ์ˆ˜(beforeChange, afterChange),
  • ref๋กœ ์˜์ƒ ๋ฆฌ์ŠคํŠธ ๋ฐฐ์—ด์˜ index๋ฅผ select
  • html5์˜ ์—˜๋ฆฌ๋จผํŠธ ์žฌ์ƒ ์ข…๋ฃŒ์‹œ ์‹คํ–‰๋˜๋Š” ended event listener์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” react player์˜ onEnded ํ•จ์ˆ˜

์œ„์˜ ๊ธฐ๋Šฅ๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ,

์˜์ƒ ์žฌ์ƒ์ด ๋๋‚˜๋ฉด ๋‹ค์Œ ์˜์ƒ์ด ์žˆ๋Š” ์นด๋กœ์…€๋กœ ์ž๋™์œผ๋กœ ๋„˜์–ด๊ฐ€๊ณ  ๊ทธ ๋‹ค์Œ์˜์ƒ์ด ์ž๋™ ์žฌ์ƒ๋˜๋Š” ์‡ผ์ธ  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ ์นด๋กœ์…€์˜ ๋งจ ๋งˆ์ง€๋ง‰์—์„œ ์ถ”๊ฐ€์ ์œผ๋กœ ์Šฌ๋ผ์ด๋“œ๋ฅผํ•˜๋ฉด ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„์˜ค๋Š” OnEdge ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ›์•„์˜จ ์˜์ƒ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ „๋ถ€ ๋‹ค ์žฌ์ƒ ๋˜์—ˆ์„ ๋•Œ ์˜†์œผ๋กœ ์Šฌ๋ผ์ด๋“œ ํ•˜๋ฉด ์ƒˆ๋กœ ์—…๋ฐ์ดํŠธ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

2. mobile first๋ฅผ ์œ„ํ•œ ์›น์‚ฌ์ดํŠธ ์ตœ์ ํ™”

styled-components์˜ theme provider์„ index.js์— ์ฃผ์ž…ํ•˜๊ณ  ๋ฏธ๋””์–ด์ฟผ๋ฆฌ๋ฅผ app.js์— ์ ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ๋ฉด์—์„œ ๋ณด๋‹ค ์ผ๊ด€์„ฑ์žˆ๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ ์šฐ์„ ์ธ ๋ฐ˜์‘ํ˜• ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

BackEnd

1. ApplicationEventPublisher๋ฅผย ์ด์šฉํ•œย ์ด๋ฒคํŠธย ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๊ณตํ†ต ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์—์„œ ์ผ์ • ์กฐ๊ฑด์„ ์ถฉ์กฑํ–ˆ์„๋•Œ ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๋กœ์ง์ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๋ฉด ๊ฒŒ์‹œ๊ธ€ ์ฃผ์ธ์—๊ฒŒ ์•Œ๋žŒ์„ ๋ณด๋‚ด๊ณ  ๋Œ“๊ธ€ ์ž‘์„ฑ์ž์—๊ฒŒ๋Š” ์—…์  ๋‹ฌ์„ฑ์„ ์ฃผ๋Š” ๋กœ์ง์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰ ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๋Š” ๋กœ์ง(๋Œ“๊ธ€ ์ž‘์„ฑ)๊ณผ ๋Œ“๊ธ€ ์ž‘์„ฑ์ด ์™„๋ฃŒ๋˜๊ณ  ๋‚˜์„œ์˜ ๋กœ์ง(์•Œ๋žŒ, ์—…์ ํš๋“)์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ApplicationEventPublisher๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์—๋Š” ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ์—์„œ ์œ„ ๋กœ์ง๋“ค์ด ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ์—์„œ ์ผ์–ด๋‚˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์œ„๋ฐ˜ํ•˜์—ฌ ์ฝ”๋“œ๊ฐ„์— ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์ด ์ผ์–ด๋‚˜ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ด์ง€ ๋ชปํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์œ„ ๋ฌธ์ œ๋ฅผ ApplicationEventPublisher์™€ EventListner๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ์ด๋ฒคํŠธ ๊ธฐ์ค€์œผ๋กœ 2๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ฆ‰ ๋Œ“๊ธ€์ž‘์„ฑ ํŠธ๋žœ์žญ์…˜์ด ๋๋‚˜๋ฉด ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜์„ ๋งŒ๋“ค์–ด ์•Œ๋žŒ๊ณผ ์—…์ ํš๋“ ๋กœ์ง์„ ์ˆ˜ํ–‰๊ฒŒ ๋” ๋ฐ”๊พธ์–ด ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ํ’€์–ด์ฃผ์–ด ์ข€ ๋” ๊ฐ์ฒด์ง€ํ–ฅ์ ์ด๊ณ  ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์— ์•Œ๋งž์€ ์ฝ”๋“œ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜์˜€์Šต๋‹ˆ๋‹ค.

2. QureyDsl ๋„์ž…

JPA๋ฅผ ๊ธฐ๋ณธ์œผ๋กœํ•˜์—ฌ Spring Data Jpa๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋Š”๋ฐ ์—ฌ๋Ÿฌ ๋‹จ์ ์„ ๋งž์ดํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  1. ๊ณ„์† ๋ฐ˜๋ณต๋˜๋Š” ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๋‹จ์ 
  2. @Query๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ 
  3. ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋ฅผ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ 
  4. ๋™์ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑ์ด ์–ด๋ ต๋‹ค๋Š” ์  ๋“ฑ

์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ์ œ์ ์„ ์ง๋ฉดํ•˜์—ฌ QueryDsl๋ฅผ ๋„์ž…ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿค” ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

FrontEnd

์˜์ƒ ์—…๋กœ๋“œ ์†๋„ ๊ฐœ์„  ๋ฐ ๋น„๋™๊ธฐํ™”

์˜์ƒํŒŒ์ผ์ด ํฌ๊ธฐ๊ฐ€ ํฌ๋‹ค๋ณด๋‹ˆ ์œ ์ €๊ฐ€ ์˜์ƒ์ด ์ฒจ๋ถ€๋œ ๊ฒŒ์‹œ๊ธ€์„ ์—…๋กœ๋“œํ•  ๋•Œ ๋กœ๋”ฉํ™”๋ฉด์—์„œ ๋„ˆ๋ฌด ์˜ค๋žซ๋™์•ˆ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค๋Š” ๋ถˆํŽธํ•จ์ด ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—”๋“œ์ชฝ์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋” ์ข‹์€๊ฒƒ์„ ์“ฐ๋Š” ๊ฒƒ์œผ๋กœ ์—…๋กœ๋“œ ์ž์ฒด ์†๋„๋ฅผ ์กฐ๊ธˆ ๋” ๋น ๋ฅด๊ฒŒ ํ•˜์˜€์œผ๋‚˜

ํ”„๋กœ์ ํŠธ ์˜ˆ์‚ฐ ์ƒ ์นด์นด์˜คํ†ก๊ฐ™์€ ๋Œ€ํ˜•์„œ๋น„์Šค์˜ ์†๋„๋ฅผ ๋”ฐ๋ผ๊ฐˆ๋งŒํผ ์ข‹์€ ์ธ์Šคํ„ด์Šค๋ฅผ ์“ธ ์ˆ˜ ์—†๊ธฐ์— ์—ฌ์ „ํžˆ ์—…๋กœ๋“œ์— ์‹œ๊ฐ„์ด ์ƒ๋‹นํžˆ ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ์—”๋“œ์—์„œ๋Š” ์ด๋Ÿฐ ๋ถˆํŽธํ•œ ์‚ฌ์šฉ์„ฑ ๊ฐœ์„ ์„ ์œ„ํ•ด์„œ,

๊ฒŒ์‹œ๊ธ€์„ ์—…๋กœ๋“œํ•  ๋•Œ ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ์ด ์„œ๋ฒ„์ชฝ์— ์™„์ „ํžˆ ์—…๋กœ๋“œ ๋˜์ง€ ์•Š์•˜๋”๋ผ๋„ ๋กœ๋”ฉ์ฐฝ์„ ๋„์šฐ์ง€ ์•Š๊ณ  ์š”์ฒญ๋งŒ ์™„๋ฃŒ๋˜๋ฉด ๋ฐ”๋กœ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋˜ ์„œ๋ฒ„์ชฝ ๊ฒŒ์‹œ๊ธ€ ์—…๋กœ๋“œ ๋กœ์ง์ด ์™„์ „ํžˆ ์™„๋ฃŒ๋˜๋ฉด ๊ฒŒ์‹œ๊ธ€์ด ๋“ฑ๋ก๋˜์—ˆ๋‹ค๋Š” ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ์„ ๋„์›Œ์ฃผ๊ณ  ํ•ด๋‹น ์•Œ๋ฆผ์„ ๋ˆ„๋ฅด๋ฉด ์—…๋กœ๋“œ๋œ ๊ฒŒ์‹œ๋ฌผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์‡ผ์ธ  ์˜์ƒ์˜ ๋ฒ„ํผ๋ง ์„ฑ๋Šฅ ๋ฐ ๊ฐ€์šฉ์„ฑ ๊ฐœ์„ 

์‡ผ์ธ ์— ๋กœ๋“œํ•ด์˜ค๋Š” ์˜์ƒ๋“ค์ด ๋งŽ์•„ ์†๋„ ์ €ํ•˜๊ฐ€ ์šฐ๋ ค๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ทœ๋ชจ ์‡ผํ•‘์‚ฌ์ดํŠธ์—์„œ ์ƒํ’ˆ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์šฉ ์‚ฌ์ง„์œผ๋กœ ์ด์šฉํ•œ๋‹ค๋Š” ์ด๋ฏธ์ง€ ์ธ๋„ค์ผ ๊ธฐ๋Šฅ์„ ์‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค. ์˜์ƒ ์—…๋กœ๋“œํ• ๋•Œ ์„œ๋ฒ„์ชฝ์—์„œ ์˜์ƒํŒŒ์ผ์„ ์ƒ์„ธํŽ˜์ด์ง€์šฉ, ์‡ผ์ธ ์šฉ์œผ๋กœ ๋”ฐ๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ ์ €์žฅํ•˜๊ฒŒ ํ•˜์—ฌ ์‡ผ์ธ ์—์„œ ๋ฐ›์•„์˜ฌ ์˜์ƒ์€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์šฉ์œผ๋กœ ์›๋ณธ๋ณด๋‹ค ์••์ถ•์ด ๋” ๋งŽ์ด๋˜๊ณ  ์‹œ๊ฐ„๋„ ๋” ์งง์•„์ง„ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ๋” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„์ชฝ ์ธ์ฝ”๋”ฉ์œผ๋กœ ์‡ผ์ธ  ์˜์ƒ์˜ ๋กœ๋”ฉ์€ ์ฒด๊ฐ์ƒ ๊ต‰์žฅํžˆ ๋นจ๋ž์ง€๋งŒ, ๋” ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ด๋ฉฐ ์ผ๊ด€์ ์ธ ๊ฒฝํ—˜์„ ์œ ์ €๋“ค์—๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด CloudFront์˜ CDN ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ aws amplify๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐํฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

CDN์œผ๋กœ ์บ์‹ฑ๋œ ๋ฏธ๋””์–ด ํŒŒ์ผ์„ ํ†ตํ•ด ์‚ฌ์šฉ์„ฑ, ๊ฐ€์šฉ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ๋ณด์•ˆ๊นŒ์ง€ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  • Amazon S3 + CloudFront๊ฐ€ ์•„๋‹Œ AWS amplify๋ฅผ ์„ ํƒํ•œ ์ด์œ 

    1. Amplify Console App์„ ์ƒ์„ฑํ•˜๋Š” ์ ˆ์ฐจ๊ฐ€ ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๋‹ค.
    2. ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ž๋™์œผ๋กœ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    3. ๊ทผ๋ณธ์ ์œผ๋กœ Amplify Console์€ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•  ๋•Œ, ๋‚ด๋ถ€์ ์œผ๋กœ S3์™€ CloudFront๋ฅผ ์ด์šฉํ•˜์—ฌ ํ˜ธ์ŠคํŒ…ํ•œ๋‹ค.
    4. ํ”„๋ก ํŠธ์—”๋“œ์—์„œ์˜ ์ด์Šˆ๋กœ ์ธํ•ด ์„œ๋ฒ„์— ์˜ํ–ฅ์ด ๊ฐ€์ง€ ์•Š๋Š” ๊ตฌ์กฐ์ด๋‹ค.
    5. ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ์–ด์„œ ๊ฐ ๋ธŒ๋žœ์น˜์—์„œ ๋นŒ๋“œํ–ˆ์„๋•Œ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๊ธฐ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.
    6. ๋„๋ฉ”์ธ์—ฐ๊ฒฐ์ด ์‰ฝ๋‹ค.

    ์œ„์™€ ๊ฐ™์€ ์ด์œ ๋กœ ๊ฒฐ๋ก ์ ์œผ๋กœ ์ด์šฉํ•˜๊ธฐ ๋” ์‰ฝ๊ณ  ํ˜‘์—…์— ๋” ์šฉ์ดํ•˜๋ฉฐ ๊ฒฐ๊ตญ์— ๋ฐฐํฌ์—๋Š” S3์™€ CloudFront๋ฅผ ์ด์šฉํ•˜์—ฌ ํ˜ธ์ŠคํŒ…ํ•˜๊ธฐ๋•Œ๋ฌธ์— CDN ์„œ๋น„์Šค๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ AWS amplify ๋ฐฐํฌ๋ฅผ ์„ ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

BackEnd

JPA N+1๋ฌธ์ œ

๋จผ์ € ์ด์šฉํ•˜์ง€ ์•Š๋Š” ์—ฐ๊ด€๊ด€๊ณ„ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์—ฐ๊ด€๊ด€๊ณ„์˜ fetchType์„ Lazy๋กœ ์„ค์ •ํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

์›์ธ: JPQL์€ DBํ…Œ์ด๋ธ”์ด ์•„๋‹ˆ๋ผ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— join์„ ํ•˜๋”๋ผ๋„ ๋Œ€์ƒ ์—”ํ‹ฐํ‹ฐ์˜ ๊ฐ’๋งŒ ๊ฐ€์ ธ์™€ ์˜์†ํ™”ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๋”ฐ๋ผ์„œ ํ•˜์œ„ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ• ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด select๋ฌธ์ด ์ƒ๊ฒจ N+1๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ… : ๋กœ์ง์—์„œ ์ด์šฉ๋˜๋Š” ํ•˜์œ„ ์—”ํ‹ฐํ‹ฐ๋“ค์„ fetch join์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ select๋ฌธ์•ˆ์—์„œ ๊ฐ€์ ธ์™€ ์˜์†ํ™”์‹œ์ผœ ๋” ์ด์ƒ select ๋ฌธ์ด ๋‚˜๊ฐ€์ง€ ์•Š๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํ•˜์œ„์—”ํ‹ฐํ‹ฐ๊ฐ€ Collection์ด๊ณ  2๊ฐœ ์ด์ƒ์ด๊ฑฐ๋‚˜ ํŽ˜์ด์ง•์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๋ฌธ์ œ์ ์ด ์žˆ์–ด ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” batch_fetch_size๋ฅผ ์ฃผ์–ด hibernate์— size๋งŒํผ where์— ์“ฐ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„๋‘”ํ›„ ์ผ์ •batch_fetch_size์— ๋‹ค๋‹ค๋ฅด๋ฉด in์ ˆ์„ ํ†ตํ•ด ํ•œ๊บผ๋ฒˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Redis ๋™์‹œ์„ฑ ๋ฌธ์ œ

์›์ธ:

๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ฅผ ํ•˜๊ธฐ ๋–„๋ฌธ์— ํ•œ EC2 ์•ˆ์— ๊ฐ™์€ Redis์— ์—ฐ๊ฒฐ๋œ ์„œ๋ฒ„๊ฐ€ 2๊ฐœ๊ฐ€ ์ผœ์ ธ ์žˆ์—ˆ๊ณ  ๋‘ ์„œ๋ฒ„์˜ ์Šค์ผ€์ฅด๋Ÿฌ๊ฐ€ ๋ ˆ๋””์Šค์— ์—ฐ๊ฒฐ๋˜์–ด ์œ ์ €์—๊ฒŒ ์•Œ๋ฆผ์„ ์ค‘๋ณตํ•˜์—ฌ ๋ณด๋‚ด๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…:

redission์˜ ๋ถ„์‚ฐ ๋ฝ์„ ์ด์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ์Šค์ผ€์ฅด๋Ÿฌ์—์„œ๋งŒ ์•Œ๋žŒ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿงพ์œ ์ € ํ”ผ๋“œ๋ฐฑ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ๊ฐœ์„ 

์„œ๋น„์Šค ๊ธฐ๊ฐ„ ๋™์•ˆ ์œ ์ €๋“ค์˜ ์‚ฌ์šฉ ํŒจํ„ด์„ ๋ณด์•˜์„ ๋•Œ,

์œ ์ €๋“ค์ด ๋‚ด๊ฐ€HAMA ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด SNS์ฒ˜๋Ÿผ ์„œ๋กœ ์†Œํ†ตํ•˜๋ฉด์„œ ์ฆ๊ฑฐ์›€์„ ๋А๋ผ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ํŒŒ์•…ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ตฌ๊ธ€ํผ์„ ํ†ตํ•œ ์œ ์ € ํ”ผ๋“œ๋ฐฑ์œผ๋กœ๋„ ๋‹ค๋ฅธ ์œ ์ €์˜ ํ”„๋กœํ•„, ์ž‘์„ฑ๊ธ€์„ ๋ณด๊ฑฐ๋‚˜ ์„œ๋กœ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ์ฐฝ๊ตฌ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๋Š” ์˜๊ฒฌ์„ ๋ฐ›์•„ ์œ ์ €ํŽ˜์ด์ง€์™€ ๋ฐฉ๋ช…๋ก ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์œ ์ €ํŽ˜์ด์ง€๋Š” ๊ธฐ์กด์˜ ๋งˆ์ดํŽ˜์ด์ง€์˜ ์ฝ”๋“œ๋ฅผ, ๋ฐฉ๋ช…๋ก์€ ๊ธฐ์กด์˜ ๋Œ“๊ธ€ ๋Œ€๋Œ“๊ธ€ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉ ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • JavaScript 99.6%
  • Other 0.4%