[Springboot] AWS SQS๋ฅผ ์ด์šฉํ•œ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๊ตฌํ˜„ํ•˜๊ธฐ - ๋ฉ”์‹œ์ง€ ๋ฐœํ–‰ ๋กœ์ง
ยท
๋งŒ๋“ค์–ด๋ณด๊ธฐ/Spring
์„œ๋ก ๊ธฐ์กด์—๋Š” Spring์˜ `ApplicationEventPublisher`์™€ Redis์˜ Pub/Sub ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด ์•Œ๋ฆผ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.์ด ๊ตฌ์กฐ๋Š” ๋‚ด๋ถ€ ์„œ๋ฒ„๊ฐ„ ์ด๋ฒคํŠธ ์ „ํŒŒ์™€ ๋ธŒ๋ผ์šฐ์ € ํด๋ผ์ด์–ธํŠธ๋กœ์˜ SSE ์•Œ๋ฆผ ์ „์†ก์— ํšจ๊ณผ์ ์ด์—ˆ์ง€๋งŒ, ์•Œ๋ฆผ ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ฒ˜๋ฆฌ์— ๋ณ‘๋ชฉ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‹คํŒจ์‹œ ์žฌ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž AWS SQS๋ฅผ ๋„์ž…ํ•˜์—ฌ ์•Œ๋ฆผ ์‹œ์Šคํ…œ์„ ์žฌ๊ตฌ์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด ๊ธ€์—์„œ ๊ตฌ์กฐ ์„ค๊ณ„, ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„๋“ค๊ณผ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์„ ์ค‘์‹ฌ์œผ๋กœ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ์ „ํ™˜ ๊ณผ์ •์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.SQS๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋œ ์ด์œ ๊ธฐ์กด์—๋Š” ์›จ์ดํŒ… ํ˜ธ์ถœ ์‹œ ํ•ด๋‹น ์›จ์ดํŒ…์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ๋งŒ ์žˆ์—ˆ์ง€๋งŒ, ์ดํ›„ ์ฟ ํฐ ์ด๋ฒคํŠธ๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ํ•ด๋‹น ๊ฐ€๊ฒŒ๋ฅผ ์ฐœํ•œ ์‚ฌ์šฉ์ž ์ „์ฒด์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ฐœ์†กํ•ด์•ผ ํ•˜..
[AWS] AWS SQS(Simple Queue Service) ์ดํ•ดํ•˜๊ธฐ
ยท
๊ณต๋ถ€ํ•˜๊ธฐ/Cloud
AWS SQS๋ž€?Simple Queue Service๋กœ, AWS์—์„œ ์„œ๋น„์Šคํ•˜๋Š” ๋ฉ”์‹œ์ง€ ํ์ด๋‹ค.๋ฉ”์‹œ์ง€ ํ๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ?ํ•˜๋‚˜์˜ API ์š”์ฒญ์— ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ํ›„์ฒ˜๋ฆฌ ์ž‘์—…๋“ค์ด ๋งŽ์€ ๊ฒฝ์šฐ ⇒ ์‘๋‹ต ์ง€์—ฐ ์ตœ์†Œํ™” ๋ฐ ์‹œ์Šคํ…œ ๊ฐ„ ๊ฒฐํ•ฉ๋„ ๊ฐ์†Œ ๊ฐ€๋Šฅ๋ฌธ์ œ ์ƒํ™ฉ์‘๋‹ต ์ง€์—ฐ ๋ฌธ์ œ : API ๋‚ด๋ถ€์—์„œ ๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ์‘๋‹ต ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•จ → UX ์ €ํ•˜์žฅ์•  ์ „ํŒŒ ์œ„ํ—˜ : ์™ธ๋ถ€ API ํ˜ธ์ถœ์ด ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ, ์„œ๋น„์Šค ํ•˜๋‚˜์— ์žฅ์• ๊ฐ€ ๋‚˜๋„ ์ „์ฒด ๊ธฐ๋Šฅ ์žฅ์• ๋กœ ์ด์–ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œํ•ด๊ฒฐํ•œ API๋Š” ๊ด€๋ จ ์ž‘์—…๋งŒ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋™๋ฐ˜๋˜์–ด์•ผ ํ•˜๋Š” ๊ฐ ์ž‘์—…์„ ๋ฉ”์‹œ์ง€๋กœ ๋งŒ๋“ค์–ด ํ์— ๋„ฃ์Œ๊ฐ๊ฐ์˜ ์ž‘์—…์„ ๋‹ด๋‹นํ•˜๋Š” Consumer๊ฐ€ ํ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์†Œ๋น„ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•จํšจ๊ณผ๊ณ ๊ฐ์˜ ์‘๋‹ต ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๊ฐ์†Œํ›„์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์— ์žฅ์• ๊ฐ€ ๋‚˜๋„ ๋ฉ”์ธ ์ž‘์—… ์ž์ฒด๋Š” ์ •์ƒ ..
[SpringBoot] AWS S3๋ฅผ ์ด์šฉํ•œ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋กœ์ง ๊ตฌํ˜„๊ธฐ
ยท
๋งŒ๋“ค์–ด๋ณด๊ธฐ/Spring
1. ProfileImage ์„ค๊ณ„์‚ฌ์šฉ์ž๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ๊ฐ–๋Š”๋‹ค. → OneToOneProfileImage์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ์ฐธ์กฐํ•  ์ผ์€ ์—†๋‹ค → ๋‹จ๋ฐฉํ–ฅS3์—์„œ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฒ„ํ‚ท์— ์ €์žฅ๋œ ์ด๋ฆ„์ด ํ•„์š”ํ•˜๋‹ค.S3์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด url๋กœ ์ด๋ฏธ์ง€์— ์ ‘๊ทผํ•œ๋‹ค.``๊ฐ์ฒด url``๊ณผ ํ•จ๊ป˜ ์ €์žฅํ•  ``๋ฒ„ํ‚ท์— ์ €์žฅ๋œ ์ด๋ฆ„`` ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋‹ด์€ ํ…Œ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.โœ“ ProfileImage ์—”ํ‹ฐํ‹ฐ๋‹ค์Œ๊ณผ ๊ฐ™์ด ProfileImage ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.@Getter@Entity@NoArgsConstructor@Table(name = "profile_images")public class ProfileImage { @Id @GeneratedValue(strategy = G..