Upgrade to Pro — share decks privately, control downloads, hide ads and more …

스프링캠프 2023 - 대규모 엔터프라이즈 시스템 개선 경험기 1부

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on. →

스프링캠프 2023 - 대규모 엔터프라이즈 시스템 개선 경험기 1부

스프링캠프 2023 - 대규모 엔터프라이즈 시스템 개선 경험기 1부 : 달리는 기차의 바퀴 갈아 끼우기
- 전통적인 시스템의 결합도
- Refactoring VS Rewriting
- 새로운 코드 : 새 술, 새 부대에
- 새로운 시스템으로의 이동
- 품질과 끈기

Avatar for PL;CO

PL;CO

May 08, 2023

Other Decks in Programming

Transcript

  1. The Feynman Problem-Solving Algorithm 1. write down the problem 2.

    think very hard 3. write down the answer.
  2. ઑ৔ഐ, য়࠳ં౟: ௏٘۽ ੉೧ೞח ё୓૑ೱ ࢸ҅ “ਬ૑ࠁࣻࢿ੉ ݾ಴׮. 
 ৈӝࢲ

    ਬ૑ࠁࣻࢿ੉ۆ ف۰਑ হ੉, ઱੷ೣ হ੉, 
 ੷೦х হ੉ ௏٘ܳ ߸҃ೡ ࣻ ੓ח מ۱ਸ ݈ೠ׮.”
  3. ؀ӏݽ ূఠ೐ۄ੉ૉ दझమ ѐࢶ ҃೷ӝ 1ࠗ ׳ܻח ӝର੄ ߄௰ тই

    ՙ਋ӝ • ੹ా੸ੋ दझమ੄ Ѿ೤ب • Refactoring VS Rewriting • ࢜۽਍ ௏٘ : ࢜ ࣿ, ࢜ ࠗ؀ী • ࢜۽਍ दझమਵ۽੄ ੉ز • ಿ૕җ Տӝ
  4. ؘ੉ఠ߬੉झ ҕਬ ࢲ࠺झ৬ ࣗ೐౟ਝয ૓ച੄ ߷ • SW ҳഅҗ ҙܻ੄

    ബਯ 
 → ޖѾࢿҗ ҕਬ੄ ଼੐ਸ DBী ਤ੐ • ࢲ࠺झ, SW, ઑ૒੉ ࢿ੢
 → ৘ஏ࠺ਊ੉ ૐо • ౠ੉੼ਸ ֈযࢶ ҃਋ 
 → ӝࣿ ࠗ଻ әૐ
  5. ೯ਤ ઺ࠂ ௏٘ ઺ࠂ੄ য়೧ • ࣗझ௏٘ ઺ࠂ = ӝࣿ

    ࠗ଻ • ࣗझ௏٘ 1 ѐ & API N ѐ
 : ੉ݫੌ ਬബࢿ Ѩࢎ 1 ѐ & ੉ݫੌ ੑ۱ API 5 ѐ • ࣗझ௏٘ ҕਬ ≒ ӝࣿ ࠗ଻ ഥೖ
  6. ࠳ۮ ݓې೐ܽ, ѱܻ ಫܻझ, ؘ੉ࡁ ਝझ౟, ೻٘ ಌझ౟ Object-Oriented Analysis

    & Design “઺ࠂ ௏٘ܳ ୶࢚ചೞৈ Ս૘যղח Ѫ਷ DRY (Don't Repeat Yourself) ܳ ࢎਊೞח જ਷ ୹ߊ੼੉૑݅, ӒѪ੉ ੹ࠗח ইתפ׮. 
 ৈ۞࠙੉ ઺ࠂ ௏٘ܳ ೖೞ۰Ҋ ೞח Ѫ਷ ࢎप п ӝמҗ ਃҳࢎ೦ਸ ೠ ߣ݅ ҳഅೞ۰Ҋ ֢۱ೞח Ѫੑפ׮.”
  7. ؘ੉ఠ ޖѾࢿ ҙܻ ࠺ਊ ࢲ࠺झ ࢿ੢җ ޖѾࢿ • ؘ੉ఠ ޖѾࢿ

    = ࢲ࠺झ ಿ૕ • ؘ੉ఠ ޖѾࢿਸ DB ਤ੐ 
 → ੌ੿ ӏݽ ੉ೞীࢲח ѐߊ ബਯ ࠗҗ • ࢲ࠺झ ࢿ੢җ ೯ਤ ઺ࠂ ૐо 
 → ؘ੉ఠ ޖѾࢿ ਬ૑, ҙܻ ࠺ਊ ૐо
  8. + ਋ܻ ѐߊ੗ٜ੄ ਃҳࢎ೦ FIG গ೒ܻா੉࣌਷ 
 ࢲ࠺झ ਃҳࢎ೦ ׳ࢿ੉

    ݾ੸ ਃҳࢎ೦ ೧Ѿਸ ਤೠ 
 જ਷ ࢸ҅ ಿ૕ਸ о૑Ҋ ੓যঠ ೣ
  9. ରࣁ؀ ೐۽ં౟ ղ ઱߸ীࢲ ࠻ߛ੉ द੘غӝ য۰਍ ੉ਬ • ਃҳࢎ೦਷

    ૑ࣘ੸ਵ۽ ૑ਗ೧ঠ ೞݴ 
 ੉ח SW ಿ૕ࠁ׮ ਋ࢶೞৈ ৘࢑җ ੋ۱ਸ ࢎਊ • दझమীࢲ ੌ੿ ӏݽ ੉࢚ਸ ߸҃ೞӝ ਤ೧ࢲח 
 ؀ӏݽ੄ ੋ۱җ ݆਷ दрਸ ࣗ࠺ • ੷ࣻળ੄ SW ಿ૕۽ ੋೠ Ҋా਷ 
 ӝദ౱, ࢎস౱੉ ইצ ѐߊ౱੄ ݿ੉׮.
  10. Martin Fowler, StranglerFigApplication “The most important reason to consider a

    strangler fig application over a cut-over rewrite is reduced risk.”
  11. ѐ֛੄ ࠗ੤ ੌҙࢿ੄ ೙ਃ • OO ৬ DDD ח ࣗ೐౟ਝয

    ࢸ҅ী ੌҙࢿҗ ݓۅਸ ࠗৈ • ੌҙࢿҗ ݓۅ਷ ୶࢚ച ӝࠄ ੤ܐ • ୶࢚ച۽ࠗఠ ঳਷ ݽ؛਷ ઱ਃ ҙबࢎ • ݽ؛਷ ࣗ೐౟ਝযী ױࣽೣਸ ࠗৈ
  12. ѐ֛੄ ࠗ੤ ੌҙࢿ੄ ೙ਃ • OO ৬ DDD ח ࣗ೐౟ਝয

    ࢸ҅ী ੌҙࢿҗ ݓۅਸ ࠗৈ • ੌҙࢿҗ ݓۅ਷ ୶࢚ച ӝࠄ ੤ܐ • ୶࢚ച۽ࠗఠ ঳਷ ݽ؛਷ ઱ਃ ҙबࢎ • ݽ؛਷ ࣗ೐౟ਝযী ױࣽೣਸ ࠗৈ ୓҅੸੉Ҋ ֤ܻ੸ੋ җ੿ীࢲ ೞաঀ ߊѼ೧աоঠ ೣ
  13. ઑ৔ഐ, ё୓૑ೱ੄ ࢎपҗ য়೧: ৉ೡ, ଼੐, ഈ۱ ҙ੼ীࢲ ࠄ ё୓૑ೱ

    “ੌ߈੸ਵ۽ ੋఠಕ੉झۆ যڃ ف ࢎޛ੉ ݃઱஖ח ҃҅ ૑੼ীࢲ ࢲ۽ ࢚ഐ੘ਊೡ ࣻ ੓ѱ ੉য઱ח ߑ ߨ੉ա ੢஖ܳ ੄޷ೠ׮.”
  14. Wikipedia, Event-driven architecture, K. Mani Chandy Event-driven Applications, California Institute

    of Technology, 2006 “An event can be defined as a significant change in state”
  15. Wikipedia, Publish–subscribe pattern “subscribers express interest in one or more

    classes and only receive messages that are of interest, without knowledge of which publishers, if any, there are.”
  16. ޖѾࢿҗ Eventual Consistency ੸੺ೠ ؘ੉ఠ ޖѾࢿ ҙܻ • ݽ؛, ѐ୓(Entity)

    ױਤ੄ ੉߮౟۽ ؘ੉ఠ ޖѾࢿ ਬ૑ • ੌҙػ ױਤ۽ ؘ੉ఠ ޖѾࢿ ҙܻ 
 → ޖѾࢿ ҳഅ, ҙܻ ੺ରী ױࣽೣ • ޖѾࢿ ױਤ ղীࢲ੄ וटೠ Ѿ೤ب
 → ࠼ড೧૓ ؘ੉ఠ ޖѾࢿ • ҳഅ, ҙܻ੄ ױࣽೣҗ ޖѾࢿ ъب р੄ ౟ۨ੉٘ য়೐
  17. ޖѾࢿҗ Eventual Consistency ੸੺ೠ ؘ੉ఠ ޖѾࢿ ҙܻ • ݽ؛, ѐ୓(Entity)

    ױਤ੄ ੉߮౟۽ ؘ੉ఠ ޖѾࢿ ਬ૑ • ੌҙػ ױਤ۽ ؘ੉ఠ ޖѾࢿ ҙܻ 
 → ޖѾࢿ ҳഅ, ҙܻ ੺ରী ױࣽೣ • ޖѾࢿ ױਤ ղীࢲ੄ וटೠ Ѿ೤ب
 → ࠼ড೧૓ ؘ੉ఠ ޖѾࢿ • ҳഅ, ҙܻ੄ ױࣽೣҗ ޖѾࢿ ъب р੄ ౟ۨ੉٘ য়೐ ׮নೞҊ ೂࠗೠ ੉߮౟۽ ӓࠂ
  18. DB ഥਗ V1 Module Repo. API Client ۨѢद গ೒ா੉࣌ ഥਗ

    V2 Module Repo. API FIG গ೒ா੉࣌ DB WRITE
  19. ۨѢद গ೒ܻா੉࣌ FIG গ೒ܻா੉࣌ ଵৈ੗ Repository API ଼੐ ё୓੄ ৔ࣘച৬

    ੋझఢझച ৻ࠗ۽ࠗఠ ਃ୒җ ਽׹ FIG APP ژ ׮ܲ ੷੢ࣗ N/A ۨѢद APP N/A ژ ׮ܲ ௿ۄ੉঱౟
  20. Client V2 DB ഥਗ V1 Module Repo. API Client V1

    ۨѢद গ೒ா੉࣌ ഥਗ V2 Module Repo. API FIG গ೒ா੉࣌ DB WRITE READ ௿ۄ੉঱౟ API ࢜۽਍ ਃҳࢎ೦ ୶о/ࣻ੿
 =100% < 100% First(Primary) Second(ary)
  21. DB ഥਗ V1 Module Repo. API Client V1 ۨѢद গ೒ா੉࣌

    ഥਗ V2 Module Repo. API FIG গ೒ா੉࣌ DB WRITE Client V2 READ READ READ WRITE WRITE =100% = 100%
  22. DB ഥਗ V1 Module Repo. API Client V1 ۨѢद গ೒ா੉࣌

    ഥਗ V2 Module Repo. API FIG গ೒ா੉࣌ DB WRITE Client V2 READ READ WRITE First(Primary) Second(ary) Second(ary) First(Primary)
  23. DB ഥਗ V1 Module Repo. API ۨѢद গ೒ா੉࣌ ഥਗ V2

    Module Repo. API FIG গ೒ா੉࣌ DB WRITE WRITE First(Primary) Second(ary) WRITE WRITE Second(ary) First(Primary)
  24. ҙܻ ࠺ਊ੄ ૐо • FIG ৬ ۨѢद р ࢚ഐ ଵઑ


    → दझమ੄ ࠂ੟ب ૐо • FIG ী ۨѢद ‘݅’ਸ ਤೠ ӝמ
 → ੌ߈ച غ૑ ঋ਷ ӝמ ୶о = ప੉࠶݃׮ ѐ߹ ҳഅ • ࢲ࠺झ ਃҳࢎ೦җ ҙ۲হח ҳഅ ௏٘ ૐо
 → ਃҳࢎ೦ ߸҃ द ৘ஏ ࠺ਊ ૐо
  25. ഥਗ V2 Module Repo. API Event FIG গ೒ா੉࣌ DB WRITE

    PUB SUB ? MQ • ౸ݒ ࢚ಿ ࢚క ߸҃ • ۽Ӓੋ ੌद ߸҃ • ഥਗ ঌۈ ݫद૑ ੹࣠ • ഥਗ ӂೠ ࢚క ߸҃
  26. DB ഥਗ V1 Module Repo. API API ۨѢद গ೒ா੉࣌ ഥਗ

    V2 Module Repo. API FIG গ೒ா੉࣌ DB WRITE WRITE Event PUB MQ WRITE Mirror SUB Second(ary) First(Primary)
  27. ৉ೡҗ ੄ઓࢿ ۨѢद दझమ DB ੄ ъੋೠ ࢤݺ۱ • FIG੄

    ଼੐਷ ਃҳࢎ೦ਸ ೧Ѿ
 → ۨѢद DB ؘ੉ఠ زӝചח FIG৬ח ߹ѐ • MIRROR ੄ ଼੐ = ۨѢद दझమ ؘ੉ఠ ޖѾࢿ
 → ۨѢद গ೒ۨா੉࣌ ࣗݷ റীب ۨѢद दझమ ਬ૑ • FIG ৬ MIRROR, FIG৬ ۨѢद दझమ р੄ ੄ઓࢿ੉ হ਺ 
 → ਃҳࢎ೦ ҳഅ द ۨѢद दझమ ࣻ੿ ࠺ਊ ծ୺

  28. ৉ೡҗ ੄ઓࢿ ۨѢद दझమ DB ੄ ъੋೠ ࢤݺ۱ • FIG੄

    ଼੐਷ ਃҳࢎ೦ਸ ೧Ѿ
 → ۨѢद DB ؘ੉ఠ زӝചח FIG৬ח ߹ѐ • MIRROR ੄ ଼੐ = ۨѢद दझమ ؘ੉ఠ ޖѾࢿ
 → ۨѢद গ೒ۨா੉࣌ ࣗݷ റীب ۨѢद दझమ ਬ૑ • FIG ৬ MIRROR, FIG৬ ۨѢद दझమ р੄ ੄ઓࢿ੉ হ਺ 
 → ਃҳࢎ೦ ҳഅ द ۨѢद दझమ ࣻ੿ ࠺ਊ ծ୺
 नӏ दझమҗ ۨѢद दझమ рী
 ֫਷ ਽૘ب, ծ਷ Ѿ೤ب۽ ੋ૑җࠗച ೧ࣗ
  29. DB ഥਗ V1 Module Repo. API API ۨѢद গ೒ா੉࣌ ഥਗ

    V2 Module Repo. API FIG গ೒ா੉࣌ WRITE Event PUB MQ WRITE Mirror SUB WRITE
  30. ੼૓੸ੋ ѐࢶ ਤ೷ ઴੉ӝ • Real-Time җ Near Real Time

    ਷ ׮ܴ • উ੿੸ੋ MIRROR ܳ ҳࢿೞӝө૑ दр੉ ೙ਃ
 → ࠛഛपࢿ ೧ࣗ • ؘ੉ఠ ਬप = ੢গ
  31. A ࠄࠗ B౱ ѐߊ੗ C ҵ “ੌ੿ ٸޙী ӝઓ ௿ۄ੉঱౟

    ੹ജਸ ޅೞѷחؘ, 
 ӝઓ APIী ӝദ ਃѤٜ ୶о೧઱दѷযਃ?”
  32. DB ഥਗ V1 Module Repo. API ۨѢद গ೒ா੉࣌ ഥਗ V2

    Module Repo. API FIG গ೒ா੉࣌ WRITE Event PUB MQ WRITE Mirror SUB WRITE Client V1 Client V1 WRITE Adapt WRITE Client V2
  33. DB ഥਗ V1 Module Repo. API ۨѢद গ೒ா੉࣌ ഥਗ V2

    Module Repo. API FIG গ೒ா੉࣌ WRITE Event PUB MQ WRITE Mirror SUB WRITE Client V1 Client V1 WRITE Adapt WRITE Client V2 ਃҳࢎ೦ ೧Ѿ਷ FIG ীࢲ!!
  34. D ࠄࠗ E౱ ѐߊ੗ F ҵ “੉ߣী नӏ۽ ୶оػ ؘ੉ఠ

    োز੉ ೙ਃ೧઎חؘ 
 ӝઓ DBী ప੉࠶җ ೙٘ ୶оо оמೡөਃ?”
  35. DB ഥਗ V1 Module Repo. API API ۨѢद গ೒ா੉࣌ ഥਗ

    V2 Module Repo. API FIG গ೒ா੉࣌ DB WRITE Event PUB MQ WRITE Mirror SUB
  36. The Feynman Problem-Solving Algorithm 1. write down the problem 2.

    think very hard 3. write down the answer. 4. repeat... repeat... repeat...
  37. ઓ ৢझಌ, ࢎ੉౟ न܉ࢿ ূ૑פয݂: ҳӖ੉ ҕѐೞח ࢲ࠺झ ѐߊҗ ਍৔

    ֢ೞ਋ “ޥо ઁ؀۽ ૓೯੉ ػ׮ח Ѫ਷ ޥо ઁ؀۽ ૓೯੉ غ૑ ঋח ৬઺ী ߊࢤೞח ౠ߹ೠ ҃਋ੌ ࡺ੉׮.”