Skip to content

Sparta-thirteen/13friday

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

282 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

13friday ๋ฌผ๋ฅ˜ ์„ผํ„ฐ

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

ํ”„๋กœ์ ํŠธ ๋ชฉ์ 

MSA ๊ธฐ๋ฐ˜ ๊ทน๋Œ€ ๋ฌผ๋ฅ˜ ๊ด€๋ฆฌ ๋ฐ ๋ฐฐ์†ก ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ

์ด ํ”„๋กœ์ ํŠธ๋Š” B2B ๋ฌผ๋ฅ˜ ๊ด€๋ฆฌ ๋ฐ ๋ฐฐ์†ก ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๊ฐ ์ง€์—ญ์— ํ—ˆ๋ธŒ ์„ผํ„ฐ๊ฐ€ ์žˆ๊ณ , ๋„๋งค ์—…์ฒด๊ฐ€ ํ•„์š”ํ•œ ๋ฌผํ’ˆ์„ ๋ฌผ๋ฅ˜์„ผํ„ฐ๋กœ ์ฃผ๋ฌธ์„ ํ•˜๋ฉด ๊ฐ€๊ณต์—…์ฒด์—์„œ ์ƒ์‚ฐ๋œ ๋ฌผํ’ˆ์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํ—ˆ๋ธŒ์—์„œ ๊ฐ€๊ณต์—…์ฒด๊นŒ์ง€ ๋ฐฐ์†ก์„ ํ•ฉ๋‹ˆ๋‹ค.

ํŒ€์› ์†Œ๊ฐœ ๋ฐ ์—ญํ• 

์—ญํ•  ๋‹ด๋‹น์ž ์„ค๋ช…
ํŒ€์žฅ ๋ฐ•๋™ํœ˜ ์ฃผ๋ฌธ ๋ฐ ๋ฐฐ์†ก ์„œ๋น„์Šค API ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ
ํŒ€์› ์„œํ˜„์žฌ jwt์™€ security ๋ฅผ ํ™œ์šฉํ•œ ์ธ์ฆ ๋ฐ ์‚ฌ์šฉ์ž์™€ ๋ฐฐ์†ก๋‹ด๋‹น์ž ์„œ๋น„์Šค API ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ
ํŒ€์› ์ง„๊ฐ•ํ›ˆ OPEN API๋ฅผ ํ™œ์šฉํ•œ ํ—ˆ๋ธŒ์™€ ํ—ˆ๋ธŒ๊ฐ„ ์ด๋™๊ฒฝ๋กœ ์„œ๋น„์Šค API ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ
ํŒ€์› ๊น€์ง€ํ˜„ ์—…์ฒด์™€ ์ƒํ’ˆ ์„œ๋น„์Šค API ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ๊ณผ gemini๋ฅผ ํ™œ์šฉํ•œ ์Šฌ๋ž™๋ฉ”์„ธ์ง€ API ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ

์„œ๋น„์Šค ๊ตฌ์„ฑ ๋ฐ ์‹คํ–‰

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ณ(MSA)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ณ , eureka server๋ฅผ ํ†ตํ•ด API gateway๋กœ ๊ฐ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ Docker๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ , ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ์„œ๋น„์Šค๋ณ„ endpoint

API ๋ช…์„ธ์„œ โ˜ž ์—ฌ๊ธฐ๋กœ

ํ…Œ์ด๋ธ” ๋ช…์„ธ์„œ ๋ฐ ERD

ํ…Œ์ด๋ธ” ๋ช…์„ธ์„œ โ˜ž ์—ฌ๊ธฐ๋กœ ERD

Trouble Shooting

JWT ์ธ์ฆ ์ธ๊ฐ€

๋ฌธ์ œ: JWT ์ธ์ฆ์ธ๊ฐ€๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

  1. ์—ฌํƒœ๊ป ์ธ์ฆ์ธ๊ฐ€๋ฅผ JWT๋ฅผ ํ†ตํ•ด์„œ SecurityContext๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ Security๋ฅผ ๊ฑฐ์ณ์„œ ์ธ์ฆ์ธ๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์™”๋‹ค.
  2. ํ•˜์ง€๋งŒ Spring Security๋Š” ํ•˜๋‚˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์—์„œ๋งŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— MSAํ™˜๊ฒฝ์—์„œ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•ด์•ผ ํ• ์ง€ ๊ณ ๋ฏผ์ด์—ˆ๋‹ค.

ํ•ด๊ฒฐ๊ณผ์ •

๊ณ ๋ฏผํ–ˆ๋˜ ๋ฐฉ์•ˆ

๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ๋ฐฉ์‹์œผ๋กœ ๊ณตํ†ต๋ชจ๋“ˆ์„ ํ†ตํ•ด ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ณ ๋ฏผ

๊ฒฐ๊ณผ
  1. ๊ณตํ†ต๋ชจ๋“ˆ๋กœ ์ธํ•ด์„œ ๊ฐ ํ•˜์œ„ ๋ชจ๋“ˆ์—์„œ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•ด ์ด์ „ spring cloud ๋ฐฉ์‹์œผ๋กœ ๋กค๋ฐฑ
  2. ์‹ค์Šต ๊ณผ์ •์—์„œ๋Š” API gateway์—์„œ ์ธ์ฆ์ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉ
  3. ๊ฐ ๋„๋ฉ”์ธ ๋งˆ๋‹ค Security๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ธ์ฆ์ธ๊ฐ€๋ฅผ ํ•ด์•ผ๋˜๋Š”๊ฐ€ ์˜๋ฌธ์ด ์ƒ๊น€

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  1. ์‚ฌ์šฉ์ž ๋„๋ฉ”์ธ์—์„œ Security๋ฅผ ์„ค์ •ํ•˜๊ณ  Gateway์— Filter๋ฅผ ์ž‘์„ฑ
  2. Gateway์— ์žˆ๋Š” ํ•„ํ„ฐ์—์„œ ์ธ์ฆ์„ ํ•œ ํ›„ Request์— header๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ˜„์žฌ์‚ฌ์šฉ์ž์˜ id์™€ role์„ ๋„˜๊น€
  3. ๊ฐ ๋„๋ฉ”์ธ์—์„œ requestHeader๋กœ ๋ฐ›์€ role๋กœ ๊ถŒํ•œ ์ฒ˜๋ฆฌ

DDD ๋„๋ฉ”์ธ๋ณ„ ์„œ๋น„์Šค ๋ถ„๋ฆฌ

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

ํ•ด๊ฒฐ ๊ณผ์ • ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค๊ฐ„ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜๊ธฐ๋กœ ํ•จ. ์ฃผ๋ฌธ ์„œ๋น„์Šค๋Š” ๋ฐฐ์†ก ์ƒ์„ฑ๊นŒ์ง€๋งŒ ์ฑ…์ž„์ง€๊ณ , ์ดํ›„ ๋ฐฐ์†ก์ด ์ƒ์„ฑ๋˜๋ฉด ๋ฐฐ์†ก ์„œ๋น„์Šค ๋‚ด๋ถ€์—์„œ ๋ฐฐ์†ก ๊ฒฝ๋กœ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋„๋ก ์„ค๊ณ„๋ฅผ ๋ณ€๊ฒฝ. ์ด๋กœ์จ API ์ฒด์ธ์ด ๋‹จ์ˆœํ™”๋˜๊ณ  ๊ฐ ์„œ๋น„์Šค๊ฐ€ ์ž์‹ ์˜ ์ฑ…์ž„๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ.

MSA์—์„œ์˜ API ๋ฌธ์„œ ์ž๋™ํ™”

์˜ค๋ฅ˜

swagger๋ฅผ ์‚ฌ์šฉํ•ด api ๋ฌธ์„œ ์ž๋™ํ™”๋ฅผ ํ•˜๊ณ  gateway๋กœ ํ†ตํ•ฉ ๋ฌธ์„œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ ค ํ–ˆ์ง€๋งŒ ๊ฐ๊ฐ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์—์„œ๋Š” sawgger ui ๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•˜๋Š”๋ฐ api gateway ์—์„œ๋Š” 404 not found๊ฐ€ ๋œจ๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ

๊ฐ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์™€ gateway์˜ yml ํŒŒ์ผ์— swagger ์„ค์ •์„ ํ•ด์ฃผ์—ˆ์ง€๋งŒ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒ

๋ฌธ์ œ ํ•ด๊ฒฐ

๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ณ์ผ๋•Œ๋Š” ๋‹จ์ผ ํ”„๋กœ์ ํŠธ์˜€๊ธฐ ๋•Œ๋ฌธ์— swagger ์˜์กด์„ฑ์„ webmvc๋กœ ํ•ด๋„ 1:1 ๋กœ ์š”์ฒญํ•˜๊ธฐ๋•Œ๋ฌธ์— ๋ฌธ์„œ ์ž๋™ํ™”์— ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์ง€๋งŒ MSA๋Š” ์—ฌ๋Ÿฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— N:1 ์š”์ฒญ์ด ํ•„์š”ํ–ˆ๋‹ค. swagger ์˜์กด์„ฑ์„ webflux๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด gateway๋กœ swagger ์ ‘๊ทผ์‹œ ํ†ตํ•ฉ๋ฌธ์„œ๋กœ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋œ๋‹ค.

Technologies & Tools

Technologies

Java Spring boot Spring cloud JWT Spring security PostgreSQL JPA QueryDSL

Tools

Redis Docker Swagger Zipkin Git GitHub Slack Discord

API docs

API docs โ˜ž ์—ฌ๊ธฐ๋กœ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors