๋ณต์ต๊ณผ์ ์? https://github.com/kimhyeyun/spring-challenge-assignment ์ฃผ์ด์ง ์๊ตฌ์ฌํญ๋ค์ ๋๋ถ๋ถ ๊ตฌํํ๋๋ฐ, ๋ชปํ ๋ถ๋ถ์ ๋ฑํ๋ (์ฑ๋ฆฐ์ง ๊ณผ์ ) ๊ฒ์๊ธ์ด ์ญ์ ๋ ๋ ์ฐ๊ด๋ ๋๊ธ๋ ๊ฐ์ด ์ง์ฐ๋๋ก ์ค์ผ์ค๋ฌ ์ฝ๋ ๊ธฐ๋ฅ ์ถ๊ฐ ์ด ๋ถ๋ถ์ธ๋ฐ, ์ดํด๊ฐ ์๊ฐ์ง์์๋ค... ์ค์ผ์ค๋ฌ๋ก ์ฐ๊ด๋ ๋๊ธ ์ญ์ ....? ํค?? ๊ทธ๋๋ ๋ค๋ฅธ ๊ฒ๋ค์ ์ํ๋ค,.. s3 ์ฐ๊ฒฐ๋ ํ๊ณ , ์์ ๋์ง 90์ผ์ด ์ง๋ ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ์ง์ฐ๋ ์ค์ผ์ค๋ฌ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ ๋ถ๋ถ๋ ํ๋ค. ๋๋ ๋งค์ผ ์์ ์ ๋ง์ง๋ง ์์ ์ผ๋ก๋ถํฐ 60์ผ์ด ๋์ ๊ฒ์๊ธ์ ์ญ์ ํ๋ค. ๋ณดํต 2๋ฌ ๋จ์๋ก ํด๋จผ์ฒ๋ฆฌ๊ฐ ๋๋ ๊ฒ์ ๋ง์ด ๋ดค์ด์ ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง ์์ ์ผ๋ก 2๋ฌ์ด๋ฉด ์ด๋ฏธ ์ํ์ก๋ค๊ณ ๋๊ปด์ ธ์ ใ
ใ
๋ด์ผ๋ถํฐ๋ ์ฌํ๋ณต์ต๊ณผ์ ใฑใฑ
์ ์ฒด ๊ธ
๋ณต์ต ๊ณผ์ ์ค ๐ญ (์ฑ๋ฆฐ์ง ๊ณผ์ ) ํ์ ๊ฐ์
์, ์ด๋ฉ์ผ ํน์ SNS๋ก ์ธ์ฆ ๋ฒํธ๋ฅผ ์ ๋ฌ ๋ฐ๊ณ 5๋ถ ์ด๋ด์ ํด๋น ์ธ์ฆ ๋ฒํธ๋ฅผ ๊ฒ์ฆํด์ผ ํ์ ๊ฐ์
์ ์ฑ๊ณตํ๋๋ก ํด๋ณด๊ธฐ (redis TTL ํน์ง์ ์ข ๋ ํ์
ํ๊ธฐ ์ํจ.)์ด ๋ถ๋ถ์์ ๋งํ๋ค. ๋ง์ ๊ณ ๋ฏผ์ ํ๋ค๊ฐ ๊ฒฐ๊ตญ ๋ด์ผ๋ก ๋ฏธ๋ค๋ค. ๊ณ ๋ฏผ๋๋ ๋ถ๋ถ์ด view ๋จ์ด ์๊ธฐ ๋๋ฌธ์ ํ์๊ฐ์
์ด ์ฒ๋ฆฌ ์๋น์ค ์ฝ๋ ์ ์ ์ฒ๋ฆฌ๊ฐ ๋์ด์ผ ํ๋ค. ์ด๋ฉ์ผ ์ธ์ฆ์ด ๋์ง ์๋๋ค๋ฉด, ํ์๊ฐ์
์ด ๋๋ฉด ์๋๋ค. ์ด ๋ถ๋ถ์ด ๋ทฐ ๋จ์ด ์์ผ๋๊น, ์ด๋ป๊ฒ ๋ก์ง์ ์ง์ผํ๋์ง ๊ณ ๋ฏผ๊ณ ๋ฏผ ๐ค ํ์ ๊ฐ์
์ค์ ๋ฉ์ผ ์ธ์ฆ ๋ก์ง์ ๋ฃ๋ ๊ฒ์ด ๋ง๋๊ฐ? ์๋๋ฉด, ๋ฐ๋ก ์ปจํธ๋กค๋ฌ๋ฅผ ์ง๊ณ , ์ด ๊ณณ์ ๋์ด์ฌ ๋๋ ์ด๋ฏธ ๋ฉ์ผ์ธ์ฆ์ด ์๋ฃ๋์ด์์์ ํ์ ํ๊ณ ๊ฐ์
ํด์ผํ๋? ์๋๋ฉด request ๋ entity์ ๋ถ๋ฆฐ๊ฐ์ ๋ฃ..
Spring Event ์ฌ์ฉํ๋ ์ด์ ์ ์ฅ์ ๊ฐ์ฅ ์ฃผ๋ ์ด์ ๋ ์๋น์ค ๊ฐ์ ๊ฐํ ์์กด์ฑ์ ์ค์ด๊ธฐ ์ํจ ์๋ฅผ ๋ค์ด, ์ด๋ค ์ํ์ ์ฃผ๋ฌธํ๋ ํ๋ก์ธ์ค๊ฐ ์๊ณ , ํด๋น ํ๋ก์ธ์ค๋ ๋ด๋ถ์ ์ผ๋ก ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ ๋ค ํธ์ฌ ๋ฉ์์ง๋ฅผ ๋ฐ์กํ๊ณ , ๋ฉ์ผ์ ์ ์กํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค๊ณ ๊ฐ์ ์ฃผ๋ฌธ ์ฒ๋ฆฌ์, ํธ์ฌ ๋ฉ์ธ์ง ๋ฐ์ก, ๋ฉ์ผ ์ ์ก ๊ธฐ๋ฅ์ด ๊ฐ๊ฐ์ ์๋น์ค(OrderService, PushService, MailService)์ ๊ตฌํ๋์ด ์์ ๊ฒฝ์ฐ, ์๋ ์ฝ๋์ ๊ฐ์ด ์ฃผ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ OrderService์์ ํธ์ฌ ๋ฉ์์ง๋ฅผ ๋ฐ์ํ๋ PushService์ ๋ฉ์ผ ์ ์ก์ ํ๋ MailService์ ๋ํ ์์กด์ฑ์ ์ฃผ์
๋ฐ์ ์ฌ์ฉํ๊ฒ ๋๋ค. @Service public class OrderService { private final PushS..
์ฑ๋ฆฐ์ง๋ฐ ๊ฐ์๋ฅผ ๋ค์ ๋ค์ผ๋ฉด์ ๊ณต๋ถ !!๐โ๏ธ!! ์ค๋์ S3์ EDA ์ด๋์ ๋~? AWS S3(Simple Storage Service)? ํ์ผ ์๋ฒ์ ์ญํ ์ ํ๋ ์๋น์ค ์ผ๋ฐ์ ์ธ ํ์ผ ์๋ฒ๋ ํธ๋ํฝ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ์ ์ฅ๋น๋ฅผ ์ฆ์คํ๋ ์์
์ด ํ์ํ๋ฐ, S3๋ ์ด์ ๊ฐ์ ๊ฒ์ ๋์ ํด์ค๋ค. ํธ๋ํฝ์ ๋ฐ๋ฅธ ์์คํ
์ ์ธ ๋ฌธใด์ ๋ฅผ ๊ฑฑ์ ํ ํ์๊ฐ ์์ด์ง๋ค. ๋, ํ์ผ์ ๋ํ ์ ๊ทผ ๊ถํ์ ์ง์ ํ ์ ์์ด์ ์๋น์ค๋ฅผ ํธ์คํ
์ฉ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ค. ํน์ง ๋ง์ ์ฌ์ฉ์๊ฐ ์ ์ํด๋ ์ด๋ฅผ ๊ฐ๋นํ๊ธฐ ์ํ ์์คํ
์ ์ธ ์์
์ ํ์ง ์์๋ ๋๋ค. ์ ์ฅํ ์ ์๋ ํ์ผ ์์ ์ ํ์ด ์๋ค. ์ต์ 1๋ฐ์ดํธ์์ ์ต๋ 5TB์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋น์คํ ์ ์๋ค. ํ์ผ์ ์ธ์ฆ์ ๋ถ์ฌ์ ๋ฌด๋จ์ผ๋ก ์์ธ์คํ์ง ๋ชปํ๋๋ก ํ ์ ์๋ค..
EDA(Event Driven Architecture)? ๋ถ์ฐ๋ ์์คํ
์์ ์ด๋ฒคํธ๋ฅผ ์์ฑ(๋ฐํ)ํ๊ณ , ๋ฐํ๋ ์ด๋ฒคํธ๋ฅผ ์ ์กํ๋ ๊ตฌ์กฐ๋ก ์์ ์๋ ๊ทธ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ํคํ
์ฒ ๋ถ์ฐ ์ํคํ
์ฒ ํ๊ฒฝ์์ ์ํธ ๊ฐ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ํจํด์ผ๋ก ์ฃผ๋ก Message Broker(Kafka, RabbitMQ)์ ๊ฒฐํฉํ์ฌ ๊ตฌ์ฑ๋๋ค. ๊ตฌ์ฑ ์์ Event Generator(Publisher, Producer, Creater) ํ์คํ๋ ํ์์ ์ด๋ฒคํธ๋ฅผ ์์ฑํ๋ค. ์์ฑ๋ ์ด๋ฒคํธ๋ Event Channel๋ก ์ ์ก๋๋ค. Event Channel(Bus) Event Generator์์ Event Processing Engine์ผ๋ก ์์ง๋ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๋ ๋งค์ปค๋์ฆ ์ฆ, ์ด๋ฒคํธ๋ฅผ ํ์๋ก ..
KEEP ๊ตณ์ด ๋ง์ ํ์ง ์์๋ ์ ํด์ง ๋ฒ์๊น์ง ์์์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ํ
์คํธํ์๋ค. ์ด๋ฒํ๋ก์ ํ์์ GIT์ ๋ค๋ฅธ ํ๋ก์ ํธ๋๋ณด๋ค ๋ง์ด์จ๋ด์ ๋งค์ฐ์ข์๊ณ ์ค๋ ฅ์๋ ํ์๋ค ๋๋ถ์ ๋ฐฐ์๊ฐ๊ฒ ๋ง๋ค. ์ค๊ณ๋จ๊ณ์์ ERD์ API๋ช
์ธ๋ฅผ ์์ฑํ ๋ ํ์ํ API๊ธฐ๋ฅ๋ค๊ณผ Entitiy์ ํด๋น Entity๊ฐ์ ๊ด๊ณ๋ฅผ ๋ฉด๋ฐํ๊ฒ ์์ฑํ์ฌ ์ค ์๋ฒ ๊ตฌ์ถ๋จ๊ณ์์ ๋น ๋ฅด๊ฒ ๋ชฉํํ๋ ๊ธฐ๋ฅ์ ๊ตฌํ ํ ์์๋ ์ ํ์๊ณผ์ ์ํํ ์ํต์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ๋น ๋ฅด๊ฒ ํด๊ฒฐํ ์ ์์๋ค. ์งํ๋ ๋ฐ ๋ฌธ์ ์ ๊ณต์ ๋ฅผ ํตํด ๋น ๋ฅธ ๊ฐ๋ฐ ๊ฐ๋ฅ PROBLEM ๋ฌธ์ ๋ฐ์์ ํ๋ฉด๊ณต์ ๋ฅผ ํตํ ํด๊ฒฐ๋ฐฉํ ๋
ผ์ @Valid๋ฅผ ์ด์ฉํ ์ ํจ์ฑ ๊ฒ์ฆ์ ๊ธ๋ก๋ฒ์์ธ์ฒ๋ฆฌ๋ก ๋์ค๊ฒ ํ๊ณ ์ถ์์ง๋ง ์์ง ์ดํด๋๊ฐ ๋ถ์กฑํด์ ํ์ง๋ชปํ๋ค. ์ค๊ณ ๋จ๊ณ์์ ๋ฐฑ์คํผ์ค์ ๊ด๋ฆฌ์ ๊ธฐ๋ฅ์ ๊น๊ฒ ์๊ฐ ..
์ค๋๋ก 4๋ฒ์งธ ํํ๋ก์ ํธ, ๋ฐฐ๋ฌ์ฑ ๊ตฌํ ํ๋ก์ ํธ๊ฐ ๋๋ฌ๋ค. ์ฒ์ ๊ธฐํํ๋ ๊ธฐ๋ฅ์ด ์ผ์ฐ ๋๋์ ์ค๊ฐ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์๋ค. ์ฒ์์๋ ๊ทธ๋ฅ ํ๋์ ๊ฐ๊ฒ์ ๋ฐฐ๋ฌ ์ฑ์ด๋ค๊ฐ, ์ดํ ๊ฐ๊ฒ ๋ณ๋ก ๋๋๊ณ ์ข์์ ๊ธฐ๋ฅ๊น์ง ๊ตฌํํ๋ค. ํ์๋ค๊ณผ ์ํต๋ ์๋๊ณ ์๋ง์์ ์ฌ๋ฐ๊ฒ ์งํํ๋ค.!! ๊ทธ๋ฆฌ๊ณ ๋ค๋ค ์ด๊ฑฐ ํด์ฃผ์ธ์ ํ๋ฉด ๋๋ฑ๋๋ฑ ๊ณต์ฅ๋ง๋ฅ ์ฐ์ด๋ด์
์ ์ง๋๋ ์ฐธ ๋น ๋ฅด๊ฒ ๋๊ฐ๋ฏ!!!!! ์ธ๊ป ์๋ค์....ใ
ใ
์! ์ฌ๊ธฐ์ ๋ฐฐ์ฐ๊ณ ์ฌ์ฉํด๋ณธ jwt, refreshtoken๊ณผ ๋ค๋ฅธ ํ๋ค์ด ์ฌ์ฉํ์ ํ์ฌ ์ฌ์ฉ์ ์ ๋
ธํ
์ด์
๊ตฌํ๋ฑ์ ์ด์ฉํด์ ๊ธฐ์กด์ ํ๋ ํ๋ก์ ํธ๋ฅผ ์
๊ทธ๋ ์ด๋๋ฅผ ๋ชฉํ๋ก ์งํํด์ผ๊ฒ ๋ค. ๋ง๊ตฌ์ก์ด๋ก ํ์ง๋ง๊ณ ๋๋ฑ๋๋ฑ S.A ๋ถํฐ ์ฒ์ฒํ ๋ค ์์ฑํด์ผ์ง~!
ํ๋ก์ ํธ ์ค ๋ด๋น ๊ธฐ๋ฅ์ ์๋์ง๋ง JWT ๊ฐ ์/์ด๋ป๊ฒ ๋๋์ง ๊ถ๊ธํด์ ๊ณต๋ถํด๋ณด์ JWT๋ ๋น๋ฐํค๋ฅผ ์ด์ฉํ์ฌ ์๋ช
๋ JSON ํํ์ ๋ฐ์ดํฐ์ด๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ฃ์ด์ ํ ํฐ์ ๋ฐ๊ธํด์ฃผ๋ฉด ์ถํ ์ธ์ฆ์ด ํ์ํ ๋ฆฌ์์ค์ ์ ๊ทผ ์ ์ฌ์ฉ์๊ฐ ์๋ฒ์ ์๋ฒ์ ํ ํฐ์ ํฌํจํด์ ์ ์กํ์ฌ ์๋ฒ์ ํ ํฐ์ ํฌํจํด์ ์ ์กํ์ฌ ์๋ฒ์ธก์์๋ ๋ณต์กํ ์ธ์ฆ ๊ณผ์ ์์ด ํ ํฐ๋ง์ผ๋ก ์ฌ์ฉ์๋ฅผ ์ธ์ฆ ๋ฐ ์ธ๊ฐํ ์ ์๋ ๊ฒ์ด๋ค. JWT๋ ํค๋, ํ์ด๋ก๋, ์๋ช
์ธ ๊ฐ์ง ์ ๋ณด๋ฅผ base64๋ก ์ธ์ฝ๋ฉํ ๊ฐ์ ์ฝค๋ง('.')๋ฅผ ์ฌ์ด์ ๋๊ณ ์ด์ด๋ถ์ธ ํํ๋ก ์์ฑ๋๋ค. ํค๋ : JWT ์๋ช
์ ์ฌ์ฉ๋ ์๊ณ ๋ฆฌ์ฆ ์ ๋ณด ํ์ด๋ก๋ : ํ ํฐ์ ๋ด๊ธด ์ฃผ์ฒด, ๋ง๋ฃ์ผ, ์์ฑ์ ๋ฑ ์๊ทธ๋์ฒ : ํค๋์ ํ์ด๋ก๋๋ฅผ ๊ฐ๊ฐ base64๋ก ์ธ์ฝ๋ฉํ ํ ์ฝค..