μ΄ κΈ°μ¬μμλ μ κ° μμ μ€μΈ νλ‘μ νΈκ° μ΄λ»κ² λκ·λͺ¨ λ¨μΌμ²΄μμ λ§μ΄ν¬λ‘μλΉμ€ μΈνΈλ‘ λ³νλμλμ§μ λν΄ μ€λͺ νκ² μ΅λλ€.
μ΄ νλ‘μ νΈμ μμ¬λ κ½€ μ€λμ μΈ 2000λ μ΄μ μμλμμ΅λλ€. 첫 λ²μ§Έ λ²μ μ Visual Basic 6μΌλ‘ μμ±λμμ΅λλ€. μκ°μ΄ μ§λλ©΄μ IDEκ° μΈμ΄ μμ²΄κ° μ λλ‘ κ°λ°λμ§ μμμ΅λλ€. 2000λ λ λ§μλ λμ± μ λ§ν C#μΌλ‘ μ ννκΈ°λ‘ κ²°μ λμμ΅λλ€. μ λ²μ μ μ΄μ λ²μ μ κ°μ νκ³Ό λ³ννμ¬ μμ±λμμΌλ©° μ μ°¨μ μΌλ‘ .NETμμ μ μ λ λ§μ μ½λκ° μμ±λμμ΅λλ€. C#μ λ°±μλλ μ²μμλ μλΉμ€ μν€ν μ²μ μ€μ μ λμμ§λ§ κ°λ° μ€μλ λ‘μ§μ΄ ν¬ν¨λ κ³΅μ© λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νκ³ μλΉμ€κ° λ¨μΌ νλ‘μΈμ€μμ μμλμμ΅λλ€. κ·Έ κ²°κ³Ό μ°λ¦¬κ° "μλΉμ€ λͺ¨λ리μ€"λΌκ³ λΆλ₯΄λ μ ν리μΌμ΄μ μ΄ νμνμ΅λλ€.
μ΄ μ‘°ν©μ λͺ κ°μ§ μ₯μ μ€ νλλ μλΉμ€κ° μΈλΆ APIλ₯Ό ν΅ν΄ μλ‘ νΈμΆν μ μλ€λ κ²μ λλ€. λ³΄λ€ μ νν μλΉμ€, κ·Έλ¦¬κ³ λ―Έλμ λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²λ‘μ μ νμ μν΄μλ λͺ νν μ μ μ‘°κ±΄μ΄ μμμ΅λλ€.
μ°λ¦¬λ 2015λ
κ²½μ λΆν΄ μμ
μ μμνμ΅λλ€. μ°λ¦¬λ μμ§ μ΄μμ μΈ μνμ λλ¬νμ§ λͺ»νμ΅λλ€. λκ·λͺ¨ νλ‘μ νΈμλ μμ§ λͺ¨λ리μ€λΌκ³ ν μ μλ λΆλΆμ΄ μμ§λ§ λ§μ΄ν¬λ‘μλΉμ€μ²λΌ 보μ΄μ§λ μμ΅λλ€. κ·ΈλΌμλ λΆκ΅¬νκ³ μ§μ μ μλΉν©λλ€.
κΈ°μ¬μμ μ΄μ λν΄ μ΄μΌκΈ°νκ² μ΅λλ€.

λ΄μ©
κΈ°μ‘΄ μ루μ μ μν€ν μ²μ λ¬Έμ μ
μ²μμ μν€ν
μ²λ λ€μκ³Ό κ°μμ΅λλ€. UIλ λ³λμ μ ν리μΌμ΄μ
μ΄κ³ λͺ¨λ리μ λΆλΆμ Visual Basic 6μΌλ‘ μμ±λμμΌλ©° .NET μ ν리μΌμ΄μ
μ μλΉν ν° λ°μ΄ν°λ² μ΄μ€μμ μλνλ κ΄λ ¨ μλΉμ€ μΈνΈμ
λλ€.
μ΄μ μ루μ μ λ¨μ
λ¨μΌ μ€ν¨ μ§μ
λ¨μΌ μ€ν¨ μ§μ μ΄ μμμ΅λλ€. .NET μ ν리μΌμ΄μ
μ΄ λ¨μΌ νλ‘μΈμ€μμ μ€νλμμ΅λλ€. λͺ¨λ νλλΌλ μ€ν¨νλ©΄ μ 체 μ ν리μΌμ΄μ
μ΄ μ€ν¨νκ³ λ€μ μμν΄μΌ νμ΅λλ€. μ°λ¦¬λ λ€μν μ¬μ©μλ₯Ό μν΄ μλ§μ νλ‘μΈμ€λ₯Ό μλννκΈ° λλ¬Έμ κ·Έ μ€ νλμ μ€λ₯λ‘ μΈν΄ λͺ¨λ μ¬λμ΄ νλμ μμ
μ ν μ μμμ΅λλ€. μννΈμ¨μ΄ μ€λ₯κ° λ°μν κ²½μ° λ°±μ
λ λμμ΄ λμ§ μμμ΅λλ€.
κ°μ λκΈ°μ΄
μ΄ λ¨μ μ λ€μ μ‘°μ§μ μ
λλ€. μ°λ¦¬ μ ν리μΌμ΄μ
μλ λ§μ κ³ κ°μ΄ μμΌλ©°, κ·Έλ€μ λͺ¨λ κ°λ₯ν ν 빨리 κ°μ νκΈ°λ₯Ό μν©λλ€. μ΄μ μλ λ³λ ¬λ‘ μ§ννλ κ²μ΄ λΆκ°λ₯νκ³ , λͺ¨λ κ³ κ°μ΄ μ€μ μ μμμ΅λλ€. μ΄ νλ‘μΈμ€λ μμ μ μ
λ¬΄κ° κ°μΉ μλ€λ κ²μ μ
μ¦ν΄μΌ νκΈ° λλ¬Έμ κΈ°μ
μκ²λ λΆμ μ μ΄μμ΅λλ€. κ·Έλ¦¬κ³ κ°λ°νμ μ΄ λκΈ°μ΄μ μ 리νλ λ° μκ°μ 보λμ΅λλ€. μ΄λ₯Ό μν΄μλ λ§μ μκ°κ³Ό λ
Έλ ₯μ΄ νμνκ³ κ²°κ΅ μ νμ μνλ λ§νΌ λΉ λ₯΄κ² λ³κ²½λμ§ λͺ»νμ΅λλ€.
μ΅μ μ΄ μλ 리μμ€ μ¬μ©
λ¨μΌ νλ‘μΈμ€μμ μλΉμ€λ₯Ό νΈμ€ν
ν λ μ°λ¦¬λ νμ μλ²μμ μλ²λ‘ ꡬμ±μ μμ ν 볡μ¬νμ΅λλ€. μ°λ¦¬λ 리μμ€λ₯Ό λλΉνμ§ μκ³ λ°°ν¬ κ³νμ λ³΄λ€ μ μ°νκ² μ μ΄ν μ μλλ‘ κ°μ₯ λΆνκ° λμ μλΉμ€λ₯Ό λ³λλ‘ λ°°μΉνκ³ μΆμμ΅λλ€.
νλ κΈ°μ μ ꡬννκΈ°κ° μ΄λ ΅μ΅λλ€.
λͺ¨λ κ°λ°μμκ² μΉμν λ¬Έμ μ
λλ€. νλ‘μ νΈμ μ΅μ κΈ°μ μ λμ
νκ³ μΆμ§λ§ κΈ°νκ° μμ΅λλ€. λκ·λͺ¨ λͺ¨λ리μ μ루μ
μ μ¬μ©νλ©΄ μ λΌμ΄λΈλ¬λ¦¬λ‘μ μ νμ λ§ν κ²λ μκ³ νμ¬ λΌμ΄λΈλ¬λ¦¬μ λͺ¨λ μ
λ°μ΄νΈκ° λ€μ μ€μνμ§ μμ μμ
μΌλ‘ λ³ν©λλ€. μ΄κ²μ΄ λλΉλλ μ κ²½λ³΄λ€ λ λ§μ 보λμ€λ₯Ό κ°μ Έμ¬ κ²μ΄λΌλ κ²μ ν 리λμκ² μ¦λͺ
νλ λ° μ€λ μκ°μ΄ 걸립λλ€.
λ³κ²½μ¬ν λ°νμ μ΄λ €μ
μ΄κ²μ΄ κ°μ₯ μ¬κ°ν λ¬Έμ μμ΅λλ€. μ°λ¦¬λ λ λ¬μ ν λ²μ© 릴리μ€λ₯Ό μΆμνμ΅λλ€.
κ°λ°μμ ν
μ€νΈμ λ
Έλ ₯μλ λΆκ΅¬νκ³ κ° λ¦΄λ¦¬μ€λ μνμ ν° μ¬μμ΄ λμμ΅λλ€. νμ¬μμλ μ΄λ² μ£Όκ° μμλ λ μΌλΆ κΈ°λ₯μ΄ μλνμ§ μμ κ²μ΄λΌλ μ μ μ΄ν΄νμ΅λλ€. κ·Έλ¦¬κ³ κ°λ°μλ€μ μΌμ£ΌμΌ λμ μ¬κ°ν μ¬κ±΄μ΄ κΈ°λ€λ¦¬κ³ μμμ μ΄ν΄νμ΅λλ€.
λͺ¨λκ° μν©μ λ°κΎΈκ³ μΆμ΄νμ΅λλ€.
λ§μ΄ν¬λ‘μλΉμ€μ λν κΈ°λ
μ€λΉλλ©΄ ꡬμ±μμ λ°ν. μ루μ
μ λΆν΄νκ³ λ€μν νλ‘μΈμ€λ₯Ό λΆλ¦¬νμ¬ μ€λΉκ° μλ£λλ©΄ κ΅¬μ± μμλ₯Ό μ 곡ν©λλ€.
μκ·λͺ¨ μ ν ν. μ€λλ λ¨μΌμ²΄λ₯Ό μμ νλ λκ·λͺ¨ νμ κ΄λ¦¬νκΈ° μ΄λ €μ κΈ° λλ¬Έμ μ΄λ μ€μν©λλ€. μ΄λ¬ν νμ μ격ν νλ‘μΈμ€μ λ°λΌ μμ ν΄μΌ νμ§λ§ λ λ§μ μ°½μμ±κ³Ό λ 립μ±μ μνμ΅λλ€. μκ·λͺ¨ νλ§μ΄ μ΄λ₯Ό κ°λΉν μ μμ΅λλ€.
λ³λμ νλ‘μΈμ€λ‘ μλΉμ€λ₯Ό 격리ν©λλ€. μ΄μμ μΌλ‘λ 컨ν μ΄λμ 격리νκ³ μΆμ§λ§, .NET Frameworkλ‘ μμ±λ λ§μ μλΉμ€λ νΉμ νκ²½μμλ§ μ€νλ©λλ€. Windows.NET Core κΈ°λ° μλΉμ€λ€μ΄ λ±μ₯νκ³ μμ§λ§, μμ§μ κ·Έ μκ° μ μ΅λλ€.
λ°°ν¬ μ μ°μ±. μ°λ¦¬λ μ½λκ° κ°μ νλ λ°©μμ΄ μλ νμν λ°©μμΌλ‘ μλΉμ€λ₯Ό κ²°ν©νκ³ μΆμ΅λλ€.
μλ‘μ΄ κΈ°μ μ μ¬μ©. μ΄κ²μ λͺ¨λ νλ‘κ·Έλλ¨Έμκ² ν₯λ―Έλ‘μΈ κ²μ λλ€.
μ ν λ¬Έμ
λ¬Όλ‘ , λͺ¨λ리μ€λ₯Ό λ§μ΄ν¬λ‘μλΉμ€λ‘ λλλ κ²μ΄ μ½λ€λ©΄ 컨νΌλ°μ€μμ μ΄μ λν΄ μ΄μΌκΈ°νκ±°λ κΈ°μ¬λ₯Ό μΈ νμκ° μμ κ²μ
λλ€. μ΄ κ³Όμ μλ λ§μ ν¨μ μ΄ μλλ°, μ°λ¦¬λ₯Ό λ°©ν΄νλ μ£Όμ ν¨μ μ μ€λͺ
νκ² μ΅λλ€.
첫 λ²μ§Έ λ¬Έμ λλΆλΆμ λͺ¨λ리μ€μ μΌλ°μ μ: λΉμ¦λμ€ λ‘μ§μ μΌκ΄μ±. μ°λ¦¬λ λͺ¨λ Έλ¦¬μ€λ₯Ό μμ±ν λ λΆνμν μ½λλ₯Ό μμ±νμ§ μκΈ° μν΄ ν΄λμ€λ₯Ό μ¬μ¬μ©νκ³ μΆμ΅λλ€. κ·Έλ¦¬κ³ λ§μ΄ν¬λ‘μλΉμ€λ‘ μ νν λ μ΄κ²μ΄ λ¬Έμ κ° λ©λλ€. λͺ¨λ μ½λκ° μλΉν κΈ΄λ°νκ² κ²°ν©λμ΄ μκ³ μλΉμ€λ₯Ό λΆλ¦¬νκΈ°κ° μ΄λ ΅μ΅λλ€.
μμ μμ λΉμ μ μ₯μμλ 500κ° μ΄μμ νλ‘μ νΈμ 700λ§ κ° μ΄μμ μ½λ λΌμΈμ΄ μμμ΅λλ€. μ΄κ±΄ κ½€ ν° κ²°μ μ΄κ³ , λ λ²μ§Έ λ¬Έμ . λ¨μν κ°μ Έμμ λ§μ΄ν¬λ‘μλΉμ€λ‘ λλλ κ²μ λΆκ°λ₯νμ΅λλ€.
μΈ λ²μ§Έ λ¬Έμ β νμν μΈνλΌκ° λΆμ‘±ν©λλ€. μ¬μ€ μ°λ¦¬λ μμ€ μ½λλ₯Ό μλ²μ μλμΌλ‘ 볡μ¬νκ³ μμμ΅λλ€.
λͺ¨λ리μ€μμ λ§μ΄ν¬λ‘μλΉμ€λ‘ μ΄λνλ λ°©λ²
λ§μ΄ν¬λ‘μλΉμ€ νλ‘λΉμ λ
첫째, μ°λ¦¬λ λ§μ΄ν¬λ‘μλΉμ€ λΆλ¦¬κ° λ°λ³΅μ μΈ νλ‘μΈμ€λΌλ κ²μ μ¦μ μ€μ€λ‘ νλ¨νμ΅λλ€. μ°λ¦¬λ νμ λΉμ¦λμ€ λ¬Έμ λ₯Ό λμμ κ°λ°ν΄μΌ νμ΅λλ€. μ΄κ²μ κΈ°μ μ μΌλ‘ μ΄λ»κ² ꡬνν μ§λ μ΄λ―Έ μ°λ¦¬μ λ¬Έμ μ λλ€. κ·Έλμ μ°λ¦¬λ λ°λ³΅μ μΈ κ³Όμ μ μ€λΉνμ΅λλ€. λκ·λͺ¨ μ ν리μΌμ΄μ μ΄ μκ³ μ²μμ λ€μ μμ±ν μ€λΉκ° λμ΄ μμ§ μμ κ²½μ°μλ λ€λ₯Έ λ°©μμΌλ‘ μλνμ§ μμ΅λλ€.
λ§μ΄ν¬λ‘μλΉμ€λ₯Ό 격리νκΈ° μν΄ μ΄λ€ λ°©λ²μ μ¬μ©ν©λκΉ?
첫 λ²μ§Έ λ°©λ² β κΈ°μ‘΄ λͺ¨λμ μλΉμ€λ‘ μ΄λν©λλ€. μ΄ μ μμ μ΄μ΄ μ’μμ΅λλ€. WCF νλ‘ν μ½μ μ¬μ©νμ¬ μλνλ μλΉμ€κ° μ΄λ―Έ λ±λ‘λμ΄ μμμ΅λλ€. κ·Έλ€μ λ³λμ μ΄μ λΈλ¦¬λ‘ λΆλ¦¬λμμ΅λλ€. μ°λ¦¬λ κ° λΉλμ μμ μ€ν νλ‘κ·Έλ¨μ μΆκ°νμ¬ λ³λλ‘ ν¬ν νμ΅λλ€. μ΄λ μ ν리μΌμ΄μ μ μλΉμ€μ μ½μλ‘ μ€νν μ μλ λ©μ§ Topshelf λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ μμ±λμμ΅λλ€. μ루μ μ μΆκ° νλ‘μ νΈκ° νμνμ§ μμΌλ―λ‘ λλ²κΉ μ νΈλ¦¬ν©λλ€.
μλΉμ€λ κ³΅ν΅ μ΄μ λΈλ¦¬λ₯Ό μ¬μ©νκ³ κ³΅ν΅ λ°μ΄ν°λ² μ΄μ€λ‘ μμ νκΈ° λλ¬Έμ λΉμ¦λμ€ λ Όλ¦¬μ λ°λΌ μ°κ²°λμμ΅λλ€. μμν ννλ‘λ λ§μ΄ν¬λ‘μλΉμ€λΌκ³ λΆλ₯Ό μ μμ΅λλ€. κ·Έλ¬λ μ΄λ¬ν μλΉμ€λ₯Ό μλ‘ λ€λ₯Έ νλ‘μΈμ€μμ λ³λλ‘ μ 곡ν μλ μμ΅λλ€. μ΄κ²λ§μΌλ‘λ μλ‘μ λν μν₯λ ₯μ μ€μΌ μ μμκ³ , λ³λ ¬ κ°λ° λ¬Έμ μ λ¨μΌ μ€ν¨ μ§μ λ¬Έμ λ μ€μΌ μ μμμ΅λλ€.
νΈμ€νΈμμ μ΄μ λΈλ¦¬λ Program ν΄λμ€μ μ½λ ν μ€μ λΆκ³Όν©λλ€. μ°λ¦¬λ 보쑰 μμ μμ Topshelf μμ μ μ¨κ²Όμ΅λλ€.
namespace RBA.Services.Accounts.Host
{
internal class Program
{
private static void Main(string[] args)
{
HostRunner<Accounts>.Run("RBA.Services.Accounts.Host");
}
}
}
λ§μ΄ν¬λ‘μλΉμ€λ₯Ό ν λΉνλ λ λ²μ§Έ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€. μλ‘μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ κ·Έκ²λ€μ λ§λλλ€. λμμ λͺ¨λ리μ€κ° μ±μ₯νμ§ μλλ€λ©΄ μ΄κ²μ μ΄λ―Έ νλ₯ν κ²μ΄λ©° μ΄λ μ°λ¦¬κ° μ¬λ°λ₯Έ λ°©ν₯μΌλ‘ μμ§μ΄κ³ μμμ μλ―Έν©λλ€. μλ‘μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λ³λμ μλΉμ€λ₯Ό λ§λ€λ €κ³ λ Έλ ₯νμ΅λλ€. κ·Έλ¬ν κΈ°νκ° μλ€λ©΄ μ°λ¦¬λ μ체 λ°μ΄ν° λͺ¨λΈ, μ¦ λ³λμ λ°μ΄ν°λ² μ΄μ€λ₯Ό μμ ν κ΄λ¦¬νλ λ λ§μ "νμ€" μλΉμ€λ₯Ό λ§λ€μμ΅λλ€.
λ§μ μ¬λλ€κ³Ό λ§μ°¬κ°μ§λ‘ μ°λ¦¬λ μΈμ¦ λ° κΆν λΆμ¬ μλΉμ€λ‘ μμνμ΅λλ€. κ·Έλ€μ μ΄κ²μ μλ²½ν©λλ€. κ·Έλ€μ λ 립μ μ΄λ©° μμΉμ μΌλ‘ λ³λμ λ°μ΄ν° λͺ¨λΈμ κ°μ§κ³ μμ΅λλ€. κ·Έλ€ μμ μ λ¨μΌμ²΄μ μνΈ μμ©νμ§ μμΌλ©° λ¨μ§ λͺ κ°μ§ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λ Έλ ₯ν©λλ€. μ΄λ¬ν μλΉμ€λ₯Ό μ¬μ©νλ©΄ μλ‘μ΄ μν€ν μ²λ‘μ μ νμ μμνκ³ , μΈνλΌλ₯Ό λλ²κΉ νκ³ , λ€νΈμν¬ λΌμ΄λΈλ¬λ¦¬μ κ΄λ ¨λ λͺ κ°μ§ μ κ·Ό λ°©μμ μλν΄ λ³Ό μ μμ΅λλ€. μ°λ¦¬ μ‘°μ§μλ μΈμ¦ μλΉμ€λ₯Ό λ§λ€ μ μλ νμ΄ μμ΅λλ€.
λ§μ΄ν¬λ‘μλΉμ€λ₯Ό ν λΉνλ μΈ λ²μ§Έ λ°©λ²μ°λ¦¬κ° μ¬μ©νλ κ²μ μ°λ¦¬μκ² μ‘°κΈ κ΅¬μ²΄μ μ λλ€. μ΄λ UI λ μ΄μ΄μμ λΉμ¦λμ€ λ‘μ§μ μ κ±°νλ κ²μ λλ€. μ°λ¦¬μ κΈ°λ³Έ UI μ ν리μΌμ΄μ μ λ°μ€ν¬ν±μ΄λ©° λ°±μλμ λ§μ°¬κ°μ§λ‘ C#μΌλ‘ μμ±λμμ΅λλ€. κ°λ°μλ μ£ΌκΈ°μ μΌλ‘ μ€μλ₯Ό μ μ§λ₯΄κ³ λ°±μλμ μ‘΄μ¬νκ³ μ¬μ¬μ©λμ΄μΌ νλ λ‘μ§μ μΌλΆλ₯Ό UIλ‘ μ μ‘νμ΅λλ€.
UI λΆλΆμ μ½λμμ μ€μ μμ λ₯Ό μ΄ν΄λ³΄λ©΄ μ΄ μ루μ μ λλΆλΆμλ λ¨μν UI μμμ μμ±νλ κ²μ΄ μλλΌ λ€λ₯Έ νλ‘μΈμ€μμ μ μ©ν μ€μ λΉμ¦λμ€ λ‘μ§μ΄ ν¬ν¨λμ΄ μμμ μ μ μμ΅λλ€.

μ€μ UI λ‘μ§μ λ§μ§λ§ λͺ μ€μλ§ μμ΅λλ€. μ¬μ¬μ©μ΄ κ°λ₯νλλ‘ μλ²λ‘ μ μ‘νμ¬ UIλ₯Ό μ€μ΄κ³ μ¬λ°λ₯Έ μν€ν
μ²λ₯Ό ꡬννμ΅λλ€.
λ§μ΄ν¬λ‘μλΉμ€λ₯Ό λΆλ¦¬νλ λ€ λ²μ§Έμ΄μ κ°μ₯ μ€μν λ°©λ²λͺ¨λ리μ€λ₯Ό μ€μΌ μ μλ λ°©λ²μ μ²λ¦¬λ₯Ό ν΅ν΄ κΈ°μ‘΄ μλΉμ€λ₯Ό μ κ±°νλ κ²μ λλ€. κΈ°μ‘΄ λͺ¨λμ μλ κ·Έλλ‘ κΊΌλ΄λ©΄ κ²°κ³Όκ° νμ κ°λ°μμ λ§μμ λ€μ§ μμ μλ μκ³ , κΈ°λ₯μ΄ λ§λ€μ΄μ§ μ΄ν λΉμ¦λμ€ νλ‘μΈμ€κ° ꡬμμ΄ λ μλ μμ΅λλ€. λΉμ¦λμ€ μꡬ μ¬νμ΄ λμμμ΄ λ³ννκΈ° λλ¬Έμ 리ν©ν λ§μ ν΅ν΄ μλ‘μ΄ λΉμ¦λμ€ νλ‘μΈμ€λ₯Ό μ§μν μ μμ΅λλ€. μμ€ μ½λλ₯Ό κ°μ νκ³ , μλ €μ§ κ²°ν¨μ μ κ±°νκ³ , λ λμ λ°μ΄ν° λͺ¨λΈμ λ§λ€ μ μμ΅λλ€. λ§μ ννμ΄ λ°μνκ³ μμ΅λλ€.
μλΉμ€μ μ²λ¦¬λ₯Ό λΆλ¦¬νλ κ²μ μ νλ 컨ν μ€νΈμ κ°λ κ³Ό λΆκ°λΆμ κ΄κ³κ° μμ΅λλ€. μ΄κ²μ Domain Driven Designμ κ°λ μ λλ€. λ¨μΌ μΈμ΄μ λͺ¨λ μ©μ΄κ° κ³ μ νκ² μ μλμ΄ μλ λλ©μΈ λͺ¨λΈμ ν λΆλΆμ μλ―Έν©λλ€. 보νκ³Ό μ²κ΅¬μμ λ§₯λ½μ μλ‘ λ€μ΄ μ΄ν΄λ³΄κ² μ΅λλ€. μ°λ¦¬λ λͺ¨λ리μ μ ν리μΌμ΄μ μ κ°κ³ μμΌλ©° 보ν κ³μ μ μ¬μ©νμ¬ μμ ν΄μΌ ν©λλ€. κ°λ°μκ° λ€λ₯Έ μ΄μ λΈλ¦¬μμ κΈ°μ‘΄ Account ν΄λμ€λ₯Ό μ°Ύμ μ΄λ₯Ό Insurance ν΄λμ€μμ μ°Έμ‘°νλ©΄ μμ μ½λκ° μμ±λ κ²μΌλ‘ μμν©λλ€. DRY μμΉμ΄ μ‘΄μ€λλ©° κΈ°μ‘΄ μ½λλ₯Ό μ¬μ©νλ©΄ μμ μ΄ λ λΉ λ₯΄κ² μλ£λ©λλ€.
κ²°κ³Όμ μΌλ‘ κ³μ κ³Ό 보νμ λ§₯λ½μ΄ μ°κ²°λμ΄ μμμ΄ λ°νμ‘μ΅λλ€. μλ‘μ΄ μꡬ μ¬νμ΄ λνλλ©΄ μ΄λ¬ν κ²°ν©μ κ°λ°μ λ°©ν΄νμ¬ μ΄λ―Έ 볡μ‘ν λΉμ¦λμ€ λ Όλ¦¬μ 볡μ‘μ±μ μ¦κ°μν΅λλ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ €λ©΄ μ½λμμ 컨ν μ€νΈ κ°μ κ²½κ³λ₯Ό μ°Ύμ μλ° μ¬νμ μ κ±°ν΄μΌ ν©λλ€. μλ₯Ό λ€μ΄, 보νμ κ²½μ° 20μ리 μ€μμν κ³μ’λ²νΈμ κ³μ’ κ°μ€ λ μ§λ§μΌλ‘ μΆ©λΆν κ°λ₯μ±μ΄ λμ΅λλ€.
μ΄λ¬ν μ νλ 컨ν μ€νΈλ₯Ό μλ‘ λΆλ¦¬νκ³ λͺ¨λ리μ μ루μ μμ λ§μ΄ν¬λ‘μλΉμ€λ₯Ό λΆλ¦¬νλ νλ‘μΈμ€λ₯Ό μμνκΈ° μν΄ μ°λ¦¬λ μ ν리μΌμ΄μ λ΄μμ μΈλΆ APIλ₯Ό μμ±νλ λ±μ μ κ·Ό λ°©μμ μ¬μ©νμ΅λλ€. μΌλΆ λͺ¨λμ΄ λ§μ΄ν¬λ‘μλΉμ€κ° λμ΄μΌ νκ³ νλ‘μΈμ€ λ΄μμ μ΄λ»κ²λ μμ λμ΄μΌ νλ€λ κ²μ μκ³ μλ€λ©΄ μΈλΆ νΈμΆμ ν΅ν΄ λ€λ₯Έ μ νλ 컨ν μ€νΈμ μνλ λ‘μ§μ μ¦μ νΈμΆνμ΅λλ€. μλ₯Ό λ€μ΄ REST λλ WCFλ₯Ό ν΅ν΄.
μ°λ¦¬λ λΆμ° νΈλμμ μ΄ νμν μ½λλ₯Ό νΌνμ§ μκ² λ€κ³ κ΅³κ² κ²°μ¬νμ΅λλ€. μ°λ¦¬μ κ²½μ° μ΄ κ·μΉμ λ°λ₯΄λ κ²μ΄ λ§€μ° μ¬μ΄ κ²μΌλ‘ λνλ¬μ΅λλ€. μ격ν λΆμ° νΈλμμ μ΄ μ€μ λ‘ νμν μν©μ μμ§κΉμ§ λ°μνμ§ μμμ΅λλ€. λͺ¨λ κ°μ μ΅μ’ μΌκ΄μ±μ μλΉν μΆ©λΆν©λλ€.
ꡬ체μ μΈ μλ₯Ό μ΄ν΄ λ³΄κ² μ΅λλ€. μ°λ¦¬λ "μ ν리μΌμ΄μ "μ μν°ν°λ₯Ό μ²λ¦¬νλ νμ΄νλΌμΈμΈ μ€μΌμ€νΈλ μ΄ν°λΌλ κ°λ μ κ°μ§κ³ μμ΅λλ€. κ·Έλ κ³ κ°, κ³μ’ λ° μν μΉ΄λλ₯Ό μ°¨λ‘λ‘ λ§λλλ€. ν΄λΌμ΄μΈνΈμ κ³μ μ΄ μ±κ³΅μ μΌλ‘ μμ±λμμΌλ μΉ΄λ μμ±μ μ€ν¨ν κ²½μ°, μ ν리μΌμ΄μ μ 'μ±κ³΅' μνλ‘ μ΄λνμ§ μκ³ 'μΉ΄λ μμ± μ λ¨' μνλ‘ μ μ§λ©λλ€. μμΌλ‘λ λ°±κ·ΈλΌμ΄λ νλμ΄ μ΄λ₯Ό μ ννμ¬ μλ£ν κ²μ λλ€. νλμ μμ€ν μ΄ μΌκ΄μ±μ΄ μλ μνμμ§λ§, μ°λ¦¬λ λμ²΄λ‘ μ΄μ λ§μ‘±νκ³ μμ΅λλ€.
λ°μ΄ν°μ μΌλΆλ₯Ό μ§μμ μΌλ‘ μ μ₯ν΄μΌ νλ μν©μ΄ λ°μνλ©΄ μ΄λ₯Ό νλμ νλ‘μΈμ€λ‘ μ²λ¦¬νκΈ° μν΄ μλΉμ€ ν΅ν©μ μ§νν κ°λ₯μ±μ΄ λμ΅λλ€.
λ§μ΄ν¬λ‘μλΉμ€ ν λΉμ μλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€. μ΄λ»κ² λΉκ΅μ μμ νκ² μμ°μ ν¬μ ν μ μλμ? μ΄ μμλ μμ€ν μ λ³λ λΆλΆμΈ κΈμ¬ μλΉμ€ λͺ¨λμ΄ μμΌλ©°, μ΄ λͺ¨λμ μ½λ μΉμ μ€ νλλ λ§μ΄ν¬λ‘μλΉμ€λ₯Ό λ§λ€κ³ μ ν©λλ€.

μ°μ , μ½λλ₯Ό λ€μ μμ±νμ¬ λ§μ΄ν¬λ‘μλΉμ€λ₯Ό λ§λλλ€. λ§μ‘±μ€λ½μ§ λͺ»ν λΆλΆμ κ°μ νκ³ μμ΅λλ€. μ°λ¦¬λ κ³ κ°μ μλ‘μ΄ λΉμ¦λμ€ μꡬ μ¬νμ ꡬνν©λλ€. UIμ λ°±μλ κ°μ μ°κ²°μ API κ²μ΄νΈμ¨μ΄λ₯Ό μΆκ°νμ¬ ν΅ν μ λ¬μ μ 곡ν©λλ€.

λ€μμΌλ‘ μ΄ κ΅¬μ±μ μλνλλ‘ μΆμνμ§λ§ νμΌλΏ μνμ
λλ€. λλΆλΆμ μ¬μ©μλ μ¬μ ν μ€λλ λΉμ¦λμ€ νλ‘μΈμ€λ₯Ό μ¬μ©νκ³ μμ΅λλ€. μ κ· μ¬μ©μλ₯Ό μν΄ μ°λ¦¬λ λ μ΄μ μ΄ νλ‘μΈμ€λ₯Ό ν¬ν¨νμ§ μλ μλ‘μ΄ λ²μ μ λͺ¨λ리μ μ ν리μΌμ΄μ
μ κ°λ°νκ³ μμ΅λλ€. λ³Έμ§μ μΌλ‘ μ°λ¦¬λ νμΌλΏμΌλ‘ μλνλ λͺ¨λ리μ€μ λ§μ΄ν¬λ‘μλΉμ€μ μ‘°ν©μ κ°μ§κ³ μμ΅λλ€.

μ±κ³΅μ μΈ νμΌλΏμ ν΅ν΄ μ°λ¦¬λ μλ‘μ΄ κ΅¬μ±μ΄ μ€μ λ‘ μ€ν κ°λ₯νλ€λ κ²μ μ΄ν΄νκ³ λ°©μ μμμ κΈ°μ‘΄ λͺ¨λ리μ€λ₯Ό μ κ±°νκ³ κΈ°μ‘΄ μ루μ
λμ μ ꡬμ±μ λ¨κ²¨ λ μ μμ΅λλ€.

μ 체μ μΌλ‘ μ°λ¦¬λ λͺ¨λ리μ€μ μμ€ μ½λλ₯Ό λΆν νκΈ° μν΄ κ±°μ λͺ¨λ κΈ°μ‘΄ λ°©λ²μ μ¬μ©ν©λλ€. μ΄λ€ λͺ¨λλ₯Ό ν΅ν΄ μ°λ¦¬λ μ ν리μΌμ΄μ
λΆλΆμ ν¬κΈ°λ₯Ό μ€μ΄κ³ μ΄λ₯Ό μλ‘μ΄ λΌμ΄λΈλ¬λ¦¬λ‘ λ³ννμ¬ λ λμ μμ€ μ½λλ₯Ό λ§λ€ μ μμ΅λλ€.
λ°μ΄ν°λ² μ΄μ€ μμ
λ°μ΄ν°λ² μ΄μ€μλ νμ¬ μ€ν€λ§λΏλ§ μλλΌ λμ λ κΈ°λ‘ λ°μ΄ν°λ ν¬ν¨λμ΄ μκΈ° λλ¬Έμ μμ€ μ½λλ³΄λ€ λ λμκ² λΆν λ μ μμ΅λλ€.
λ€λ₯Έ λ§μ λ°μ΄ν°λ² μ΄μ€μ λ§μ°¬κ°μ§λ‘ μ°λ¦¬ λ°μ΄ν°λ² μ΄μ€μλ λ λ€λ₯Έ μ€μν λ¨μ μ΄ μμμ΅λλ€. λ°λ‘ ν¬κΈ°κ° μμ²λ¬μ΅λλ€. μ΄ λ°μ΄ν°λ² μ΄μ€λ λͺ¨λ리μ€μ 볡μ‘ν λΉμ¦λμ€ λ‘μ§κ³Ό λ€μν κ²½κ³ μ»¨ν μ€νΈμ ν μ΄λΈ μ¬μ΄μ μΆμ λ κ΄κ³μ λ°λΌ μ€κ³λμμ΅λλ€.
μ°λ¦¬μ κ²½μ° λͺ¨λ λ¬Έμ (λκ·λͺ¨ λ°μ΄ν°λ² μ΄μ€, λ§μ μ°κ²°, λλ‘λ ν μ΄λΈ κ° κ²½κ³κ° λΆλΆλͺ ν¨) μΈμλ λ§μ λκ·λͺ¨ νλ‘μ νΈμμ λ°μνλ λ¬Έμ μΈ κ³΅μ λ°μ΄ν°λ² μ΄μ€ ν νλ¦Ώ μ¬μ©μ΄ λ°μνμ΅λλ€. λ°μ΄ν°λ 보기μ 볡μ λ₯Ό ν΅ν΄ ν μ΄λΈμμ κ°μ Έμ¨ ν μ΄ λ³΅μ κ° νμν λ€λ₯Έ μμ€ν μΌλ‘ μ λ¬λμμ΅λλ€. κ²°κ³Όμ μΌλ‘ ν μ΄λΈμ΄ νλ°ν μ¬μ©λμκΈ° λλ¬Έμ λ³λμ μ€ν€λ§λ‘ μ΄λν μ μμμ΅λλ€.
μ½λμμ μ νλ 컨ν μ€νΈλ‘ λμΌν λΆν μ΄ λΆλ¦¬μ λμμ΄ λ©λλ€. μ΄λ μΌλ°μ μΌλ‘ λ°μ΄ν°λ² μ΄μ€ μμ€μμ λ°μ΄ν°λ₯Ό μ΄λ»κ² λΆλ₯νλμ§μ λν κ½€ μ’μ μμ΄λμ΄λ₯Ό μ 곡ν©λλ€. μ°λ¦¬λ μ΄λ€ ν μ΄λΈμ΄ νλμ μ νλ 컨ν μ€νΈμ μνκ³ μ΄λ€ ν μ΄λΈμ΄ λ€λ₯Έ 컨ν μ€νΈμ μνλμ§ μ΄ν΄ν©λλ€.
μ°λ¦¬λ λ°μ΄ν°λ² μ΄μ€ νν°μ λμ λ κ°μ§ κΈλ‘λ² λ°©λ², μ¦ κΈ°μ‘΄ ν μ΄λΈ νν°μ λκ³Ό μ²λ¦¬λ₯Ό ν΅ν νν°μ λμ μ¬μ©νμ΅λλ€.
κΈ°μ‘΄ ν μ΄λΈμ λΆν νλ κ²μ λ°μ΄ν° κ΅¬μ‘°κ° μνΈνκ³ λΉμ¦λμ€ μꡬ μ¬νμ μΆ©μ‘±νλ©° λͺ¨λκ° λ§μ‘±ν κ²½μ° μ¬μ©νλ μ’μ λ°©λ²μ λλ€. μ΄ κ²½μ° κΈ°μ‘΄ ν μ΄λΈμ λ³λμ μ€ν€λ§λ‘ λΆλ¦¬ν μ μμ΅λλ€.
λΉμ¦λμ€ λͺ¨λΈμ΄ ν¬κ² λ°λκ³ ν μ΄λΈμ΄ λ μ΄μ μ°λ¦¬λ₯Ό μ ν λ§μ‘±μν€μ§ λͺ»νλ κ²½μ° μ²λ¦¬ λΆμκ° νμν©λλ€.
κΈ°μ‘΄ ν μ΄λΈ λΆν . μ°λ¦¬λ 무μμ λΆλ¦¬ν μ§ κ²°μ ν΄μΌ ν©λλ€. μ΄ μ§μμ΄ μμΌλ©΄ μ무κ²λ μλνμ§ μμΌλ©° μ¬κΈ°μλ μ½λμμ μ νλ 컨ν μ€νΈλ₯Ό λΆλ¦¬νλ κ²μ΄ λμμ΄ λ κ²μ λλ€. μΌλ°μ μΌλ‘ μμ€ μ½λμμ 컨ν μ€νΈμ κ²½κ³λ₯Ό μ΄ν΄ν μ μμΌλ©΄ λΆμ λͺ©λ‘μ μ΄λ€ ν μ΄λΈμ ν¬ν¨ν΄μΌ νλμ§ λͺ νν΄μ§λλ€.
λ κ°μ λͺ¨λλ¦¬μ€ λͺ¨λμ΄ νλμ λ°μ΄ν°λ² μ΄μ€μ μνΈ μμ©νλ μ루μ μ΄ μλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€. νλμ λͺ¨λλ§ λΆλ¦¬λ ν μ΄λΈ μΉμ κ³Ό μνΈ μμ©νκ³ λ€λ₯Έ λͺ¨λμ APIλ₯Ό ν΅ν΄ μνΈ μμ©μ μμνλμ§ νμΈν΄μΌ ν©λλ€. μ°μ , APIλ₯Ό ν΅ν΄μλ§ λ Ήμλ§ νλ©΄ μΆ©λΆν©λλ€. μ΄λ λ§μ΄ν¬λ‘μλΉμ€μ λ 립μ±μ λ ΌνκΈ° μν νμ 쑰건μ λλ€. ν° λ¬Έμ κ° μλ ν λ μ μ°κ²°μ μ μ§λ μ μμ΅λλ€.

λ€μ λ¨κ³λ μ²λ¦¬ μ¬λΆμ κ΄κ³μμ΄ λΆλ¦¬λ ν
μ΄λΈμ μ¬μ©νμ¬ μλνλ μ½λ μΉμ
μ λ³λμ λ§μ΄ν¬λ‘μλΉμ€λ‘ λΆλ¦¬νκ³ μ΄λ₯Ό λ³λμ νλ‘μΈμ€μΈ 컨ν
μ΄λμμ μ€νν μ μλ€λ κ²μ
λλ€. μ΄λ λͺ¨λ리μ λ°μ΄ν°λ² μ΄μ€ λ° μ΄μ μ§μ κ΄λ ¨λμ§ μμ ν
μ΄λΈμ μ°κ²°λ λ³λμ μλΉμ€μ
λλ€. λͺ¨λ리μ€λ μ¬μ ν λΆλ¦¬ κ°λ₯ν λΆλΆκ³Ό μ½κΈ°λ₯Ό μν΄ μνΈ μμ©ν©λλ€.

λμ€μ μ΄ μ°κ²°μ μ κ±°ν κ²μ
λλ€. μ¦, λΆλ¦¬λ ν
μ΄λΈμ λͺ¨λ리μ μ ν리μΌμ΄μ
μμ λ°μ΄ν°λ₯Ό μ½λ κ²λ APIλ‘ μ μ‘λ©λλ€.

λ€μμΌλ‘, μλ‘μ΄ λ§μ΄ν¬λ‘μλΉμ€λ§ μλνλ ν
μ΄λΈμ μΌλ° λ°μ΄ν°λ² μ΄μ€μμ μ νν©λλ€. ν
μ΄λΈμ λ³λμ μ€ν€λ§λ‘ μ΄λνκ±°λ λ³λμ 물리μ λ°μ΄ν°λ² μ΄μ€λ‘ μ΄λν μλ μμ΅λλ€. λ§μ΄ν¬λ‘μλΉμ€μ λͺ¨λ리μ λ°μ΄ν°λ² μ΄μ€ μ¬μ΄μλ μ¬μ ν μ½κΈ° μ°κ²°μ΄ μμ§λ§ κ±±μ ν νμκ° μμ΅λλ€. μ΄ κ΅¬μ±μμλ μλΉν μ€λ«λμ μ§μλ μ μμ΅λλ€.

λ§μ§λ§ λ¨κ³λ λͺ¨λ μ°κ²°μ μμ ν μ κ±°νλ κ²μ
λλ€. μ΄ κ²½μ° κΈ°λ³Έ λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°λ₯Ό λ§μ΄κ·Έλ μ΄μ
ν΄μΌ ν μλ μμ΅λλ€. λλ‘λ μΈλΆ μμ€ν
μμ 볡μ λ μΌλΆ λ°μ΄ν°λ λλ ν°λ¦¬λ₯Ό μ¬λ¬ λ°μ΄ν°λ² μ΄μ€μ μ¬μ¬μ©νκ³ μΆμ λκ° μμ΅λλ€. μ΄κ²μ μ°λ¦¬μκ² μ£ΌκΈ°μ μΌλ‘ λ°μν©λλ€.

κ°κ³΅λΆ. μ΄ λ°©λ²μ 첫 λ²μ§Έ λ°©λ²κ³Ό λ§€μ° μ μ¬νμ§λ§ μμκ° λ°λμ
λλ€. μ°λ¦¬λ APIλ₯Ό ν΅ν΄ λͺ¨λ리μ€μ μνΈ μμ©νλ μλ‘μ΄ λ°μ΄ν°λ² μ΄μ€μ μλ‘μ΄ λ§μ΄ν¬λ‘μλΉμ€λ₯Ό μ¦μ ν λΉν©λλ€. κ·Έλ¬λ λμμ λμ€μ μμ νλ €λ λ°μ΄ν°λ² μ΄μ€ ν
μ΄λΈ μΈνΈλ λ¨μ μμ΅λλ€. λ μ΄μ νμνμ§ μμΌλ©° μ λͺ¨λΈλ‘ κ΅μ²΄νμ΅λλ€.

μ΄ κ³νμ΄ μλνλ €λ©΄ μ ν κΈ°κ°μ΄ νμν κ²μ
λλ€.
κ·Έλ¬λ©΄ λ κ°μ§ κ°λ₯ν μ κ·Ό λ°©μμ΄ μμ΅λλ€.
μ²μμΌλ‘: μ λ°μ΄ν°λ² μ΄μ€μ κΈ°μ‘΄ λ°μ΄ν°λ² μ΄μ€μ λͺ¨λ λ°μ΄ν°λ₯Ό 볡μ ν©λλ€. μ΄ κ²½μ° λ°μ΄ν° μ€λ³΅μ±κ³Ό λκΈ°ν λ¬Έμ κ° λ°μν μ μμ΅λλ€. νμ§λ§ μ°λ¦¬λ λ λͺ μ λ€λ₯Έ ν΄λΌμ΄μΈνΈλ₯Ό κ°μ§ μ μμ΅λλ€. νλλ μ λ²μ μμ μλνκ³ λ€λ₯Έ νλλ μ΄μ λ²μ μμ μλν©λλ€.
μ΄: μΌλΆ λΉμ¦λμ€ κΈ°μ€μ λ°λΌ λ°μ΄ν°λ₯Ό λλλλ€. μλ₯Ό λ€μ΄, μμ€ν μλ μ΄μ λ°μ΄ν°λ² μ΄μ€μ μ μ₯λ 5κ°μ μ νμ΄ μμμ΅λλ€. μ°λ¦¬λ μ λ°μ΄ν°λ² μ΄μ€μ μ λΉμ¦λμ€ μμ λ΄μ μ¬μ― λ²μ§Έ νλͺ©μ λ°°μΉν©λλ€. νμ§λ§ μ°λ¦¬λ μ΄ λ°μ΄ν°λ₯Ό λκΈ°ννκ³ ν΄λΌμ΄μΈνΈμκ² μ΄λμ 무μμ μ»μμ§ λ³΄μ¬μ€ API κ²μ΄νΈμ¨μ΄κ° νμν©λλ€.
λ μ κ·Ό λ°©μ λͺ¨λ μλνλ―λ‘ μν©μ λ°λΌ μ ννμΈμ.
λͺ¨λ κ²μ΄ μλνλ€κ³ νμΈν νμλ μ΄μ λ°μ΄ν°λ² μ΄μ€ ꡬ쑰μμ μλνλ λͺ¨λλ¦¬μ€ λΆλΆμ λΉνμ±νν μ μμ΅λλ€.

λ§μ§λ§ λ¨κ³λ μ΄μ λ°μ΄ν° ꡬ쑰λ₯Ό μ κ±°νλ κ²μ
λλ€.

μμ½νμλ©΄, λ°μ΄ν°λ² μ΄μ€μ λ¬Έμ κ° μλ€κ³ λ§ν μ μμ΅λλ€. μμ€ μ½λμ λΉν΄ μμ
νκΈ°κ° μ΄λ ΅κ³ 곡μ νκΈ°κ° λ μ΄λ ΅μ§λ§ μνν μ μκ³ μνν΄μΌ ν©λλ€. μ°λ¦¬λ μ΄λ₯Ό λ§€μ° μμ νκ² μνν μ μλ λͺ κ°μ§ λ°©λ²μ μ°Ύμμ§λ§ μ¬μ ν μμ€ μ½λλ³΄λ€ λ°μ΄ν°λ‘ μ€μνκΈ°κ° λ μ½μ΅λλ€.
μμ€ μ½λ μμ
μ΄κ²μ΄ λͺ¨λ리μ νλ‘μ νΈ λΆμμ μμνμ λμ μμ€ μ½λ λ€μ΄μ΄κ·Έλ¨μ λͺ¨μ΅μ
λλ€.

λλ΅ 10κ°μ μΈ΅μΌλ‘ λλ μ μμ΅λλ€. μ΄λ μ€νλ λͺ¨λ, νλ¬κ·ΈμΈ, μλΉμ€ λ° κ°λ³ νλμ κ³μΈ΅μ
λλ€. μ€μ λ‘ μ΄λ λͺ¨λ리μ μ루μ
λ΄μ μ§μ
μ μ΄μμ΅λλ€. λͺ¨λ Common λ μ΄μ΄λ‘ λ¨λ¨ν λ°λ΄λμ΄ μμμ΅λλ€. μλΉμ€κ° 곡μ νλ λΉμ¦λμ€ λ‘μ§κ³Ό λ§μ μ°κ²°μ΄ μμμ΅λλ€. κ° μλΉμ€μ νλ¬κ·ΈμΈμ κ·λͺ¨μ κ°λ°μμ μμ¬μ λ°λΌ μ΅λ XNUMXκ° μ΄μμ κ³΅ν΅ μ΄μ
λΈλ¦¬λ₯Ό μ¬μ©νμ΅λλ€.
λ³λλ‘ μ¬μ©ν μ μλ μΈνλΌ λΌμ΄λΈλ¬λ¦¬κ° μλ€λ κ²μ νμ΄μ΄μμ΅λλ€.
μΌλΆ κ³΅ν΅ κ°μ²΄κ° μ€μ λ‘ μ΄ κ³μΈ΅μ μνμ§ μκ³ μΈνλΌ λΌμ΄λΈλ¬λ¦¬μΈ μν©μ΄ λ°μνλ κ²½μ°λ μμ΅λλ€. μ΄λ¦μ λ°κΎΈλ©΄ ν΄κ²°λμμ΅λλ€.
κ°μ₯ ν° κ΄μ¬μ¬λ μ νλ 컨ν μ€νΈμμ΅λλ€. 3~4κ°μ 컨ν μ€νΈκ° νλμ κ³΅ν΅ μ΄μ λΈλ¦¬μ νΌν©λμ΄ λμΌν λΉμ¦λμ€ κΈ°λ₯ λ΄μμ μλ‘ μ¬μ©λλ μΌμ΄ λ°μνμ΅λλ€. μ΄κ²μ΄ μ΄λμμ μ΄λ€ κ²½κ³λ₯Ό λ°λΌ λΆν λ μ μλμ§, κ·Έλ¦¬κ³ μ΄ λΆν μ μμ€ μ½λ μ΄μ λΈλ¦¬μ λ§€ννμ¬ λ€μμ μνν μμ μ μ΄ν΄νλ κ²μ΄ νμνμ΅λλ€.
μ°λ¦¬λ μ½λ λΆν νλ‘μΈμ€μ λν λͺ κ°μ§ κ·μΉμ 곡μννμ΅λλ€.
첫 λ²μ§Έ: μ°λ¦¬λ λ μ΄μ μλΉμ€, νλ λ° νλ¬κ·ΈμΈ κ°μ λΉμ¦λμ€ λ‘μ§μ 곡μ νκ³ μΆμ§ μμμ΅λλ€. μ°λ¦¬λ λ§μ΄ν¬λ‘μλΉμ€ λ΄μμ λΉμ¦λμ€ λ‘μ§μ λ 립μ μΌλ‘ λ§λ€κ³ μΆμμ΅λλ€. λ°λ©΄μ λ§μ΄ν¬λ‘μλΉμ€λ μ΄μμ μΌλ‘λ μμ ν λ 립μ μΌλ‘ μ‘΄μ¬νλ μλΉμ€λ‘ κ°μ£Όλ©λλ€. λλ μ΄ μ κ·Ό λ°©μμ΄ λ€μ λλΉμ μ΄λ©° λ¬μ±νκΈ° μ΄λ ΅λ€κ³ μκ°ν©λλ€. μλ₯Ό λ€μ΄ C#μ μλΉμ€λ μ΄λ€ κ²½μ°μλ νμ€ λΌμ΄λΈλ¬λ¦¬μ μν΄ μ°κ²°λκΈ° λλ¬Έμ λλ€. μ°λ¦¬ μμ€ν μ C#μΌλ‘ μμ±λμμΌλ©° μμ§ λ€λ₯Έ κΈ°μ μ μ¬μ©νμ§ μμμ΅λλ€. λ°λΌμ μ°λ¦¬λ κ³΅ν΅ κΈ°μ μ΄μ λΈλ¦¬λ₯Ό μ¬μ©ν μ¬μ κ° μλ€κ³ κ²°μ νμ΅λλ€. κ°μ₯ μ€μν κ²μ λΉμ¦λμ€ λ‘μ§μ μΌλΆκ° ν¬ν¨λμ΄ μμ§ μλ€λ κ²μ λλ€. μ¬μ© μ€μΈ ORMμ λν νΈλ¦¬ν λνΌκ° μλ κ²½μ° μ΄λ₯Ό μλΉμ€ κ°μ 볡μ¬νλ λ° λΉμ©μ΄ λ§μ΄ λλλ€.
μ°λ¦¬ νμ λλ©μΈ μ€μ¬ λμμΈμ ν¬μ΄λ―λ‘ μ΄λμΈ μν€ν μ²λ μ°λ¦¬μκ² λ§€μ° μ ν©νμ΅λλ€. μ°λ¦¬ μλΉμ€μ κΈ°λ³Έμ λ°μ΄ν° μ‘μΈμ€ κ³μΈ΅μ΄ μλλΌ λΉμ¦λμ€ λ‘μ§λ§ ν¬ν¨νκ³ μΈνλΌμ μ°κ²°λμ§ μλ λλ©μΈ λ‘μ§μ΄ ν¬ν¨λ μ΄μ λΈλ¦¬μ λλ€. λμμ λλ©μΈ μ΄μ λΈλ¦¬λ₯Ό λ 립μ μΌλ‘ μμ νμ¬ νλ μμν¬μ κ΄λ ¨λ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
μ΄ λ¨κ³μμ μ°λ¦¬λ 첫 λ²μ§Έ μ¬κ°ν λ¬Έμ μ μ§λ©΄νμ΅λλ€. μλΉμ€λ νλμ λλ©μΈ μ΄μ λΈλ¦¬λ₯Ό μ°Έμ‘°ν΄μΌ νκ³ , μ°λ¦¬λ λ Όλ¦¬λ₯Ό λ 립μ μΌλ‘ λ§λ€κ³ μΆμκ³ , μ¬κΈ°μλ DRY μμΉμ΄ μ°λ¦¬λ₯Ό ν¬κ² λ°©ν΄νμ΅λλ€. κ°λ°μλ€μ μ€λ³΅μ νΌνκΈ° μν΄ μΈμ ν μ΄μ λΈλ¦¬μ ν΄λμ€λ₯Ό μ¬μ¬μ©νκΈ°λ₯Ό μνκ³ κ·Έ κ²°κ³Ό λλ©μΈμ΄ λ€μ μ°κ²°λκΈ° μμνμ΅λλ€. κ²°κ³Όλ₯Ό λΆμν κ²°κ³Ό μλ§λ μμ€μ½λ μ μ₯μ₯μΉ μμμλ λ¬Έμ κ° μλ κ²μΌλ‘ νλ¨λμμ΅λλ€. μ°λ¦¬λ λͺ¨λ μμ€ μ½λλ₯Ό ν¬ν¨νλ λκ·λͺ¨ μ μ₯μλ₯Ό κ°κ³ μμμ΅λλ€. μ 체 νλ‘μ νΈμ λν μ루μ μ λ‘컬 μ»΄ν¨ν°μμ 쑰립νκΈ°κ° λ§€μ° μ΄λ €μ μ΅λλ€. λ°λΌμ νλ‘μ νΈμ μΌλΆμ λν΄ λ³λμ μκ·λͺ¨ μ루μ μ΄ μμ±λμμΌλ©° μ¬κΈ°μ κ³΅ν΅ λλ λλ©μΈ μ΄μ λΈλ¦¬λ₯Ό μΆκ°νκ³ μ¬μ¬μ©νλ κ²μ κΈμ§νλ μ¬λμ μ무λ μμμ΅λλ€. μ΄λ₯Ό νμ©νμ§ μλ μ μΌν λꡬλ μ½λ κ²ν μμ΅λλ€. κ·Έλ¬λ λλ‘λ μ€ν¨νκΈ°λ νμ΅λλ€.
κ·Έλ° λ€μ λ³λμ 리ν¬μ§ν λ¦¬κ° μλ λͺ¨λΈλ‘ μ΄λνκΈ° μμνμ΅λλ€. λΉμ¦λμ€ λ‘μ§μ λ μ΄μ μλΉμ€μμ μλΉμ€λ‘ νλ₯΄μ§ μμΌλ©°, λλ©μΈμ μ§μ μΌλ‘ λ 립μ μ΄ λμμ΅λλ€. μ νλ 컨ν μ€νΈκ° λ λͺ ννκ² μ§μλ©λλ€. μΈνλΌ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ΄λ»κ² μ¬μ¬μ©ν©λκΉ? μ°λ¦¬λ μ΄λ₯Ό λ³λμ μ μ₯μλ‘ λΆλ¦¬ν λ€μ Nuget ν¨ν€μ§μ λ£μκ³ μ΄λ₯Ό Artifactoryμ λ£μμ΅λλ€. λ³κ²½ μ¬νμ΄ μμΌλ©΄ μ΄μ λΈλ¦¬ λ° κ²μκ° μλμΌλ‘ μνλ©λλ€.

μ°λ¦¬ μλΉμ€λ μΈλΆ μΈνλΌ ν¨ν€μ§μ λμΌν λ°©μμΌλ‘ λ΄λΆ μΈνλΌ ν¨ν€μ§λ₯Ό μ°Έμ‘°νκΈ° μμνμ΅λλ€. Nugetμμ μΈλΆ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ€μ΄λ‘λν©λλ€. μ΄λ¬ν ν¨ν€μ§λ₯Ό λ°°μΉν Artifactoryλ₯Ό μ¬μ©νκΈ° μν΄ λ κ°μ ν¨ν€μ§ κ΄λ¦¬μλ₯Ό μ¬μ©νμ΅λλ€. μκ·λͺ¨ μ μ₯μμμλ Nugetλ μ¬μ©νμ΅λλ€. μ¬λ¬ μλΉμ€κ° μλ 리ν¬μ§ν 리μμλ λͺ¨λ κ°μ λ λ§μ λ²μ μΌκ΄μ±μ μ 곡νλ Paketμ μ¬μ©νμ΅λλ€.

λ°λΌμ μμ€ μ½λ μμ
, μν€ν
μ² μ½κ° λ³κ²½ λ° μ μ₯μ λΆλ¦¬λ₯Ό ν΅ν΄ μλΉμ€λ₯Ό λμ± λ
립μ μΌλ‘ λ§λλλ€.
μΈνλΌ λ¬Έμ
λ§μ΄ν¬λ‘μλΉμ€λ‘ μ νν λ λ°μνλ λλΆλΆμ λ¨μ μ μΈνλΌμ κ΄λ ¨λμ΄ μμ΅λλ€. μλνλ λ°°ν¬κ° νμνκ³ μΈνλΌλ₯Ό μ€ννλ €λ©΄ μλ‘μ΄ λΌμ΄λΈλ¬λ¦¬κ° νμν©λλ€.
νκ²½μ μλ μ€μΉ
μ²μμλ νκ²½μ© μ루μ μ μλμΌλ‘ μ€μΉνμ΅λλ€. μ΄ νλ‘μΈμ€λ₯Ό μλννκΈ° μν΄ μ°λ¦¬λ CI/CD νμ΄νλΌμΈμ λ§λ€μμ΅λλ€. μ°λ¦¬λ λΉμ¦λμ€ νλ‘μΈμ€ κ΄μ μμ μ§μμ μΈ λ°°ν¬κ° μμ§ νμ©λμ§ μκΈ° λλ¬Έμ μ§μμ μΈ μ 곡 νλ‘μΈμ€λ₯Ό μ ννμ΅λλ€. λ°λΌμ μμ μ μ‘μ λ²νΌμ μ¬μ©νμ¬ μλμΌλ‘ ν μ€νΈλ₯Ό μν΄ μνλ©λλ€.

μ°λ¦¬λ μμ€ μ½λ μ μ₯μ μν΄ Atlassian, Bitbucketμ μ¬μ©νκ³ λΉλλ₯Ό μν΄ Bambooλ₯Ό μ¬μ©ν©λλ€. μ°λ¦¬λ C#κ³Ό λμΌνκΈ° λλ¬Έμ Cakeλ‘ λΉλ μ€ν¬λ¦½νΈλ₯Ό μμ±νλ κ²μ μ’μν©λλ€. κΈ°μ±ν ν¨ν€μ§λ Artifactoryλ‘ μ 곡λλ©° Ansibleμ μλμΌλ‘ ν
μ€νΈ μλ²μ λλ¬ν ν μ¦μ ν
μ€νΈν μ μμ΅λλ€.

λ³λμ λ‘κΉ
νλ λͺ¨λ리μ€μ μμ΄λμ΄ μ€ νλλ 곡μ λ‘κΉ
μ μ 곡νλ κ²μ΄μμ΅λλ€. λν λμ€ν¬μ μλ κ°λ³ λ‘κ·Έλ₯Ό μ΄λ»κ² μ²λ¦¬ν μ§ μ΄ν΄ν΄μΌ νμ΅λλ€. μ°λ¦¬μ λ‘κ·Έλ ν
μ€νΈ νμΌλ‘ κΈ°λ‘λ©λλ€. μ°λ¦¬λ νμ€ ELK μ€νμ μ¬μ©νκΈ°λ‘ κ²°μ νμ΅λλ€. μ°λ¦¬λ 곡κΈμλ₯Ό ν΅ν΄ ELKμ μ§μ κΈ°λ‘νμ§ μμμ§λ§ ν
μ€νΈ λ‘κ·Έλ₯Ό μμ νκ³ μΆμ IDλ₯Ό μλ³μλ‘ κΈ°λ‘νμ¬ λμ€μ μ΄λ¬ν λ‘κ·Έλ₯Ό ꡬ문 λΆμν μ μλλ‘ μλΉμ€ μ΄λ¦μ μΆκ°νκΈ°λ‘ κ²°μ νμ΅λλ€.

Filebeatλ₯Ό μ¬μ©νλ©΄ λ€μ μμΉμμ λ‘κ·Έλ₯Ό μμ§ν μ μμ΅λλ€. μλ²κ·Έλ° λ€μ ν΄λΉ λ°μ΄ν°λ₯Ό λ³ννκ³ , Kibanaλ₯Ό μ¬μ©νμ¬ UIμμ 쿼리λ₯Ό ꡬμ±νκ³ , μλΉμ€ κ° νΈμΆμ΄ μ΄λ»κ² λΌμ°ν
λμλμ§ νμΈν©λλ€. μΆμ IDλ μ΄ μμ
μ λ§€μ° μ μ©ν©λλ€.
κ΄λ ¨ μλΉμ€ ν μ€νΈ λ° λλ²κΉ
μ²μμλ κ°λ° μ€μΈ μλΉμ€λ₯Ό λλ²κΉ
νλ λ°©λ²μ μμ ν μ΄ν΄νμ§ λͺ»νμ΅λλ€. λͺ¨λ리μ€λ₯Ό μ¬μ©νλ©΄ λͺ¨λ κ²μ΄ κ°λ¨ν΄ λ‘컬 λ¨Έμ μμ μ€ννμ΅λλ€. μ²μμλ λ§μ΄ν¬λ‘μλΉμ€λ₯Ό μ¬μ©ν΄ λμΌν μμ
μ μννλ €κ³ νμ§λ§ λλ‘λ νλμ λ§μ΄ν¬λ‘μλΉμ€λ₯Ό μμ ν μμνλ €λ©΄ μ¬λ¬ λ€λ₯Έ λ§μ΄ν¬λ‘μλΉμ€λ₯Ό μμν΄μΌ νλλ° μ΄λ λΆνΈν©λλ€. μ°λ¦¬λ λλ²κΉ
νλ €λ μλΉμ€λ§ λ‘컬 μμ€ν
μ λ¨κ²¨λλ λͺ¨λΈλ‘ μ΄λν΄μΌ νλ€λ κ²μ κΉ¨λ¬μμ΅λλ€. λλ¨Έμ§ μλΉμ€λ prodμ ꡬμ±μ΄ μΌμΉνλ μλ²μμ μ¬μ©λ©λλ€. λλ²κΉ
ν, ν
μ€νΈνλ λμ κ° μμ
μ λν΄ λ³κ²½λ μλΉμ€λ§ ν
μ€νΈ μλ²μ λ°κΈλ©λλ€. λ°λΌμ μ루μ
μ ν₯ν νλ‘λμ
μ λνλ ννλ‘ ν
μ€νΈλ©λλ€.
νλ‘λμ λ²μ μ μλΉμ€λ§ μ€ννλ μλ²κ° μμ΅λλ€. μ΄λ¬ν μλ²λ μ¬κ³ λ°μ μ λ°°ν¬ μ λ°°μ‘ νμΈ λ° λ΄λΆ κ΅μ‘μ μν΄ νμν©λλ€.
λ리 μ¬μ©λλ Specflow λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ μλνλ ν μ€νΈ νλ‘μΈμ€λ₯Ό μΆκ°νμ΅λλ€. Ansibleμμ λ°°ν¬ν ν μ¦μ NUnitμ μ¬μ©νμ¬ ν μ€νΈκ° μλμΌλ‘ μ€νλ©λλ€. μμ λ²μκ° μμ μλμ΄λ©΄ μλ ν μ€νΈκ° νμνμ§ μμ΅λλ€. λλ‘λ μΆκ° μλ ν μ€νΈκ° μ¬μ ν νμνμ§λ§. μ°λ¦¬λ Jiraμ νκ·Έλ₯Ό μ¬μ©νμ¬ νΉμ λ¬Έμ μ λν΄ μ€νν ν μ€νΈλ₯Ό κ²°μ ν©λλ€.
λν λΆν ν μ€νΈμ λν νμμ±μ΄ μ¦κ°νμΌλ©° μ΄μ μλ λλ¬Έ κ²½μ°μλ§ μνλμμ΅λλ€. JMeterλ₯Ό μ¬μ©νμ¬ ν μ€νΈλ₯Ό μ€ννκ³ , InfluxDBλ₯Ό μ¬μ©νμ¬ μ΄λ₯Ό μ μ₯νκ³ , Grafanaλ₯Ό μ¬μ©νμ¬ νλ‘μΈμ€ κ·Έλνλ₯Ό μμ±ν©λλ€.
μ°λ¦¬λ 무μμ λ¬μ±νλμ?
첫째, '릴리μ€'λΌλ κ°λ
μ μμ΄μ΅λλ€. μ΄ κ±°λ κΈ°μ
μ΄ νλ‘λμ
νκ²½μ λ°°ν¬λμ΄ μΌμμ μΌλ‘ λΉμ¦λμ€ νλ‘μΈμ€λ₯Ό μ€λ¨μμΌ°μ λ 1,5κ°μμ κ±ΈμΉ μμ²λ 릴리μ€κ° μ¬λΌμ‘μ΅λλ€. μ΄μ λ μΉμΈ ν μ΄μλκΈ° λλ¬Έμ νκ· XNUMXμΌλ§λ€ μλΉμ€λ₯Ό λ°°ν¬νκ³ κ·Έλ£Ήνν©λλ€.
μ°λ¦¬ μμ€ν μλ μΉλͺ μ μΈ μ€λ₯κ° μμ΅λλ€. λ²κ·Έκ° μλ λ§μ΄ν¬λ‘μλΉμ€λ₯Ό μΆμνλ©΄ μ΄μ κ΄λ ¨λ κΈ°λ₯μ΄ μ€λ¨λκ³ λ€λ₯Έ λͺ¨λ κΈ°λ₯μ μν₯μ λ°μ§ μμ΅λλ€. μ΄λ μ¬μ©μ κ²½νμ ν¬κ² ν₯μμν΅λλ€.
λ°°ν¬ ν¨ν΄μ μ μ΄ν μ μμ΅λλ€. νμν κ²½μ° μ루μ μ λλ¨Έμ§ λΆλΆκ³Ό λ³λλ‘ μλΉμ€ κ·Έλ£Ήμ μ νν μ μμ΅λλ€.
λν λκ·λͺ¨ κ°μ λκΈ°μ΄μ ν΅ν΄ λ¬Έμ λ₯Ό ν¬κ² μ€μμ΅λλ€. μ΄μ μΌλΆ μλΉμ€λ₯Ό λ 립μ μΌλ‘ μμ νλ λ³λμ μ ν νμ΄ μμ΅λλ€. μ€ν¬λΌ νλ‘μΈμ€λ μ΄λ―Έ μ¬κΈ°μ μ ν©ν©λλ€. νΉμ νμλ μμ μ ν λΉνλ λ³λμ μ ν μμ μκ° μμ μ μμ΅λλ€.
κ°μ
- λ§μ΄ν¬λ‘μλΉμ€λ 볡μ‘ν μμ€ν μ λΆν΄νλ λ° λ§€μ° μ ν©ν©λλ€. κ·Έ κ³Όμ μμ μ°λ¦¬λ μμ€ν μ 무μμ΄ μλμ§, μ νλ 컨ν μ€νΈκ° 무μμΈμ§, κ²½κ³κ° μ΄λμ μλμ§ μ΄ν΄νκΈ° μμν©λλ€. μ΄λ₯Ό ν΅ν΄ λͺ¨λ κ°μ κ°μ μ¬νμ μ¬λ°λ₯΄κ² λ°°ν¬νκ³ μ½λ νΌλμ λ°©μ§ν μ μμ΅λλ€.
- λ§μ΄ν¬λ‘μλΉμ€λ μ‘°μ§μ μ΄μ μ μ 곡ν©λλ€. μ’ μ’ μν€ν μ²λ‘λ§ μΈκΈλμ§λ§ λͺ¨λ μν€ν μ²λ λΉμ¦λμ€ μꡬ μ¬νμ ν΄κ²°νλ λ° νμνλ©° κ·Έ μ체λ‘λ νμνμ§ μμ΅λλ€. λ°λΌμ νμ¬ μ€ν¬λΌμ΄ λ§€μ° μΈκΈ°κ° μλ€λ μ μ κ³ λ €νλ©΄ λ§μ΄ν¬λ‘μλΉμ€λ μκ·λͺ¨ νμ λ¬Έμ λ₯Ό ν΄κ²°νλ λ° λ§€μ° μ ν©νλ€κ³ λ§ν μ μμ΅λλ€.
- λΆλ¦¬λ λ°λ³΅μ μΈ κ³Όμ μ
λλ€. μ ν리μΌμ΄μ
μ κ°μ Έμμ λ¨μν λ§μ΄ν¬λ‘μλΉμ€λ‘ λλ μλ μμ΅λλ€. κ²°κ³Ό μ νμ κΈ°λ₯ν κ°λ₯μ±μ΄ μμ΅λλ€. λ§μ΄ν¬λ‘μλΉμ€λ₯Ό μ μ©μΌλ‘ μ¬μ©νλ κ²½μ° κΈ°μ‘΄ λ κ±°μλ₯Ό λ€μ μμ±νλ κ²μ΄ μ’μ΅λλ€. μ¦, κΈ°λ₯κ³Ό μλ μΈ‘λ©΄μμ λΉμ¦λμ€ μꡬ μ¬νμ λ μ μΆ©μ‘±νκ³ μνλ μ½λλ‘ λ°κΎΈλ κ²μ΄ μ’μ΅λλ€.
μμ μ£Όμμ¬ν: λ§μ΄ν¬λ‘μλΉμ€λ‘ μ ννλ λ° λλ λΉμ©μ μλΉν ν½λλ€. μΈνλΌ λ¬Έμ λ₯Ό νΌμμ ν΄κ²°νλλ° μ€λ μκ°μ΄ κ±Έλ Έμ΅λλ€. λ°λΌμ νΉμ νμ₯μ΄ νμνμ§ μμ μκ·λͺ¨ μ ν리μΌμ΄μ μ΄ μκ³ νμ κ΄μ¬κ³Ό μκ°μ λκΈ° μν΄ κ²½μνλ κ³ κ°μ΄ λ§μ§ μλ€λ©΄ λ§μ΄ν¬λ‘μλΉμ€κ° νμ¬ νμν κ²μ΄ μλ μλ μμ΅λλ€. κ½€ λΉμΈμ. λ§μ΄ν¬λ‘μλΉμ€λ‘ νλ‘μΈμ€λ₯Ό μμνλ©΄ μ²μμλ λͺ¨λλ¦¬μ€ κ°λ°λ‘ λμΌν νλ‘μ νΈλ₯Ό μμνλ κ²λ³΄λ€ λΉμ©μ΄ λ λμμ§λλ€.
PS μ’ λ κ°μ±μ μΈ μ΄μΌκΈ°(κ°μΈμ μΌλ‘λ) - μ λ°λ₯΄λ©΄ .
λ³΄κ³ μμ μ 체 λ²μ μ λ€μκ³Ό κ°μ΅λλ€.
μΆμ² : habr.com
