π κ³½μ€κ²½
πΆβπ«οΈ κΉκ·λ¦°
πΈ μ΄κΈ°μ°
[κΈ°ν λ¨κ³]
μ΄λ² νλ‘μ νΈλ₯Ό ν΅ν΄ 'μ μΆ©λΆν κΈ°ν κΈ°κ°κ³Ό μμ κ³Όμ μ΄ νμνμ§'μ λν λ΅μ μ‘°κΈ μκ² λμμ΅λλ€. μ°μ μμλ₯Ό λλλ κΈ°μ€κ³Ό μ°λ¦¬κ° μ΄λ€ κ²μ λ μ§μ€ν΄μΌ νλμ§μ λν κ³ λ―Όμ΄ νμν νλ‘μ νΈμμ΅λλ€.
ν΄λΉ νλ‘μ νΈλ₯Ό μννλ©΄μ κ°μ₯ μ°μ μ μΌλ‘ κ³ λ―Όν λΆλΆμ ERP μλΉμ€μ μ¬μ© λμμ΄ λꡬμΈμ§μμ΅λλ€. κ·Έλμ κ°λ°μ μ°©μνκΈ° μ μ μ¬μ©μ κΆνκ³Ό λλΆμ΄ 'μ§λ¨μ§μ±'μ΄λΌλ ν€μλλ₯Ό μ΄λ»κ² νλ‘μ νΈμ λ Ήμ¬λΌμ§ κ³ λ―Όνμ΅λλ€. κΈ°μ μμμ 'μ§λ¨μ§μ±μ μν μ§μκ΄λ¦¬ μμ€ν 'μ 보νΈν΄μΌ ν μ 보λ 보νΈνλ, μ΄λ₯Ό κΈ°μ μμ μμμΌλ‘ νμ©νμ¬ μ΄μ΅μ λΌ μ μλλ‘ μ§μνλ νλ«νΌμ΄μ΄μΌ ν©λλ€. μ΄λ₯Ό μν΄ λΆμ κ° μ κ·Ό κ°λ₯ν μ 보λ€μ ꡬλΆνκ³ κΆν κ΄λ¦¬λ₯Ό μ² μ ν ν΄μΌ νμ΅λλ€.
λν, 'μ°λ¦¬κ° λ§λ μλΉμ€λ₯Ό μ μ¬μ©ν΄μΌ ν κΉ?' 'κ²½μλ ₯ μλ μμλ 무μμΌκΉ?'λΌλ μ§λ¬Έμ μ€μ€λ‘μκ² λμ‘μ΅λλ€. λ¨μν μ κ·Ό κΆνμ΄ λ€λ₯Έ κ²μν μλΉμ€λ‘λ μΆ©λΆνμ§ μλ€κ³ νλ¨νμκ³ , ν λ΄ νμλ₯Ό ν΅ν΄ κΈ°μ‘΄μ μλ κΈ°λ₯λ€μ μΆκ°νλ μλλ₯Ό νμ΅λλ€.
μ ν¬κ° μκ°ν κ²μ AIλ₯Ό νμ©νμ¬ μ 무 κΈ°λ‘ μλ£λ₯Ό νμ©νκ³ , ν¨μ¨μ μΈ μΈμμΈκ³λ₯Ό μν 곡μ 곡κ°, κ·Έλ¦¬κ³ μ¬λ΄ λ¬Ένλ₯Ό λ§λ€μ΄κ° μ μλ 곡κ°μ μ 곡νλ κ²μ΄μμ΅λλ€. OpenAIλ₯Ό νμ©νμ¬ κΈ μμ± μ λ΄μ© κ²μ¦κ³Ό μ€λ₯ κ°μ κΈ°λ₯μ μΆκ°νλ €κ³ νμ΅λλ€. μ΄λ μΆν κ³ λν λ¨κ³μμ νμ μ€ λμΉκΈ° μ¬μ΄ λ΄μ©μ AIκ° λ£κ³ μμ½νλ©°, ν΄λΉ λ΄μ©μ μ€λ₯λ₯Ό κ°μ νμ¬ μΆμ²νλ μλΉμ€λ‘ λ°μ ν μ μμ΅λλ€.
κ·Έλ¬λ νλ‘μ νΈ κΈ°κ°μ΄ νμ μ μ΄μκΈ°μ μ°λ¦¬κ° λΉμ₯ ν μ μλ λΆλΆκ³Ό νμμ μΌλ‘ ꡬνν΄μΌ νλ κΈ°λ₯μ λν΄ μ°μ μμλ₯Ό μ€μ νκ³ λ²μλ₯Ό μ ννμ¬ νλ‘μ νΈλ₯Ό μννμ΅λλ€.
[κ°λ° λ¨κ³]
μ κ° λ©μΈμΌλ‘ μνν μ
무λ GitHub κ΄λ¦¬λ₯Ό ν΅ν νλ‘μ νΈ νμκ΄λ¦¬μ CI/CDμμ΅λλ€. κΈ°λ³Έμ μΈ κΈ°λ₯μ λν CRUDλ₯Ό ꡬννλ©΄μ λΉλμ λ°°ν¬μ λν κ³ λ―Όκ³Ό λμ μ ν΄μμ΅λλ€.
GitHub Actionsλ₯Ό ν΅ν΄ νλ‘μ νΈ μ΄μ κ΄λ¦¬λ₯Ό νμΌλ©°, 보νΈκ° νμν main, dev λΈλμΉμ μ€μ λ£°μ μ μ©νμ¬ κ²μ¦μ΄ μλ£λ κΈ°μ‘΄ μ½λλ₯Ό 보νΈνμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ½λμ μμ μ±κ³Ό μΌκ΄μ±μ μ μ§νκ³ , κ°λ°νμ΄ ν¨μ¨μ μΌλ‘ νμ ν μ μλλ‘ μ§μνμ΅λλ€. λν, CI/CD νμ΄νλΌμΈμ ꡬμΆνμ¬ μ½λ λ³κ²½ μ¬νμ΄ μλμΌλ‘ ν μ€νΈλκ³ λ°°ν¬λλ νλ‘μΈμ€λ₯Ό λ§λ ¨νμμ΅λλ€.
μ΄ κ³Όμ μμ μ¬λ¬ λ²μ μνμ°©μ€λ₯Ό κ²ͺμμ§λ§, μ΅μ’
μ μΌλ‘λ μμ μ μΈ λ°°ν¬ νκ²½μ ꡬμΆν μ μμμ΅λλ€. μ΄λ νλ‘μ νΈμ μ§μ κ°λ₯μ±κ³Ό μ μ§ λ³΄μμ±μ λμ΄λ λ° ν° κΈ°μ¬λ₯Ό νμ΅λλ€.
[λλ μ ]
μ΄λ² νλ‘μ νΈλ₯Ό ν΅ν΄ μ»μ κ°μ₯ ν° κ΅νμ μΆ©λΆν κΈ°ν κΈ°κ°κ³Ό μμ κ³Όμ μ μ€μμ±μ΄μμ΅λλ€. μ²μλΆν° λͺ¨λ κΈ°λ₯μ μλ²½νκ² κ΅¬ννλ κ²λ³΄λ€λ, ν΅μ¬ κΈ°λ₯μ μ§μ€νκ³ μ΄λ₯Ό μ μ§μ μΌλ‘ λ°μ μν€λ κ²μ΄ λ ν¨μ¨μ μ΄λΌλ κ²μ κΉ¨λ¬μμ΅λλ€.
λν, μμ¬μ΄ λΆλΆλ μμμ΅λλ€. μ±ν μλΉμ€μ ꡬνμ΄ μλ²½νμ§ λͺ»νκ³ , λ°μ΄ν°μ μμ‘΄ν ν μ€νΈ μ½λλ₯Ό μμ±νμ¬ μ΄λ ν κ²½μ°μλ λΉλκ° κ°λ₯ν ν μ€νΈ μ½λλ₯Ό μμ±νμ§ λͺ»ν μ μ΄ νΉν μμ¬μ μ΅λλ€. μ΄λ μμΌλ‘μ νλ‘μ νΈμμ κ°μ ν΄μΌ ν λΆλΆμΌλ‘ λ¨μ μμ΅λλ€. μ±ν μλΉμ€μ μμ μ±κ³Ό μμ±λλ₯Ό λμ΄κ³ , ν μ€νΈ μ½λλ₯Ό μ² μ ν μμ±νμ¬ μ½λμ μ λ’°μ±μ λμ΄λ κ²μ΄ ν₯ν κ³Όμ μ λλ€.
κ²°λ‘ μ μΌλ‘, μ΄λ² νλ‘μ νΈλ λ§μ λμ κ³Ό λ°°μμ μ 곡νμ΅λλ€. κΈ°ν λ¨κ³μμμ μΆ©λΆν κ³ λ―Όκ³Ό μ°μ μμ μ€μ , κ°λ° κ³Όμ μμμ νμ κ΄λ¦¬μ CI/CD μ μ©, κ·Έλ¦¬κ³ μ΄νμ κ°μ κ³Όμ λ₯Ό ν΅ν΄ νμΈ΅ λ μ±μ₯ν μ μμ κ²μ΄λΌλ μκ°ν©λλ€.
πΊ μμμ¬
ν
μ€νΈ μ½λμ μ½λ 리뷰μ νμμ±μ μ΄λ‘ μ΄ μλ μ€μ μΌλ‘ λ°°μΈ μ μλ μκ°μ΄μλ€.
ν
μ€νΈ μ½λλ₯Ό ν΅ν΄ μ΄μ λ°μ μ λΉ λ₯΄κ² ν΄κ²°ν μ μμλ€. μμλ‘ μ€κ°μ λ°μνλ Git μΆ©λ μ΄μμ κ²½μ° 1μκ° μ΄λ΄λ‘ μ΄μλ₯Ό ν΄κ²°νμλλ°, μΆ©λλ λΆλΆμ ν
μ€νΈ μ½λλ₯Ό λλ €λ³΄λ κ² λ§μΌλ‘λ νμ
ν μ μμκΈ° λλ¬Έμ΄λ€. λ§μ½ ν
μ€νΈ μ½λλ₯Ό μμ±νμ§ μμλλΌλ©΄ λ¬Έμ κ° λ°μνλ μ§μ μ μ°Ύκ³ ν΄κ²°νλλ° μ΅μ λ°λμ μ΄μ μμλμμ κ²μΌλ‘ μμλλ€.
ν
μ€νΈ μ½λλ λΉ λ₯΄κ² μ΄μλ₯Ό ν΄κ²°ν μ μλ€λ©΄ μ½λ 리뷰λ μ μ΄μ μ΄μκ° λ°μνμ§ μλλ‘ μλ°©μ ν΄μ€¬λ€. μ½λ 리뷰λ μκ°κ³Ό λ
Έλ ₯μ΄ λ§μ΄ μμλλ μΌμ΄λ€. νλ‘μ νΈ κΈ°κ°μ κ°μν΄ νμ λΆλ€μκ² λ°μλλΌλ μΈ κ°λ νμλ‘ μ§ννλ κ²μ΄ μ΄λ¨μ§ κΆμ λλ Έκ³ νμΎν λ°μμ£Όμ
¨λ€. μ μ ν λΈλμΉμ PRμ νλμ§, μλμΉ μμ λ€λ₯Έ νμμ νμΌμ λν μμ
μ΄ μμ΄μ§ μμλμ§, ν
μ€νΈ μ½λ μ΄ μΈ κ°μ΄λ€. μ΄ μΈ κ°λ₯Ό νμμ μΌλ‘ 체ν¬νλ κ²λ§μΌλ‘λ μ΅μνμ μκ° μμλ‘ μ¬λ¬ μ΄μλ€μ μλ°©ν μ μμλ€.
λ‘κ·ΈμΈμ λν΄ μ¬λ¬ λμ μ ν΄λ³Έ νλ‘μ νΈμλ€. 첫 λ‘κ·ΈμΈμ λν κ΅¬λ³ λ°©λ²κ³Ό μ²λ¦¬ λ‘μ§, Google Authenticatorλ₯Ό ν΅ν 2μ°¨ μΈμ¦μ μΆκ°νλ λ‘μ§, μ¬λ΄λ§ μΈλΆλ§μ λ°λΌ λ¬λΌμ§λ λ‘κ·ΈμΈ λ‘μ§, λ± μ¬λ¬ λμ μ ν΄λ³Ό μ μλ μκ°μ΄μλ€. Http μνμ½λλ₯Ό νμ©ν΄ νλμ λ‘κ·ΈμΈμ λ€μν κ²½μ°λ₯Ό λ
Ήμ¬λΌ μ μμκ³ , κΈ°λ₯ νλνλλ₯Ό ꡬνν λλ§λ€ ν볡μ λλ μ μλ μκ°λ€μ΄μλ€.
ERPλΌλ μ΅μνμ§ μμ μ£Όμ μ λν κ°λ°μ΄λ€λ³΄λ μ²μμ μ£Όμ λ₯Ό μ‘λ κ²λΆν° ꡬνκΉμ§ μ΄λ €μμ΄ μμλ€. νμ§λ§ λ무λλ μ’μ νμλ€μ λ§λ¬κΈ°μ λͺ¨λ₯΄λ κ²μ λΉ λ₯΄κ² μ§μνκ³ μλ‘ μμ§νκ³ λμκΈ°μ μ±κ³΅μ μΌλ‘ νλ‘μ νΈλ₯Ό λ§μΉ μ μμλ€.
π° νμν
ERPλ‘ νμ©νκΈ°μ μ΄λ €μ΄ μ£Όμ λ₯Ό λ§‘κ² λμ΄ μ²μμλ κ±±μ μ΄ μμ°μΌλ νμλ€κ³Ό ν¨κ» λ°©ν₯μ±μ λν΄ κ³ λ―Όνκ³ κΈ°νμ μμ±ν΄ λκ°λ©° μ€νλ € μ§κΈκΉμ§ λ°°μ΄ κ²μ μ¬λ°κ² νμ©νκΈ°μ λ μ’μ κΈ°νλΌλ μκ°μ΄ λ€μμ΅λλ€.
ν
μ€νΈ μ£Όλ κ°λ°(TDD) λ°©μμΌλ‘ μ§ννλ©° λͺ¨λκ° κΈ°λ₯μ λν ν
μ€νΈ μ½λλ₯Ό μ λ§λ€μ΄λκ³ μ΄λ₯Ό ν΅ν΄ μ΄μκ° μκ²Όμ λ ν
μ€νΈ μ½λλ₯Ό ν΅ν΄ λΉ λ₯Έ λ¬Έμ νμ
κ³Ό μ΄μ ν΄κ²°μ μ΄λ€λ΄λ©° ν
μ€νΈ μ½λμ μ€μμ±μ μκ³ ν¨μ¨μ μΈ κ°λ°μ ν μ μμλ μκ°μ΄μμ΅λλ€.
μ΄λ²μλ μ λΆν° κ΄μ¬μ΄ μμλ AIλ₯Ό νμ©ν κΈ°λ₯λ ꡬνν΄ λ³Ό μ μμκ³ , μ΄μ μ μκ°ν΄ λ³΄μ§ λͺ»νλ XSS 곡격μ λν΄μλ μκ°ν΄ λ³Ό μ μμμ΅λλ€. μ²μμλ κ²μνμ html νμμΌλ‘ μμ±νλ κ²μΌλ‘ ꡬννκΈ°λ‘ νμΌλ λ€λ₯Έ μ¬λλ€μκ² ν
μ€νΈ μμ²μ ν΅ν΄ style, script λ±μ΄ μλμΉ μκ² μ½μ
λλ©° κ²μκΈμ΄ μλμλ λ€λ₯΄κ² νμλλ μ΄μκ° λ°μνλ€. ν΄λΉ μ΄μλ₯Ό ν΅ν΄ λ§ν¬λ€μ΄ νμμΌλ‘ λ³κ²½νκ² λμκ³ , μ΄ν λ°±μμ κ²μκΈμ μ²λ¦¬νκ³ μ μ₯ν λ JSOUPμ νμ©ν΄ κ²μκΈμ μ μ νλ©° XSS 곡격μ 미리 λ°©μ§ν μ μκ² λμμ΅λλ€.
λ μ΄λ²μλ κ²μκΈ λ¦¬μ€νΈ μ‘°ν λΆλΆμ΄ μ΄λ ₯ κ΄λ¦¬λ‘ μΈν΄ ν΄λΉ κ²μκΈμ μ΅μ μ½ν
μΈ λ₯Ό κ°μ Έμ€λ 쿼리문μ μ§λ λ°μ κ³ λ―Όμ λ§μ΄ νλ μκ°μ΄μμ΅λλ€. μ΄μΈμλ λ€μ€ νκ·Έ κ²μ, Docs λ± λ€μν μ‘°κ±΄μ΄ λ€μ΄κ°μΌ νλ λΆλΆμ΄λΌ μκ°μ λ§μ΄ λ€μλ λΆλΆμ΄μμ§λ§, κ·Έλ§νΌ μΌλ° μ‘°ν, μ‘°κ±΄λΆ μ‘°ν λ± μ‘°ν λΆλΆμμ μκ°μ μ€μ΄κ³ ν¨μ¨μ μΈ μΏΌλ¦¬λ₯Ό 지 μ μμμ΅λλ€.
κ°μ₯ μ΄λ €μ λ νλ‘μ νΈμλ λ§νΌ λ€μν μ΄μλ₯Ό κ²½ννλ μκ°μ΄μμ§λ§, μ€λ ₯μκ³ μλ‘ λ°°λ €νλ νμλ€κ³Ό ν¨κ» μ΄λ₯Ό κΈμ μ μΌλ‘ ν΄κ²°ν΄κ°λ©° κ³μν΄μ μλ‘μ΄ κ²μ λ°°μ°κ³ λ°μ ν΄ λκ° μ μμλ μκ°μ΄μμ΅λλ€.