Skip to content

witherview ๋ฅผ ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ ย #33

@MoonYeeun

Description

@MoonYeeun

AS-IS:

ํ˜„์žฌ ์œ„๋”๋ทฐ๋Š” ๋ชจ๋†€๋ฆฌํ‹ฑ ๊ทธ ์ž์ฒด์ด๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2021-06-06 แ„‹แ…ฉแ„’แ…ฎ 5 03 19

ํ˜„์žฌ์˜ ๋ฌธ์ œ

  • ์„œ๋น„์Šค๊ฐ€ ์ ์  ์ปค์ ธ๊ฐˆ์ˆ˜๋ก ํ•˜๋‚˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋„ˆ๋ฌด ๋งŽ์€ ์ผ๋“ค์„ ๊ฐ๋‹นํ•˜๊ฒŒ๋จ

  • ์„ ํƒ์  ํ™•์žฅ์ด ๋ถˆ๊ฐ€๋Šฅ

  • ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๊ฐ€ ๋ชจ๋“  ์„œ๋น„์Šค์— ์˜ํ–ฅ์„ ์คŒ

    • ์‹ค์ œ๋กœ Mysql DB, rabbitMQ, Redis ๋“ฑ ์™ธ๋ถ€ ์ž์›์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ๊ด€๋ จ ์„œ๋น„์Šค๋งŒ ์˜ํ–ฅ๋ฐ›๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด๊ฐ€ ์‹คํ–‰์ด ์•ˆ๋จ
  • ๋“ฑ๋“ฑ

์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ๊ฒƒ์ธ๊ฐ€?

  • MSA๋กœ ์„œ๋ฒ„๋“ค์„ ๋‹ค ๋ถ„๋ฆฌํ•˜์ž๋‹ˆ ํ˜„์žฌ ์œ ์ €๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋ชจ๋“  ๊ด€๊ณ„๊ฐ€ ์—ฎ์—ฌ์žˆ์Œ

    ๋‹จ๋… ์„œ๋ฒ„๋กœ ๋„์šฐ๊ธฐ ์œ„ํ•ด์„œ๋Š”

    • ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ์œ ์ € ์ค‘์‹ฌ ๊ด€๊ณ„๋ฅผ ๋ชจ๋‘ ๊ฐ€์ ธ๊ฐ„ ํ›„, ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ api ์š”์ฒญ์„ ํ†ตํ•ด ๋‹ค ๋ฐ›์•„์˜จ๋‹ค. โ‡’ ๋น„ํšจ์œจ

    • ๊ฐ ์„œ๋ฒ„๋งˆ๋‹ค ๊ด€๊ณ„๋กœ ์—ฎ์ธ ๋ถ€๋ถ„์„ ๋™์ผํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. โ‡’ ์ค‘๋ณต์ฝ”๋“œ ๋„ˆ๋ฌด ๋งŽ, ๋น„ํšจ์œจ

    โ†’์ฆ‰, ์ง€๊ธˆ ์ƒํ™ฉ์—์„œ MSA ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์˜คํžˆ๋ ค ๋น„ํšจ์œจ์ ์ž„

  • ๊ทธ๋ ‡๋‹ค๋ฉด MSA ์ฒ˜๋Ÿผ ๋ชจ๋“  ์„œ๋ฒ„๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋„์šฐ๋Š” ๊ฒƒ ๋ง๊ณ  ๊ณตํ†ต ๋ถ€๋ถ„์€ ์ตœ์†Œํ•œ์œผ๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ?

    = ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ๋กœ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑํ•˜๊ธฐ

TO-BE:

๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ๋กœ ์œ„๋”๋ทฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ๋Š” ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์„ ๋‹จ์œ„๋กœ ๋งŒ๋“ ๋‹ค.

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์‹œ์Šคํ…œ์€ ์•„๋ž˜์™€ ๊ฐ™์€ ์ •์˜๋ฅผ ๋งํ•œ๋‹ค.

system

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

์ถœ์ฒ˜: ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค - ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ์„ค๊ณ„ ์ด์•ผ๊ธฐ

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

๋ณ€๊ฒฝ์‹œ ์žฅ์ 

  • ๊ฐ ๋ชจ๋“ˆ๋ณ„๋กœ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋“ค์„ ๋”ฐ๋กœ ๊ด€๋ฆฌ โ‡’ ์ตœ์†Œ ์˜์กด์„ฑ ๋ณด์œ 

    ex) chat - rabbitMQ, MongoDB, Redis, websocket ๋“ฑ

    account - keycloak, spring-security, jwt ๋“ฑ

    study - ffmpeg, webclient ๋“ฑ

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ ์„ ํƒ

    • โญ๏ธ ํ˜„์žฌ ํ˜ผ์ž์—ฐ์Šต, ์Šคํ„ฐ๋”” ์˜์ƒ ์ €์žฅ์„ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์„ ๊ณ„ํš ์ค‘์ธ๋ฐ ์ด ๋•Œ webclient ๋ผ๋Š” ๋น„๋™๊ธฐ client ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” WebFlux ์˜์กด์„ฑ('spring-boot-starter-webflux') ํ•„์š”ํ•จ

      โ†’ ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” Spring MVC ('spring-boot-starter-web')์™€ WebFlux ์˜์กด์„ฑ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ

      โ†’ ๋ชจ๋“ˆ๋ณ„๋กœ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์Šคํ„ฐ๋”” ๊ด€๋ จ ๋ชจ๋“ˆ์—๋งŒ WebFlux ์˜์กด์„ฑ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

  • ๋ชจ๋“ˆ ๋ณ„ ์žฌ์‚ฌ์šฉ, ๊ณต์œ  ๊ฐ€๋Šฅ

  • ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์˜ํ–ฅ ์ตœ์†Œํ™”

๋ชจ๋“ˆ ๋ถ„๋ฆฌ

์ฐธ๊ณ  : ์šฐ์•„ํ•œ ํ…Œํฌ ์„ธ๋ฏธ๋‚˜, ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค - ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ์„ค๊ณ„ ์ด์•ผ๊ธฐ

= ๊ณ„์ธต ๋ถ„๋ฆฌ (์—ญํ• ๊ณผ ์ฑ…์ž„์— ๋”ฐ๋ผ)

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2021-06-06 แ„‹แ…ฉแ„’แ…ฎ 9 59 22

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2021-06-07 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 12 12 35

์šฐ์•„ํ•œ ํ˜•์ œ๋“ค์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ ๋ฐฉ์‹์„ ์ฐธ๊ณ ํ•˜๋˜, ์šฐ๋ฆฌ์˜ ์„œ๋น„์Šค์— ๋งž๊ฒŒ ๊ตฌ์„ฑ

๊ณตํ†ต ๋ชจ๋“ˆ ๊ณ„์ธต :

= ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

  • witherview-core

    • ๊ณตํ†ต business exception
    • util

์ด ๋•Œ ์™ธ๋ถ€ ์˜์กด ๊ด€๊ณ„ ์—†์ด java class๋งŒ ์ •์˜

๋„๋ฉ”์ธ ๋ชจ๋“ˆ ๊ณ„์ธต :

= ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์€ ํ•˜๋‚˜์˜ ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ณ๋งŒ ์ฑ…์ž„์ง€๋„๋ก ํ•œ๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2021-06-06 แ„‹แ…ฉแ„’แ…ฎ 9 53 22

  • domain-mysql

    • entity

    • repository

      dependency:

      • spring-boot-starter-data-jpa

      • mysql:mysql-connector-java

  • domain-mongo (์‚ฌ์‹ค ์ด๋ถ€๋ถ„์€ chat์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋‹ˆ๊นŒ chat-api ๋‚ด๋ถ€์— ์ •์˜ํ•ด๋„ ๋˜..๋‚˜? (์ผ๋‹จ ์ฐธ๊ณ ์šฉ ์˜ˆ์‹œ))

    • entity

    • repository

      dependency:

      • spring-boot-starter-data-mongodb

๋‚ด๋ถ€ ๋ชจ๋“ˆ ๊ณ„์ธต :

= ์ €์žฅ์†Œ, ๋„๋ฉ”์ธ ์™ธ ์‹œ์Šคํ…œ์—์„œ ํ•„์š”ํ•œ ๋ชจ๋“ˆ

= ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜, ๋„๋ฉ”์ธ ๋น„์ง€๋‹ˆ์Šค๋ฅผ ๋ชจ๋ฅธ๋‹ค.

  • ์ด๋ฉ”์ผ ๊ฒ€์ฆ ๋ชจ๋“ˆ

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋“ˆ ๊ณ„์ธต :

= ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋“ˆ ๊ณ„์ธต

= ํ•˜์œ„ ์„ค๊ณ„ ํ–ˆ๋˜ ๋ชจ๋“ˆ๋“ค์„ ์กฐ๋ฆฝํ•˜์—ฌ ์„œ๋น„์Šค ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ์™„์„ฑ์‹œํ‚จ๋‹ค.

application

  • account-api (๊ณ„์ •)

  • chat-api (์ฑ„ํŒ…)

  • study-api (๋ฉด์ ‘ ์—ฐ์Šต - ํ˜ผ์ž, ์Šคํ„ฐ๋””)

์ฃผ์ €๋ฆฌ์ฃผ์ €๋ฆฌ

  • ์ด ๊ฒƒ์ด ์ตœ์„ ์ผ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ๋‹ค.

  • ๊ทธ์ € ๋‚˜์˜ ์ปค๋‹ค๋ž€ ์š•์‹ฌ์ผ์ง€๋„

  • ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ ๋„๋ฉ”์ธ ๋ณ„๋กœ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋‚˜๋ˆ ์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„๋ฆฌ์ž‘์—…์— ๋Œ€ํ•œ ๊ณต์ˆ˜๊ฐ€ ์–ด์–ด์—„์ฒญ ํด ๊ฒƒ ๊ฐ™์ง„ ์•Š๋‹ค ?
    (๋ง‰์ƒ ํ•ด๋ณด๋ฉด ๋˜ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ = ๊ทธ์ € ๋‚˜์˜ ์š•์‹ฌ)

Metadata

Metadata

Assignees

Labels

๐Ÿงdiscussion์˜๋…ผ์ด ํ•„์š”ํ•œ issue

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions