1.React Component
REST API μ GraphQL
REST API λ 무μμΈκ°
REST APIλ Representational State Transfer Application Programming Interfaceμ μ½μμ΄λ€.
RESTλ μΌλ ¨μ μ μ½ μ‘°κ±΄μ κΈ°λ°μΌλ‘ μΉ μλΉμ€κ° μλνλ λ°©μμ μ μνλ μν€ν μ² μ€νμΌμ΄λ€.
RESTλ μ²μμ μΈν°λ·κ³Ό κ°μ 볡μ‘ν λ€νΈμν¬μμ ν΅μ μ κ΄λ¦¬νκΈ° μν μ§μΉ¨μΌλ‘ λ§λ€μ΄μ‘λ€. μΈν°λ·μ ν΅ν΄ λͺ¨λ μ₯μΉ λλ νλ«νΌμμ μ‘μΈμ€ν μ μλ κ°λ³κ³ νμ₯ κ°λ₯νλ©° μ μ§ κ΄λ¦¬ κ°λ₯ν μΉ μλΉμ€λ₯Ό ꡬμΆνλ λ° μ¬μ©λλ€.
APIλ μλ‘ λ€λ₯Έ μννΈμ¨μ΄ μμ© νλ‘κ·Έλ¨μ΄ μλ‘ ν΅μ ν μ μλλ‘ νλ κ·μΉ λλ νλ‘ν μ½ μ§ν©μ΄λ€.
REST μν€ν μ² μ€νμΌμ λ°λ₯΄λ APIλ₯Ό REST APIλΌκ³ νλ€.
REST APIμλ μν€ν μ²λ₯Ό μ μνκ³ μΉ κΈ°λ° μ ν리μΌμ΄μ μ ꡬμΆνλ λ° λ리 μ¬μ©λλ λͺ κ°μ§ νΉμ±μ΄ μλ€. μ£Όμ νΉμ§ μ€ μΌλΆλ λ€μκ³Ό κ°λ€.
μν λΉμ μ₯(Stateless): REST APIλ μν λΉμ μ₯μ΄λ―λ‘ μμ² κ°μ ν΄λΌμ΄μΈνΈ 컨ν μ€νΈλ₯Ό μ μ₯νμ§ μλλ€. ν΄λΌμ΄μΈνΈμ κ° μμ²μλ μλ²κ° μμ²μ μ²λ¦¬νλ λ° νμν λͺ¨λ μ λ³΄κ° ν¬ν¨λμ΄ μλ€.
ν΄λΌμ΄μΈνΈ-μλ² μν€ν μ²(Client-server architecture): REST APIλ ν΄λΌμ΄μΈνΈμ μλ²κ° μλ‘ λΆλ¦¬λκ³ λ 립μ μΈ ν΄λΌμ΄μΈνΈ-μλ² μν€ν μ²λ₯Ό λ°λ₯Έλ€. ν΄λΌμ΄μΈνΈλ μλ²μ μμ²(request)μ 보λ΄κ³ μλ²λ μλ΅(response)μ λ€μ 보λΈλ€.
ν΅μΌλ μΈν°νμ΄μ€(Uniform interface): REST APIμλ ν΅μΌλ μΈν°νμ΄μ€κ° μλ€. μ¦, GET, POST, PUT, DELETE λ±κ³Ό κ°μ νμ€ HTTP λ©μλ μ§ν©μ μ¬μ©νμ¬ λ¦¬μμ€μ μνΈ μμ©νλ€. μ΄λ₯Ό ν΅ν΄ κ°λ°μλ APIλ₯Ό λ μ½κ² μ¬μ©νκ³ μ΄ν΄ν μ μλ€.
리μμ€ κΈ°λ°(Resource-based): REST APIλ 리μμ€ κΈ°λ°μ΄λ€. μ¦, APIμ λͺ¨λ κ΅¬μ± μμλ κ³ μ ν URI(Uniform Resource Identifier)λ‘ μλ³λλ€. μ΄λ¬ν 리μμ€λ νμΌ, λ°μ΄ν°λ² μ΄μ€ λλ κΈ°ν μ νμ λ°μ΄ν°μΌ μ μλ€. λ°μ΄ν°λ μΌλ°μ μΌλ‘ λ€μν νλ«νΌμμ μ½κ² μ΄ν΄ν μ μλ λ²μ© λ°μ΄ν° νμμΈ JSON λλ XML νμμ΄λ€.
μΊμ κ°λ₯: REST APIλ μΊμ κ°λ₯νλλ‘ μ€κ³λμλ€. μ¦, μλ²μ μλ΅μ ν΄λΌμ΄μΈνΈκ° μΊμνμ¬ μ±λ₯μ ν₯μμν¬ μ μλ€.
κ³μΈ΅νλ μμ€ν : REST APIλ κ³μΈ΅νλ μμ€ν μΌλ‘ μ€κ³λμλ€. μ¦, ν΄λΌμ΄μΈνΈλ μλ²μ κΈ°λ³Έ ꡬνμ λν΄ μ νμκ° μλ€. μ΄λ κ² νλ©΄ ν΄λΌμ΄μΈνΈμ μν₯μ μ£Όμ§ μκ³ μλ²λ₯Ό μ½κ² μ λ°μ΄νΈνκ±°λ μμ ν μ μλ€.
μ λ°μ μΌλ‘ REST APIλ λ¨μνκ³ νμ₯ κ°λ₯νλ©° μ μ°νλλ‘ μ€κ³λμ΄ μΉ κΈ°λ° μ ν리μΌμ΄μ ꡬμΆμ λ리 μ¬μ©λλ€.
GraphQLμ μ λ±μ₯νλκ°?
GraphQLμ μ€ν μμ€ μΏΌλ¦¬ μΈμ΄μ΄μ APIμ© λ°νμμΌλ‘, 2012λ Facebookμ΄ REST APIμμ μ§λ©΄ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ²μ κ°λ°νλ€. REST APIλ APIλ₯Ό ꡬμΆνλ νμ€ λ°©μμ΄ λμμ§λ§, Facebookμ λ°μ΄ν°κ° μ μ λ 볡μ‘ν΄μ§λ©΄μ 쿼리λ₯Ό μ΅μ ννκ³ λ°μ΄ν°λ₯Ό κ³Όλνκ² κ°μ Έμ€κ±°λ μ κ² κ°μ Έμ€λ κ²μ λ°©μ§νλ κ²μ΄ μ΄λ €μμ‘μλ€κ³ νλ€.
GraphQLμ ν΄λΌμ΄μΈνΈκ° νμν λ°μ΄ν°λ§ μμ²ν μ μλλ‘ ν¨μΌλ‘μ¨ λ³΄λ€ ν¨μ¨μ μ΄κ³ μ μ°ν λ°μ΄ν° 쿼리 λ°©λ²μ μ 곡νκΈ° μν΄ κ°λ°λμλ€. ν΄λΌμ΄μΈνΈκ° λ°μ΄ν° μꡬ μ¬νμ μ§μ νλ λ° μ¬μ©ν μ μλ κ°λ ₯νκ² μ ννλ μ€ν€λ§λ₯Ό μ 곡ν¨μΌλ‘μ¨ μ΄λ₯Ό λ¬μ±νκ³ , μλ²μμ μ΄λ₯Ό ν΄κ²°νλ€.
GraphQLμ μ£Όμ κΈ°λ₯ μ€ νλλ μλ‘ λ€λ₯Έ 리μμ€μ λν μ¬λ¬ μλν¬μΈνΈκ° μλ λͺ¨λ λ°μ΄ν° 쿼리μ λν΄ λ¨μΌ μλν¬μΈνΈλ₯Ό μ 곡ν μ μλ€λ μ μ΄λ€. μ΄λ κ² νλ©΄ APIκ° λ¨μνλκ³ λΉλ λ° μ μ§ κ΄λ¦¬μ νμν μ½λμ μμ΄ μ€μ΄λ λ€.
REST API vs GraphQL
REST API
μ₯μ
λ°°μ°κΈ° μ½κ³ μ κ³μμ λ리 μ±νλμλ€.
GET, POST, PUT, DELETEμ κ°μ λ€μν HTTP λ©μλ μ§μνλ€.
μΊμ± λ° λ³΄μμ μ½κ² ꡬνν μ μλ€
μν λΉμ μ₯μ±μ μ§μνμ¬ νμ₯μ΄ μ©μ΄νλ€.
μΉ, λͺ¨λ°μΌ, IoT λ± λ€μν μ ν리μΌμ΄μ μ μ¬μ© κ°λ₯νλ€.
λ¨μ
λ°μ΄ν°μ μ€λ² νμΉκ³Ό μΈλ νμΉμ΄ λ°μνμ¬ λ€νΈμν¬ μ§μ°κ³Ό μ±λ₯ μ νλ₯Ό μ΄λν μ μλ€.
λ€μν 리μμ€μ λν΄ μ¬λ¬ μλν¬μΈνΈκ° νμνλ―λ‘ μ½λ 볡μ‘μ± λ° μ μ§ κ΄λ¦¬ λ¬Έμ λ°μ ν μ μλ€.
λ²μ κ΄λ¦¬κ° μ λλ‘ μ§μλμ§ μμ μλ‘μ΄ κΈ°λ₯μ΄ μΆκ°λ λ λ³κ²½ μ¬νμ΄ μ€λ¨λ μ μλ€.
λ§€μ° λ³΅μ‘νκ³ μ€μ²©λ λ°μ΄ν° ꡬ쑰μ μ ν©νμ§ μλ€.
GraphQL
μ₯μ
ν΄λΌμ΄μΈνΈκ° νμν λ°μ΄ν°λ§ μμ²ν μ μμ΄ λ€νΈμν¬ λκΈ° μκ°μ μ€μ΄κ³ μ±λ₯μ κ°μ νλ€.
κ°λ ₯νκ² μ ννλ μ€ν€λ§λ₯Ό μ 곡νλ―λ‘ κ°λ°μκ° APIλ₯Ό λ μ½κ² μ΄ν΄νκ³ μμ ν μ μλ€.
λͺ¨λ λ°μ΄ν° 쿼리λ₯Ό μν λ¨μΌ μλν¬μΈνΈλ₯Ό μ 곡νμ¬ APIλ₯Ό κ°μννκ³ μ½λ 볡μ‘μ±μ μ€μΈλ€.
μ€μκ° λ°μ΄ν° μ λ°μ΄νΈ λ° κ΅¬λ κΈ°λ₯μ μ§μνλ€.
λ§€μ° λ³΅μ‘νκ³ μ€μ²©λ λ°μ΄ν° ꡬ쑰 μ²λ¦¬ κ°λ₯νλ€.
λ¨μ
GraphQLμ μ΅μνμ§ μμ κ°λ°μμκ²λ νμ΅ κ³‘μ νμνλ€.
μΊμ±κ³Ό 보μμ ꡬννλ λ° λ λ§μ λ Έλ ₯μ΄ νμνλ€.
REST APIλ§νΌ λ리 μ±νλμ§ μμ 리μμ€ λ° λꡬλ₯Ό μ°ΎκΈ°κ° λ μ΄λ €μΈ μ μλ€.
λ°μ΄ν° κ²μμ μ μ°μ±μΌλ‘ μΈν΄ λ ν° νμ΄λ‘λκ° λ°μνμ¬ μ μ¬μ μΈ λ€νΈμν¬ μ 체λ₯Ό μ΄λν μ μλ€.
μμ½νμλ©΄, REST APIλ κ΄λ²μν μ ν리μΌμ΄μ μ μ§μνκ³ μΊμ±κ³Ό 보μμ μ½κ² ꡬνν μ μλ λ리 μ±νλ νμ€μ΄λ€. νμ§λ§ λ°μ΄ν°μ μ€λ²νμΉ λ° μΈλνμΉμΌλ‘ μΈν΄ λ€νΈμν¬ μ§μ°κ³Ό μ±λ₯ μ νκ° λ°μν μ μλ€. λ°λ©΄ GraphQLμ λ°μ΄ν°λ₯Ό 쿼리νλ λ³΄λ€ ν¨μ¨μ μ΄κ³ μ μ°ν λ°©λ²μ μ 곡νμ§λ§, μΊμ± λ° λ³΄μμ ꡬννλ λ° νμ΅ κ³‘μ κ³Ό λ λ§μ λ Έλ ₯μ΄ νμνλ€. λ§€μ° λ³΅μ‘νκ³ μ€μ²©λ λ°μ΄ν° ꡬ쑰μ μ ν©νλ©° λͺ¨λ λ°μ΄ν° 쿼리μ λν΄ λ¨μΌ μλν¬μΈνΈλ₯Ό μ 곡νλ―λ‘ μ½λ 볡μ‘μ±μ΄ μ€μ΄λ λ€.
Aha Moment
REST APIλ₯Ό μ¬μ©νλ€ λ³΄λ©΄ μ’ μ’ λλ μκ°μ΄ νλ©΄μ ꡬμ±νλλ° νμν μ λ³΄λ³΄λ€ μλ²μμ 보λ΄μ£Όλ μλ΅κ°μ΄ κ³Όλνκ² μ λ³΄κ° λ΄κ²¨μλ κ²½μ°κ° μ’ μ’ λ°μνλ€. νλ©΄ λ§μ μν λ°μ΄ν°λ‘ ꡬμ±μ΄ λκΈ°λ³΄λ€ λ λ§μ μ 보λ₯Ό λ΄κ³ μλ κ²½μ°λ μκΈ° λλ¬Έμ νλ©΄μμ μ¬μ©νμ§ μλ λ°μ΄ν°κ° μ κ²½μ°μ΄μ§λ§ λ¬λ¦¬ λ°©λ²μ΄ μλ€. μλ§λ νμ΄μ€λΆμ μ΄λ° κ²½μ°μ μ΄κ²λ€μ λͺ¨λ 컨νΈλ‘€νλκ±°μμ λ¬Έμ μ μ λ°κ²¬νκ³ GraphQLμ κ°λ°νλ€κ³ μκ°μ΄ λ λ€. λ΄κ° μλΉμ€λ₯Ό ꡬμΆνλ©΄μ μ¬μ© ν΄λ³Έ μ μ μκ³ λλ΅μ μΈ μ¬μ©λ² μ λλ§ μκ³ μμ§λ§ GraphQLμ μ¬μ©νμ λμ μ₯μ μ ν΄λΌμ΄μΈνΈμμ νμν λ°μ΄ν°λ§ κ°μ Έκ°λ€ μ¬μ©ν μ μλ€λ μ μ μκ³ μλ€. REST APIμ GraphQL λ λ€ μ₯λ¨μ μ΄ λͺ νν΄μ μ΄λκ² λ μ’λ€λΌκ³ ν μλ μμ§λ§ μ΄λ€ μλΉμ€λ₯Ό ꡬμΆνλλμ λ°λΌ μ΄λ€κ² μ’μμ§λ κ·Έλ κ°λ¦΄ κ² κ°λ€.
JSON
JSON(JavaScript Object Notation)μ μ¬λμ΄ μ½κ³ μ°κΈ° μ½κ³ κΈ°κ³κ° ꡬ문 λΆμνκ³ μμ±νκΈ° μ¬μ΄ κ²½λ λ°μ΄ν° κ΅ν νμμ΄λ€. λͺ¨λ νλ‘κ·Έλλ° μΈμ΄μ ν¨κ» μ¬μ©ν μ μλ μΈμ΄ λ 립μ μΈ λ°μ΄ν° νμμΌλ‘ λ§λ€μ΄μ‘λ€.
JSON λ°μ΄ν°λ ν€-κ° μμΌλ‘ ꡬμ±λλ©° ν€λ νμ λ¬Έμμ΄μ΄κ³ κ°μ λ¬Έμμ΄, μ«μ, λΆμΈ, κ°μ²΄ λλ λ°°μ΄κ³Ό κ°μ μ ν¨ν JSON λ°μ΄ν° μ νμ΄λ€. κ°μ²΄λ μ€κ΄νΈλ‘ λ¬ΆμΈ ν€-κ° μμ λͺ¨μμΈ λ°λ©΄ λ°°μ΄μ λκ΄νΈλ‘ λ¬ΆμΈ μ λ ¬λ κ° λͺ¨μμ΄λ€. JSON λ°μ΄ν°λ λ€λ₯Έ κ°μ²΄ λλ λ°°μ΄μ ν¬ν¨νλ κ°μ²΄ λλ λ°°μ΄κ³Ό ν¨κ» μ€μ²©λ μ μλ€. JSONμ μΉ μλ²μ ν΄λΌμ΄μΈνΈ κ°μ λ°μ΄ν° κ΅νμ λ리 μ¬μ©λλ©° λ¨μμ±κ³Ό μ¬μ© νΈμμ±μΌλ‘ μΈν΄ XMLμ μΈκΈ° μλ λμμ΄ λμλ€. λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄μ μΉ νλ μμν¬μμ μ§μνλ―λ‘ λ€μ¬λ€λ₯νκ³ λ리 μ¬μ©λλ λ°μ΄ν° νμμ΄λ€.
μ₯μ
μ¬λμ΄ μ½κ² μ½κ³ μΈ μ μμ΄ λ°μ΄ν° κ΅νμ λ리 μ¬μ©λ¨
κ²½λμΌλ‘ λ€νΈμν¬λ₯Ό ν΅ν λ°μ΄ν° μ μ‘ μλ ν₯μ
λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄ λ° μΉ νλ μμν¬μμ κ΄λ²μνκ² μ§μλλ―λ‘ κΈ°μ‘΄ μ ν리μΌμ΄μ μ μ½κ² ν΅ν©ν μ μλ€.
ꡬ문 λΆμ λ° μμ±μ΄ μ©μ΄νμ¬ μ μ°νκ³ λ€μν λ°μ΄ν° νμ λ§λ€κΈ°
μ€μ²©λ λ°μ΄ν° ꡬ쑰λ₯Ό μ§μνμ¬ λ³΅μ‘ν λ°μ΄ν° νν κ°λ₯
μ μ μλκ³ νμ€νλμ΄ μλ‘ λ€λ₯Έ μμ€ν κ°μ νΈνμ± λ³΄μ₯
λ¨μ
JSONμ λ¬Έμμ΄, μ«μ, λΆμΈ, κ°μ²΄ λ° λ°°μ΄κ³Ό κ°μ λͺ κ°μ§ κΈ°λ³Έ λ°μ΄ν° μ νλ§ μ§μνλ―λ‘ λ°μ΄ν° μ νμ λν μ νλ μ§μ
λ°μ΄λ리 λ°μ΄ν°λ₯Ό μ§μνμ§ μμΌλ―λ‘ λ°μ΄λ리 νμμΌλ‘ λ ν¨μ¨μ μΌλ‘ μ μ‘ν μ μλ λ°μ΄ν°μ νμ΄λ‘λ ν¬κΈ°κ° μ»€μ§ μ μλ€.
μ€ν€λ§ μ μ©μ΄ μμΌλ―λ‘ μ ν¨νμ§ μμ λ°μ΄ν°λ₯Ό λ μ½κ² μ μ‘νκ³ μ²λ¦¬ν μ μλ€.
μ£Όμμ΄ μ§μλμ§ μμ JSON λ°μ΄ν°λ₯Ό λ¬Έμννκ³ μ£Όμμ μΆκ°νκΈ°κ° λ μ΄λ €μμ§ μ μλ€.
볡μ‘ν μ€μ²© λ°μ΄ν° ꡬ쑰μ κ²½μ° JSON λ°μ΄ν°κ° μλΉν μ»€μ Έ μ μ¬μ μΈ μ±λ₯ λ¬Έμ κ° λ°μν μ μλ€.
μμ½νλ©΄ JSONμ λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄μ μΉ νλ μμν¬μμ λ리 μ§μλλ κ°λ³κ³ λ€μν λ°μ΄ν° νμμ΄λ€. λ¨μμ±κ³Ό μ¬μ© μ©μ΄μ±μΌλ‘ μΈν΄ λ°μ΄ν° κ΅νμ λ리 μ¬μ©λμ§λ§ λ°μ΄ν° μ νμ λν μ§μμ΄ μ νλκ³ μ€ν€λ§ μ μ©μ΄ μλ κ²κ³Ό κ°μ λͺ κ°μ§ μ ν μ¬νμ΄ μλ€. μ λ°μ μΌλ‘ JSONμ λ§μ μ νμ μ ν리μΌμ΄μ μ μ ν©ν μ λ’°ν μ μκ³ μ ν립λ λ°μ΄ν° νμμ΄λ€.
DSL(Domain-Specific Language)
DSL(Domain-Specific Language)μ νΉμ λλ©μΈ λλ λ¬Έμ 곡κ°μ μν΄ μ€κ³λ νλ‘κ·Έλλ° μΈμ΄λ€. μ μ°νκ³ κ΄λ²μν μ¬μ© μ¬λ‘μ μ μ©ν μ μλλ‘ μ€κ³λ λ²μ© νλ‘κ·Έλλ° μΈμ΄μ λ¬λ¦¬ DSLμ νΉμ λλ©μΈμ λ§κ² μ‘°μ λλ©° νΉμ μμ μ μ΅μ νλλ κ²½μ°κ° λ§λ€.
DSLμ μ¬μ©νλ©΄ κ°λ°μκ° λ³΄λ€ μμ°μ€λ½κ³ κ°κ²°ν λ°©μμΌλ‘ μ루μ μ ννν μ μμΌλ―λ‘ μμ°μ±μ λμ΄κ³ μ€λ₯λ₯Ό μ€μΌ μ μλ€.
DSL(λλ©μΈ νΉμ μΈμ΄)μλ λͺ κ°μ§ μ₯μ κ³Ό λ¨μ μ΄ μλ€.
μ₯μ
μμ°μ± ν₯μ: DSLμ νΉμ λλ©μΈ λ΄μμ μ¬μ©νλλ‘ μ€κ³λμμΌλ―λ‘ κ°λ°μκ° λ³΄λ€ μμ°μ€λ½κ³ κ°κ²°ν λ°©μμΌλ‘ μ루μ μ ννν μ μλ€. μ΄λ μμ°μ± ν₯μκ³Ό κ°λ° μκ° λ¨μΆμΌλ‘ μ΄μ΄μ§ μ μλ€.
λ λμ ννλ ₯: DSLμ λλ©μΈλ³ μ©μ΄μ ꡬ문μ μ¬μ©νλ―λ‘ κ°λ°μκ° λ³΅μ‘ν λͺ¨λΈμ΄λ μμ€ν μ λ μ½κ² ννν μ μλ€. μ΄κ²μ λ μ ννκ³ μ΄ν΄νκΈ° μ¬μ΄ μ½λλ‘ μ΄μ΄μ§ μ μλ€.
μ€λ₯ κ°μ: DSLμ λλ©μΈλ³ κ·μΉκ³Ό μ μ½μ μ μ©νλλ‘ μ€κ³λμκΈ° λλ¬Έμ μ€λ₯μ λ²κ·Έμ κ°λ₯μ±μ μ€μΌ μ μλ€. μ΄λ λ³΄λ€ μμ μ μ΄κ³ κ°λ ₯ν μννΈμ¨μ΄λ‘ μ΄μ΄μ§ μ μλ€.
μμ¬μ΄ μ μ§ κ΄λ¦¬: DSLμ λλ©μΈ νΉμ λ¬Έμ λ₯Ό λͺ ννκ³ κ°κ²°νκ² νννλ―λ‘ μκ°μ΄ μ§λ¨μ λ°λΌ μννΈμ¨μ΄λ₯Ό λ μ½κ² μ μ§ κ΄λ¦¬ν μ μλ€.
νμ μ¦κ°: DSLμ κ³΅ν΅ μΈμ΄λ₯Ό μ 곡νκ³ λ¬Έμ μ λν μ΄ν΄λ₯Ό μ 곡νλ―λ‘ κ°λ°μμ λλ©μΈ μ λ¬Έκ° κ°μ νμ μ μ¦κ°μν€λ λ° λμμ΄ λ μ μλ€.
λ¨μ
μ νλ μ μ© κ°λ₯μ±: DSLμ νΉμ λλ©μΈμ©μΌλ‘ μ€κ³λμμΌλ―λ‘ λ€λ₯Έ λ¬Έμ μμμ΄λ λλ©μΈμλ μ μ©λμ§ μμ μ μλ€.
λμ κ°λ° λΉμ©: DSL κ°λ°μ λλ©μΈκ³Ό μ¬μ©μμ νΉμ μꡬ μ¬νμ λν κΉμ μ΄ν΄κ° νμνκΈ° λλ¬Έμ μ΄λ ΅κ³ μκ°μ΄ λ§μ΄ μμλ μ μλ€.
μ νλ μ¬μ©μ κΈ°λ°: DSLμ νΉμ λλ©μΈμλ§ μ μ©ν μ μμΌλ―λ‘ μ νλ μ¬μ©μ κΈ°λ°μ κ°μ§ μ μλ€. μ΄λ‘ μΈν΄ DSLμ λν μ λ¬Έ μ§μμ κ°μΆ κ°λ°μλ₯Ό μ°ΎκΈ°κ° λ μ΄λ €μμ§ μ μλ€.
κ°νλ₯Έ νμ΅ κ³‘μ : DSLμ νΉν ν΄λΉ μΈμ΄μμ μ¬μ©λλ λλ©μΈλ³ κ°λ κ³Ό μ©μ΄μ μ΅μνμ§ μμ μ κ· μ¬μ©μμκ² κ°νλ₯Έ νμ΅ κ³‘μ μ κ°μ§ μ μλ€.
μ νλ ν΄λ§: DSLμ λ²μ© νλ‘κ·Έλλ° μΈμ΄λ§νΌ λ리 μ¬μ©λμ§ μκΈ° λλ¬Έμ ν΄λ§ λ° μ§μμ΄ μ νλ μ μλ€.
μμ½νλ©΄ λλ©μΈ νΉμ μΈμ΄μλ μμ°μ± ν₯μ, ννλ ₯ ν₯μ, μ€λ₯ κ°μ, μ μ§ κ΄λ¦¬ μ©μ΄μ±, νμ μ¦κ° λ± λͺ κ°μ§ μ₯μ μ΄ μλ€. κ·Έλ¬λ μ νλ μ μ© κ°λ₯μ±, λμ κ°λ° λΉμ©, μ νλ μ¬μ©μ κΈ°λ°, κ°νλ₯Έ νμ΅ κ³‘μ λ° μ νλ λꡬ λ± λͺ κ°μ§ λ¨μ λ μλ€. DSL μ¬μ© μ¬λΆλ₯Ό κ²°μ ν λ νλ‘μ νΈμ νΉμ μꡬ μ¬νκ³Ό κ°λ° νμ μ λ¬Έμ±μ κ³ λ €νλ κ²μ΄ μ€μνλ€.
λλ©μΈ νΉμ μΈμ΄μ λͺ κ°μ§ μ
SQL(Structured Query Language): SQLμ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ₯Ό 쿼리νκ³ κ΄λ¦¬νλ λ° μ¬μ©λλ DSLμ΄λ€. λ°μ΄ν°λ² μ΄μ€ μμ μ μ΅μ νλ μ체 ꡬ문 λ° λ¬Έλ²μ΄ μλ€.
HTML(Hypertext Markup Language): HTMLμ μΉ νμ΄μ§λ₯Ό λ§λλ λ° μ¬μ©λλ DSLμ΄λ€. μ¬κΈ°μλ μΉ νμ΄μ§λ₯Ό ꡬμ±νλ λ°©λ²μ μ μνλ νΉμ ꡬ문과 κ·μΉ μ§ν©μ΄ μλ€.
μ κ·μ(Regular Expressions): μ κ·μμ ν¨ν΄ μΌμΉ λ° ν μ€νΈ κ²μμ μ¬μ©λλ DSLμ΄λ€. ν¨ν΄μ νννκ³ μΌμΉμν¬ μ μλ λ°©λ²μ μ μνλ νΉμ ꡬ문과 κ·μΉ μ§ν©μ΄ μλ€.
YAML(Yet Another Markup Language): YAMLμ λ°μ΄ν° μ§λ ¬ν λ° κ΅¬μ±μ μ¬μ©λλ DSLμ΄λ€. μ¬κΈ°μλ λ°μ΄ν°λ₯Ό μ¬λμ΄ μ½μ μ μλ νμμΌλ‘ νννλ λ°©λ²μ μ μνλ νΉμ ꡬ문 λ° κ·μΉ μ§ν©μ΄ μλ€.
R(νλ‘κ·Έλλ° μΈμ΄): Rμ ν΅κ³ κ³μ° λ° λ°μ΄ν° λΆμμ μν΄ νΉλ³ν μ€κ³λ νλ‘κ·Έλλ° μΈμ΄μ΄λ€. μ체 ꡬ문과 λ°μ΄ν° μμ μ μ΅μ νλ ν¨μ μ§ν©μ΄ μλ€.
μ΄λ¬ν κ° μΈμ΄λ νΉμ λλ©μΈ λ΄μμ μ¬μ©νλλ‘ μ€κ³λμμΌλ©° μ체 ꡬ문, λ¬Έλ² λ° κ·μΉμ΄ μλ€. DSLμ μ¬μ©νμ¬ κ°λ°μλ λλ©μΈ λ΄μμ μ루μ μ λ³΄λ€ μ½κ² ββνννκ³ λ³΄λ€ μ ννκ³ μμ μ μ΄λ©° μ μ§ κ΄λ¦¬ κ°λ₯ν μννΈμ¨μ΄λ₯Ό λ§λ€ μ μλ€.
μ μΈν νλ‘κ·Έλλ°
μ μΈμ νλ‘κ·Έλλ°μ νλ‘κ·Έλ¨μ΄ μ΄λ»κ² ν΄μΌ νλμ§κ° μλλΌ λ¬΄μμ ν΄μΌ νλμ§μ μ΄μ μ λ§μΆλ νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄λ€. νλ‘κ·Έλλ¨Έλ μνλ κ²°κ³Όλ₯Ό μ§μ νκ³ μ»΄ν¨ν°λ μ΄λ₯Ό λ¬μ±νλ μ΅μ μ λ°©λ²μ κ²°μ νλ€. μ μΈμ νλ‘κ·Έλλ°μ μ’ μ’ SQL λλ HTMLκ³Ό κ°μ κ³ κΈ νλ‘κ·Έλλ° μΈμ΄μ μ°κ²°λλ€.
μ₯μ
μ½λλ ꡬν보λ€λ κ²°κ³Όμ μ΄μ μ λ§μΆκΈ° λλ¬Έμ μ½κ³ μ΄ν΄νκΈ° μ½λ€.
λ λͺ¨λνλκ³ μ¬μ¬μ© κ°λ₯ν μ½λλ‘ μ΄μ΄μ Έ μ μ§ κ΄λ¦¬κ° λ μ¬μΈ μ μλ€.
μ¬λ¬ νλ‘μΈμ λλ μμ€ν μμ λ³λ ¬ν λ° λ°°ν¬μ λ μ ν©νλ€.
λμ μμ€μ μΆμνλ‘ μΈν΄ μ€λ₯ λ° λ²κ·Έ κ°λ₯μ± κ°μλλ€.
λ¨μ
μ»΄ν¨ν°κ° κ²°κ³Όλ₯Ό λ¬μ±νκΈ° μν μ΅μ μ λ°©λ²μ κ²°μ ν΄μΌ νλ―λ‘ μλ λ° λ©λͺ¨λ¦¬ μ¬μ© μΈ‘λ©΄μμ ν¨μ¨μ±μ΄ λ¨μ΄μ§ μ μλ€.
μΌλΆ νλ‘κ·Έλλ¨Έκ° μ΄ν΄νκΈ° μ΄λ €μΈ μ μλ λ λμ μμ€μ μΆμνκ° νμνλ€.
νλ‘κ·Έλ¨ νλ¦ λ° μνμ λν μ νλ μ μ΄λ‘ μΈν΄ λλ²κΉ μ΄ λ μ΄λ €μμ§ μ μλ€.
λͺ
λ Ήν νλ‘κ·Έλλ°
λͺ λ Ήν νλ‘κ·Έλλ°μ νΉμ κ²°κ³Όλ₯Ό λ¬μ±νλ λ°©λ²μ μ΄μ μ λ§μΆ νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄λ€. μ¦, νλ‘κ·Έλλ¨Έλ μ»΄ν¨ν°μ λ¨κ³λ³ μ§μΉ¨μ μ§μ νμ¬ μνν μμ κ³Ό μν λ°©λ²μ μ ννκ² μλ €μ€λ€. λͺ λ Ήν νλ‘κ·Έλλ°μ μ’ μ’ νλ‘κ·Έλλ¨Έμκ² μ»΄ν¨ν° νλμ¨μ΄μ λν λμ μμ€μ μ μ΄λ₯Ό μ 곡νλ Assembly λλ Cμ κ°μ μ μμ€ νλ‘κ·Έλλ° μΈμ΄μ κ΄λ ¨λλ€.
μ₯μ
νλ‘κ·Έλ¨ νλ¦ λ° μνμ λν μμ ν μ μ΄ μ 곡λλ€.
νλ‘κ·Έλλ¨Έκ° νλμ¨μ΄λ₯Ό μ§μ μ μ΄νλ―λ‘ μλμ λ©λͺ¨λ¦¬ μ¬μ© μΈ‘λ©΄μμ λ ν¨μ¨μ μΌ μ μλ€.
νλ‘μΈμ€μ κ° λ¨κ³λ₯Ό μ§μ νλ―λ‘ νλ‘κ·Έλ¨ μλ λ°©μμ λν λͺ νν μ΄ν΄λ₯Ό μ 곡νλ€.
λ¨μ
μ½λλ νΉν λ ν° νλ‘κ·Έλ¨μ κ²½μ° λ 볡μ‘νκ³ μ½κ³ μ μ§νκΈ° μ΄λ €μΈ μ μλ€.
μ½λ μ€λ³΅ λ° λ λͺ¨λνλ μ½λλ‘ μ΄μ΄μ§ μ μλ€
μ¬λ¬ νλ‘μΈμ λλ μμ€ν μ λ³λ ¬ννκ±°λ λΆμ°νκΈ° μ΄λ €μμλ€.
λͺ μμ μΈ νΉμ±μΌλ‘ μΈν΄ μ€λ₯ λ° λ²κ·Έκ° λ°μνκΈ° μ½λ€.
SRP(λ¨μΌ μ±
μ μμΉ)
SRP(Single Responsibility Principle)λ ν΄λμ€ λλ λͺ¨λμ΄ λ¨ νλμ μ± μλ§ κ°μ ΈμΌ νλ©° λ°λΌμ λ³κ²½ν΄μΌ νλ μ΄μ λ λ¨ νλμ¬μΌ νλ€λ μννΈμ¨μ΄ μ€κ³ μμΉμ΄λ€. μ¦, ν΄λμ€λ λͺ¨λμ ν κ°μ§ μΌμ μ μνν΄μΌ νλ€.
SRPλ κ°λ°μκ° λͺ¨λμ, μ μ§ κ΄λ¦¬ λ° νμ₯ κ°λ₯ν μννΈμ¨μ΄λ₯Ό λ§λλ λ° λμμ΄ λλλ‘ κ°λ°λ κ°μ²΄ μ§ν₯ μ€κ³μ SOLID μμΉμ μΌλΆμ΄λ€.
SRPλ₯Ό μ€μν¨μΌλ‘μ¨ κ°λ°μλ λ¨μΌ μμ μ μ΄μ μ λ§μΆ ν΄λμ€μ λͺ¨λμ μμ±ν μ μμΌλ―λ‘ μ΄ν΄, ν μ€νΈ λ° μ μ§ κ΄λ¦¬κ° λ μ¬μμ§λ€. ν΄λμ€λ λͺ¨λμ νλμ μ± μλ§ μλ κ²½μ° λ³κ²½ν΄μΌ ν μ¬νμ μ½λμ ν΄λΉ μμμΌλ‘ μ νλλ―λ‘ λ²κ·Έκ° λ°μν κ°λ₯μ±μ΄ μ€μ΄λ€κ³ ν₯ν λ³κ²½μ΄ λ μ¬μμ§λ€.
μλ₯Ό λ€μ΄ μ¬μ©μ μ λ ₯μ μ ν¨μ± κ²μ¬μ μ΄λ©μΌ μ μ‘μ λͺ¨λ λ΄λΉνλ ν΄λμ€λ₯Ό μκ°ν΄ 보μ. μ΄λ©μΌ μ μ‘ λ°©μμ΄ λ³κ²½λλ©΄ μ μ¬μ μΌλ‘ μ ν¨μ± κ²μ¬ λ Όλ¦¬μ μν₯μ λ―ΈμΉ μ μμΌλ©° κ·Έ λ°λμ κ²½μ°λ λ§μ°¬κ°μ§μ΄λ€. μ΄λ¬ν μ± μμ λ κ°μ κ°λ³ ν΄λμ€λ‘ λΆλ¦¬νλ©΄ μ½λμ ν μμμ λ³κ²½ν΄λ λ€λ₯Έ μμμ μν₯μ μ£Όμ§ μμΌλ―λ‘ μ½λκ° λͺ¨λνλκ³ μ μ§ κ΄λ¦¬κ° μ¬μμ§λ€.
μμ½νλ©΄ λ¨μΌ μ± μ μμΉμ λͺ¨λνλκ³ μ μ§ κ΄λ¦¬ κ°λ₯νλ©° νμ₯ κ°λ₯ν μ½λλ₯Ό μ΄μ§νλ μννΈμ¨μ΄ μ€κ³μ μ€μν μμΉμ΄λ€. λ¨μΌ μ± μμ μ§μ€ν¨μΌλ‘μ¨ ν΄λμ€μ λͺ¨λμ λ μ½κ² μ΄ν΄, ν μ€νΈ λ° μ μ§ κ΄λ¦¬ν μ μμΌλ―λ‘ λ²κ·Έκ° λ°μν κ°λ₯μ±μ΄ μ€μ΄λ€κ³ ν₯ν λ³κ²½μ΄ λ μ¬μμ§λ€.
Atomic Design
Atomic Designμ 체κ³μ μ΄κ³ λͺ¨λνλ λ°©μμΌλ‘ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό μ€κ³νκ³ κ΅¬μΆνκΈ° μν λ°©λ²λ‘ μ΄λ€. μ΄ μ κ·Ό λ°©μμ Brad Frostκ° κ°λ°νμΌλ©° μ¬μ©μ μΈν°νμ΄μ€λ₯Ό κ²°ν©νμ¬ λ 볡μ‘ν λμμΈμ μμ±ν μ μλ λ μκ³ μ¬μ¬μ© κ°λ₯ν κ΅¬μ± μμλ‘ λλ μ μλ€λ μμ΄λμ΄λ₯Ό κΈ°λ°μΌλ‘ νλ€.
"μμ(atomic)"λΌλ μ©μ΄λ ννμμ μ λνμΌλ©° λͺ¨λ κ²μ΄ λ¬Όμ§μ κ°μ₯ μμ λ¨μμΈ μμλ‘ κ΅¬μ±λμ΄ μλ€λ μκ°μ λνλΈλ€. κ°μ λ°©μμΌλ‘ μ¬μ©μ μΈν°νμ΄μ€λ "μμ(atoms)"λΌκ³ νλ κ°μ₯ μμ μμλ‘ λλ μ μλ€. μν°μ μλ‘λ buttons, form fields λ° iconsκ° μλ€.
κ·Έλ° λ€μ μ΄λ¬ν μμλ₯Ό κ²°ν©νμ¬ μ¬λ¬ μμλ‘ κ΅¬μ±λ λ³΄λ€ λ³΅μ‘ν κ΅¬μ± μμμΈ "λΆμ(molecules)"λ₯Ό λ§λ€ μ μλ€. μλ₯Ό λ€μ΄ search formμ text input μμμ search button μμλ‘ κ΅¬μ±λ μ μλ€.
κ·Έλ° λ€μ λΆμλ₯Ό κ²°ν©νμ¬ μμμ λΆμλ₯Ό λͺ¨λ ν¬ν¨νλ ν¨μ¬ λ 볡μ‘ν κ΅¬μ± μμμΈ "μ 기체(organisms)"λ₯Ό λ§λ€ μ μλ€. μλ₯Ό λ€μ΄ ν€λλ logo λΆμ, navigation λΆμ λ° search form λΆμλ‘ κ΅¬μ±λ μ μλ€.
λ§μ§λ§μΌλ‘ μ 기체λ₯Ό κ²°ν©νμ¬ μ¬λ¬ μ 기체λ₯Ό ν¬ν¨νλ μ 체 νμ΄μ§ λ μ΄μμμΈ "ν νλ¦Ώ(templates)"μ λ§λ€ μ μλ€. κ·Έλ° λ€μ ν νλ¦Ώμ μ¬μ©νμ¬ μ¬μ©μκ° μνΈ μμ©νλ μ΅μ’ μΆλ ₯μΈ "νμ΄μ§"λ₯Ό λ§λλλ€.
Atomic Design λ°©λ²λ‘ μ μ¬μ©νλ©΄ λμμ΄λμ κ°λ°μκ° μ μ°νκ² κ²°ν©νμ¬ μλ‘μ΄ λμμΈμ λ§λ€ μ μλ μ¬μ¬μ© κ°λ₯ν κ΅¬μ± μμ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ§λ€ μ μλ€λ μ΄μ μ΄ μλ€. μ΄λ₯Ό ν΅ν΄ λκ·λͺ¨ λμμΈ μμ€ν μμ μΌκ΄μ±μ μ½κ² μ μ§νκ³ μ½λμ μ€λ³΅ λ° λ°λ³΅μ μ€μΌ μ μλ€.
μ λ°μ μΌλ‘ Atomic Designμ μκ°μ΄ μ§λ¨μ λ°λΌ μ½κ² μ μ§ κ΄λ¦¬νκ³ νμ₯ν μ μλ νμ₯ κ°λ₯ν λͺ¨λμ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ§λλ λ° μ μ©ν λ°©λ²λ‘ μ΄λ€.
React component μ props
Reactμμ μ»΄ν¬λνΈλ μ ν리μΌμ΄μ UIμ λΉλ© λΈλ‘μ΄λ€. κ΅¬μ± μμ(Components)λ λ³Έμ§μ μΌλ‘ μ체 κΈ°λ₯(JavaScript λ‘μ§), μ€νμΌ λ° λ§ν¬μ μ μΊ‘μννλ μ¬μ¬μ© κ°λ₯ν μ½λ μ‘°κ°μ΄λ€.
κ΅¬μ± μμ(Components)λ κΈ°λ₯(Functional) κ΅¬μ± μμμ ν΄λμ€(Class) κ΅¬μ± μμμ λ κ°μ§ μ νμΌλ‘ λλ μ μλ€. κΈ°λ₯μ κ΅¬μ± μμλ λ λ¨μνλ©° μν λΉμ μ₯ λλ νλ μ ν μ΄μ κ΅¬μ± μμλ₯Ό λ§λλ λ° μ¬μ©λλ€. λ°λ©΄μ ν΄λμ€ κ΅¬μ± μμλ μ¬μ©μ μνΈ μμ©μ μ²λ¦¬νκ³ μ체 μνλ₯Ό μ μ§ν μ μλ μν μ μ₯ κ΅¬μ± μμλ₯Ό λ§λλ λ° μ¬μ©λλ€.
μμ¦μ κΈ°λ³Έμ μΌλ‘ ν¨μ μ»΄ν¬λνΈλ‘ μμ±μ νκ³ μ΄μ μ ν΄λμ€ μ»΄ν¬λνΈμμ κ°μ§κ³ μλ μνΈμμ©μ μ²λ¦¬νλ λΆλΆλ€μ΄ hooksλ₯Ό ν΅ν΄ ν¨μν μ»΄ν¬λνΈμμ μμ± ν μ μλ€.
Reactμμ κ΅¬μ± μμλ "props" νμμΌλ‘ λΆλͺ¨ κ΅¬μ± μμλ‘λΆν° λ°μ΄ν°λ₯Ό λ°μ μλ μλ€. propsλ μμ±(properties)μ μ½μμ΄λ©° λ¨λ°©ν₯ νλ¦μμ κ΅¬μ± μμ κ°μ λ°μ΄ν°λ₯Ό μ λ¬νλ λ°©λ²μ΄λ€. propsλ Reactμμ λ°μ΄ν° μ λ¬, μ΄λ²€νΈ νΈλ€λ¬ μ€μ λλ νμ κ΅¬μ± μμμ λμ ꡬμ±κ³Ό κ°μ λ€μν λͺ©μ μΌλ‘ μ¬μ©λ μ μλ€. μ΄λ€μ Reactμμ λͺ¨λμ λ° μ¬μ¬μ© κ°λ₯ν κ΅¬μ± μμλ₯Ό ꡬμΆνλ λ° νμμ μΈ λΆλΆμ΄λ€.
propsλ μμ κ΅¬μ± μμ λ΄μμ μ½κΈ° μ μ©μΌλ‘ κ°μ£Όλμ΄μΌ νλ€λ μ μ μ μνλ κ²μ΄ μ€μνλ€. μμ κ΅¬μ± μμ λ΄μμ μ§μ μμ νλ©΄ μ λλ€.
Last updated