Skip to content

[BE] ์˜์กด์„ฑ ๋ฆฌํŒฉํ† ๋งย #634

@cpot5620

Description

@cpot5620

๐Ÿ› ๏ธ ์ž‘์—… ๋Œ€์ƒ

BE ์ฝ”๋“œ ์ „์ฒด

โœ… ์ž‘์—… ๋‚ด์šฉ

  • ๊ธฐ์กด ์ฝ”๋“œ์— ์–‘๋ฐฉํ–ฅ ์˜์กด์„ฑ์ด ๋‹ค์ˆ˜ ์กด์žฌํ•จ.
  • ์ด๋กœ์ธํ•ด, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ตฌํ˜„์‹œ ๋ณ€๊ฒฝ ํฌ์ธํŠธ๊ฐ€ ๋Š˜์–ด๋‚จ.
  • ์ด๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์†๋„ ์ €ํ•˜๋กœ ์ด์–ด์ง€๊ณ  ์žˆ์Œ.

์šฐ์„ ์ ์œผ๋กœ, ๋„๋ฉ”์ธ ๊ฐ„์˜ ์˜์กด์„ฑ ๋ถ„๋ฆฌ๊ฐ€ ์šฐ์„ ์ด ๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์•ผ, Service ๊ณ„์ธต์— ๋Œ€ํ•œ ๋ฆฌํŒฉํ† ๋ง๋„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ  !
๋ฌผ๋ก , ๋„๋ฉ”์ธ ์˜์กด์„ฑ ๋ถ„๋ฆฌ๋ฅผ ํ•˜๋‹ค๋ณด๋ฉด, ์„œ๋น„์Šค๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๊ธด ํ•ฉ๋‹ˆ๋‹ค.
Intellij์˜ ์˜์กด์„ฑ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ†ตํ•ด ์˜์กด์„ฑ ํŒŒ์•…์„ ํ•ด๋ณด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๋„ˆ๋ฌด ์ง€์ €๋ถ„ํ•˜๋”๋ผ๊ตฌ์š”.
๊ทธ๋ž˜์„œ ์ œ๊ฐ€ ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋ ธ๋˜ ๋‹ค์ด์–ด๊ทธ๋žจ ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. (Common, OAuth ํŒจํ‚ค์ง€๋Š” ์ œ์™ธํ•˜๊ณ  ์ฃผ์š” ๋„๋ฉ”์ธ๋งŒ ํŒŒ์•…ํ–ˆ์–ด์š”)

๊ฒ€์€์ƒ‰์€ ๋ญ.. ๊ทธ๋ƒฅ ์˜์กด ๋ฐฉํ–ฅ์ด๊ตฌ์š”.
๋นจ๊ฐ„์ƒ‰์œผ๋กœ ๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„์€ Cycle Dependency๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
ํŒŒ๋ž€์ƒ‰์€ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ์‹ถ์–ด์„œ ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค. (PinHistory๊ฐ€ Pin๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, PinInfo๋„ ์•Œ๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ๊ฐ€ ์กฐ๊ธˆ ์ด์ƒํ•ด๋ณด์—ฌ์„œ ? ๊ทผ๋ฐ ์ด ๋ฐฉ๋ฒ•์ด ๋งž๋Š” ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•ด์š”.)
image

๊ธ€์”จ๊ฐ€ ๊ฐœํŒ์ด๊ณ , ํ•œ ํŽ˜์ด์ง€์— ๋‹ด์•„๋‚ด๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ์ž˜ ์•ˆ๋˜๋”๋ผ๊ตฌ์š”.. ๋„“์€ ์•„๋Ÿ‰์œผ๋กœ ์ดํ•ด ๋ถ€ํƒ๋“œ๋ ค์š” ใ…‹ใ…‹.


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

  • Topic <-> Member : Topic -> MemberId ๊ฐ„์ ‘ ์ฐธ์กฐ

Member ๊ฐ์ฒด๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์•Œ ํ•„์š”๋Š” ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์–ด์š”. ID ๊ฐ’๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ์ปค๋ฒ„ ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™์•„์š”.
๋ฌผ๋ก , ์ž‘์„ฑ์ž์˜ ์ด๋ฆ„์„ ์•Œ์•„์˜ค๊ธฐ ์œ„ํ•œ ์ž‘์—…(Mapper?)์ด ๋ณ„๋„๋กœ ํ•„์š”ํ•˜๊ธด ํ•˜์ง€๋งŒ์š”.

  • Pin <-> Member : Pin -> MemberId ๊ฐ„์ ‘ ์ฐธ์กฐ

์ด ๋ถ€๋ถ„๋„ ์œ„์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

  • Pin <-> Location : Pin -> LocationId ๊ฐ„์ ‘ ์ฐธ์กฐ

Pin์กฐํšŒ ์‹œ ํ•ญ์ƒ Location์ด ํ•„์š”ํ•˜๋‹ค๋ณด๋‹ˆ, Pin -> Location ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ณ€๊ฒฝํ• ๊นŒ ์‹ถ์—ˆ๋Š”๋ฐ์š”.
ํ™•์žฅ์„ฑ ๊ณ ๋ คํ–ˆ์„ ๋•Œ, Location ๊ฐ์ฒด ์ž์ฒด๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์ด ๋งŽ์„ ๊ฒƒ ๊ฐ™์•„์„œ ์˜์กด์„ฑ์„ ๋Š์–ด๋‚ด๋Š”๊ฒŒ ๋งž์ง€ ์•Š์„๊นŒ ์‹ถ์—ˆ์–ด์š”.
๋˜ํ•œ, ์ƒ๋ช…์ฃผ๊ธฐ๋กœ ๋ณด๋ฉด ์„œ๋กœ ๋‹ค๋ฅด๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค๋”๋ผ๊ตฌ์š”. ๊ทผ๋ฐ ์ด ๋ถ€๋ถ„์€ ํŠนํžˆ๋‚˜ ํ™•์‹ ์ด ์—†๋„ค์š”..

  • Topic <-> Pin: Topic -> PinId ๊ฐ„์ ‘ ์ฐธ์กฐ

Topic ์กฐํšŒ์‹œ Pin์ด ํ•จ๊ป˜ ์กฐํšŒ๋˜์ง€๋งŒ, ๊ทธ ์—ญ๋ฐฉํ–ฅ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”.
๊ทธ๋ž˜์„œ, ๋ฐฉํ–ฅ์„ฑ์€ Topic -> Pin ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š”๋ฐ์š”. ๊ฐ์ฒด ์ฐธ์กฐ๋กœ ๊ฐ€๋Š”๊ฑด ๋ณ€๊ฒฝ ํฌ์ธํŠธ ๋ฌธ์ œ๋กœ ์ธํ•ด, ๊ฐ„์ ‘ ์ฐธ์กฐ๋กœ ๊ฐ€๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”.

  • PinInfo <- PinHistory -> Pin : PinInfo <- PinHistory -> PinId

PinHistory์—์„œ ์ด์ „ ์ •๋ณด ์ €์žฅ์„ ์œ„ํ•ด PinInfo๋ฅผ ์•„๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™๊ธดํ•ด์š”.
ํ•˜์ง€๋งŒ, Pin ๊ฐ์ฒด ์ฐธ์กฐ๋ณด๋‹ค๋Š” ๊ฐ„์ ‘ ์ฐธ์กฐ๊ฐ€ ์ข‹์•„๋ณด์ด๋„ค์š”.

  • Member <-> Permission <-> Topic : MemberId <- Permission -> TopicId ๊ฐ„์ ‘ ์ฐธ์กฐ & ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ(?)

Permission์€ ์ผ์ข…์˜ validation์„ ์œ„ํ•œ ๊ฐ์ฒด์ธ๋ฐ์š”.
id ๊ฐ’๋“ค๋กœ๋งŒ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋งบ์–ด๋‘์–ด๋„ ์ถฉ๋ถ„ํžˆ ๊ฒ€์ฆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”.
์˜์กด์„ฑ ์ฃผ์ž…์„ ํ†ตํ•ด, ๋„๋ฉ”์ธ ๊ณ„์ธต์—์„œ ๊ฒ€์ฆ์ด ์ˆ˜ํ–‰๋  ์ˆ˜๋„ ์žˆ๊ฒ ์ฃ  !
๋ฌธ์ œ๋Š” ์–ด๋А ํŒจํ‚ค์ง€์— ๋‘๋ƒ์ธ๋ฐ.. ๊ณ ๋ฏผ ๋” ํ•ด๋ณด์ฃ  !

  • Member <-> Bookmark <-> Topic : MemberId <- Bookmark -> TopicId ๊ฐ„์ ‘ ์ฐธ์กฐ & ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ

Bookmark๋Š” ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋กœ ๋ถ„๋ฆฌํ•ด๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์š”.
Topic๊ณผ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋˜์–ด ์žˆ์ง€๋งŒ, ๋ณ„๋„์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ฑฐ๋“ ์š”.
๊ฐ์ฒด์˜ ์˜์กด์„ฑ์€ ์œ„์™€ ๊ฐ™์ง€๋งŒ, ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ์‹œ์—๋Š” Bookmark Package -> Topic Package๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”.
BookmarkQueryService๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ ์‹ถ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค !

  • Member <-> Atlas -> Topic : MemberId <-> Atlas <-> TopicId ๊ฐ„์ ‘ ์ฐธ์กฐ & ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ

์™œ ์ด ์นœ๊ตฌ๋Š” Topic์ด๋ž‘์€ ๋‹จ๋ฐฉํ–ฅ์ผ๊นŒ์š”.. ์ดํ•ดํ•  ์ˆ˜ ์—†๊ตฐ์š”.
์ด ๋ถ€๋ถ„๋„ ์œ„์—์„œ ์ด์•ผ๊ธฐํ•œ Bookmark์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ ์‹ถ์–ด์š”.

  • PinComment <-> PinComment : PinComment <-> PinCommentId ๊ฐ„์ ‘ ์ฐธ์กฐ

ํ˜„์žฌ์˜ ๋Œ“๊ธ€ ๊ธฐ๋Šฅ ๊ตฌ์กฐ๋ฅผ ํฌ๊ฒŒ ๋ฐ”๊พธ์ง€ ์•Š์œผ๋ ค๋ฉด, ์šฐ์„  ๋ถ€๋ชจ ๋Œ“๊ธ€์˜ Id ๊ฐ’๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ์ปค๋ฒ„๋ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ด์š”.
ํ•œ ๊ฐ€์ง€ ๊ฑฑ์ •๋˜๋Š” ๋ถ€๋ถ„์€, @OnDelete(action = OnDeleteAction.CASCADE) ์ด ๋ถ€๋ถ„์ธ๋ฐ์š”.
Event๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๋ถ€๋ชจ ๋Œ“๊ธ€ ์‚ญ์ œ์‹œ ๊ทธ ํ•˜์œ„ ๋Œ“๊ธ€๋“ค๋„ ์‚ญ์ œ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ์‹ถ๋„ค์š” !


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

๐Ÿ“Ž ์ฐธ๊ณ  ์ž๋ฃŒ

์šฐ์•„ํ•œ ๊ฐ์ฒด์ง€ํ–ฅ

โฐ ์ถ”์ • ์‹œ๊ฐ„

๋น„๊ด€์  ์ถ”์ • ์‹œ๊ฐ„ : 2์ฃผ
๋‚™๊ด€์  ์ถ”์ • ์‹œ๊ฐ„ : 1์ฃผ

Metadata

Metadata

Labels

BE๋ฐฑ์—”๋“œ ๊ด€๋ จ ์ด์Šˆrefactor๋ฆฌํŒฉํ† ๋ง ๊ด€๋ จ ์ด์Šˆ์šฐ์„ ์ˆœ์œ„ : ์ƒ

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions