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μ—λŠ” μ•„ν‚€ν…μ²˜λ₯Ό μ •μ˜ν•˜κ³  μ›Ή 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μΆ•ν•˜λŠ” 데 널리 μ‚¬μš©λ˜λŠ” λͺ‡ 가지 νŠΉμ„±μ΄ μžˆλ‹€. μ£Όμš” νŠΉμ§• 쀑 μΌλΆ€λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  1. μƒνƒœ λΉ„μ €μž₯(Stateless): REST APIλŠ” μƒνƒœ λΉ„μ €μž₯μ΄λ―€λ‘œ μš”μ²­ 간에 ν΄λΌμ΄μ–ΈνŠΈ μ»¨ν…μŠ€νŠΈλ₯Ό μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€. ν΄λΌμ΄μ–ΈνŠΈμ˜ 각 μš”μ²­μ—λŠ” μ„œλ²„κ°€ μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” 데 ν•„μš”ν•œ λͺ¨λ“  정보가 ν¬ν•¨λ˜μ–΄ μžˆλ‹€.

  2. ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ μ•„ν‚€ν…μ²˜(Client-server architecture): REST APIλŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ μ„œλ‘œ λΆ„λ¦¬λ˜κ³  독립적인 ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ μ•„ν‚€ν…μ²˜λ₯Ό λ”°λ₯Έλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ— μš”μ²­(request)을 보내고 μ„œλ²„λŠ” 응닡(response)을 λ‹€μ‹œ 보낸닀.

  3. ν†΅μΌλœ μΈν„°νŽ˜μ΄μŠ€(Uniform interface): REST APIμ—λŠ” ν†΅μΌλœ μΈν„°νŽ˜μ΄μŠ€κ°€ μžˆλ‹€. 즉, GET, POST, PUT, DELETE λ“±κ³Ό 같은 ν‘œμ€€ HTTP λ©”μ„œλ“œ 집합을 μ‚¬μš©ν•˜μ—¬ λ¦¬μ†ŒμŠ€μ™€ μƒν˜Έ μž‘μš©ν•œλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” APIλ₯Ό 더 μ‰½κ²Œ μ‚¬μš©ν•˜κ³  이해할 수 μžˆλ‹€.

  4. λ¦¬μ†ŒμŠ€ 기반(Resource-based): REST APIλŠ” λ¦¬μ†ŒμŠ€ κΈ°λ°˜μ΄λ‹€. 즉, API의 λͺ¨λ“  ꡬ성 μš”μ†ŒλŠ” κ³ μœ ν•œ URI(Uniform Resource Identifier)둜 μ‹λ³„λœλ‹€. μ΄λŸ¬ν•œ λ¦¬μ†ŒμŠ€λŠ” 파일, λ°μ΄ν„°λ² μ΄μŠ€ λ˜λŠ” 기타 μœ ν˜•μ˜ 데이터일 수 μžˆλ‹€. λ°μ΄ν„°λŠ” 일반적으둜 λ‹€μ–‘ν•œ ν”Œλž«νΌμ—μ„œ μ‰½κ²Œ 이해할 수 μžˆλŠ” λ²”μš© 데이터 ν˜•μ‹μΈ JSON λ˜λŠ” XML ν˜•μ‹μ΄λ‹€.

  5. μΊμ‹œ κ°€λŠ₯: REST APIλŠ” μΊμ‹œ κ°€λŠ₯ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆλ‹€. 즉, μ„œλ²„μ˜ 응닡을 ν΄λΌμ΄μ–ΈνŠΈκ°€ μΊμ‹œν•˜μ—¬ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€.

  6. κ³„μΈ΅ν™”λœ μ‹œμŠ€ν…œ: REST APIλŠ” κ³„μΈ΅ν™”λœ μ‹œμŠ€ν…œμœΌλ‘œ μ„€κ³„λ˜μ—ˆλ‹€. 즉, ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ˜ κΈ°λ³Έ κ΅¬ν˜„μ— λŒ€ν•΄ μ•Œ ν•„μš”κ°€ μ—†λ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈμ— 영ν–₯을 주지 μ•Šκ³  μ„œλ²„λ₯Ό μ‰½κ²Œ μ—…λ°μ΄νŠΈν•˜κ±°λ‚˜ μˆ˜μ •ν•  수 μžˆλ‹€.

μ „λ°˜μ μœΌλ‘œ REST APIλŠ” λ‹¨μˆœν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•˜λ©° μœ μ—°ν•˜λ„λ‘ μ„€κ³„λ˜μ–΄ μ›Ή 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ좕에 널리 μ‚¬μš©λœλ‹€.

GraphQL은 μ™œ λ“±μž₯ν–ˆλŠ”κ°€?

GraphQL은 μ˜€ν”ˆ μ†ŒμŠ€ 쿼리 μ–Έμ–΄μ΄μž API용 λŸ°νƒ€μž„μœΌλ‘œ, 2012λ…„ Facebook이 REST APIμ—μ„œ μ§λ©΄ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 처음 κ°œλ°œν–ˆλ‹€. REST APIλŠ” APIλ₯Ό κ΅¬μΆ•ν•˜λŠ” ν‘œμ€€ 방식이 λ˜μ—ˆμ§€λ§Œ, Facebook의 데이터가 점점 더 λ³΅μž‘ν•΄μ§€λ©΄μ„œ 쿼리λ₯Ό μ΅œμ ν™”ν•˜κ³  데이터λ₯Ό κ³Όλ„ν•˜κ²Œ κ°€μ Έμ˜€κ±°λ‚˜ 적게 κ°€μ Έμ˜€λŠ” 것을 λ°©μ§€ν•˜λŠ” 것이 μ–΄λ €μ›Œμ‘Œμ—ˆλ‹€κ³  ν•œλ‹€.

GraphQL은 ν΄λΌμ΄μ–ΈνŠΈκ°€ ν•„μš”ν•œ λ°μ΄ν„°λ§Œ μš”μ²­ν•  수 μžˆλ„λ‘ ν•¨μœΌλ‘œμ¨ 보닀 효율적이고 μœ μ—°ν•œ 데이터 쿼리 방법을 μ œκ³΅ν•˜κΈ° μœ„ν•΄ κ°œλ°œλ˜μ—ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ 데이터 μš”κ΅¬ 사항을 μ§€μ •ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” κ°•λ ₯ν•˜κ²Œ μœ ν˜•ν™”λœ μŠ€ν‚€λ§ˆλ₯Ό μ œκ³΅ν•¨μœΌλ‘œμ¨ 이λ₯Ό λ‹¬μ„±ν•˜κ³ , μ„œλ²„μ—μ„œ 이λ₯Ό ν•΄κ²°ν•œλ‹€.

GraphQL의 μ£Όμš” κΈ°λŠ₯ 쀑 ν•˜λ‚˜λŠ” μ„œλ‘œ λ‹€λ₯Έ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ—¬λŸ¬ μ—”λ“œν¬μΈνŠΈκ°€ μ•„λ‹Œ λͺ¨λ“  데이터 쿼리에 λŒ€ν•΄ 단일 μ—”λ“œν¬μΈνŠΈλ₯Ό μ œκ³΅ν•  수 μžˆλ‹€λŠ” 점이닀. μ΄λ ‡κ²Œ ν•˜λ©΄ APIκ°€ λ‹¨μˆœν™”λ˜κ³  λΉŒλ“œ 및 μœ μ§€ 관리에 ν•„μš”ν•œ μ½”λ“œμ˜ 양이 쀄어든닀.

REST API vs GraphQL

REST API

  • μž₯점

  1. 배우기 쉽고 μ—…κ³„μ—μ„œ 널리 μ±„νƒλ˜μ—ˆλ‹€.

  2. GET, POST, PUT, DELETE와 같은 λ‹€μ–‘ν•œ HTTP λ©”μ„œλ“œ μ§€μ›ν•œλ‹€.

  3. 캐싱 및 λ³΄μ•ˆμ„ μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλ‹€

  4. μƒνƒœ λΉ„μ €μž₯성을 μ§€μ›ν•˜μ—¬ ν™•μž₯이 μš©μ΄ν•˜λ‹€.

  5. μ›Ή, λͺ¨λ°”일, IoT λ“± λ‹€μ–‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

  • 단점

  1. λ°μ΄ν„°μ˜ μ˜€λ²„ 페칭과 언더 페칭이 λ°œμƒν•˜μ—¬ λ„€νŠΈμ›Œν¬ 지연과 μ„±λŠ₯ μ €ν•˜λ₯Ό μ΄ˆλž˜ν•  수 μžˆλ‹€.

  2. λ‹€μ–‘ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄ μ—¬λŸ¬ μ—”λ“œν¬μΈνŠΈκ°€ ν•„μš”ν•˜λ―€λ‘œ μ½”λ“œ λ³΅μž‘μ„± 및 μœ μ§€ 관리 문제 λ°œμƒ ν•  수 μžˆλ‹€.

  3. 버전 관리가 μ œλŒ€λ‘œ μ§€μ›λ˜μ§€ μ•Šμ•„ μƒˆλ‘œμš΄ κΈ°λŠ₯이 좔가될 λ•Œ λ³€κ²½ 사항이 쀑단될 수 μžˆλ‹€.

  4. 맀우 λ³΅μž‘ν•˜κ³  μ€‘μ²©λœ 데이터 ꡬ쑰에 μ ν•©ν•˜μ§€ μ•Šλ‹€.

GraphQL

  • μž₯점

  1. ν΄λΌμ΄μ–ΈνŠΈκ°€ ν•„μš”ν•œ λ°μ΄ν„°λ§Œ μš”μ²­ν•  수 μžˆμ–΄ λ„€νŠΈμ›Œν¬ λŒ€κΈ° μ‹œκ°„μ„ 쀄이고 μ„±λŠ₯을 κ°œμ„ ν•œλ‹€.

  2. κ°•λ ₯ν•˜κ²Œ μœ ν˜•ν™”λœ μŠ€ν‚€λ§ˆλ₯Ό μ œκ³΅ν•˜λ―€λ‘œ κ°œλ°œμžκ°€ APIλ₯Ό 더 μ‰½κ²Œ μ΄ν•΄ν•˜κ³  μž‘μ—…ν•  수 μžˆλ‹€.

  3. λͺ¨λ“  데이터 쿼리λ₯Ό μœ„ν•œ 단일 μ—”λ“œν¬μΈνŠΈλ₯Ό μ œκ³΅ν•˜μ—¬ APIλ₯Ό κ°„μ†Œν™”ν•˜κ³  μ½”λ“œ λ³΅μž‘μ„±μ„ 쀄인닀.

  4. μ‹€μ‹œκ°„ 데이터 μ—…λ°μ΄νŠΈ 및 ꡬ독 κΈ°λŠ₯을 μ§€μ›ν•œλ‹€.

  5. 맀우 λ³΅μž‘ν•˜κ³  μ€‘μ²©λœ 데이터 ꡬ쑰 처리 κ°€λŠ₯ν•˜λ‹€.

  • 단점

  1. GraphQL에 μ΅μˆ™ν•˜μ§€ μ•Šμ€ κ°œλ°œμžμ—κ²ŒλŠ” ν•™μŠ΅ 곑선 ν•„μš”ν•˜λ‹€.

  2. 캐싱과 λ³΄μ•ˆμ„ κ΅¬ν˜„ν•˜λŠ” 데 더 λ§Žμ€ λ…Έλ ₯이 ν•„μš”ν•˜λ‹€.

  3. REST API만큼 널리 μ±„νƒλ˜μ§€ μ•Šμ•„ λ¦¬μ†ŒμŠ€ 및 도ꡬλ₯Ό μ°ΎκΈ°κ°€ 더 μ–΄λ €μšΈ 수 μžˆλ‹€.

  4. 데이터 κ²€μƒ‰μ˜ μœ μ—°μ„±μœΌλ‘œ 인해 더 큰 νŽ˜μ΄λ‘œλ“œκ°€ λ°œμƒν•˜μ—¬ 잠재적인 λ„€νŠΈμ›Œν¬ 정체λ₯Ό μ΄ˆλž˜ν•  수 μžˆλ‹€.

μš”μ•½ν•˜μžλ©΄, REST APIλŠ” κ΄‘λ²”μœ„ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ§€μ›ν•˜κ³  캐싱과 λ³΄μ•ˆμ„ μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλŠ” 널리 μ±„νƒλœ ν‘œμ€€μ΄λ‹€. ν•˜μ§€λ§Œ λ°μ΄ν„°μ˜ μ˜€λ²„νŽ˜μΉ­ 및 μ–Έλ”νŽ˜μΉ­μœΌλ‘œ 인해 λ„€νŠΈμ›Œν¬ 지연과 μ„±λŠ₯ μ €ν•˜κ°€ λ°œμƒν•  수 μžˆλ‹€. 반면 GraphQL은 데이터λ₯Ό μΏΌλ¦¬ν•˜λŠ” 보닀 효율적이고 μœ μ—°ν•œ 방법을 μ œκ³΅ν•˜μ§€λ§Œ, 캐싱 및 λ³΄μ•ˆμ„ κ΅¬ν˜„ν•˜λŠ” 데 ν•™μŠ΅ 곑선과 더 λ§Žμ€ λ…Έλ ₯이 ν•„μš”ν•˜λ‹€. 맀우 λ³΅μž‘ν•˜κ³  μ€‘μ²©λœ 데이터 ꡬ쑰에 μ ν•©ν•˜λ©° λͺ¨λ“  데이터 쿼리에 λŒ€ν•΄ 단일 μ—”λ“œν¬μΈνŠΈλ₯Ό μ œκ³΅ν•˜λ―€λ‘œ μ½”λ“œ λ³΅μž‘μ„±μ΄ 쀄어든닀.

Aha Moment

REST APIλ₯Ό μ‚¬μš©ν•˜λ‹€ 보면 μ’…μ’… λ“œλŠ” 생각이 화면을 κ΅¬μ„±ν•˜λŠ”λ° ν•„μš”ν•œ 정보보닀 μ„œλ²„μ—μ„œ λ³΄λ‚΄μ£ΌλŠ” 응닡값이 κ³Όλ„ν•˜κ²Œ 정보가 λ‹΄κ²¨μžˆλŠ” κ²½μš°κ°€ μ’…μ’… λ°œμƒν•œλ‹€. ν™”λ©΄ λ§Œμ„ μœ„ν•œ λ°μ΄ν„°λ‘œ ꡬ성이 λ˜κΈ°λ³΄λ‹€ 더 λ§Žμ€ 정보λ₯Ό λ‹΄κ³  μžˆλŠ” κ²½μš°λ„ 있기 λ•Œλ¬Έμ— ν™”λ©΄μ—μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 데이터가 μ‹ κ²½μ“°μ΄μ§€λ§Œ 달리 방법이 μ—†λ‹€. μ•„λ§ˆλ„ νŽ˜μ΄μŠ€λΆμ€ 이런 κ²½μš°μ— 이것듀을 λͺ¨λ‘ μ»¨νŠΈλ‘€ν•˜λŠ”κ±°μ—μ„œ λ¬Έμ œμ μ„ λ°œκ²¬ν•˜κ³  GraphQL을 κ°œλ°œν–ˆλ‹€κ³  생각이 λ“ λ‹€. λ‚΄κ°€ μ„œλΉ„μŠ€λ₯Ό κ΅¬μΆ•ν•˜λ©΄μ„œ μ‚¬μš© ν•΄λ³Έ 적은 μ—†κ³  λŒ€λž΅μ μΈ μ‚¬μš©λ²• μ •λ„λ§Œ μ•Œκ³  μžˆμ§€λ§Œ GraphQL을 μ‚¬μš©ν–ˆμ„ λ•Œμ˜ μž₯점은 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ ν•„μš”ν•œ λ°μ΄ν„°λ§Œ κ°€μ Έκ°€λ‹€ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 점을 μ•Œκ³  μžˆλ‹€. REST API와 GraphQL λ‘˜ λ‹€ μž₯단점이 λͺ…ν™•ν•΄μ„œ μ–΄λŠκ²Œ 더 쒋닀라고 ν•  μˆ˜λŠ” μ—†μ§€λ§Œ μ–΄λ–€ μ„œλΉ„μŠ€λ₯Ό κ΅¬μΆ•ν•˜λŠλƒμ— 따라 μ–΄λ–€κ²Œ μ’‹μ€μ§€λŠ” κ·Έλ•Œ 갈릴 것 κ°™λ‹€.

JSON

JSON(JavaScript Object Notation)은 μ‚¬λžŒμ΄ 읽고 μ“°κΈ° 쉽고 기계가 ꡬ문 λΆ„μ„ν•˜κ³  μƒμ„±ν•˜κΈ° μ‰¬μš΄ κ²½λŸ‰ 데이터 κ΅ν™˜ ν˜•μ‹μ΄λ‹€. λͺ¨λ“  ν”„λ‘œκ·Έλž˜λ° 언어와 ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆλŠ” μ–Έμ–΄ 독립적인 데이터 ν˜•μ‹μœΌλ‘œ λ§Œλ“€μ–΄μ‘Œλ‹€.

JSON λ°μ΄ν„°λŠ” ν‚€-κ°’ 쌍으둜 κ΅¬μ„±λ˜λ©° ν‚€λŠ” 항상 λ¬Έμžμ—΄μ΄κ³  값은 λ¬Έμžμ—΄, 숫자, λΆ€μšΈ, 객체 λ˜λŠ” λ°°μ—΄κ³Ό 같은 μœ νš¨ν•œ JSON 데이터 μœ ν˜•μ΄λ‹€. κ°μ²΄λŠ” μ€‘κ΄„ν˜Έλ‘œ 묢인 ν‚€-κ°’ 쌍의 λͺ¨μŒμΈ 반면 배열은 λŒ€κ΄„ν˜Έλ‘œ 묢인 μ •λ ¬λœ κ°’ λͺ¨μŒμ΄λ‹€. JSON λ°μ΄ν„°λŠ” λ‹€λ₯Έ 개체 λ˜λŠ” 배열을 ν¬ν•¨ν•˜λŠ” 개체 λ˜λŠ” λ°°μ—΄κ³Ό ν•¨κ»˜ 쀑첩될 수 μžˆλ‹€. JSON은 μ›Ή μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ 데이터 κ΅ν™˜μ— 널리 μ‚¬μš©λ˜λ©° λ‹¨μˆœμ„±κ³Ό μ‚¬μš© νŽΈμ˜μ„±μœΌλ‘œ 인해 XML의 인기 μžˆλŠ” λŒ€μ•ˆμ΄ λ˜μ—ˆλ‹€. λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° 언어와 μ›Ή ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ§€μ›ν•˜λ―€λ‘œ λ‹€μž¬λ‹€λŠ₯ν•˜κ³  널리 μ‚¬μš©λ˜λŠ” 데이터 ν˜•μ‹μ΄λ‹€.

  • μž₯점

  1. μ‚¬λžŒμ΄ μ‰½κ²Œ 읽고 μ“Έ 수 μžˆμ–΄ 데이터 κ΅ν™˜μ— 널리 μ‚¬μš©λ¨

  2. κ²½λŸ‰μœΌλ‘œ λ„€νŠΈμ›Œν¬λ₯Ό ν†΅ν•œ 데이터 전솑 속도 ν–₯상

  3. λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 및 μ›Ή ν”„λ ˆμž„μ›Œν¬μ—μ„œ κ΄‘λ²”μœ„ν•˜κ²Œ μ§€μ›λ˜λ―€λ‘œ κΈ°μ‘΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ‰½κ²Œ 톡합할 수 μžˆλ‹€.

  4. ꡬ문 뢄석 및 생성이 μš©μ΄ν•˜μ—¬ μœ μ—°ν•˜κ³  λ‹€μ–‘ν•œ 데이터 ν˜•μ‹ λ§Œλ“€κΈ°

  5. μ€‘μ²©λœ 데이터 ꡬ쑰λ₯Ό μ§€μ›ν•˜μ—¬ λ³΅μž‘ν•œ 데이터 ν‘œν˜„ κ°€λŠ₯

  6. 잘 μ •μ˜λ˜κ³  ν‘œμ€€ν™”λ˜μ–΄ μ„œλ‘œ λ‹€λ₯Έ μ‹œμŠ€ν…œ κ°„μ˜ ν˜Έν™˜μ„± 보μž₯

  • 단점

  1. JSON은 λ¬Έμžμ—΄, 숫자, λΆ€μšΈ, 객체 및 λ°°μ—΄κ³Ό 같은 λͺ‡ 가지 κΈ°λ³Έ 데이터 μœ ν˜•λ§Œ μ§€μ›ν•˜λ―€λ‘œ 데이터 μœ ν˜•μ— λŒ€ν•œ μ œν•œλœ 지원

  2. λ°”μ΄λ„ˆλ¦¬ 데이터λ₯Ό μ§€μ›ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ λ°”μ΄λ„ˆλ¦¬ ν˜•μ‹μœΌλ‘œ 더 효율적으둜 전솑할 수 μžˆλŠ” λ°μ΄ν„°μ˜ νŽ˜μ΄λ‘œλ“œ 크기가 컀질 수 μžˆλ‹€.

  3. μŠ€ν‚€λ§ˆ 적용이 μ—†μœΌλ―€λ‘œ μœ νš¨ν•˜μ§€ μ•Šμ€ 데이터λ₯Ό 더 μ‰½κ²Œ μ „μ†‘ν•˜κ³  μ²˜λ¦¬ν•  수 μžˆλ‹€.

  4. 주석이 μ§€μ›λ˜μ§€ μ•Šμ•„ JSON 데이터λ₯Ό λ¬Έμ„œν™”ν•˜κ³  주석을 μΆ”κ°€ν•˜κΈ°κ°€ 더 μ–΄λ €μ›Œμ§ˆ 수 μžˆλ‹€.

  5. λ³΅μž‘ν•œ 쀑첩 데이터 ꡬ쑰의 경우 JSON 데이터가 μƒλ‹Ήνžˆ 컀져 잠재적인 μ„±λŠ₯ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

μš”μ•½ν•˜λ©΄ JSON은 λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° 언어와 μ›Ή ν”„λ ˆμž„μ›Œν¬μ—μ„œ 널리 μ§€μ›λ˜λŠ” 가볍고 λ‹€μ–‘ν•œ 데이터 ν˜•μ‹μ΄λ‹€. λ‹¨μˆœμ„±κ³Ό μ‚¬μš© μš©μ΄μ„±μœΌλ‘œ 인해 데이터 κ΅ν™˜μ— 널리 μ‚¬μš©λ˜μ§€λ§Œ 데이터 μœ ν˜•μ— λŒ€ν•œ 지원이 μ œν•œλ˜κ³  μŠ€ν‚€λ§ˆ 적용이 μ—†λŠ” 것과 같은 λͺ‡ 가지 μ œν•œ 사항이 μžˆλ‹€. μ „λ°˜μ μœΌλ‘œ JSON은 λ§Žμ€ μœ ν˜•μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ ν•©ν•œ μ‹ λ’°ν•  수 있고 잘 ν™•λ¦½λœ 데이터 ν˜•μ‹μ΄λ‹€.

DSL(Domain-Specific Language)

DSL(Domain-Specific Language)은 νŠΉμ • 도메인 λ˜λŠ” 문제 곡간을 μœ„ν•΄ μ„€κ³„λœ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‹€. μœ μ—°ν•˜κ³  κ΄‘λ²”μœ„ν•œ μ‚¬μš© 사둀에 μ μš©ν•  수 μžˆλ„λ‘ μ„€κ³„λœ λ²”μš© ν”„λ‘œκ·Έλž˜λ° 언어와 달리 DSL은 νŠΉμ • 도메인에 맞게 μ‘°μ •λ˜λ©° νŠΉμ • μž‘μ—…μ— μ΅œμ ν™”λ˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.

DSL을 μ‚¬μš©ν•˜λ©΄ κ°œλ°œμžκ°€ 보닀 μžμ—°μŠ€λŸ½κ³  κ°„κ²°ν•œ λ°©μ‹μœΌλ‘œ μ†”λ£¨μ…˜μ„ ν‘œν˜„ν•  수 μžˆμœΌλ―€λ‘œ 생산성을 높이고 였λ₯˜λ₯Ό 쀄일 수 μžˆλ‹€.

DSL(도메인 νŠΉμ • μ–Έμ–΄)μ—λŠ” λͺ‡ 가지 μž₯점과 단점이 μžˆλ‹€.

  • μž₯점

  1. 생산성 ν–₯상: DSL은 νŠΉμ • 도메인 λ‚΄μ—μ„œ μ‚¬μš©ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆμœΌλ―€λ‘œ κ°œλ°œμžκ°€ 보닀 μžμ—°μŠ€λŸ½κ³  κ°„κ²°ν•œ λ°©μ‹μœΌλ‘œ μ†”λ£¨μ…˜μ„ ν‘œν˜„ν•  수 μžˆλ‹€. μ΄λŠ” 생산성 ν–₯상과 개발 μ‹œκ°„ λ‹¨μΆ•μœΌλ‘œ μ΄μ–΄μ§ˆ 수 μžˆλ‹€.

  2. 더 λ‚˜μ€ ν‘œν˜„λ ₯: DSL은 도메인별 μš©μ–΄μ™€ ꡬ문을 μ‚¬μš©ν•˜λ―€λ‘œ κ°œλ°œμžκ°€ λ³΅μž‘ν•œ λͺ¨λΈμ΄λ‚˜ μ‹œμŠ€ν…œμ„ 더 μ‰½κ²Œ ν‘œν˜„ν•  수 μžˆλ‹€. 이것은 더 μ •ν™•ν•˜κ³  μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ μ½”λ“œλ‘œ μ΄μ–΄μ§ˆ 수 μžˆλ‹€.

  3. 였λ₯˜ κ°μ†Œ: DSL은 도메인별 κ·œμΉ™κ³Ό μ œμ•½μ„ μ μš©ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 였λ₯˜μ™€ λ²„κ·Έμ˜ κ°€λŠ₯성을 쀄일 수 μžˆλ‹€. μ΄λŠ” 보닀 μ•ˆμ •μ μ΄κ³  κ°•λ ₯ν•œ μ†Œν”„νŠΈμ›¨μ–΄λ‘œ μ΄μ–΄μ§ˆ 수 μžˆλ‹€.

  4. μ†μ‰¬μš΄ μœ μ§€ 관리: DSL은 도메인 νŠΉμ • 문제λ₯Ό λͺ…ν™•ν•˜κ³  κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•˜λ―€λ‘œ μ‹œκ°„μ΄ 지남에 따라 μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό 더 μ‰½κ²Œ μœ μ§€ 관리할 수 μžˆλ‹€.

  5. ν˜‘μ—… 증가: DSL은 곡톡 μ–Έμ–΄λ₯Ό μ œκ³΅ν•˜κ³  λ¬Έμ œμ— λŒ€ν•œ 이해λ₯Ό μ œκ³΅ν•˜λ―€λ‘œ κ°œλ°œμžμ™€ 도메인 μ „λ¬Έκ°€ κ°„μ˜ ν˜‘μ—…μ„ μ¦κ°€μ‹œν‚€λŠ” 데 도움이 될 수 μžˆλ‹€.

  • 단점

  1. μ œν•œλœ 적용 κ°€λŠ₯μ„±: DSL은 νŠΉμ • λ„λ©”μΈμš©μœΌλ‘œ μ„€κ³„λ˜μ—ˆμœΌλ―€λ‘œ λ‹€λ₯Έ 문제 μ˜μ—­μ΄λ‚˜ λ„λ©”μΈμ—λŠ” μ μš©λ˜μ§€ μ•Šμ„ 수 μžˆλ‹€.

  2. 높은 개발 λΉ„μš©: DSL κ°œλ°œμ€ 도메인과 μ‚¬μš©μžμ˜ νŠΉμ • μš”κ΅¬ 사항에 λŒ€ν•œ κΉŠμ€ 이해가 ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— μ–΄λ ΅κ³  μ‹œκ°„μ΄ 많이 μ†Œμš”λ  수 μžˆλ‹€.

  3. μ œν•œλœ μ‚¬μš©μž 기반: DSL은 νŠΉμ • λ„λ©”μΈμ—λ§Œ μ μš©ν•  수 μžˆμœΌλ―€λ‘œ μ œν•œλœ μ‚¬μš©μž κΈ°λ°˜μ„ κ°€μ§ˆ 수 μžˆλ‹€. 이둜 인해 DSL에 λŒ€ν•œ μ „λ¬Έ 지식을 κ°–μΆ˜ 개발자λ₯Ό μ°ΎκΈ°κ°€ 더 μ–΄λ €μ›Œμ§ˆ 수 μžˆλ‹€.

  4. κ°€νŒŒλ₯Έ ν•™μŠ΅ 곑선: DSL은 특히 ν•΄λ‹Ή μ–Έμ–΄μ—μ„œ μ‚¬μš©λ˜λŠ” 도메인별 κ°œλ…κ³Ό μš©μ–΄μ— μ΅μˆ™ν•˜μ§€ μ•Šμ€ μ‹ κ·œ μ‚¬μš©μžμ—κ²Œ κ°€νŒŒλ₯Έ ν•™μŠ΅ 곑선을 κ°€μ§ˆ 수 μžˆλ‹€.

  5. μ œν•œλœ 툴링: DSL은 λ²”μš© ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ§ŒνΌ 널리 μ‚¬μš©λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 툴링 및 지원이 μ œν•œλ  수 μžˆλ‹€.

μš”μ•½ν•˜λ©΄ 도메인 νŠΉμ • μ–Έμ–΄μ—λŠ” 생산성 ν–₯상, ν‘œν˜„λ ₯ ν–₯상, 였λ₯˜ κ°μ†Œ, μœ μ§€ 관리 μš©μ΄μ„±, ν˜‘μ—… 증가 λ“± λͺ‡ 가지 μž₯점이 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ μ œν•œλœ 적용 κ°€λŠ₯μ„±, 높은 개발 λΉ„μš©, μ œν•œλœ μ‚¬μš©μž 기반, κ°€νŒŒλ₯Έ ν•™μŠ΅ 곑선 및 μ œν•œλœ 도ꡬ λ“± λͺ‡ 가지 단점도 μžˆλ‹€. DSL μ‚¬μš© μ—¬λΆ€λ₯Ό κ²°μ •ν•  λ•Œ ν”„λ‘œμ νŠΈμ˜ νŠΉμ • μš”κ΅¬ 사항과 개발 νŒ€μ˜ 전문성을 κ³ λ €ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.

  • 도메인 νŠΉμ • μ–Έμ–΄μ˜ λͺ‡ 가지 예

  1. SQL(Structured Query Language): SQL은 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μΏΌλ¦¬ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” DSL이닀. λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—…μ— μ΅œμ ν™”λœ 자체 ꡬ문 및 문법이 μžˆλ‹€.

  2. HTML(Hypertext Markup Language): HTML은 μ›Ή νŽ˜μ΄μ§€λ₯Ό λ§Œλ“œλŠ” 데 μ‚¬μš©λ˜λŠ” DSL이닀. μ—¬κΈ°μ—λŠ” μ›Ή νŽ˜μ΄μ§€λ₯Ό κ΅¬μ„±ν•˜λŠ” 방법을 μ •μ˜ν•˜λŠ” νŠΉμ • ꡬ문과 κ·œμΉ™ 집합이 μžˆλ‹€.

  3. μ •κ·œμ‹(Regular Expressions): μ •κ·œμ‹μ€ νŒ¨ν„΄ 일치 및 ν…μŠ€νŠΈ 검색에 μ‚¬μš©λ˜λŠ” DSL이닀. νŒ¨ν„΄μ„ ν‘œν˜„ν•˜κ³  μΌμΉ˜μ‹œν‚¬ 수 μžˆλŠ” 방법을 μ •μ˜ν•˜λŠ” νŠΉμ • ꡬ문과 κ·œμΉ™ 집합이 μžˆλ‹€.

  4. YAML(Yet Another Markup Language): YAML은 데이터 직렬화 및 ꡬ성에 μ‚¬μš©λ˜λŠ” DSL이닀. μ—¬κΈ°μ—λŠ” 데이터λ₯Ό μ‚¬λžŒμ΄ 읽을 수 μžˆλŠ” ν˜•μ‹μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 방법을 μ •μ˜ν•˜λŠ” νŠΉμ • ꡬ문 및 κ·œμΉ™ 집합이 μžˆλ‹€.

  5. R(ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄): R은 톡계 계산 및 데이터 뢄석을 μœ„ν•΄ νŠΉλ³„νžˆ μ„€κ³„λœ ν”„λ‘œκ·Έλž˜λ° 언어이닀. 자체 ꡬ문과 데이터 μž‘μ—…μ— μ΅œμ ν™”λœ ν•¨μˆ˜ 집합이 μžˆλ‹€.

μ΄λŸ¬ν•œ 각 μ–Έμ–΄λŠ” νŠΉμ • 도메인 λ‚΄μ—μ„œ μ‚¬μš©ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆμœΌλ©° 자체 ꡬ문, 문법 및 κ·œμΉ™μ΄ μžˆλ‹€. DSL을 μ‚¬μš©ν•˜μ—¬ κ°œλ°œμžλŠ” 도메인 λ‚΄μ—μ„œ μ†”λ£¨μ…˜μ„ 보닀 μ‰½κ²Œ β€‹β€‹ν‘œν˜„ν•˜κ³  보닀 μ •ν™•ν•˜κ³  μ•ˆμ •μ μ΄λ©° μœ μ§€ 관리 κ°€λŠ₯ν•œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°

선언적 ν”„λ‘œκ·Έλž˜λ°μ€ ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•˜λŠ”μ§€κ°€ μ•„λ‹ˆλΌ 무엇을 ν•΄μ•Ό ν•˜λŠ”μ§€μ— μ΄ˆμ μ„ λ§žμΆ”λŠ” ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ΄λ‹€. ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” μ›ν•˜λŠ” κ²°κ³Όλ₯Ό μ§€μ •ν•˜κ³  μ»΄ν“¨ν„°λŠ” 이λ₯Ό λ‹¬μ„±ν•˜λŠ” μ΅œμ„ μ˜ 방법을 κ²°μ •ν•œλ‹€. 선언적 ν”„λ‘œκ·Έλž˜λ°μ€ μ’…μ’… SQL λ˜λŠ” HTMLκ³Ό 같은 κ³ κΈ‰ ν”„λ‘œκ·Έλž˜λ° 언어와 μ—°κ²°λœλ‹€.

  • μž₯점

  1. μ½”λ“œλŠ” κ΅¬ν˜„λ³΄λ‹€λŠ” 결과에 μ΄ˆμ μ„ λ§žμΆ”κΈ° λ•Œλ¬Έμ— 읽고 μ΄ν•΄ν•˜κΈ° 쉽닀.

  2. 더 λͺ¨λ“ˆν™”λ˜κ³  μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œλ‘œ 이어져 μœ μ§€ 관리가 더 μ‰¬μšΈ 수 μžˆλ‹€.

  3. μ—¬λŸ¬ ν”„λ‘œμ„Έμ„œ λ˜λŠ” μ‹œμŠ€ν…œμ—μ„œ 병렬화 및 배포에 더 μ ν•©ν•˜λ‹€.

  4. 높은 μˆ˜μ€€μ˜ μΆ”μƒν™”λ‘œ 인해 였λ₯˜ 및 버그 κ°€λŠ₯μ„± κ°μ†Œλœλ‹€.

  • 단점

  1. 컴퓨터가 κ²°κ³Όλ₯Ό λ‹¬μ„±ν•˜κΈ° μœ„ν•œ μ΅œμ„ μ˜ 방법을 κ²°μ •ν•΄μ•Ό ν•˜λ―€λ‘œ 속도 및 λ©”λͺ¨λ¦¬ μ‚¬μš© μΈ‘λ©΄μ—μ„œ νš¨μœ¨μ„±μ΄ λ–¨μ–΄μ§ˆ 수 μžˆλ‹€.

  2. 일뢀 ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ΄ν•΄ν•˜κΈ° μ–΄λ €μšΈ 수 μžˆλŠ” 더 높은 μˆ˜μ€€μ˜ 좔상화가 ν•„μš”ν•˜λ‹€.

  3. ν”„λ‘œκ·Έλž¨ 흐름 및 μƒνƒœμ— λŒ€ν•œ μ œν•œλœ μ œμ–΄λ‘œ 인해 디버깅이 더 μ–΄λ €μ›Œμ§ˆ 수 μžˆλ‹€.

λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°

λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°μ€ νŠΉμ • κ²°κ³Όλ₯Ό λ‹¬μ„±ν•˜λŠ” 방법에 μ΄ˆμ μ„ 맞좘 ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ΄λ‹€. 즉, ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” 컴퓨터에 단계별 지침을 μ§€μ •ν•˜μ—¬ μˆ˜ν–‰ν•  μž‘μ—…κ³Ό μˆ˜ν–‰ 방법을 μ •ν™•ν•˜κ²Œ μ•Œλ €μ€€λ‹€. λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°μ€ μ’…μ’… ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ 컴퓨터 ν•˜λ“œμ›¨μ–΄μ— λŒ€ν•œ 높은 μˆ˜μ€€μ˜ μ œμ–΄λ₯Ό μ œκ³΅ν•˜λŠ” Assembly λ˜λŠ” C와 같은 μ €μˆ˜μ€€ ν”„λ‘œκ·Έλž˜λ° 언어와 κ΄€λ ¨λœλ‹€.

  • μž₯점

  1. ν”„λ‘œκ·Έλž¨ 흐름 및 μƒνƒœμ— λŒ€ν•œ μ™„μ „ν•œ μ œμ–΄ μ œκ³΅λœλ‹€.

  2. ν”„λ‘œκ·Έλž˜λ¨Έκ°€ ν•˜λ“œμ›¨μ–΄λ₯Ό 직접 μ œμ–΄ν•˜λ―€λ‘œ 속도와 λ©”λͺ¨λ¦¬ μ‚¬μš© μΈ‘λ©΄μ—μ„œ 더 효율적일 수 μžˆλ‹€.

  3. ν”„λ‘œμ„ΈμŠ€μ˜ 각 단계λ₯Ό μ§€μ •ν•˜λ―€λ‘œ ν”„λ‘œκ·Έλž¨ μž‘λ™ 방식에 λŒ€ν•œ λͺ…ν™•ν•œ 이해λ₯Ό μ œκ³΅ν•œλ‹€.

  • 단점

  1. μ½”λ“œλŠ” 특히 더 큰 ν”„λ‘œκ·Έλž¨μ˜ 경우 더 λ³΅μž‘ν•˜κ³  읽고 μœ μ§€ν•˜κΈ° μ–΄λ €μšΈ 수 μžˆλ‹€.

  2. μ½”λ“œ 쀑볡 및 덜 λͺ¨λ“ˆν™”λœ μ½”λ“œλ‘œ μ΄μ–΄μ§ˆ 수 μžˆλ‹€

  3. μ—¬λŸ¬ ν”„λ‘œμ„Έμ„œ λ˜λŠ” μ‹œμŠ€ν…œμ— λ³‘λ ¬ν™”ν•˜κ±°λ‚˜ λΆ„μ‚°ν•˜κΈ° μ–΄λ €μ›€μžˆλ‹€.

  4. λͺ…μ‹œμ μΈ νŠΉμ„±μœΌλ‘œ 인해 였λ₯˜ 및 버그가 λ°œμƒν•˜κΈ° 쉽닀.

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